changeset 10854:914cf1548e2c

Branch merge
author Neale Ferguson <neale@sinenomine.net>
date Mon, 10 Aug 2009 10:43:48 -0400
parents 500cb2829f16 (current diff) 1399a0d7a410 (diff)
children 08b74c8a5d91 3928a1af021c
files usr/src/cmd/fps/fptest/singdoub64_ss13.h usr/src/cmd/fps/fptest/singdoub64v9b_ss13.h usr/src/cmd/intrstat/intrstat.c usr/src/cmd/pools/poolstat/poolstat.c usr/src/common/elfcap/elfcap.c usr/src/lib/libbsm/common/adt_xlate.h usr/src/lib/libc/sparc_hwcap1/common/gen/memcpy.s usr/src/lib/libc/sparc_hwcap1/common/gen/memset.s usr/src/lib/libc/sparc_hwcap1/common/gen/misc.s usr/src/lib/libc/sparc_hwcap1/common/gen/strcpy.s usr/src/lib/libc/sparc_hwcap1/common/gen/strlen.s usr/src/pkgdefs/SUNWscpu/postinstall usr/src/pkgdefs/SUNWusat10.v/Makefile usr/src/pkgdefs/SUNWusat10.v/pkginfo.tmpl usr/src/pkgdefs/SUNWusat10.v/prototype_com usr/src/pkgdefs/SUNWusat10.v/prototype_sparc usr/src/ucbcmd/Makefile usr/src/ucbcmd/cc/Makefile usr/src/ucbcmd/cc/cc.sh usr/src/ucbcmd/ld/Makefile usr/src/ucbcmd/ld/ld.sh usr/src/ucbcmd/lint.d/Makefile usr/src/ucbcmd/lint.d/lintcmd.sh usr/src/uts/common/Makefile.files usr/src/uts/common/io/mem.c usr/src/uts/common/sys/Makefile usr/src/uts/common/sys/systm.h usr/src/uts/common/vm/page.h usr/src/uts/common/vm/seg_kmem.c usr/src/uts/common/vm/vm_page.c usr/src/uts/common/xen/public/arch-x86/cpuid.h usr/src/uts/sun4v/cpu/rock.c usr/src/uts/sun4v/cpu/rock_asm.s usr/src/uts/sun4v/cpu/rock_copy.s usr/src/uts/sun4v/pcbe/rock_pcbe.c usr/src/uts/sun4v/rock/Makefile usr/src/uts/sun4v/rock_pcbe/Makefile usr/src/uts/sun4v/sys/rock_hypervisor_api.h usr/src/uts/sun4v/sys/rockasi.h
diffstat 257 files changed, 27000 insertions(+), 29175 deletions(-) [+]
line wrap: on
line diff
--- a/usr/src/cmd/auditstat/Makefile	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/cmd/auditstat/Makefile	Mon Aug 10 10:43:48 2009 -0400
@@ -2,9 +2,8 @@
 # CDDL HEADER START
 #
 # The contents of this file are subject to the terms of the
-# Common Development and Distribution License, Version 1.0 only
-# (the "License").  You may not use this file except in compliance
-# with the License.
+# Common Development and Distribution License (the "License").
+# You may not use this file except in compliance with the License.
 #
 # You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
 # or http://www.opensolaris.org/os/licensing.
@@ -20,25 +19,41 @@
 # CDDL HEADER END
 #
 #
-# Copyright 1992, 2002 Sun Microsystems, Inc.  All rights reserved.
+# Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
 # Use is subject to license terms.
 #
-# ident	"%Z%%M%	%I%	%E% SMI"
-#
 
 PROG= auditstat
+OBJS = auditstat.o
+SRCS = $(OBJS:%.o=%.c)
 
 include ../Makefile.cmd
 include ../Makefile.cmd.bsm
 
-LDLIBS += -lbsm 
+STATCOMMONDIR = $(SRC)/cmd/stat/common
+
+STAT_COMMON_OBJS = timestamp.o
+STAT_COMMON_SRCS = $(STAT_COMMON_OBJS:%.o=$(STATCOMMONDIR)/%.c)
+SRCS += $(STAT_COMMON_SRCS)
+
+LDLIBS += -lbsm
+CPPFLAGS += -I$(STATCOMMONDIR)
 
 .KEEP_STATE:
 
 all: $(PROG)
 
-clean:
+$(PROG): $(OBJS) $(STAT_COMMON_OBJS)
+	$(LINK.c) -o $(PROG) $(OBJS) $(STAT_COMMON_OBJS) $(LDLIBS)
+	$(POST_PROCESS)
 
-lint:	lint_PROG
+%.o: $(STATCOMMONDIR)/%.c
+	$(COMPILE.c) -o $@ $<
+	$(POST_PROCESS_O)
+
+clean:
+	-$(RM) $(OBJS) $(STAT_COMMON_OBJS)
+
+lint:	lint_SRCS
 
 include ../Makefile.targ
--- a/usr/src/cmd/auditstat/auditstat.c	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/cmd/auditstat/auditstat.c	Mon Aug 10 10:43:48 2009 -0400
@@ -19,11 +19,11 @@
  * CDDL HEADER END
  */
 /*
- * Copyright 2007 Sun Microsystems, Inc.  All rights reserved.
+ * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
  * Use is subject to license terms.
  */
 
-#pragma ident	"%Z%%M%	%I%	%E% SMI"
+#include "statcommon.h"
 
 #include <sys/types.h>
 #include <stdlib.h>
@@ -32,6 +32,12 @@
 #include <bsm/audit.h>
 #include <bsm/libbsm.h>
 #include <unistd.h>
+#include <locale.h>
+
+#if !defined(TEXT_DOMAIN)		/* Should be defined by cc -D */
+#define	TEXT_DOMAIN "SYS_TEST"		/* Use this only if it isn't */
+#endif
+
 
 /*
  * Display header every HEADER_MOD lines printed
@@ -51,6 +57,7 @@
 static int	flags;
 static int	header_mod = DFLT_HEADER_MOD;
 static int	interval;
+static uint_t timestamp_fmt = NODATE;
 
 static void	display_stats();
 static void	eauditon();
@@ -66,6 +73,9 @@
 	register int	i;
 	au_stat_t s;
 
+	(void) setlocale(LC_ALL, "");
+	(void) textdomain(TEXT_DOMAIN);
+
 	(void) setbuf(stdout, (char *)0);
 	(void) setbuf(stderr, (char *)0);
 
@@ -73,6 +83,8 @@
 
 	if (!flags) {
 		eauditon(A_GETSTAT, (caddr_t)&s, NULL);
+		if (timestamp_fmt != NODATE)
+			print_timestamp(timestamp_fmt);
 		display_stats(&s, 0);
 		exit(0);
 	}
@@ -92,6 +104,8 @@
 	/* CSTYLED */
 	for (i = 0;; i++) {
 		eauditon(A_GETSTAT, (caddr_t)&s, NULL);
+		if (timestamp_fmt != NODATE)
+			print_timestamp(timestamp_fmt);
 		display_stats(&s, i);
 		if ((flags & CFLG) && count)
 			if (i == count - 1)
@@ -126,7 +140,8 @@
 		s->as_memused / ONEK, 	&(offset[11]));
 
 	/* print a properly aligned header every HEADER_MOD lines */
-	if (header_mod && (!cnt || !(cnt % header_mod))) {
+	if (header_mod && (!cnt || ((timestamp_fmt != NODATE) ?
+	    !(cnt % (header_mod / 2)) : !(cnt % header_mod)))) {
 		(void) printf(
 			"%*s %*s %*s %*s %*s %*s %*s %*s %*s %*s %*s %*s\n",
 			offset[0] - 1,			"gen",
@@ -167,7 +182,7 @@
 {
 	int	c;
 
-	while ((c = getopt(argc, argv, "c:h:i:vn")) != -1) {
+	while ((c = getopt(argc, argv, "c:h:i:vnT:")) != -1) {
 		switch (c) {
 		case 'c':
 			if (flags & CFLG)
@@ -212,6 +227,18 @@
 				usage_exit();
 			flags |= VFLG;
 			break;
+		case 'T':
+			if (optarg) {
+				if (*optarg == 'u')
+					timestamp_fmt = UDATE;
+				else if (*optarg == 'd')
+					timestamp_fmt = DDATE;
+				else
+					usage_exit();
+			} else {
+				usage_exit();
+			}
+			break;
 		case '?':
 		default:
 			usage_exit();
@@ -226,7 +253,7 @@
 {
 	(void) fprintf(stderr,
 	    "auditstat: usage: auditstat [-c count] [-h lines] "
-	    "[-i interval] [-n] [-v]\n");
+	    "[-T d|u] [-i interval] [-n] [-v]\n");
 	exit(1);
 }
 
--- a/usr/src/cmd/cmd-inet/usr.bin/netstat/Makefile	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/cmd/cmd-inet/usr.bin/netstat/Makefile	Mon Aug 10 10:43:48 2009 -0400
@@ -19,11 +19,9 @@
 # CDDL HEADER END
 #
 #
-# Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
+# Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
 # Use is subject to license terms.
 #
-# ident	"%Z%%M%	%I%	%E% SMI"
-#
 # Copyright (c) 1990 Mentat Inc.
 #
 # cmd/cmd-inet/usr.bin/netstat/Makefile
@@ -32,16 +30,22 @@
 
 LOCALOBJS=	netstat.o unix.o
 COMMONOBJS=	compat.o
-OBJS=		$(LOCALOBJS) $(COMMONOBJS)
 
 include ../../../Makefile.cmd
 include ../../Makefile.cmd-inet
 
 LOCALSRCS=	$(LOCALOBJS:%.o=%.c)
 COMMONSRCS=	$(CMDINETCOMMONDIR)/$(COMMONOBJS:%.o=%.c)
-SRCS=		$(LOCALSRCS) $(COMMONSRCS)
+
+STATCOMMONDIR = $(SRC)/cmd/stat/common
 
-CPPFLAGS += -DNDEBUG -I$(CMDINETCOMMONDIR)
+STAT_COMMON_OBJS = timestamp.o
+STAT_COMMON_SRCS = $(STAT_COMMON_OBJS:%.o=$(STATCOMMONDIR)/%.c)
+
+OBJS=		$(LOCALOBJS) $(COMMONOBJS) $(STAT_COMMON_OBJS)
+SRCS=		$(LOCALSRCS) $(COMMONSRCS) $(STAT_COMMON_SRCS)
+
+CPPFLAGS += -DNDEBUG -I$(CMDINETCOMMONDIR) -I$(STATCOMMONDIR)
 LDLIBS += -ldhcpagent -lsocket -lnsl -lkstat -ltsnet -ltsol
 
 .KEEP_STATE:
@@ -54,6 +58,10 @@
 	$(LINK.c) $(OBJS) -o $@ $(LDLIBS)
 	$(POST_PROCESS)
 
+%.o : $(STATCOMMONDIR)/%.c
+	$(COMPILE.c) -o $@ $<
+	$(POST_PROCESS_O)
+
 install: all $(ROOTPROG) 
 
 clean:
--- a/usr/src/cmd/cmd-inet/usr.bin/netstat/netstat.c	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/cmd/cmd-inet/usr.bin/netstat/netstat.c	Mon Aug 10 10:43:48 2009 -0400
@@ -58,6 +58,7 @@
 #include <ctype.h>
 #include <kstat.h>
 #include <assert.h>
+#include <locale.h>
 
 #include <sys/types.h>
 #include <sys/stream.h>
@@ -92,6 +93,8 @@
 #include <libtsnet.h>
 #include <tsol/label.h>
 
+#include "statcommon.h"
+
 extern void	unixpr(kstat_ctl_t *kc);
 
 #define	STR_EXPAND	4
@@ -211,7 +214,6 @@
 static void		m_report(void);
 static void		dhcp_report(char *);
 
-	void		fail(int, char *, ...);
 static	uint64_t	kstat_named_value(kstat_t *, char *);
 static	kid_t		safe_kstat_read(kstat_ctl_t *, kstat_t *, void *);
 static int		isnum(char *);
@@ -335,6 +337,12 @@
  */
 static filter_t *filters[NFILTERKEYS];
 
+static uint_t timestamp_fmt = NODATE;
+
+#if !defined(TEXT_DOMAIN)		/* Should be defined by cc -D */
+#define	TEXT_DOMAIN "SYS_TEST"		/* Use this only if it isn't */
+#endif
+
 int
 main(int argc, char **argv)
 {
@@ -368,7 +376,10 @@
 		    default_ip_str, DEFAULT_IP, INET_DEFAULT_FILE);
 	free(default_ip_str);
 
-	while ((c = getopt(argc, argv, "adimnrspMgvf:P:I:DR")) != -1) {
+	(void) setlocale(LC_ALL, "");
+	(void) textdomain(TEXT_DOMAIN);
+
+	while ((c = getopt(argc, argv, "adimnrspMgvf:P:I:DRT:")) != -1) {
 		switch ((char)c) {
 		case 'a':		/* all connections */
 			Aflag = B_TRUE;
@@ -471,6 +482,19 @@
 			Iflag_only = 0;
 			break;
 
+		case 'T':
+			if (optarg) {
+				if (*optarg == 'u')
+					timestamp_fmt = UDATE;
+				else if (*optarg == 'd')
+					timestamp_fmt = DDATE;
+				else
+					usage(name);
+			} else {
+				usage(name);
+			}
+			break;
+
 		case '?':
 		default:
 			usage(name);
@@ -566,6 +590,9 @@
 	for (;;) {
 		mib_item_t *curritem = NULL; /* only for -[M]s */
 
+		if (timestamp_fmt != NODATE)
+			print_timestamp(timestamp_fmt);
+
 		/* netstat: AF_INET[6] behaviour */
 		if (family_selected(AF_INET) || family_selected(AF_INET6)) {
 			if (Sflag) {
@@ -3348,6 +3375,9 @@
 		fail(0, "dhcp_do_ipc: %s", dhcp_ipc_strerror(error));
 	}
 
+	if (timestamp_fmt != NODATE)
+		print_timestamp(timestamp_fmt);
+
 	if (!printed_one)
 		(void) printf("%s", dhcp_status_hdr_string());
 
@@ -6225,20 +6255,21 @@
 static void
 usage(char *cmdname)
 {
-	(void) fprintf(stderr, "usage: %s [-anv] [-f address_family]\n",
-	    cmdname);
+	(void) fprintf(stderr, "usage: %s [-anv] [-f address_family] "
+	    "[-T d|u]\n", cmdname);
 	(void) fprintf(stderr, "       %s [-n] [-f address_family] "
-	    "[-P protocol] [-g | -p | -s [interval [count]]]\n", cmdname);
-	(void) fprintf(stderr, "       %s -m [-v] "
+	    "[-P protocol] [-T d|u] [-g | -p | -s [interval [count]]]\n",
+	    cmdname);
+	(void) fprintf(stderr, "       %s -m [-v] [-T d|u] "
 	    "[interval [count]]\n", cmdname);
 	(void) fprintf(stderr, "       %s -i [-I interface] [-an] "
-	    "[-f address_family] [interval [count]]\n", cmdname);
+	    "[-f address_family] [-T d|u] [interval [count]]\n", cmdname);
 	(void) fprintf(stderr, "       %s -r [-anv] "
-	    "[-f address_family|filter]\n", cmdname);
-	(void) fprintf(stderr, "       %s -M [-ns] [-f address_family]\n",
-	    cmdname);
+	    "[-f address_family|filter] [-T d|u]\n", cmdname);
+	(void) fprintf(stderr, "       %s -M [-ns] [-f address_family] "
+	    "[-T d|u]\n", cmdname);
 	(void) fprintf(stderr, "       %s -D [-I interface] "
-	    "[-f address_family]\n", cmdname);
+	    "[-f address_family] [-T d|u]\n", cmdname);
 	exit(EXIT_FAILURE);
 }
 
--- a/usr/src/cmd/cpc/common/cpustat.c	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/cmd/cpc/common/cpustat.c	Mon Aug 10 10:43:48 2009 -0400
@@ -19,12 +19,10 @@
  * CDDL HEADER END
  */
 /*
- * Copyright 2007 Sun Microsystems, Inc.  All rights reserved.
+ * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
  * Use is subject to license terms.
  */
 
-#pragma ident	"%Z%%M%	%I%	%E% SMI"
-
 #include <sys/types.h>
 #include <sys/processor.h>
 #include <sys/pset.h>
@@ -49,6 +47,7 @@
 #include <sys/resource.h>
 
 #include "cpucmds.h"
+#include "statcommon.h"
 
 static struct options {
 	int debug;
@@ -93,6 +92,8 @@
 static int	smt = 0;	    /* If set, cpustat needs to be SMT-aware. */
 static pcinfo_t	fxinfo = { 0, "FX", NULL }; /* FX scheduler class info */
 
+static uint_t timestamp_fmt = NODATE;
+
 /*ARGSUSED*/
 static void
 cpustat_errfn(const char *fn, int subcode, const char *fmt, va_list ap)
@@ -136,8 +137,8 @@
 	if (setrlimit(RLIMIT_NOFILE, &rl) != 0) {
 		errstr = strerror(errno);
 		(void) fprintf(stderr,
-			gettext("%s: setrlimit failed - %s\n"),
-			opts->pgmname, errstr);
+		    gettext("%s: setrlimit failed - %s\n"),
+		    opts->pgmname, errstr);
 	}
 
 	if ((cpc = cpc_open(CPC_VER_CURRENT)) == NULL) {
@@ -167,7 +168,7 @@
 		return (1);
 	}
 
-	while ((c = getopt(argc, argv, "Dc:hntsp:")) != EOF && errcnt == 0)
+	while ((c = getopt(argc, argv, "Dc:hntT:sp:")) != EOF && errcnt == 0)
 		switch (c) {
 		case 'D':			/* enable debugging */
 			opts->debug++;
@@ -196,6 +197,18 @@
 		case 't':			/* print %tick */
 			opts->dotick = 1;
 			break;
+		case 'T':
+			if (optarg) {
+				if (*optarg == 'u')
+					timestamp_fmt = UDATE;
+				else if (*optarg == 'd')
+					timestamp_fmt = DDATE;
+				else
+					errcnt++;
+			} else {
+				errcnt++;
+			}
+			break;
 		case 'h':			/* help */
 			opts->dohelp = 1;
 			break;
@@ -239,12 +252,14 @@
 	    (opts->nsets = cpc_setgrp_numsets(opts->master)) == 0) {
 		(void) fprintf(opts->dohelp ? stdout : stderr, gettext(
 		    "Usage:\n\t%s [-c events] [-p period] [-nstD] "
-			"[interval [count]]\n\n"
+		    "[-T d|u] [interval [count]]\n\n"
 		    "\t-c events specify processor events to be monitored\n"
 		    "\t-n\t  suppress titles\n"
 		    "\t-p period cycle through event list periodically\n"
 		    "\t-s\t  run user soaker thread for system-only events\n"
 		    "\t-t\t  include %s register\n"
+		    "\t-T d|u\t  Display a timestamp in date (d) or unix "
+		    "time_t (u)\n"
 		    "\t-D\t  enable debug mode\n"
 		    "\t-h\t  print extended usage information\n\n"
 		    "\tUse cputrack(1) to monitor per-process statistics.\n"),
@@ -347,6 +362,8 @@
 		}
 	}
 
+	if (timestamp_fmt != NODATE)
+		print_timestamp(timestamp_fmt);
 	if (ccnt > sizeof (line))
 		ccnt = sizeof (line);
 	if (ccnt > 0)
@@ -513,7 +530,7 @@
 			 * If periodic behavior was requested, rest here.
 			 */
 			if (opts->doperiod && opts->mseconds_rest > 0 &&
-				(sample_cnt % opts->nsets) == 0) {
+			    (sample_cnt % opts->nsets) == 0) {
 				/*
 				 * Stop the soaker while the tool rests.
 				 */
@@ -609,7 +626,7 @@
 	max_chip_id = sysconf(_SC_CPUID_MAX);
 	if ((chip_designees = malloc(max_chip_id * sizeof (int))) == NULL) {
 		(void) fprintf(stderr, gettext(
-			"%s: out of heap\n"), opts->pgmname);
+		    "%s: out of heap\n"), opts->pgmname);
 		return (1);
 	}
 	for (i = 0; i < max_chip_id; i++)
@@ -618,16 +635,16 @@
 	if (smt) {
 		if ((kc = kstat_open()) == NULL) {
 			(void) fprintf(stderr, gettext(
-				"%s: kstat_open() failed: %s\n"), opts->pgmname,
+			    "%s: kstat_open() failed: %s\n"), opts->pgmname,
 			    strerror(errno));
-			    return (1);
+			return (1);
 		}
 	}
 
 	if (opts->dosoaker)
 		if (priocntl(0, 0, PC_GETCID, &fxinfo) == -1) {
 			(void) fprintf(stderr, gettext(
-				"%s: couldn't get FX scheduler class: %s\n"),
+			    "%s: couldn't get FX scheduler class: %s\n"),
 			    opts->pgmname, strerror(errno));
 			return (1);
 		}
--- a/usr/src/cmd/cpc/cpustat/Makefile	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/cmd/cpc/cpustat/Makefile	Mon Aug 10 10:43:48 2009 -0400
@@ -19,11 +19,9 @@
 # CDDL HEADER END
 #
 #
-# Copyright 2006 Sun Microsystems, Inc.  All rights reserved.
+# Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
 # Use is subject to license terms.
 #
-# ident	"%Z%%M%	%I%	%E% SMI"
-#
 
 PROG =		cpustat
 OBJS =		$(PROG).o caps.o time.o setgrp.o strtoset.o
@@ -31,23 +29,29 @@
 
 include ../../Makefile.cmd
 
+STATCOMMONDIR = $(SRC)/cmd/stat/common
+
+STAT_COMMON_OBJS = timestamp.o
+STAT_COMMON_SRCS = $(STAT_COMMON_OBJS:%.o=$(STATCOMMONDIR)/%.c)
+SRCS += $(STAT_COMMON_SRCS)
+
 CFLAGS		+= $(CCVERBOSE) $(CTF_FLAGS)
-CPPFLAGS	+= -D_REENTRANT -I$(SRC)/lib/libcpc/common
+CPPFLAGS	+= -D_REENTRANT -I$(SRC)/lib/libcpc/common -I$(STATCOMMONDIR)
 LDLIBS +=	-lcpc -lkstat
 
 .KEEP_STATE:
 
 all:	$(PROG)
 
-$(PROG): $(OBJS)
-	$(LINK.c) $(OBJS) -o $@ $(LDLIBS)
+$(PROG): $(OBJS) $(STAT_COMMON_OBJS)
+	$(LINK.c) $(OBJS) $(STAT_COMMON_OBJS) -o $@ $(LDLIBS)
 	$(POST_PROCESS)
-	$(CTFMERGE) -L VERSION -o $@ $(OBJS)
+	$(CTFMERGE) -L VERSION -o $@ $(OBJS) $(STAT_COMMON_OBJS)
 
 install: all $(ROOTUSRSBINPROG)
 
 clean:
-	$(RM) $(OBJS)
+	$(RM) $(OBJS) $(STAT_COMMON_OBJS)
 
 lint:	lint_SRCS
 
@@ -58,6 +62,10 @@
 	$(COMPILE.c) $<
 	$(CTFCONVERT_O)
 
+%.o:	$(STATCOMMONDIR)/%.c
+	$(COMPILE.c) $<
+	$(CTFCONVERT_O)
+
 POFILES =	../common/$(PROG).po ../common/caps.po
 POFILE =	$(PROG)_cmd.po
 
--- a/usr/src/cmd/ctstat/Makefile	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/cmd/ctstat/Makefile	Mon Aug 10 10:43:48 2009 -0400
@@ -2,9 +2,8 @@
 # CDDL HEADER START
 #
 # The contents of this file are subject to the terms of the
-# Common Development and Distribution License, Version 1.0 only
-# (the "License").  You may not use this file except in compliance
-# with the License.
+# Common Development and Distribution License (the "License").
+# You may not use this file except in compliance with the License.
 #
 # You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
 # or http://www.opensolaris.org/os/licensing.
@@ -20,16 +19,23 @@
 # CDDL HEADER END
 #
 #
-# Copyright 2004 Sun Microsystems, Inc.  All rights reserved.
+# Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
 # Use is subject to license terms.
 #
 
-#pragma ident	"%Z%%M%	%I%	%E% SMI"
-
 PROG= ctstat
+OBJS = ctstat.o
+SRCS = $(OBJS:%.o=%.c)
 
 include ../Makefile.cmd
 
+STATCOMMONDIR = $(SRC)/cmd/stat/common
+
+STAT_COMMON_OBJS = timestamp.o
+STAT_COMMON_SRCS = $(STAT_COMMON_OBJS:%.o=$(STATCOMMONDIR)/%.c)
+SRCS += $(STAT_COMMON_SRCS)
+
+CPPFLAGS += -I$(STATCOMMONDIR)
 CFLAGS += -v
 LDLIBS += -lcontract -luutil
 
@@ -37,10 +43,19 @@
 
 all: $(PROG)
 
+$(PROG): $(OBJS) $(STAT_COMMON_OBJS)
+	$(LINK.c) -o $(PROG) $(OBJS) $(STAT_COMMON_OBJS) $(LDLIBS)
+	$(POST_PROCESS)
+        
+%.o : $(STATCOMMONDIR)/%.c
+	$(COMPILE.c) -o $@ $<
+	$(POST_PROCESS_O)
+
 install: all $(ROOTPROG)
 
 clean:
+	$(RM) $(OBJS) $(STAT_COMMON_OBJS)
 
-lint:	lint_PROG
+lint:	lint_SRCS
 
 include ../Makefile.targ
--- a/usr/src/cmd/ctstat/ctstat.c	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/cmd/ctstat/ctstat.c	Mon Aug 10 10:43:48 2009 -0400
@@ -19,12 +19,10 @@
  * CDDL HEADER END
  */
 /*
- * Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
+ * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
  * Use is subject to license terms.
  */
 
-#pragma ident	"%Z%%M%	%I%	%E% SMI"
-
 #include <sys/types.h>
 #include <sys/ctfs.h>
 #include <stdio.h>
@@ -43,6 +41,10 @@
 #include <locale.h>
 #include <langinfo.h>
 
+#include "statcommon.h"
+
+static uint_t timestamp_fmt = NODATE;
+
 static int opt_verbose = 0;
 static int opt_showall = 0;
 
@@ -55,7 +57,7 @@
 usage(void)
 {
 	(void) fprintf(stderr, gettext("Usage: %s [-a] [-i ctidlist] "
-	    "[-t typelist] [-v] [interval [count]]\n"), uu_getpname());
+	    "[-t typelist] [-T d|u] [-v] [interval [count]]\n"), uu_getpname());
 	exit(UU_EXIT_USAGE);
 }
 
@@ -770,7 +772,7 @@
 
 	(void) uu_setpname(argv[0]);
 
-	while ((s = getopt(argc, argv, "ai:t:v")) != EOF) {
+	while ((s = getopt(argc, argv, "ai:T:t:v")) != EOF) {
 		switch (s) {
 		case 'a':
 			opt_showall = 1;
@@ -778,6 +780,18 @@
 		case 'i':
 			nids = parse_ids(optarg, (int **)&ids, nids);
 			break;
+		case 'T':
+			if (optarg) {
+				if (*optarg == 'u')
+					timestamp_fmt = UDATE;
+				else if (*optarg == 'd')
+					timestamp_fmt = DDATE;
+				else
+					usage();
+			} else {
+				usage();
+			}
+			break;
 		case 't':
 			ntypes = parse_types(optarg, &types, ntypes);
 			break;
@@ -814,6 +828,8 @@
 	for (i = 0; count == 0 || i < count; i++) {
 		if (i)
 			(void) sleep(interval);
+		if (timestamp_fmt != NODATE)
+			print_timestamp(timestamp_fmt);
 		print_header();
 		if (nids && ntypes)
 			scan_all(types, ntypes, ids, nids);
--- a/usr/src/cmd/fcinfo/fcadm-list.c	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/cmd/fcinfo/fcadm-list.c	Mon Aug 10 10:43:48 2009 -0400
@@ -19,7 +19,7 @@
  * CDDL HEADER END
  */
 /*
- * Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
+ * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
  * Use is subject to license terms.
  */
 
@@ -943,3 +943,49 @@
 
 	return (0);
 }
+
+/* ARGSUSED */
+int
+fc_util_force_lip(int objects, char *argv[])
+{
+	uint64_t	hbaWWN;
+	HBA_WWN		myWWN;
+	HBA_HANDLE	handle;
+	HBA_STATUS	status;
+	int		rval = 0;
+
+	if ((status = HBA_LoadLibrary()) != HBA_STATUS_OK) {
+		fprintf(stderr, gettext("Failed to load FC-HBA library\n"));
+		printStatus(status);
+		fprintf(stderr, "\n");
+		return (1);
+	}
+
+	sscanf(argv[0], "%016llx", &hbaWWN);
+	hbaWWN = htonll(hbaWWN);
+	memcpy(myWWN.wwn, &hbaWWN, sizeof (hbaWWN));
+
+	/*
+	 * Try target mode first
+	 */
+	if ((status = Sun_HBA_OpenTgtAdapterByWWN(&handle, myWWN)) !=
+	    HBA_STATUS_OK) {
+		/*
+		 * Continue to try initiator mode
+		 */
+		if ((status = HBA_OpenAdapterByWWN(&handle, myWWN)) !=
+		    HBA_STATUS_OK) {
+			fprintf(stderr, gettext("Error: HBA %s not found\n"),
+			    argv[0]);
+			return (0);
+		}
+	}
+
+	status = Sun_HBA_ForceLip(handle, &rval);
+	if ((status != HBA_STATUS_OK) || (rval != 0)) {
+		fprintf(stderr, gettext("Error: Failed to reinitialize the "
+		    "link of HBA %s\n"), argv[0]);
+	}
+
+	return (0);
+}
--- a/usr/src/cmd/fcinfo/fcinfo.c	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/cmd/fcinfo/fcinfo.c	Mon Aug 10 10:43:48 2009 -0400
@@ -53,6 +53,7 @@
 static int fcoeAdmCreatePortFunc(int, char **, cmdOptions_t *, void *);
 static int fcoeListPortsFunc(int, char **, cmdOptions_t *, void *);
 static int fcoeAdmDeletePortFunc(int, char **, cmdOptions_t *, void *);
+static int fcadmForceLipFunc(int, char **, cmdOptions_t *, void *);
 static char *getExecBasename(char *);
 
 /*
@@ -78,6 +79,7 @@
 	{"scsi-target", no_argument,	's', NULL},
 	{"fcoe-force-promisc", no_argument, 'f', NULL},
 	{"target", no_argument,		't', NULL},
+	{"initiator", no_argument,	'i', NULL},
 	{NULL, 0, 0}
 };
 
@@ -113,14 +115,17 @@
 	    npivCreatePortListFunc, NULL, NULL, NULL,
 	    OPERAND_NONE, NULL},
 	{"create-fcoe-port",
-	    fcoeAdmCreatePortFunc, "tpnf", "t", NULL,
+	    fcoeAdmCreatePortFunc, "itpnf", NULL, NULL,
 		OPERAND_MANDATORY_SINGLE, "Network Interface Name"},
 	{"delete-fcoe-port",
 	    fcoeAdmDeletePortFunc, NULL, NULL, NULL,
 		OPERAND_MANDATORY_SINGLE, "Network Interface Name"},
 	{"list-fcoe-ports",
-	    fcoeListPortsFunc, "t", NULL, NULL,
+	    fcoeListPortsFunc, "it", NULL, NULL,
 		OPERAND_NONE, NULL},
+	{"force-lip",
+	    fcadmForceLipFunc, NULL, NULL, NULL,
+		OPERAND_MANDATORY_SINGLE, "WWN"},
 	{NULL, 0, NULL, NULL, NULL, 0, NULL, NULL}
 };
 
@@ -239,6 +244,17 @@
 }
 
 /*
+ * Pass in options/arguments, rest of arguments
+ */
+/*ARGSUSED*/
+static int
+fcadmForceLipFunc(int objects, char *argv[], cmdOptions_t *options,
+    void *addArgs)
+{
+	return (fc_util_force_lip(objects, argv));
+}
+
+/*
  * input:
  *  execFullName - exec name of program (argv[0])
  *
--- a/usr/src/cmd/fcinfo/fcinfo.h	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/cmd/fcinfo/fcinfo.h	Mon Aug 10 10:43:48 2009 -0400
@@ -146,6 +146,7 @@
 int fc_util_delete_npivport(int wwnCount, char **argv, cmdOptions_t *options);
 int fc_util_create_npivport(int wwnCount, char **argv, cmdOptions_t *options);
 int fc_util_create_portlist();
+int fc_util_force_lip(int objects, char *argv[]);
 
 int fcoe_adm_create_port(int objects, char *argv[],
     cmdOptions_t *options);
--- a/usr/src/cmd/fcinfo/fcoeadm.c	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/cmd/fcinfo/fcoeadm.c	Mon Aug 10 10:43:48 2009 -0400
@@ -86,11 +86,11 @@
 
 	fprintf(stdout, gettext("\tMTU Size: %d\n"), attr->mtu_size);
 
-	fprintf(stdout, gettext("\tMAC Factory Address: "));
+	fprintf(stdout, gettext("\tPrimary MAC Address: "));
 	for (i = 0; i < 6; i++) {
 		fprintf(stdout, gettext("%02x"), attr->mac_factory_addr[i]);
 	}
-	fprintf(stdout, gettext("\n\tMAC Current Address: "));
+	fprintf(stdout, gettext("\n\tCurrent MAC Address: "));
 	for (i = 0; i < 6; i++) {
 		fprintf(stdout, gettext("%02x"), attr->mac_current_addr[i]);
 	}
@@ -268,6 +268,9 @@
 {
 	FCOE_STATUS status;
 	FCOE_UINT8	*macLinkName;
+	FCOE_UINT32		port_num;
+	FCOE_PORT_ATTRIBUTE	*portlist = NULL;
+	int			i;
 
 	/* check the mac name operand */
 	assert(objects == 1);
@@ -312,9 +315,39 @@
 			break;
 
 		case  FCOE_STATUS_ERROR_OFFLINE_DEV:
-			fprintf(stderr,
-			    gettext("Error: Please use stmfadm to offline "
-			    "the FCoE target first\n"));
+			status = FCOE_GetPortList(&port_num, &portlist);
+			if (status != FCOE_STATUS_OK || port_num == 0) {
+				fprintf(stderr,
+				    gettext("Error: FCoE port not found on the "
+				    "specified MAC link\n"));
+				break;
+			}
+			for (i = 0; i < port_num; i++) {
+				if (strcmp(
+				    (char *)portlist[i].mac_link_name,
+				    (char *)macLinkName) == 0) {
+					if (portlist[i].port_type ==
+					    FCOE_PORTTYPE_TARGET) {
+						fprintf(stderr,
+						    gettext("Error: Please use "
+						    "stmfadm to offline the "
+						    "FCoE target first\n"));
+					} else {
+						fprintf(stderr,
+						    gettext("Error: Failed to "
+						    "delete FCoE port because "
+						    "unable to offline the "
+						    "device\n"));
+					}
+					break;
+				}
+			}
+			free(portlist);
+			if (i == port_num) {
+				fprintf(stderr,
+				    gettext("Error: FCoE port not found on the "
+				    "specified MAC link\n"));
+			}
 			break;
 
 		case FCOE_STATUS_ERROR_GET_LINKINFO:
--- a/usr/src/cmd/fcoesvc/Makefile	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/cmd/fcoesvc/Makefile	Mon Aug 10 10:43:48 2009 -0400
@@ -24,31 +24,43 @@
 # Use is subject to license terms.
 #
 
-PROG =	svc-fcoet
+PROGFCOET	= svc-fcoet
+PROGFCOEI	= svc-fcoei
+PROG		= ${PROGFCOET} ${PROGFCOEI}
 
 include ../Makefile.cmd
 
-COMMONBASE = ../../common
+COMMONBASE	= ../../common
 
-LOCAL_OBJS = fcoetsvc.o
-LOCAL_SRCS =	$(LOCAL_OBJS:%.o=%.c)
-OBJS =	$(LOCAL_OBJS)
-SRCS = $(LOCAL_SRCS)
+OBJSFCOET	= fcoetsvc.o
+OBJSFCOEI	= fcoeisvc.o
+SRCSFCOET	= $(OBJSFCOET:%.o=%.c)
+SRCSFCOEI	= $(OBJSFCOEI:%.o=%.c)
+SRCS		= $(SRCSFCOET) ${SRCSFCOEI}
 
-LDLIBS += -lfcoe
+LDLIBS		+= -lfcoe
 
-MANIFEST    = fcoe_target.xml
-SVCMETHOD   = svc-fcoet
+MANIFEST	= fcoe_target.xml
+MANIFEST	+= fcoe_initiator.xml
+SVCMETHOD	= svc-fcoet
+SVCMETHOD	+= svc-fcoei
 
 ROOTMANIFESTDIR	= $(ROOTSVCSYSTEM)
 $(ROOTSVCSYSTEM)/fcoe_target.xml	:= FILEMODE = 0444
+$(ROOTSVCSYSTEM)/fcoe_initiator.xml	:= OWNER = root
+$(ROOTSVCSYSTEM)/fcoe_initiator.xml	:= GROUP = bin
+$(ROOTSVCSYSTEM)/fcoe_initiator.xml	:= FILEMODE = 0444
 
 .KEEP_STATE:
 
 all: $(PROG)
 
-$(PROG): $(OBJS)
-	$(LINK.c) -o $@ $(OBJS) $(LDLIBS)
+$(PROGFCOET): $(OBJSFCOET)
+	$(LINK.c) -o $@ $(OBJSFCOET) $(LDLIBS)
+	$(POST_PROCESS)
+
+$(PROGFCOEI): $(OBJSFCOEI)
+	$(LINK.c) -o $@ $(OBJSFCOEI) $(LDLIBS)
 	$(POST_PROCESS)
 
 install: all $(ROOTMANIFEST) $(ROOTSVCMETHOD)
@@ -56,13 +68,11 @@
 check:	$(CHKMANIFEST)
 	$(CSTYLE) -pPc $(SRCS:%=%)
 
-cmdparse.o:
-	    $(COMPILE.c) -o $@
-	    $(POST_PROCESS_O)
+clean:
+	$(RM) $(OBJSFCOET) ${OBJSFCOEI}
 
-clean:
-	$(RM) $(OBJS)
-
-lint:	lint_SRCS
+lint:
+	$(LINT.c) $(SRCSFCOET) $(LDLIBS)
+	$(LINT.c) $(SRCSFCOEI) ${LDLIBS}
 
 include ../Makefile.targ
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/usr/src/cmd/fcoesvc/fcoe_initiator.xml	Mon Aug 10 10:43:48 2009 -0400
@@ -0,0 +1,102 @@
+<?xml version="1.0"?>
+<!DOCTYPE service_bundle SYSTEM "/usr/share/lib/xml/dtd/service_bundle.dtd.1">
+
+<!--
+
+CDDL HEADER START
+
+The contents of this file are subject to the terms of the
+Common Development and Distribution License (the "License").
+You may not use this file except in compliance with the License.
+
+You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+or http://www.opensolaris.org/os/licensing.
+See the License for the specific language governing permissions
+and limitations under the License.
+
+When distributing Covered Code, include this CDDL HEADER in each
+file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+If applicable, add the following below this CDDL HEADER, with the
+fields enclosed by brackets "[]" replaced with your own identifying
+information: Portions Copyright [yyyy] [name of copyright owner]
+
+CDDL HEADER END
+
+Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
+Use is subject to license terms.
+
+Service manifests for the FCoE initiator configuration
+-->
+
+<!--
+	system/fcoe_initiator - Export FCoE initiator port services
+-->
+
+<service_bundle type='manifest' name='SUNWfcprtr:fcoe_initiator'>
+
+<service
+	name='system/fcoe_initiator'
+	type='service'
+	version='1'>
+
+	<create_default_instance enabled='true' />
+
+	<single_instance/>
+
+	<dependency name = 'network'
+		grouping='require_any'
+		restart_on='error'
+		type='service'>
+		<service_fmri value='svc:/milestone/network'/>
+	</dependency>
+
+	<exec_method
+		type='method'
+		name='start'
+		exec='/lib/svc/method/svc-fcoei'
+		timeout_seconds='600'>
+		<method_context>
+			<method_credential
+			user='root'
+			group='root'
+			privileges='basic,sys_devices'
+			/>
+		</method_context>
+	</exec_method>
+
+	<exec_method
+		type='method'
+		name='stop'
+		exec=':true'
+		timeout_seconds='60'>
+		<method_context>
+			<method_credential
+			user='root'
+			group='root'
+			privileges='basic,sys_devices'
+			/>
+		</method_context>
+	</exec_method>
+
+	<property_group name='startd' type='framework'>
+		<propval name='duration' type='astring'
+			value='transient' />
+	</property_group>
+
+	<stability value='Evolving' />
+
+	<template>
+		<common_name>
+			<loctext xml:lang='C'>
+				fcoe initiator service
+			</loctext>
+		</common_name>
+		<documentation>
+			<manpage title='fcadm' section='1M'
+				manpath='/usr/share/man' />
+		</documentation>
+	</template>
+
+</service>
+
+</service_bundle>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/usr/src/cmd/fcoesvc/fcoeisvc.c	Mon Aug 10 10:43:48 2009 -0400
@@ -0,0 +1,64 @@
+/*
+ * CDDL HEADER START
+ *
+ * The contents of this file are subject to the terms of the
+ * Common Development and Distribution License (the "License").
+ * You may not use this file except in compliance with the License.
+ *
+ * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+ * or http://www.opensolaris.org/os/licensing.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL HEADER in each
+ * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+ * If applicable, add the following below this CDDL HEADER, with the
+ * fields enclosed by brackets "[]" replaced with your own identifying
+ * information: Portions Copyright [yyyy] [name of copyright owner]
+ *
+ * CDDL HEADER END
+ */
+/*
+ * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
+ * Use is subject to license terms.
+ */
+
+#include <libfcoe.h>
+#include <locale.h>
+
+int
+main()
+{
+	FCOE_STATUS	status;
+	PFCOE_SMF_PORT_LIST portlist = NULL;
+	PFCOE_SMF_PORT_INSTANCE port = NULL;
+	int i;
+	int ret;
+
+	(void) setlocale(LC_ALL, "");
+
+	status = FCOE_LoadConfig(FCOE_PORTTYPE_INITIATOR, &portlist);
+
+	if (status != FCOE_STATUS_OK) {
+		ret = 1;
+	} else if (portlist == NULL) {
+		return (0);
+	} else {
+		for (i = 0; i < portlist->port_num; i++) {
+			port = &portlist->ports[i];
+			if (port->port_type == FCOE_PORTTYPE_INITIATOR) {
+				(void) FCOE_CreatePort(port->mac_link_name,
+				    port->port_type,
+				    port->port_pwwn,
+				    port->port_nwwn,
+				    port->mac_promisc);
+			}
+		}
+		ret = 0;
+	}
+
+	if (portlist != NULL) {
+		free(portlist);
+	}
+	return (ret);
+} /* end main */
--- a/usr/src/cmd/fm/fmstat/Makefile.com	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/cmd/fm/fmstat/Makefile.com	Mon Aug 10 10:43:48 2009 -0400
@@ -2,9 +2,8 @@
 # CDDL HEADER START
 #
 # The contents of this file are subject to the terms of the
-# Common Development and Distribution License, Version 1.0 only
-# (the "License").  You may not use this file except in compliance
-# with the License.
+# Common Development and Distribution License (the "License").
+# You may not use this file except in compliance with the License.
 #
 # You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
 # or http://www.opensolaris.org/os/licensing.
@@ -20,10 +19,9 @@
 # CDDL HEADER END
 #
 #
-# Copyright 2005 Sun Microsystems, Inc.  All rights reserved.
+# Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
 # Use is subject to license terms.
 #
-#ident	"%Z%%M%	%I%	%E% SMI"
 
 .KEEP_STATE:
 .SUFFIXES:
@@ -36,8 +34,14 @@
 PROG = fmstat
 ROOTPROG = $(ROOTUSRSBIN)/$(PROG)
 
+STATCOMMONDIR = $(SRC)/cmd/stat/common
+
+STAT_COMMON_OBJS = timestamp.o
+STAT_LINTFILES = $(STAT_COMMON_OBJS:%.o=%.ln)
+LINTFILES += $(STAT_LINTFILES)
+
 $(NOT_RELEASE_BUILD)CPPFLAGS += -DDEBUG
-CPPFLAGS += -I. -I../common
+CPPFLAGS += -I. -I../common -I$(STATCOMMONDIR)
 CFLAGS += $(CTF_FLAGS) $(CCVERBOSE) $(XSTRCONST)
 LDLIBS += -L$(ROOT)/usr/lib/fm -lfmd_adm
 LDFLAGS += -R/usr/lib/fm
@@ -48,9 +52,9 @@
 
 all: $(PROG)
 
-$(PROG): $(OBJS)
-	$(LINK.c) $(OBJS) -o $@ $(LDLIBS)
-	$(CTFMERGE) -L VERSION -o $@ $(OBJS)
+$(PROG): $(OBJS) $(STAT_COMMON_OBJS)
+	$(LINK.c) $(OBJS)  $(STAT_COMMON_OBJS) -o $@ $(LDLIBS)
+	$(CTFMERGE) -L VERSION -o $@ $(OBJS) $(STAT_COMMON_OBJS)
 	$(POST_PROCESS)
 
 %.o: ../common/%.c
@@ -61,12 +65,19 @@
 	$(COMPILE.c) $<
 	$(CTFCONVERT_O)
 
+%.o : $(STATCOMMONDIR)/%.c
+	$(COMPILE.c) $<
+	$(CTFCONVERT_O)
+
 clean:
-	$(RM) $(OBJS) $(LINTFILES)
+	$(RM) $(OBJS) $(STAT_COMMON_OBJS) $(LINTFILES)
 
 clobber: clean
 	$(RM) $(PROG)
 
+%.ln: $(STATCOMMONDIR)/%.c
+	$(LINT.c) -c $<
+
 %.ln: ../common/%.c
 	$(LINT.c) -c $<
 
--- a/usr/src/cmd/fm/fmstat/common/fmstat.c	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/cmd/fm/fmstat/common/fmstat.c	Mon Aug 10 10:43:48 2009 -0400
@@ -2,9 +2,8 @@
  * CDDL HEADER START
  *
  * The contents of this file are subject to the terms of the
- * Common Development and Distribution License, Version 1.0 only
- * (the "License").  You may not use this file except in compliance
- * with the License.
+ * Common Development and Distribution License (the "License").
+ * You may not use this file except in compliance with the License.
  *
  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
  * or http://www.opensolaris.org/os/licensing.
@@ -21,12 +20,10 @@
  */
 
 /*
- * Copyright 2005 Sun Microsystems, Inc.  All rights reserved.
+ * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
  * Use is subject to license terms.
  */
 
-#pragma ident	"%Z%%M%	%I%	%E% SMI"
-
 #include <fm/fmd_adm.h>
 
 #include <strings.h>
@@ -36,6 +33,9 @@
 #include <stdio.h>
 #include <errno.h>
 #include <poll.h>
+#include <locale.h>
+
+#include "statcommon.h"
 
 #define	FMSTAT_EXIT_SUCCESS	0
 #define	FMSTAT_EXIT_ERROR	1
@@ -110,6 +110,12 @@
 	double m_pct_w;
 } *g_mods;
 
+static uint_t timestamp_fmt = NODATE;
+
+#if !defined(TEXT_DOMAIN)		/* Should be defined by cc -D */
+#define	TEXT_DOMAIN "SYS_TEST"		/* Use this only if it isn't */
+#endif
+
 static void
 vwarn(const char *format, va_list ap)
 {
@@ -672,10 +678,11 @@
 usage(FILE *fp)
 {
 	(void) fprintf(fp, "Usage: %s [-astTz] [-m module] "
-	    "[-P prog] [interval [count]]\n\n", g_pname);
+	    "[-P prog] [-d d|u] [interval [count]]\n\n", g_pname);
 
 	(void) fprintf(fp,
 	    "\t-a show all statistics, including those kept by fmd\n"
+	    "\t-d display a timestamp in date (d) or unix time_t (u)\n"
 	    "\t-m show module-specific statistics\n"
 	    "\t-P connect to alternate fmd program\n"
 	    "\t-s show module-specific serd engines\n"
@@ -707,11 +714,26 @@
 	else
 		program = FMD_ADM_PROGRAM;
 
-	while ((c = getopt(argc, argv, "am:P:stTz")) != EOF) {
+	(void) setlocale(LC_ALL, "");
+	(void) textdomain(TEXT_DOMAIN);
+
+	while ((c = getopt(argc, argv, "ad:m:P:stTz")) != EOF) {
 		switch (c) {
 		case 'a':
 			opt_a++;
 			break;
+		case 'd':
+			if (optarg) {
+				if (*optarg == 'u')
+					timestamp_fmt = UDATE;
+				else if (*optarg == 'd')
+					timestamp_fmt = DDATE;
+				else
+					return (usage(stderr));
+			} else {
+				return (usage(stderr));
+			}
+			break;
 		case 'm':
 			opt_m = optarg;
 			break;
@@ -768,6 +790,8 @@
 		die(NULL); /* fmd_adm_errmsg() has enough info */
 
 	while (iter < 0 || iter-- > 0) {
+		if (timestamp_fmt != NODATE)
+			print_timestamp(timestamp_fmt);
 		if (opt_s)
 			stat_mod_serd(opt_m);
 		else if (opt_T)
--- a/usr/src/cmd/fps/compilercheck/fps_compiler_check.c	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/cmd/fps/compilercheck/fps_compiler_check.c	Mon Aug 10 10:43:48 2009 -0400
@@ -66,7 +66,9 @@
 	{0x590, 7, 124870, 3, /* 4-SS12 QA */
 	"Sun Performance Library 7 Patch_124870-03 2008/05/28" },
 	{0x5100, 8, 0, 0,
-	"Sun Performance Library 8 2008/10/24"}, /* 5 - SS13 */
+	"Sun Performance Library 8 2008/10/24"}, /* 5 */
+	{0x5100, 8, 0, 0,
+	"Sun Performance Library 8 2009/04/28"}, /* 6 - SS12 U1 */
 	{0, 0, 0, 0, NULL}
 };
 
--- a/usr/src/cmd/fps/fptest/Makefile	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/cmd/fps/fptest/Makefile	Mon Aug 10 10:43:48 2009 -0400
@@ -111,12 +111,12 @@
 	$(POST_PROCESS_O)
 
 S.linpack.o: linpack.c
-	$(COMPILE.c) linpack.c -o $@
+	$(COMPILE.c) -DLAPA_COMP_PERF_$(VER) linpack.c -o $@
 	$(CTFCONVERT_O)
 	$(POST_PROCESS_O)
 
 D.linpack.o: linpack.c
-	$(COMPILE.c) linpack.c -DDP -o $@
+	$(COMPILE.c) -DLAPA_COMP_PERF_$(VER) linpack.c -DDP -o $@
 	$(CTFCONVERT_O)
 	$(POST_PROCESS_O)
 
--- a/usr/src/cmd/fps/fptest/linpack.h	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/cmd/fps/fptest/linpack.h	Mon Aug 10 10:43:48 2009 -0400
@@ -85,9 +85,11 @@
 #undef FPS_LAPA_LIB13
 #undef FPS_LAPA_UNK
 
+/* SS12 U1 */
+#if (LAPA_COMP_PERF_6 == 1)
+#define	FPS_LAPA_LIB13
 
-/* SS13 */
-#if (LAPA_COMP_PERF_5 == 1)
+#elif (LAPA_COMP_PERF_5 == 1)
 #define	FPS_LAPA_LIB13
 
 /* QA SS12 */
@@ -132,7 +134,7 @@
 #endif
 
 #ifdef FPS_LAPA_LIB13
-#include <singdoub64v9b_ss13.h>
+#include <singdoub64v9b_ss12u1.h>
 #endif
 
 #else
@@ -155,7 +157,7 @@
 #endif
 
 #ifdef FPS_LAPA_LIB13
-#include <singdoub64_ss13.h>
+#include <singdoub64_ss12u1.h>
 #endif
 
 #endif /* V9B */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/usr/src/cmd/fps/fptest/singdoub64_ss12u1.h	Mon Aug 10 10:43:48 2009 -0400
@@ -0,0 +1,6113 @@
+/*
+ * CDDL HEADER START
+ *
+ * The contents of this file are subject to the terms of the
+ * Common Development and Distribution License (the "License").
+ * You may not use this file except in compliance with the License.
+ *
+ * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+ * or http://www.opensolaris.org/os/licensing.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL HEADER in each
+ * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+ * If applicable, add the following below this CDDL HEADER, with the
+ * fields enclosed by brackets "[]" replaced with your own identifying
+ * information: Portions Copyright [yyyy] [name of copyright owner]
+ *
+ * CDDL HEADER END
+ */
+
+/*
+ * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
+ * Use is subject to license terms.
+ */
+
+#ifndef	LAPACK_V9A_SS13
+#define	LAPACK_V9A_SS13
+
+/* 64-bit golden values for V9A/SS13 Lapack */
+
+
+static struct LinpVals LinpValsA[] = {
+
+#ifdef DP /* { */
+
+/* Start of DP golden values */
+
+
+{, 0.0000000000000000e+00,
+	0.0000000000000000e+00, 0.0000000000000000e+00,
+	0.0000000000000000e+00, /* L0 */
+{0.0000000000000000e+00, 0.0000000000000000e+00,
+	2.2204460492503131e-16, 0.0000000000000000e+00,
+	0.0000000000000000e+00}, /* L1 */
+{0.0000000000000000e+00, 0.0000000000000000e+00,
+	2.2204460492503131e-16, 0.0000000000000000e+00,
+	0.0000000000000000e+00}, /* L2 */
+{0.0000000000000000e+00, 0.0000000000000000e+00,
+	2.2204460492503131e-16, 0.0000000000000000e+00,
+	0.0000000000000000e+00}, /* L3 */
+{3.8260177822204688e-01, 1.6653345369377348e-16,
+	2.2204460492503131e-16, 2.2204460492503131e-16,
+	2.2204460492503131e-16}, /* L4 */
+{4.0810856343684981e-01, 2.2204460492503131e-16,
+	2.2204460492503131e-16, -3.3306690738754696e-16,
+	0.0000000000000000e+00}, /* L5 */
+{3.4009046953070693e-01, 2.2204460492503131e-16,
+	2.2204460492503131e-16, 8.8817841970012523e-16,
+	2.6645352591003757e-15}, /* L6 */
+{3.6373773558278227e-01, 2.7755575615628914e-16,
+	2.2204460492503131e-16, -3.3306690738754696e-16,
+	8.8817841970012523e-16}, /* L7 */
+{3.2492063115128750e-01, 2.8449465006019636e-16,
+	2.2204460492503131e-16, -1.7763568394002505e-15,
+	-1.1102230246251565e-16}, /* L8 */
+{4.5083838251885799e-01, 4.4408920985006262e-16,
+	2.2204460492503131e-16, -1.5543122344752192e-15,
+	-4.5519144009631418e-15}, /* L9 */
+{4.0575454426697483e-01, 4.4408920985006262e-16,
+	2.2204460492503131e-16, -1.1102230246251565e-16,
+	-2.2204460492503131e-16}, /* L10 */
+{5.9941012221257661e-01, 7.2164496600635175e-16,
+	2.2204460492503131e-16, 2.2204460492503131e-16,
+	2.2204460492503131e-16}, /* L11 */
+{2.9586268852800246e-01, 3.8857805861880479e-16,
+	2.2204460492503131e-16, -5.5511151231257827e-16,
+	0.0000000000000000e+00}, /* L12 */
+{6.2922387221750764e-01, 9.0205620750793969e-16,
+	2.2204460492503131e-16, -1.6653345369377348e-15,
+	-2.2204460492503131e-16}, /* L13 */
+{5.3933474761500677e-01, 8.3266726846886741e-16,
+	2.2204460492503131e-16, -4.4408920985006262e-16,
+	0.0000000000000000e+00}, /* L14 */
+{6.7117213036534140e-01, 1.1102230246251565e-15,
+	2.2204460492503131e-16, -6.6613381477509392e-16,
+	-1.1102230246251565e-16}, /* L15 */
+{7.8652984027188344e-01, 1.3877787807814457e-15,
+	2.2204460492503131e-16, -6.6613381477509392e-16,
+	0.0000000000000000e+00}, /* L16 */
+{6.3662650600829918e-01, 1.1934897514720433e-15,
+	2.2204460492503131e-16, -1.1102230246251565e-15,
+	-1.3322676295501878e-15}, /* L17 */
+{2.9363780703483666e-01, 5.8286708792820718e-16,
+	2.2204460492503131e-16, 4.4408920985006262e-16,
+	4.4408920985006262e-16}, /* L18 */
+{8.0143251092966705e-01, 1.6792123247455493e-15,
+	2.2204460492503131e-16, -5.5511151231257827e-16,
+	8.8817841970012523e-16}, /* L19 */
+{5.9147043988445613e-01, 1.3045120539345589e-15,
+	2.2204460492503131e-16, -6.6613381477509392e-16,
+	-2.2204460492503131e-16}, /* L20 */
+{5.9684867319455459e-01, 1.3877787807814457e-15,
+	2.2204460492503131e-16, 2.2204460492503131e-15,
+	-1.4432899320127035e-15}, /* L21 */
+{4.7856411796145321e-01, 1.1657341758564144e-15,
+	2.2204460492503131e-16, -5.5511151231257827e-16,
+	-2.3314683517128287e-15}, /* L22 */
+{4.5775698239791013e-01, 1.1657341758564144e-15,
+	2.2204460492503131e-16, 2.4424906541753444e-15,
+	-2.9976021664879227e-15}, /* L23 */
+{6.7891536575880340e-01, 1.8041124150158794e-15,
+	2.2204460492503131e-16, -1.1546319456101628e-14,
+	-2.2204460492503131e-15}, /* L24 */
+{5.8156934716077235e-01, 1.6098233857064770e-15,
+	2.2204460492503131e-16, 1.5543122344752192e-15,
+	3.3306690738754696e-15}, /* L25 */
+{6.1704970521036173e-01, 1.7763568394002505e-15,
+	2.2204460492503131e-16, -2.9976021664879227e-15,
+	-4.2188474935755949e-15}, /* L26 */
+{8.9129401863720303e-01, 2.6645352591003757e-15,
+	2.2204460492503131e-16, -4.4408920985006262e-16,
+	2.4424906541753444e-15}, /* L27 */
+{8.9527300979183411e-01, 2.7755575615628914e-15,
+	2.2204460492503131e-16, 1.5543122344752192e-15,
+	-1.3322676295501878e-15}, /* L28 */
+{8.1253743509383025e-01, 2.6090241078691179e-15,
+	2.2204460492503131e-16, 0.0000000000000000e+00,
+	6.6613381477509392e-16}, /* L29 */
+{8.6065578674654963e-01, 2.8588242884097781e-15,
+	2.2204460492503131e-16, 8.8817841970012523e-16,
+	8.8817841970012523e-16}, /* L30 */
+{9.0566972861522066e-01, 3.1086244689504383e-15,
+	2.2204460492503131e-16, 1.7763568394002505e-15,
+	-1.6653345369377348e-15}, /* L31 */
+{7.3636205055376436e-01, 2.6090241078691179e-15,
+	2.2204460492503131e-16, -9.9920072216264089e-16,
+	2.1760371282653068e-14}, /* L32 */
+{8.4318439831303504e-01, 3.0808688933348094e-15,
+	2.2204460492503131e-16, 6.6613381477509392e-16,
+	1.1102230246251565e-15}, /* L33 */
+{9.7321442476194397e-01, 3.6637359812630166e-15,
+	2.2204460492503131e-16, -2.6645352591003757e-15,
+	2.2204460492503131e-16}, /* L34 */
+{1.4583044708110673e+00, 5.6621374255882984e-15,
+	2.2204460492503131e-16, -3.9968028886505635e-15,
+	-4.4408920985006262e-16}, /* L35 */
+{8.0446023793208044e-01, 3.2127078775090467e-15,
+	2.2204460492503131e-16, -2.4091839634365897e-14,
+	1.9984014443252818e-14}, /* L36 */
+{5.3420930866356575e-01, 2.1926904736346842e-15,
+	2.2204460492503131e-16, -2.2204460492503131e-15,
+	-5.5511151231257827e-16}, /* L37 */
+{4.6747763286447808e-01, 1.9706458687096529e-15,
+	2.2204460492503131e-16, 7.1054273576010019e-15,
+	1.5543122344752192e-15}, /* L38 */
+{9.8796645269880079e-01, 4.2743586448068527e-15,
+	2.2204460492503131e-16, 8.8817841970012523e-16,
+	1.3322676295501878e-15}, /* L39 */
+{6.1611576753753372e-01, 2.7339241981394480e-15,
+	2.2204460492503131e-16, -9.5390362275793450e-13,
+	2.3319124409226788e-12}, /* L40 */
+{6.2244703022421788e-01, 2.8310687127941492e-15,
+	2.2204460492503131e-16, 2.3536728122053319e-14,
+	2.1982415887578100e-14}, /* L41 */
+{8.7271897456624437e-01, 4.0661918276896358e-15,
+	2.2204460492503131e-16, 7.9936057773011271e-15,
+	-9.8809849191638932e-15}, /* L42 */
+{6.8659341819991870e-01, 3.2751579226442118e-15,
+	2.2204460492503131e-16, -2.2204460492503131e-16,
+	-2.9976021664879227e-15}, /* L43 */
+{7.2500932497707793e-01, 3.5388358909926865e-15,
+	2.2204460492503131e-16, -1.1657341758564144e-14,
+	4.2188474935755949e-15}, /* L44 */
+{8.8403751416813714e-01, 4.4131365228849972e-15,
+	2.2204460492503131e-16, -4.5519144009631418e-15,
+	-1.2101430968414206e-14}, /* L45 */
+{6.3093735629719305e-01, 3.2196467714129540e-15,
+	2.2204460492503131e-16, -7.9936057773011271e-15,
+	-3.3306690738754696e-15}, /* L46 */
+{9.2094634655374696e-01, 4.8017145815038020e-15,
+	2.2204460492503131e-16, -1.9872992140790302e-14,
+	1.3322676295501878e-15}, /* L47 */
+{7.9229777213175645e-01, 4.2188474935755949e-15,
+	2.2204460492503131e-16, 2.1538326677728037e-14,
+	1.2212453270876722e-14}, /* L48 */
+{6.0205010610116116e-01, 3.2751579226442118e-15,
+	2.2204460492503131e-16, -4.4408920985006262e-16,
+	1.3322676295501878e-15}, /* L49 */
+{1.3500208311387045e+00, 7.4940054162198066e-15,
+	2.2204460492503131e-16, 4.4408920985006262e-16,
+	-1.9984014443252818e-15}, /* L50 */
+{1.1666846688849217e+00, 6.6058269965196814e-15,
+	2.2204460492503131e-16, -1.2212453270876722e-14,
+	9.3702823278363212e-14}, /* L51 */
+{1.0480930953997019e+00, 6.0507154842071031e-15,
+	2.2204460492503131e-16, 1.1102230246251565e-15,
+	9.9920072216264089e-15}, /* L52 */
+{8.8208908253996454e-01, 5.1902926401226068e-15,
+	2.2204460492503131e-16, 1.5543122344752192e-15,
+	-2.4424906541753444e-15}, /* L53 */
+{8.2408678992692186e-01, 4.9404924595819466e-15,
+	2.2204460492503131e-16, 1.7763568394002505e-15,
+	-6.8833827526759706e-15}, /* L54 */
+{8.6364968995405822e-01, 5.2735593669694936e-15,
+	2.2204460492503131e-16, 3.1086244689504383e-15,
+	-6.6613381477509392e-16}, /* L55 */
+{7.5001157285481435e-01, 4.6629367034256575e-15,
+	2.2204460492503131e-16, 2.2204460492503131e-14,
+	8.8817841970012523e-16}, /* L56 */
+{1.2017729296036601e+00, 7.6050277186823223e-15,
+	2.2204460492503131e-16, 1.9984014443252818e-15,
+	5.5511151231257827e-15}, /* L57 */
+{1.0194122814946389e+00, 6.5641936330962380e-15,
+	2.2204460492503131e-16, 2.6534330288541241e-13,
+	1.6364687382974807e-13}, /* L58 */
+{9.9577807695415899e-01, 6.5225602696727947e-15,
+	2.2204460492503131e-16, 3.3306690738754696e-15,
+	3.7747582837255322e-15}, /* L59 */
+{8.5001311590214701e-01, 5.6621374255882984e-15,
+	2.2204460492503131e-16, -6.5503158452884236e-15,
+	1.5543122344752192e-15}, /* L60 */
+{9.2624380035615839e-01, 6.2727600891321345e-15,
+	2.2204460492503131e-16, -5.4067861299245124e-14,
+	-9.2481577951275540e-14}, /* L61 */
+{1.5242170674146556e+00, 1.0491607582707729e-14,
+	2.2204460492503131e-16, 6.8833827526759706e-15,
+	3.9968028886505635e-15}, /* L62 */
+{8.9981547166579190e-01, 6.2935767708438561e-15,
+	2.2204460492503131e-16, 3.7747582837255322e-15,
+	4.4408920985006262e-16}, /* L63 */
+{7.6563681395596928e-01, 5.4400928206632670e-15,
+	2.2204460492503131e-16, -5.5511151231257827e-15,
+	1.6875389974302379e-14}, /* L64 */
+{9.1155252700817435e-01, 6.5780714209040525e-15,
+	2.2204460492503131e-16, -5.8841820305133297e-15,
+	-1.3322676295501878e-15}, /* L65 */
+{8.6364968995405356e-01, 6.3282712403633923e-15,
+	2.2204460492503131e-16, 3.7747582837255322e-15,
+	-1.3322676295501878e-15}, /* L66 */
+{1.0447922407927950e+00, 7.7715611723760958e-15,
+	2.2204460492503131e-16, -6.7723604502134549e-15,
+	4.8849813083506888e-15}, /* L67 */
+{7.8677684603399289e-01, 5.9396931817445875e-15,
+	2.2204460492503131e-16, -6.8833827526759706e-15,
+	-2.9976021664879227e-15}, /* L68 */
+{1.2246565778977070e+00, 9.3813845580825728e-15,
+	2.2204460492503131e-16, 1.5032419753424620e-13,
+	3.1863400806741993e-13}, /* L69 */
+{1.6214535908385190e+00, 1.2601031329495527e-14,
+	2.2204460492503131e-16, 2.2204460492503131e-15,
+	-1.2212453270876722e-15}, /* L70 */
+{9.7184598172736347e-01, 7.6605388699135801e-15,
+	2.2204460492503131e-16, -1.9206858326015208e-14,
+	-1.0325074129013956e-14}, /* L71 */
+{8.4723529526194563e-01, 6.7723604502134549e-15,
+	2.2204460492503131e-16, -1.4432899320127035e-15,
+	4.2188474935755949e-15}, /* L72 */
+{1.3493358890629930e+00, 1.0935696792557792e-14,
+	2.2204460492503131e-16, -1.8318679906315083e-14,
+	5.1070259132757201e-15}, /* L73 */
+{1.1790722474159370e+00, 9.6866958898544908e-15,
+	2.2204460492503131e-16, 2.8865798640254070e-15,
+	-7.1054273576010019e-15}, /* L74 */
+{1.0000154304731115e+00, 8.3266726846886741e-15,
+	2.2204460492503131e-16, 1.7763568394002505e-15,
+	-5.3290705182007514e-15}, /* L75 */
+{9.9672590603067746e-01, 8.4099394115355608e-15,
+	2.2204460492503131e-16, -5.6510351953420468e-14,
+	-4.3631764867768652e-14}, /* L76 */
+{1.8831459405013156e+00, 1.6098233857064770e-14,
+	2.2204460492503131e-16, -1.2212453270876722e-15,
+	-1.9984014443252818e-15}, /* L77 */
+{1.1538639582381141e+00, 9.9920072216264089e-15,
+	2.2204460492503131e-16, -3.3306690738754696e-16,
+	4.2410519540680980e-14}, /* L78 */
+{9.2090028565720605e-01, 8.0768725041480138e-15,
+	2.2204460492503131e-16, 1.7763568394002505e-15,
+	-6.4392935428259079e-15}, /* L79 */
+{1.0812666841987244e+00, 9.6034291630076041e-15,
+	2.2204460492503131e-16, 1.5609735726229701e-13,
+	4.5519144009631418e-14}, /* L80 */
+{9.4445901766904117e-01, 8.4932061383824475e-15,
+	2.2204460492503131e-16, -6.5503158452884236e-15,
+	1.1768364061026659e-14}, /* L81 */
+{1.1158708766864638e+00, 1.0158540675320182e-14,
+	2.2204460492503131e-16, -2.2204460492503131e-15,
+	-1.7763568394002505e-15}, /* L82 */
+{1.3976119269262395e+00, 1.2878587085651816e-14,
+	2.2204460492503131e-16, 1.6209256159527285e-14,
+	-9.8809849191638932e-15}, /* L83 */
+{1.1964470328874373e+00, 1.1157741397482823e-14,
+	2.2204460492503131e-16, 4.5075054799781356e-14,
+	-7.4384942649885488e-15}, /* L84 */
+{1.5279647533258061e+00, 1.4419021532319221e-14,
+	2.2204460492503131e-16, 1.3322676295501878e-15,
+	1.3322676295501878e-15}, /* L85 */
+{1.0581558624773642e+00, 1.0103029524088925e-14,
+	2.2204460492503131e-16, -2.5535129566378600e-15,
+	2.2204460492503131e-15}, /* L86 */
+{1.3391011224150913e+00, 1.2934098236883074e-14,
+	2.2204460492503131e-16, -3.1752378504279477e-14,
+	-1.2878587085651816e-14}, /* L87 */
+{1.1306992651372059e+00, 1.1046719095020308e-14,
+	2.2204460492503131e-16, 3.3306690738754696e-15,
+	-1.8873791418627661e-15}, /* L88 */
+{1.2584463844155744e+00, 1.2434497875801753e-14,
+	2.2204460492503131e-16, 6.6613381477509392e-15,
+	8.8817841970012523e-16}, /* L89 */
+{1.4757172151078655e+00, 1.4745149545802860e-14,
+	2.2204460492503131e-16, 3.2196467714129540e-14,
+	2.1094237467877974e-14}, /* L90 */
+{9.5880600339315103e-01, 9.6866958898544908e-15,
+	2.2204460492503131e-16, 1.2434497875801753e-14,
+	2.6645352591003757e-14}, /* L91 */
+{1.0407769289978044e+00, 1.0630385460785874e-14,
+	2.2204460492503131e-16, 2.8421709430404007e-14,
+	-2.7755575615628914e-15}, /* L92 */
+{1.3226010532063741e+00, 1.3655743202889425e-14,
+	2.2204460492503131e-16, -5.6621374255882984e-15,
+	1.9984014443252818e-15}, /* L93 */
+{9.5480196686123875e-01, 9.9642516460107800e-15,
+	2.2204460492503131e-16, -1.8873791418627661e-15,
+	-1.5543122344752192e-15}, /* L94 */
+{1.3822581706736938e+00, 1.4578616092109087e-14,
+	2.2204460492503131e-16, 8.4376949871511897e-15,
+	-5.1070259132757201e-15}, /* L95 */
+{1.9166962417400433e+00, 2.0428103653102880e-14,
+	2.2204460492503131e-16, -3.7747582837255322e-15,
+	-3.1086244689504383e-15}, /* L96 */
+{1.2371324913069346e+00, 1.3322676295501878e-14,
+	2.2204460492503131e-16, -8.8817841970012523e-16,
+	6.6613381477509392e-15}, /* L97 */
+{8.9797303960849595e-01, 9.7699626167013776e-15,
+	2.2204460492503131e-16, 6.4392935428259079e-15,
+	-1.1102230246251565e-15}, /* L98 */
+{1.4040620690480938e+00, 1.5432100042289676e-14,
+	2.2204460492503131e-16, 6.2172489379008766e-15,
+	1.3322676295501878e-15}, /* L99 */
+{1.2800197510055726e+00, 1.4210854715202004e-14,
+	2.2204460492503131e-16, 9.9920072216264089e-15,
+	5.7731597280508140e-15}, /* L100 */
+{1.5198254314615605e+00, 1.7041923427996153e-14,
+	2.2204460492503131e-16, -1.7097434579227411e-14,
+	2.8865798640254070e-15}, /* L101 */
+{1.0593760277936337e+00, 1.1996480198117609e-14,
+	2.2204460492503131e-16, -6.1062266354383610e-15,
+	-1.5543122344752192e-15}, /* L102 */
+{9.8059765512410590e-01, 1.1213252548714081e-14,
+	2.2204460492503131e-16, -1.2989609388114332e-14,
+	3.3306690738754696e-15}, /* L103 */
+{1.1184066803548092e+00, 1.2913281555171352e-14,
+	2.2204460492503131e-16, -9.6589403142388619e-15,
+	1.1546319456101628e-14}, /* L104 */
+{1.4190695156236912e+00, 1.6542323066914832e-14,
+	2.2204460492503131e-16, -3.1641356201816961e-14,
+	-6.1062266354383610e-15}, /* L105 */
+{9.9529837655541686e-01, 1.1712852909795402e-14,
+	2.2204460492503131e-16, 4.6851411639181606e-14,
+	-1.0380585280245214e-13}, /* L106 */
+{1.7804013037862301e+00, 2.1149748619109232e-14,
+	2.2204460492503131e-16, 7.1054273576010019e-15,
+	7.3274719625260332e-15}, /* L107 */
+{1.2916865976944309e+00, 1.5487611193520934e-14,
+	2.2204460492503131e-16, 7.7715611723760958e-15,
+	1.4654943925052066e-14}, /* L108 */
+{1.0527685380438851e+00, 1.2739809207573671e-14,
+	2.2204460492503131e-16, -1.4321877017664519e-14,
+	-5.3290705182007514e-15}, /* L109 */
+{1.0727438254166126e+00, 1.3100631690576847e-14,
+	2.2204460492503131e-16, 4.8849813083506888e-15,
+	-2.2204460492503131e-15}, /* L110 */
+{1.6441695140661536e+00, 2.0261570199409107e-14,
+	2.2204460492503131e-16, 1.1102230246251565e-15,
+	-5.6621374255882984e-15}, /* L111 */
+{1.4509152451060254e+00, 1.8041124150158794e-14,
+	2.2204460492503131e-16, 1.7097434579227411e-14,
+	-2.2426505097428162e-14}, /* L112 */
+{1.1725844649352746e+00, 1.4710455076283324e-14,
+	2.2204460492503131e-16, 5.3290705182007514e-15,
+	8.6597395920762210e-15}, /* L113 */
+{1.0033049549154456e+00, 1.2698175844150228e-14,
+	2.2204460492503131e-16, -5.5511151231257827e-15,
+	3.9968028886505635e-15}, /* L114 */
+{1.5000231457096496e+00, 1.9151347174783950e-14,
+	2.2204460492503131e-16, 5.9952043329758453e-15,
+	-1.4432899320127035e-15}, /* L115 */
+{8.9279394843423010e-01, 1.1497747198774277e-14,
+	2.2204460492503131e-16, -4.9960036108132044e-15,
+	-1.1990408665951691e-14}, /* L116 */
+{1.5042967159233618e+00, 1.9539925233402755e-14,
+	2.2204460492503131e-16, -2.7056135110115065e-13,
+	-2.5757174171303632e-13}, /* L117 */
+{1.3474784190248486e+00, 1.7652546091539989e-14,
+	2.2204460492503131e-16, 3.9968028886505635e-15,
+	-1.9443335830260366e-12}, /* L118 */
+{9.4119099338644763e-01, 1.2434497875801753e-14,
+	2.2204460492503131e-16, -4.6629367034256575e-15,
+	-2.1094237467877974e-15}, /* L119 */
+{1.7194275728381851e+00, 2.2907023500273738e-14,
+	2.2204460492503131e-16, -1.4099832412739488e-14,
+	-7.5495165674510645e-15}, /* L120 */
+{1.1518772778689883e+00, 1.5473733405713119e-14,
+	2.2204460492503131e-16, 5.4178883601707639e-14,
+	-3.8413716652030416e-14}, /* L121 */
+{1.3360861898943925e+00, 1.8096635301390052e-14,
+	2.2204460492503131e-16, 1.8429702208777599e-14,
+	-3.4416913763379853e-15}, /* L122 */
+{1.1829450823886922e+00, 1.6153745008296028e-14,
+	2.2204460492503131e-16, -1.7763568394002505e-14,
+	-1.9317880628477724e-14}, /* L123 */
+{1.5010312257805758e+00, 2.0664026045835726e-14,
+	2.2204460492503131e-16, 4.3298697960381105e-14,
+	5.4845017416482733e-14}, /* L124 */
+{1.1720180845143169e+00, 1.6264767310758543e-14,
+	2.2204460492503131e-16, -4.9960036108132044e-14,
+	3.3750779948604759e-14}, /* L125 */
+{1.6666923841217633e+00, 2.3314683517128287e-14,
+	2.2204460492503131e-16, 4.3520742565306136e-14,
+	-6.3282712403633923e-15}, /* L126 */
+{1.4389985820389368e+00, 2.0289325775024736e-14,
+	2.2204460492503131e-16, 4.4408920985006262e-15,
+	-4.0301095793893182e-14}, /* L127 */
+{1.2754103048807188e+00, 1.8124390877005681e-14,
+	2.2204460492503131e-16, -4.9960036108132044e-15,
+	6.6613381477509392e-16}, /* L128 */
+{1.4728909441076405e+00, 2.1094237467877974e-14,
+	2.2204460492503131e-16, 2.6645352591003757e-14,
+	3.0864200084579352e-14}, /* L129 */
+{1.8423361199869592e+00, 2.6589841439772499e-14,
+	2.2204460492503131e-16, -2.1649348980190553e-14,
+	-1.7652546091539989e-14}, /* L130 */
+{1.7175837546289456e+00, 2.4980018054066022e-14,
+	2.2204460492503131e-16, -6.5059069243034173e-14,
+	-1.1546319456101628e-14}, /* L131 */
+{1.5094929888012547e+00, 2.2121193765656244e-14,
+	2.2204460492503131e-16, 1.4432899320127035e-14,
+	-5.5511151231257827e-16}, /* L132 */
+{1.4812258631818391e+00, 2.1871393585115584e-14,
+	2.2204460492503131e-16, -1.3655743202889425e-14,
+	5.4400928206632670e-14}, /* L133 */
+{2.1977951065248100e+00, 3.2696068075210860e-14,
+	2.2204460492503131e-16, 1.1102230246251565e-15,
+	-8.4376949871511897e-15}, /* L134 */
+{1.1889072340069056e+00, 1.7819079545233762e-14,
+	2.2204460492503131e-16, -3.3306690738754696e-15,
+	-4.1078251911130792e-15}, /* L135 */
+{1.7610565852814140e+00, 2.6589841439772499e-14,
+	2.2204460492503131e-16, -7.6272321791748254e-14,
+	-3.0642155479654321e-14}, /* L136 */
+{1.7591512317081397e+00, 2.6756374893466273e-14,
+	2.2204460492503131e-16, 4.8849813083506888e-15,
+	2.6645352591003757e-15}, /* L137 */
+{2.3614494811986848e+00, 3.6179392814972289e-14,
+	2.2204460492503131e-16, -3.4749980670767400e-14,
+	-1.0991207943789050e-14}, /* L138 */
+{1.6259243689706477e+00, 2.5091040356528538e-14,
+	2.2204460492503131e-16, 1.0658141036401503e-14,
+	-9.3258734068513149e-15}, /* L139 */
+{1.2660909646518197e+00, 1.9678703111480900e-14,
+	2.2204460492503131e-16, -2.0439205883349132e-13,
+	-2.3725466036239595e-13}, /* L140 */
+{1.5895635344310999e+00, 2.4882873539411321e-14,
+	2.2204460492503131e-16, -1.3211653993039363e-14,
+	5.1070259132757201e-15}, /* L141 */
+{1.1056508632695603e+00, 1.7430501486614958e-14,
+	2.2204460492503131e-16, 2.6645352591003757e-15,
+	7.7715611723760958e-15}, /* L142 */
+{1.5489749499983407e+00, 2.4591439995447217e-14,
+	2.2204460492503131e-16, 3.3306690738754696e-15,
+	-8.8151708155237429e-14}, /* L143 */
+{1.3066607870829714e+00, 2.0889540097712711e-14,
+	2.2204460492503131e-16, -1.4543921622589551e-14,
+	-4.2188474935755949e-15}, /* L144 */
+{1.1310519351557555e+00, 1.8207657603852567e-14,
+	2.2204460492503131e-16, 2.0206059048177849e-14,
+	3.0198066269804258e-14}, /* L145 */
+{1.5753667740327297e+00, 2.5535129566378600e-14,
+	2.2204460492503131e-16, 5.9952043329758453e-15,
+	2.0206059048177849e-14}, /* L146 */
+{1.4864174935942889e+00, 2.4258373088059670e-14,
+	2.2204460492503131e-16, -6.9610983643997315e-14,
+	-4.4408920985006262e-15}, /* L147 */
+{1.3116756448688298e+00, 2.1552204465535851e-14,
+	2.2204460492503131e-16, 1.0658141036401503e-14,
+	-5.1070259132757201e-15}, /* L148 */
+{1.7114358038296786e+00, 2.8310687127941492e-14,
+	2.2204460492503131e-16, 3.0642155479654321e-14,
+	4.5297099404706387e-14}, /* L149 */
+{2.0364897568488090e+00, 3.3913843955346579e-14,
+	2.2204460492503131e-16, -4.6185277824406512e-14,
+	-2.0539125955565396e-14}, /* L150 */
+{1.2980332739915474e+00, 2.1760371282653068e-14,
+	2.2204460492503131e-16, 4.1078251911130792e-14,
+	2.3536728122053319e-14}, /* L151 */
+{1.5806164945471264e+00, 2.6673108166619386e-14,
+	2.2204460492503131e-16, 5.7731597280508140e-15,
+	8.8817841970012523e-16}, /* L152 */
+{1.5425074613829926e+00, 2.6201263381153694e-14,
+	2.2204460492503131e-16, -4.6962433941644122e-14,
+	-6.8056671409522096e-14}, /* L153 */
+{1.6688569196855765e+00, 2.8532731732866523e-14,
+	2.2204460492503131e-16, 3.1086244689504383e-15,
+	1.0436096431476471e-14}, /* L154 */
+{1.8822871086485009e+00, 3.2390756743438942e-14,
+	2.2204460492503131e-16, 2.8865798640254070e-15,
+	-2.5424107263916085e-14}, /* L155 */
+{1.8654133991516275e+00, 3.2307490016592055e-14,
+	2.2204460492503131e-16, 8.9483975784787617e-14,
+	-5.5511151231257827e-15}, /* L156 */
+{1.5637183960582457e+00, 2.7255975254547593e-14,
+	2.2204460492503131e-16, 9.9920072216264089e-15,
+	3.2862601528904634e-14}, /* L157 */
+{1.7595208207058148e+00, 3.0864200084579352e-14,
+	2.2204460492503131e-16, 3.9968028886505635e-15,
+	1.7097434579227411e-14}, /* L158 */
+{1.6069430345020865e+00, 2.8366198279172750e-14,
+	2.2204460492503131e-16, 9.9920072216264089e-14,
+	-5.9285909514983359e-14}, /* L159 */
+{1.5562740136737514e+00, 2.7644553313166398e-14,
+	2.2204460492503131e-16, -4.2188474935755949e-15,
+	9.1038288019262836e-15}, /* L160 */
+{1.7942823445832710e+00, 3.2071567623859210e-14,
+	2.2204460492503131e-16, 2.5091040356528538e-14,
+	-3.3306690738754696e-15}, /* L161 */
+{1.7515702370168520e+00, 3.1502578323738817e-14,
+	2.2204460492503131e-16, -1.4988010832439613e-14,
+	8.4376949871511897e-15}, /* L162 */
+{1.7753341422891886e+00, 3.2127078775090467e-14,
+	2.2204460492503131e-16, 1.7097434579227411e-14,
+	1.5099033134902129e-14}, /* L163 */
+{1.8529249325305224e+00, 3.3736902160796944e-14,
+	2.2204460492503131e-16, 1.3544720900426910e-14,
+	-1.0769163338864018e-14}, /* L164 */
+{1.1894122923051262e+00, 2.1788126858268697e-14,
+	2.2204460492503131e-16, -1.4210854715202004e-14,
+	-3.3306690738754696e-15}, /* L165 */
+{1.7620753820078119e+00, 3.2474023470285829e-14,
+	2.2204460492503131e-16, 9.4368957093138306e-14,
+	2.8954616482224083e-13}, /* L166 */
+{2.1242842752113966e+00, 3.9385161798577428e-14,
+	2.2204460492503131e-16, -1.9984014443252818e-15,
+	-3.2196467714129540e-14}, /* L167 */
+{2.2321773001623937e+00, 4.1633363423443370e-14,
+	2.2204460492503131e-16, 1.3367085216486885e-13,
+	-8.4710016778899444e-14}, /* L168 */
+{1.4674782648362414e+00, 2.7533531010703882e-14,
+	2.2204460492503131e-16, 1.1990408665951691e-14,
+	1.3100631690576847e-14}, /* L169 */
+{1.3264910563040142e+00, 2.5035529205297280e-14,
+	2.2204460492503131e-16, 5.7731597280508140e-15,
+	1.7541523789077473e-14}, /* L170 */
+{2.4971145544562403e+00, 4.7406523151494184e-14,
+	2.2204460492503131e-16, -1.0991207943789050e-14,
+	-8.3266726846886741e-15}, /* L171 */
+{1.0436207544762772e+00, 1.9928503292021560e-14,
+	2.2204460492503131e-16, 1.7763568394002505e-15,
+	-4.3298697960381105e-15}, /* L172 */
+{1.6792166621527975e+00, 3.2251978865360797e-14,
+	2.2204460492503131e-16, -7.1054273576010019e-15,
+	5.3290705182007514e-15}, /* L173 */
+{1.6322090934143754e+00, 3.1530333899354446e-14,
+	2.2204460492503131e-16, 2.0317081350640365e-13,
+	-2.2049029269055609e-13}, /* L174 */
+{2.5086101370152787e+00, 4.8738790781044372e-14,
+	2.2204460492503131e-16, -8.5487172896137054e-15,
+	-2.8088642523016460e-14}, /* L175 */
+{1.6988898506325165e+00, 3.3195668436292181e-14,
+	2.2204460492503131e-16, -9.6589403142388619e-14,
+	4.7073456244106637e-14}, /* L176 */
+{1.7683888685765838e+00, 3.4749980670767400e-14,
+	2.2204460492503131e-16, 6.1284310959308641e-14,
+	2.8421709430404007e-14}, /* L177 */
+{1.5955302373829998e+00, 3.1530333899354446e-14,
+	2.2204460492503131e-16, -1.1901590823981678e-13,
+	-1.3200551762793111e-13}, /* L178 */
+{1.7758653908470168e+00, 3.5291214395272164e-14,
+	2.2204460492503131e-16, -1.6764367671839864e-14,
+	5.8397731095283234e-14}, /* L179 */
+{1.1736292204852639e+00, 2.3453461395206432e-14,
+	2.2204460492503131e-16, -8.8817841970012523e-16,
+	-1.6053824936079764e-13}, /* L180 */
+{2.2514159553467405e+00, 4.5241588253475129e-14,
+	2.2204460492503131e-16, -3.6859404417555197e-14,
+	-3.8302694349567901e-14}, /* L181 */
+{1.9890416803911044e+00, 4.0190073491430667e-14,
+	2.2204460492503131e-16, -3.1530333899354446e-14,
+	1.2212453270876722e-14}, /* L182 */
+{1.8494137827908461e+00, 3.7574110489657642e-14,
+	2.2204460492503131e-16, -4.8183679268731794e-14,
+	4.4630965589931293e-14}, /* L183 */
+{2.5000385761827033e+00, 5.1070259132757201e-14,
+	2.2204460492503131e-16, 7.1054273576010019e-15,
+	1.8429702208777599e-14}, /* L184 */
+{2.2189531578855655e+00, 4.5574655160862676e-14,
+	2.2204460492503131e-16, -4.9027448767446913e-13,
+	2.4358293160275934e-13}, /* L185 */
+{2.3306811242462593e+00, 4.8128168117500536e-14,
+	2.2204460492503131e-16, 2.9753977059954195e-13,
+	1.7630341631047486e-13}, /* L186 */
+{2.3422821312684450e+00, 4.8627768478581856e-14,
+	2.2204460492503131e-16, -3.3306690738754696e-15,
+	-7.6605388699135801e-15}, /* L187 */
+{1.7260904637671115e+00, 3.6026737149086330e-14,
+	2.2204460492503131e-16, 1.6564527527407336e-13,
+	2.0938806244430452e-13}, /* L188 */
+{1.8733754674700820e+00, 3.9308833965634449e-14,
+	2.2204460492503131e-16, -3.0420110874729289e-14,
+	-2.8865798640254070e-15}, /* L189 */
+{1.5184444825867374e+00, 3.2029934260435766e-14,
+	2.2204460492503131e-16, -3.0309088572266774e-14,
+	2.0650148258027912e-14}, /* L190 */
+{1.8900815204229877e+00, 4.0079051188968151e-14,
+	2.2204460492503131e-16, -7.1054273576010019e-15,
+	-1.3100631690576847e-14}, /* L191 */
+{1.4349179744548259e+00, 3.0586644328423063e-14,
+	2.2204460492503131e-16, -2.3314683517128287e-15,
+	-5.1070259132757201e-15}, /* L192 */
+{2.2979629192475857e+00, 4.9238391142125693e-14,
+	2.2204460492503131e-16, 7.5495165674510645e-15,
+	-3.6082248300317588e-14}, /* L193 */
+{1.5876533638438366e+00, 3.4194869158454821e-14,
+	2.2204460492503131e-16, 3.1308289294429414e-14,
+	2.2204460492503131e-14}, /* L194 */
+{1.7923353484632876e+00, 3.8802294710649221e-14,
+	2.2204460492503131e-16, 9.7699626167013776e-15,
+	4.7961634663806763e-14}, /* L195 */
+{1.8922884459041780e+00, 4.1176263787523482e-14,
+	2.2204460492503131e-16, 4.3964831775156199e-14,
+	4.8405723873656825e-14}, /* L196 */
+{2.3109493640753707e+00, 5.0542903196060252e-14,
+	2.2204460492503131e-16, 6.6613381477509392e-14,
+	-1.7541523789077473e-14}, /* L197 */
+{2.2374082611088202e+00, 4.9182879990894435e-14,
+	2.2204460492503131e-16, -6.1284310959308641e-14,
+	1.9761969838327786e-14}, /* L198 */
+{1.9786737474811122e+00, 4.3715031594615539e-14,
+	2.2204460492503131e-16, 1.3100631690576847e-13,
+	-2.2315482794965646e-14}, /* L199 */
+{2.8323874544038095e+00, 6.2890664898063164e-14,
+	2.2204460492503131e-16, 1.6875389974302379e-14,
+	2.0872192862952943e-14}, /* L200 */
+{2.4428237629964049e+00, 5.4511950509095186e-14,
+	2.2204460492503131e-16, 2.2648549702353193e-14,
+	1.1324274851176597e-14}, /* L201 */
+{1.4604185742056859e+00, 3.2751579226442118e-14,
+	2.2204460492503131e-16, -7.4829031859735551e-14,
+	3.4194869158454821e-14}, /* L202 */
+{2.0000308609461306e+00, 4.5075054799781356e-14,
+	2.2204460492503131e-16, 1.2212453270876722e-14,
+	1.4654943925052066e-14}, /* L203 */
+{1.8284595861100834e+00, 4.1411318818518339e-14,
+	2.2204460492503131e-16, 2.0206059048177849e-14,
+	9.9920072216264089e-15}, /* L204 */
+{2.1146667761305893e+00, 4.8128168117500536e-14,
+	2.2204460492503131e-16, 5.1856297034191812e-12,
+	-7.4718009557273035e-13}, /* L205 */
+{1.6650742361758482e+00, 3.8080649744642869e-14,
+	2.2204460492503131e-16, -7.4051875742497941e-14,
+	1.6853185513809876e-13}, /* L206 */
+{1.9770836469618631e+00, 4.5435877282784531e-14,
+	2.2204460492503131e-16, 7.3274719625260332e-15,
+	3.4194869158454821e-14}, /* L207 */
+{2.9327375605219776e+00, 6.7723604502134549e-14,
+	2.2204460492503131e-16, 1.1990408665951691e-14,
+	-7.6605388699135801e-15}, /* L208 */
+{1.7512231940341563e+00, 4.0634162701280729e-14,
+	2.2204460492503131e-16, -2.6645352591003757e-15,
+	6.5503158452884236e-14}, /* L209 */
+{2.1286042734352204e+00, 4.9626969200744497e-14,
+	2.2204460492503131e-16, 2.6867397195928788e-14,
+	1.1679546219056647e-13}, /* L210 */
+{2.0885985782776806e+00, 4.8926140916449867e-14,
+	2.2204460492503131e-16, 6.6613381477509392e-15,
+	5.7731597280508140e-15}, /* L211 */
+{2.4599436178854401e+00, 5.7898130734201914e-14,
+	2.2204460492503131e-16, 1.3100631690576847e-14,
+	-4.1078251911130792e-15}, /* L212 */
+{2.1353029012769920e+00, 5.0494330938732901e-14,
+	2.2204460492503131e-16, 1.0214051826551440e-14,
+	1.3544720900426910e-14}, /* L213 */
+{1.7967566963405959e+00, 4.2688075296837269e-14,
+	2.2204460492503131e-16, -2.2093438190040615e-14,
+	-5.1736392947532295e-14}, /* L214 */
+{2.7514959446009066e+00, 6.5676630800481917e-14,
+	2.2204460492503131e-16, 1.3544720900426910e-14,
+	-5.2180482157382357e-15}, /* L215 */
+{1.8773437826704427e+00, 4.5019543648550098e-14,
+	2.2204460492503131e-16, 2.3758772726978350e-14,
+	5.3512749786932545e-14}, /* L216 */
+{1.5345858910015440e+00, 3.6970426720017713e-14,
+	2.2204460492503131e-16, -3.7159164634203989e-13,
+	9.9698027611339057e-14}, /* L217 */
+{1.7683759103089505e+00, 4.2799097599299785e-14,
+	2.2204460492503131e-16, -2.2648549702353193e-14,
+	-2.0095036745715333e-14}, /* L218 */
+{2.2546009990687268e+00, 5.4817261840867104e-14,
+	2.2204460492503131e-16, 4.0856207306205761e-14,
+	1.6875389974302379e-14}, /* L219 */
+{2.4454922799750403e+00, 5.9729998724833422e-14,
+	2.2204460492503131e-16, -2.9976021664879227e-15,
+	3.3306690738754696e-15}, /* L220 */
+{1.5588475827962787e+00, 3.8247183198336643e-14,
+	2.2204460492503131e-16, -1.1768364061026659e-14,
+	-1.5099033134902129e-14}, /* L221 */
+{1.9651204123596644e+00, 4.8433479449272454e-14,
+	2.2204460492503131e-16, 4.4408920985006262e-16,
+	3.4861002973229915e-14}, /* L222 */
+{2.5762729363532069e+00, 6.3782312764715243e-14,
+	2.2204460492503131e-16, -4.3409720262843621e-14,
+	1.1102230246251565e-14}, /* L223 */
+{2.6339692141866542e+00, 6.5503158452884236e-14,
+	2.2204460492503131e-16, -5.6299409578741688e-13,
+	-1.0330625244137082e-12}, /* L224 */
+{2.3311470812579520e+00, 5.8231197641589461e-14,
+	2.2204460492503131e-16, 2.2093438190040615e-13,
+	-3.2973623831367149e-14}, /* L225 */
+{1.3761274286598091e+00, 3.4527936065842368e-14,
+	2.2204460492503131e-16, 1.3100631690576847e-14,
+	1.8429702208777599e-14}, /* L226 */
+{2.2401226713460232e+00, 5.6454840802189210e-14,
+	2.2204460492503131e-16, 1.2656542480726785e-14,
+	-4.9404924595819466e-14}, /* L227 */
+{4.3926116386781411e+00, 1.1118883591620943e-13,
+	2.2204460492503131e-16, 3.0198066269804258e-14,
+	1.5099033134902129e-14}, /* L228 */
+{2.3013455539520424e+00, 5.8508753397745750e-14,
+	2.2204460492503131e-16, -2.8419488984354757e-12,
+	9.1238128163695364e-13}, /* L229 */
+{1.7543748965038315e+00, 4.4797499043625066e-14,
+	2.2204460492503131e-16, 2.6201263381153694e-14,
+	3.3972824553529790e-14}, /* L230 */
+{1.9348242270864668e+00, 4.9620030306840590e-14,
+	2.2204460492503131e-16, 7.5495165674510645e-15,
+	-1.5543122344752192e-15}, /* L231 */
+{3.2349637093533472e+00, 8.3322237998117998e-14,
+	2.2204460492503131e-16, 3.8191672047105385e-14,
+	2.7755575615628914e-14}, /* L232 */
+{2.3412378425880735e+00, 6.0562665993302289e-14,
+	2.2204460492503131e-16, -5.0404125317982107e-14,
+	3.0198066269804258e-14}, /* L233 */
+{2.1773840248973513e+00, 5.6565863104651726e-14,
+	2.2204460492503131e-16, 1.0125233984581428e-13,
+	-9.7699626167013776e-15}, /* L234 */
+{1.8787523938461115e+00, 4.9016346537200661e-14,
+	2.2204460492503131e-16, -3.6637359812630166e-14,
+	-2.1538326677728037e-14}, /* L235 */
+{2.1292701432741032e+00, 5.5788706987414116e-14,
+	2.2204460492503131e-16, 1.3544720900426910e-14,
+	-2.3425705819590803e-14}, /* L236 */
+{2.5422333200845082e+00, 6.6890937233665682e-14,
+	2.2204460492503131e-16, -8.7707618945387367e-15,
+	9.5479180117763462e-15}, /* L237 */
+{1.7195643484079930e+00, 4.5435877282784531e-14,
+	2.2204460492503131e-16, 1.9984014443252818e-15,
+	1.6653345369377348e-14}, /* L238 */
+{2.6799576703675378e+00, 7.1109784727241276e-14,
+	2.2204460492503131e-16, -2.0827783941967937e-13,
+	-2.3203661214665772e-14}, /* L239 */
+{2.6667078145948717e+00, 7.1054273576010019e-14,
+	2.2204460492503131e-16, -2.5091040356528538e-14,
+	-1.2101430968414206e-14}, /* L240 */
+{2.8563718753176426e+00, 7.6424977457634213e-14,
+	2.2204460492503131e-16, 8.0380146982861334e-14,
+	-7.8381745538536052e-14}, /* L241 */
+{2.0961067235843580e+00, 5.6316062924111066e-14,
+	2.2204460492503131e-16, 7.0388139761234925e-14,
+	5.6399329650957952e-14}, /* L242 */
+{1.7572287605426158e+00, 4.7406523151494184e-14,
+	2.2204460492503131e-16, 3.1152858070981893e-13,
+	1.0946799022804043e-13}, /* L243 */
+{2.0896838836574534e+00, 5.6607496468075169e-14,
+	2.2204460492503131e-16, -1.6764367671839864e-14,
+	1.7541523789077473e-14}, /* L244 */
+{2.0265618825707352e+00, 5.5122573172639022e-14,
+	2.2204460492503131e-16, 1.3988810110276972e-14,
+	5.4400928206632670e-14}, /* L245 */
+{1.9146636900521390e+00, 5.2291504459844873e-14,
+	2.2204460492503131e-16, -1.4321877017664519e-14,
+	7.1054273576010019e-15}, /* L246 */
+{2.9433652548737679e+00, 8.0713213890248880e-14,
+	2.2204460492503131e-16, 1.0835776720341528e-13,
+	6.5725203057809267e-14}, /* L247 */
+{2.1814852737334989e+00, 6.0063065632220969e-14,
+	2.2204460492503131e-16, -9.3258734068513149e-14,
+	-1.6431300764452317e-14}, /* L248 */
+{2.6255425207666603e+00, 7.2580830234869609e-14,
+	2.2204460492503131e-16, -7.2830630415410269e-14,
+	-1.2911893776390571e-13}, /* L249 */
+{2.7360422177743606e+00, 7.5939254884360707e-14,
+	2.2204460492503131e-16, 4.8849813083506888e-15,
+	-1.8429702208777599e-14}, /* L250 */
+{1.8685547286517161e+00, 5.2069459854919842e-14,
+	2.2204460492503131e-16, -3.3528735343679728e-14,
+	-8.8040685852774914e-14}, /* L251 */
+{2.0397140129490610e+00, 5.7065463465733046e-14,
+	2.2204460492503131e-16, -1.8873791418627661e-15,
+	-1.3433698597964394e-14}, /* L252 */
+{1.9461762750161948e+00, 5.4664606174981145e-14,
+	2.2204460492503131e-16, 3.5749181392930041e-14,
+	9.3480778673438181e-14}, /* L253 */
+{2.2825155347116022e+00, 6.4365179852643450e-14,
+	2.2204460492503131e-16, 2.9531932455029164e-14,
+	4.7517545453956700e-14}, /* L254 */
+{2.7804350596286973e+00, 7.8714812445923599e-14,
+	2.2204460492503131e-16, 2.0428103653102880e-14,
+	-9.3369756370975665e-14}, /* L255 */
+{2.5801179368259426e+00, 7.3330230776491589e-14,
+	2.2204460492503131e-16, -4.7739590058881731e-14,
+	5.0626169922907138e-14}, /* L256 */
+{1.7938019978472670e+00, 5.1181281435219717e-14,
+	2.2204460492503131e-16, -2.3425705819590803e-14,
+	-4.4841907964610073e-13}, /* L257 */
+{2.3566255105721221e+00, 6.7501559897209518e-14,
+	2.2204460492503131e-16, -3.4194869158454821e-14,
+	2.6201263381153694e-14}, /* L258 */
+{2.8436732221749996e+00, 8.1767925763642779e-14,
+	2.2204460492503131e-16, -2.5424107263916085e-14,
+	4.0856207306205761e-14}, /* L259 */
+{2.9615841594774968e+00, 8.5487172896137054e-14,
+	2.2204460492503131e-16, -2.8754776337791554e-14,
+	6.2172489379008766e-15}, /* L260 */
+{2.3122962156713154e+00, 6.7001959536128197e-14,
+	2.2204460492503131e-16, 7.2830630415410269e-14,
+	8.6375351315837179e-14}, /* L261 */
+{3.0114968497822918e+00, 8.7596596642924851e-14,
+	2.2204460492503131e-16, -2.2726265314076954e-13,
+	1.7963408538435033e-13}, /* L262 */
+{3.1902227049732002e+00, 9.3149446489526611e-14,
+	2.2204460492503131e-16, 6.8167693711984612e-14,
+	-5.0515147620444623e-14}, /* L263 */
+{2.2905182977808596e+00, 6.7133798520302435e-14,
+	2.2204460492503131e-16, -1.2545520178264269e-14,
+	-6.3282712403633923e-14}, /* L264 */
+{2.2878890762496615e+00, 6.7310740314852069e-14,
+	2.2204460492503131e-16, -2.8799185258776561e-13,
+	-2.1671553440683056e-13}, /* L265 */
+{2.6334992821291503e+00, 7.7771122874992216e-14,
+	2.2204460492503131e-16, -3.5416114485542494e-14,
+	-4.5186077102243871e-14}, /* L266 */
+{2.6835620072418931e+00, 7.9547479714392466e-14,
+	2.2204460492503131e-16, -1.8418599978531347e-13,
+	-9.0816243414337805e-14}, /* L267 */
+{1.7780125097773152e+00, 5.2902127123388709e-14,
+	2.2204460492503131e-16, -1.6719958750854857e-13,
+	6.4170890823334048e-14}, /* L268 */
+{2.7816414343914424e+00, 8.3072437817577338e-14,
+	2.2204460492503131e-16, -9.4368957093138306e-15,
+	4.9737991503207013e-14}, /* L269 */
+{2.0782728089783720e+00, 6.2297389469279096e-14,
+	2.2204460492503131e-16, 8.7263529735537304e-14,
+	3.6859404417555197e-14}, /* L270 */
+{2.4742079193066253e+00, 7.4440453801116746e-14,
+	2.2204460492503131e-16, 1.0436096431476471e-13,
+	6.6835426082434424e-14}, /* L271 */
+{2.5055533671591936e+00, 7.5661699128204418e-14,
+	2.2204460492503131e-16, -4.7850612361344247e-14,
+	-5.4622972811557702e-14}, /* L272 */
+{2.1612055090809590e+00, 6.5503158452884236e-14,
+	2.2204460492503131e-16, 1.9984014443252818e-14,
+	-1.3322676295501878e-14}, /* L273 */
+{3.1560705967207814e+00, 9.6006536054460412e-14,
+	2.2204460492503131e-16, 1.2212453270876722e-14,
+	-5.7731597280508140e-15}, /* L274 */
+{2.0473043176593291e+00, 6.2505556286396313e-14,
+	2.2204460492503131e-16, -4.1744385725905886e-14,
+	2.8865798640254070e-15}, /* L275 */
+{2.4710526216759376e+00, 7.5717210279435676e-14,
+	2.2204460492503131e-16, 1.1546319456101628e-14,
+	-1.4432899320127035e-14}, /* L276 */
+{2.2798185716353379e+00, 7.0110584005078636e-14,
+	2.2204460492503131e-16, -5.1492143882114760e-13,
+	5.0959236830294685e-13}, /* L277 */
+{2.6448249829313464e+00, 8.1629147885564635e-14,
+	2.2204460492503131e-16, 5.9285909514983359e-14,
+	-1.6264767310758543e-13}, /* L278 */
+{1.7132880851832031e+00, 5.3068660577082483e-14,
+	2.2204460492503131e-16, -1.6098233857064770e-14,
+	1.7763568394002505e-14}, /* L279 */
+{2.6000401192288352e+00, 8.0824236192711396e-14,
+	2.2204460492503131e-16, -5.7953641885433171e-14,
+	2.2426505097428162e-14}, /* L280 */
+{2.1094631544940370e+00, 6.5808469784656154e-14,
+	2.2204460492503131e-16, -2.2204460492503131e-15,
+	1.9317880628477724e-14}, /* L281 */
+{2.4060654949502083e+00, 7.5328632220816871e-14,
+	2.2204460492503131e-16, 3.1086244689504383e-14,
+	8.8817841970012523e-15}, /* L282 */
+{3.0861783624971655e+00, 9.6964103413199609e-14,
+	2.2204460492503131e-16, 4.8849813083506888e-14,
+	4.5741188614556449e-13}, /* L283 */
+{2.8415931422244336e+00, 8.9594998087250133e-14,
+	2.2204460492503131e-16, 2.6645352591003757e-14,
+	-1.0880185641326534e-14}, /* L284 */
+{2.6057419615963195e+00, 8.2447937366225688e-14,
+	2.2204460492503131e-16, 6.3282712403633923e-14,
+	5.7953641885433171e-14}, /* L285 */
+{3.2002242053862524e+00, 1.0161316232881745e-13,
+	2.2204460492503131e-16, -1.4876988529977098e-14,
+	7.1054273576010019e-15}, /* L286 */
+{3.0923822109572510e+00, 9.8532293435482643e-14,
+	2.2204460492503131e-16, -1.3322676295501878e-15,
+	1.1102230246251565e-14}, /* L287 */
+{2.6523846769162907e+00, 8.4807161293554145e-14,
+	2.2204460492503131e-16, 4.7739590058881731e-14,
+	-1.7608137170554983e-13}, /* L288 */
+{2.7219278131344971e+00, 8.7332918674576376e-14,
+	2.2204460492503131e-16, 6.8167693711984612e-14,
+	2.0206059048177849e-14}, /* L289 */
+{1.7474407565246566e+00, 5.6260551772879808e-14,
+	2.2204460492503131e-16, 6.4392935428259079e-15,
+	9.9920072216264089e-15}, /* L290 */
+{3.4055508302359989e+00, 1.1002310174035301e-13,
+	2.2204460492503131e-16, -8.1823436914874037e-14,
+	-1.1013412404281553e-13}, /* L291 */
+{2.3493513195358955e+00, 7.6161299489285739e-14,
+	2.2204460492503131e-16, 2.7755575615628914e-14,
+	-8.3710816056736803e-14}, /* L292 */
+{2.8763242458400216e+00, 9.3564045400285067e-14,
+	2.2204460492503131e-16, -2.9976021664879227e-15,
+	4.2410519540680980e-14}, /* L293 */
+{3.3895080832180957e+00, 1.1063372440389685e-13,
+	2.2204460492503131e-16, -1.1379786002407855e-13,
+	2.9021229863701592e-13}, /* L294 */
+{2.9129686765961855e+00, 9.5402852284820483e-14,
+	2.2204460492503131e-16, 2.0605739337042905e-13,
+	8.3821838359199319e-13}, /* L295 */
+{2.5253768049952692e+00, 8.2989171090730451e-14,
+	2.2204460492503131e-16, 7.9936057773011271e-15,
+	5.9063864910058328e-14}, /* L296 */
+{2.1254536716697880e+00, 7.0082828429463007e-14,
+	2.2204460492503131e-16, 7.9491968563161208e-14,
+	6.0840221749458578e-14}, /* L297 */
+{2.7013839648678228e+00, 8.9372953482325102e-14,
+	2.2204460492503131e-16, 8.4376949871511897e-15,
+	-2.5812685322534890e-13}, /* L298 */
+{2.2257868527747759e+00, 7.3885342288804168e-14,
+	2.2204460492503131e-16, -1.0258460747536446e-13,
+	1.2811973704174306e-13}, /* L299 */
+{2.3400361073059397e+00, 7.7937656328685989e-14,
+	2.2204460492503131e-16, 2.4669155607170978e-13,
+	-3.1974423109204508e-13}, /* L300 */
+{2.9302777730136529e+00, 9.7921670771938807e-14,
+	2.2204460492503131e-16, 8.5931262105987116e-14,
+	5.5289106626332796e-14}, /* L301 */
+{2.9487209961444791e+00, 9.8865360342870190e-14,
+	2.2204460492503131e-16, -1.5509815654013437e-13,
+	1.5654144647214707e-13}, /* L302 */
+{2.8465785768414800e+00, 9.5756735873919752e-14,
+	2.2204460492503131e-16, -1.4099832412739488e-14,
+	5.2846615972157451e-14}, /* L303 */
+{2.5691185894716448e+00, 8.6708418223224726e-14,
+	2.2204460492503131e-16, 3.1530333899354446e-14,
+	-3.7414515929867775e-14}, /* L304 */
+{2.4983992066243110e+00, 8.4598994476436928e-14,
+	2.2204460492503131e-16, 1.1768364061026659e-14,
+	1.3988810110276972e-14}, /* L305 */
+{2.9363198179032119e+00, 9.9753538762570315e-14,
+	2.2204460492503131e-16, 4.5385917246676399e-13,
+	7.8381745538536052e-13}, /* L306 */
+{2.5782156782379668e+00, 8.7874152399081140e-14,
+	2.2204460492503131e-16, 5.4622972811557702e-14,
+	3.7747582837255322e-15}, /* L307 */
+{3.2955053958770213e+00, 1.1268763699945339e-13,
+	2.2204460492503131e-16, 3.7747582837255322e-14,
+	6.6613381477509392e-14}, /* L308 */
+{2.7338609543427785e+00, 9.3786090005210099e-14,
+	2.2204460492503131e-16, -7.4384942649885488e-15,
+	-5.5733195836182858e-14}, /* L309 */
+{3.1911782728880511e+00, 1.0982881271104361e-13,
+	2.2204460492503131e-16, -1.8207657603852567e-14,
+	7.5273121069585613e-14}, /* L310 */
+{2.1286502089167438e+00, 7.3496764230185363e-14,
+	2.2204460492503131e-16, -9.1926466438962962e-14,
+	-3.2196467714129540e-15}, /* L311 */
+{3.2378304092011843e+00, 1.1215334216885253e-13,
+	2.2204460492503131e-16, 1.7652546091539989e-13,
+	-4.4408920985006262e-15}, /* L312 */
+{2.3195246087010419e+00, 8.0602191587786365e-14,
+	2.2204460492503131e-16, -6.7279515292284486e-14,
+	-4.0745185003743245e-14}, /* L313 */
+{3.9773702889525016e+00, 1.3865297798787424e-13,
+	2.2204460492503131e-16, -2.9842794901924208e-13,
+	-3.2984726061613401e-13}, /* L314 */
+{2.6254373365114159e+00, 9.1815444136500446e-14,
+	2.2204460492503131e-16, -5.9396931817445875e-14,
+	-1.4765966227514582e-14}, /* L315 */
+{3.0429662574816128e+00, 1.0675488271161271e-13,
+	2.2204460492503131e-16, 8.2822637637036678e-14,
+	-2.6090241078691179e-14}, /* L316 */
+{2.7642382364412246e+00, 9.7283292532779342e-14,
+	2.2204460492503131e-16, -8.3932860661661834e-14,
+	1.7097434579227411e-14}, /* L317 */
+{2.0049444587766967e+00, 7.0783656713757637e-14,
+	2.2204460492503131e-16, 3.3306690738754696e-15,
+	-6.7723604502134549e-15}, /* L318 */
+{2.1990934936576845e+00, 7.7882145177454731e-14,
+	2.2204460492503131e-16, 1.2434497875801753e-14,
+	8.3488771451811772e-14}, /* L319 */
+{2.8328562116367904e+00, 1.0064171718227044e-13,
+	2.2204460492503131e-16, -4.7184478546569153e-14,
+	-4.2965631052993558e-14}, /* L320 */
+{2.3009506132426520e+00, 8.2000378709423671e-14,
+	2.2204460492503131e-16, -1.4299672557172016e-13,
+	7.7937656328685989e-14}, /* L321 */
+{2.5365298224804689e+00, 9.0677465536259660e-14,
+	2.2204460492503131e-16, -2.3869795029440866e-14,
+	-1.2401191185062999e-13}, /* L322 */
+{2.7523644510519953e+00, 9.8698826889176416e-14,
+	2.2204460492503131e-16, -1.8451906669270102e-13,
+	2.9309887850104133e-14}, /* L323 */
+{2.7114615915716738e+00, 9.7533092713320002e-14,
+	2.2204460492503131e-16, -3.1452618287630685e-13,
+	-8.4598994476436928e-14}, /* L324 */
+{3.1777413409872746e+00, 1.1465828286816304e-13,
+	2.2204460492503131e-16, -1.9984014443252818e-15,
+	-1.2656542480726785e-14}, /* L325 */
+{2.6779554319104117e+00, 9.6922470049776166e-14,
+	2.2204460492503131e-16, -9.4591001698063337e-14,
+	8.5487172896137054e-14}, /* L326 */
+{2.9427059571018237e+00, 1.0683121054455569e-13,
+	2.2204460492503131e-16, 5.3290705182007514e-15,
+	-2.5535129566378600e-14}, /* L327 */
+{2.3811343024345368e+00, 8.6708418223224726e-14,
+	2.2204460492503131e-16, 3.2818192607919627e-13,
+	1.2407852523210749e-12}, /* L328 */
+{3.4149463104369420e+00, 1.2473355681663634e-13,
+	2.2204460492503131e-16, -2.5512925105886097e-13,
+	2.5934809855243657e-13}, /* L329 */
+{3.9894554976294163e+00, 1.4616086119190186e-13,
+	2.2204460492503131e-16, -7.4940054162198066e-14,
+	-3.3306690738754696e-14}, /* L330 */
+{3.5517919651051515e+00, 1.3052059433249497e-13,
+	2.2204460492503131e-16, -9.5479180117763462e-15,
+	-5.9174887212520844e-14}, /* L331 */
+{2.5734583837660527e+00, 9.4854679666411812e-14,
+	2.2204460492503131e-16, 3.1752378504279477e-14,
+	-3.2640556923979602e-14}, /* L332 */
+{3.2230227049620011e+00, 1.1915468611789493e-13,
+	2.2204460492503131e-16, -6.2794214272798854e-13,
+	-1.5784040741095851e-12}, /* L333 */
+{2.4483910726605513e+00, 9.0788487838722176e-14,
+	2.2204460492503131e-16, 3.3506530883187224e-13,
+	6.6613381477509392e-14}, /* L334 */
+{3.4418441532396629e+00, 1.2800871473928055e-13,
+	2.2204460492503131e-16, 5.9952043329758453e-14,
+	2.4424906541753444e-14}, /* L335 */
+{2.7664117340012329e+00, 1.0319523013890830e-13,
+	2.2204460492503131e-16, 1.9761969838327786e-14,
+	-4.6518344731794059e-14}, /* L336 */
+{2.7700724164584529e+00, 1.0363931934875836e-13,
+	2.2204460492503131e-16, -4.4853010194856324e-14,
+	2.9976021664879227e-14}, /* L337 */
+{3.4142538661712134e+00, 1.2811973704174306e-13,
+	2.2204460492503131e-16, -6.7945649107059580e-14,
+	-5.3290705182007514e-15}, /* L338 */
+{2.5929603639686984e+00, 9.7588603864551260e-14,
+	2.2204460492503131e-16, -5.1070259132757201e-15,
+	-1.1579626146840383e-13}, /* L339 */
+{3.1441661622755182e+00, 1.1868284133242923e-13,
+	2.2204460492503131e-16, -3.9046543776066756e-13,
+	-5.3890225615305098e-13}, /* L340 */
+{3.3284971072928826e+00, 1.2601031329495527e-13,
+	2.2204460492503131e-16, 6.9499961341534799e-14,
+	6.5503158452884236e-14}, /* L341 */
+{2.4766464023700530e+00, 9.4035890185750759e-14,
+	2.2204460492503131e-16, 1.2523315717771766e-13,
+	-3.1086244689504383e-15}, /* L342 */
+{2.5496020231715848e+00, 9.7089003503469939e-14,
+	2.2204460492503131e-16, -4.8194781498978045e-13,
+	-1.8129941992128806e-13}, /* L343 */
+{3.1846421630322994e+00, 1.2162493234768590e-13,
+	2.2204460492503131e-16, -1.1912693054227930e-13,
+	5.1514348342607263e-14}, /* L344 */
+{2.8420728393588695e+00, 1.0885736756449660e-13,
+	2.2204460492503131e-16, -1.4765966227514582e-14,
+	2.3758772726978350e-14}, /* L345 */
+{2.8743218081081521e+00, 1.1041167979897182e-13,
+	2.2204460492503131e-16, -1.1990408665951691e-14,
+	-1.3877787807814457e-14}, /* L346 */
+{3.5324752562018067e+00, 1.3608558724342856e-13,
+	2.2204460492503131e-16, -5.5511151231257827e-14,
+	-3.1308289294429414e-14}, /* L347 */
+{2.3351653424946766e+00, 9.0219498538601783e-14,
+	2.2204460492503131e-16, 1.7319479184152442e-14,
+	5.4622972811557702e-14}, /* L348 */
+{2.5845671011079387e+00, 1.0014211682118912e-13,
+	2.2204460492503131e-16, -5.3734794391857577e-14,
+	8.8817841970012523e-15}, /* L349 */
+{4.4757833481027554e+00, 1.7391643680753077e-13,
+	2.2204460492503131e-16, 7.4162898044960457e-14,
+	-1.6209256159527285e-14}, /* L350 */
+{2.3652430489624368e+00, 9.2169327725599715e-14,
+	2.2204460492503131e-16, -5.8952842607595812e-14,
+	1.6653345369377348e-14}, /* L351 */
+{3.5341454417838407e+00, 1.3811174426336947e-13,
+	2.2204460492503131e-16, 5.5511151231257827e-14,
+	2.7533531010703882e-14}, /* L352 */
+{3.5156349836156866e+00, 1.3777867735598193e-13,
+	2.2204460492503131e-16, -2.9143354396410359e-13,
+	-2.9243274468626623e-13}, /* L353 */
+{2.6426961446536787e+00, 1.0386136395368339e-13,
+	2.2204460492503131e-16, -6.6835426082434424e-14,
+	-2.0872192862952943e-13}, /* L354 */
+{3.2127256294481543e+00, 1.2662093595849910e-13,
+	2.2204460492503131e-16, 9.4146912488213275e-14,
+	4.3476333644321130e-13}, /* L355 */
+{3.6638556914563796e+00, 1.4480777688063995e-13,
+	2.2204460492503131e-16, -1.2334577803585489e-13,
+	-8.7485574340462335e-14}, /* L356 */
+{2.6947194513026353e+00, 1.0680345496894006e-13,
+	2.2204460492503131e-16, 7.2830630415410269e-14,
+	2.5757174171303632e-14}, /* L357 */
+{2.8952960717466705e+00, 1.1507461650239748e-13,
+	2.2204460492503131e-16, -8.4376949871511897e-15,
+	-3.8857805861880479e-15}, /* L358 */
+{2.8131092147355066e+00, 1.1212038242280897e-13,
+	2.2204460492503131e-16, 3.3306690738754696e-14,
+	-1.2101430968414206e-14}, /* L359 */
+{3.4507476902917014e+00, 1.3791745523406007e-13,
+	2.2204460492503131e-16, -9.6811447747313650e-14,
+	1.1768364061026659e-14}, /* L360 */
+{2.6420075257996265e+00, 1.0588752097362431e-13,
+	2.2204460492503131e-16, 1.1546319456101628e-14,
+	-3.9745984281580604e-14}, /* L361 */
+{3.9627683287668272e+00, 1.5926149288247871e-13,
+	2.2204460492503131e-16, -4.9404924595819466e-14,
+	-1.8540724511240114e-14}, /* L362 */
+{3.3154781558519222e+00, 1.3361534101363759e-13,
+	2.2204460492503131e-16, -8.1823436914874037e-14,
+	4.7517545453956700e-14}, /* L363 */
+{2.6976721202175087e+00, 1.0901696212428647e-13,
+	2.2204460492503131e-16, -3.0575542098176811e-13,
+	2.9642954757491680e-13}, /* L364 */
+{3.1774462890150366e+00, 1.2875811528090253e-13,
+	2.2204460492503131e-16, -1.7430501486614958e-14,
+	2.2737367544323206e-13}, /* L365 */
+{3.0014124327175957e+00, 1.2195799925507345e-13,
+	2.2204460492503131e-16, -9.6589403142388619e-15,
+	4.6629367034256575e-15}, /* L366 */
+{2.3844032769162014e+00, 9.7151453548605105e-14,
+	2.2204460492503131e-16, 5.3956838996782608e-14,
+	6.3948846218409017e-14}, /* L367 */
+{2.1032933238739719e+00, 8.5931262105987116e-14,
+	2.2204460492503131e-16, 2.9309887850104133e-14,
+	-7.3163697322797816e-14}, /* L368 */
+{3.4905687654446971e+00, 1.4299672557172016e-13,
+	2.2204460492503131e-16, -4.5741188614556449e-14,
+	-7.5606187976973160e-14}, /* L369 */
+{2.4143109020328741e+00, 9.9174141121594062e-14,
+	2.2204460492503131e-16, -1.0325074129013956e-14,
+	-9.9920072216264089e-16}, /* L370 */
+{2.7830618112220349e+00, 1.1463052729254741e-13,
+	2.2204460492503131e-16, 3.9523939676655573e-14,
+	-8.1046280797636427e-15}, /* L371 */
+{2.8863012567365454e+00, 1.1920325837522228e-13,
+	2.2204460492503131e-16, -9.1038288019262836e-15,
+	-2.1871393585115584e-14}, /* L372 */
+{3.5308855815872668e+00, 1.4621637234313312e-13,
+	2.2204460492503131e-16, -1.3034018309099338e-13,
+	-3.0664359940146824e-13}, /* L373 */
+{3.2834731246155977e+00, 1.3633538742396922e-13,
+	2.2204460492503131e-16, 5.8306692807263971e-12,
+	6.0407234769854767e-12}, /* L374 */
+{3.2087161779091744e+00, 1.3358758543802196e-13,
+	2.2204460492503131e-16, 2.7755575615628914e-14,
+	-2.6822988274943782e-13}, /* L375 */
+{3.0652068713280611e+00, 1.2795320358804929e-13,
+	2.2204460492503131e-16, 8.0491169285323849e-13,
+	-1.0191847366058937e-13}, /* L376 */
+{2.8080672018142567e+00, 1.1753098494438063e-13,
+	2.2204460492503131e-16, -9.3147711766050634e-14,
+	-6.7834626804597065e-14}, /* L377 */
+{2.3955809458579114e+00, 1.0053242960328390e-13,
+	2.2204460492503131e-16, 5.6399329650957952e-14,
+	-1.4210854715202004e-14}, /* L378 */
+{3.7916152337449427e+00, 1.5953904863863499e-13,
+	2.2204460492503131e-16, 1.9806378759312793e-13,
+	7.9047879353311146e-14}, /* L379 */
+{3.4263686591469731e+00, 1.4455103780619538e-13,
+	2.2204460492503131e-16, -2.7644553313166398e-14,
+	-2.4980018054066022e-14}, /* L380 */
+{2.8084422850553752e+00, 1.1879386363489175e-13,
+	2.2204460492503131e-16, -7.5495165674510645e-15,
+	-4.0523140398818214e-14}, /* L381 */
+{2.9503000230005201e+00, 1.2512213487525514e-13,
+	2.2204460492503131e-16, -2.6312285683616210e-14,
+	6.5503158452884236e-14}, /* L382 */
+{2.6947150865654810e+00, 1.1458195503522006e-13,
+	2.2204460492503131e-16, -5.0182080713057076e-14,
+	-2.3314683517128287e-14}, /* L383 */
+{3.1471762115440272e+00, 1.3417045252595017e-13,
+	2.2204460492503131e-16, -2.9176661087149114e-13,
+	1.4410694859634532e-13}, /* L384 */
+{3.0870530025517655e+00, 1.3195000647669985e-13,
+	2.2204460492503131e-16, -7.4384942649885488e-15,
+	-1.0524914273446484e-13}, /* L385 */
+{3.0201168680899886e+00, 1.2942424909567762e-13,
+	2.2204460492503131e-16, 4.4497738826976274e-13,
+	6.8389738316909643e-13}, /* L386 */
+{2.6033929192825904e+00, 1.1185496973098452e-13,
+	2.2204460492503131e-16, -7.8159700933611020e-14,
+	-2.9753977059954195e-14}, /* L387 */
+{2.3428138735867621e+00, 1.0091927293842673e-13,
+	2.2204460492503131e-16, -6.0729199446996063e-14,
+	5.3290705182007514e-14}, /* L388 */
+{3.2172653537863467e+00, 1.3894441153183834e-13,
+	2.2204460492503131e-16, -6.1173288656846125e-14,
+	-4.5519144009631418e-15}, /* L389 */
+{3.0296867078335241e+00, 1.3117978925336615e-13,
+	2.2204460492503131e-16, -3.1197266991966899e-14,
+	3.4194869158454821e-14}, /* L390 */
+{3.0224176943362226e+00, 1.3120060593507787e-13,
+	2.2204460492503131e-16, 5.2402526762307389e-14,
+	9.1926466438962962e-14}, /* L391 */
+{3.4356013734763642e+00, 1.4951798479878597e-13,
+	2.2204460492503131e-16, -1.0769163338864018e-14,
+	2.1516122217235534e-13}, /* L392 */
+{4.1081957456122611e+00, 1.7924550732573152e-13,
+	2.2204460492503131e-16, -8.4376949871511897e-15,
+	-2.9864999362416711e-14}, /* L393 */
+{2.8096810901907747e+00, 1.2290168882600483e-13,
+	2.2204460492503131e-16, 1.2789769243681803e-13,
+	-1.0513812043200232e-13}, /* L394 */
+{4.0789294548925659e+00, 1.7887427650187249e-13,
+	2.2204460492503131e-16, -2.6645352591003757e-14,
+	9.1038288019262836e-15}, /* L395 */
+{2.5404369704987446e+00, 1.1168843627729075e-13,
+	2.2204460492503131e-16, -3.9890313274781874e-13,
+	2.1183055309847987e-13}, /* L396 */
+{3.9142509898791693e+00, 1.7252171913284542e-13,
+	2.2204460492503131e-16, -4.2854608750531042e-14,
+	-6.5503158452884236e-14}, /* L397 */
+{3.6018054819236860e+00, 1.5915047058001619e-13,
+	2.2204460492503131e-16, -1.2090328738167955e-13,
+	6.9722005946459831e-14}, /* L398 */
+{3.0501648506604173e+00, 1.3511414209688155e-13,
+	2.2204460492503131e-16, 9.5257135512838431e-14,
+	1.6120438317557273e-13}, /* L399 */
+{3.1037902324932563e+00, 1.3783418850721318e-13,
+	2.2204460492503131e-16, 7.3274719625260332e-15,
+	1.0658141036401503e-14}, /* L400 */
+{2.9077683649015804e+00, 1.2945200467129325e-13,
+	2.2204460492503131e-16, 3.1086244689504383e-15,
+	1.6431300764452317e-14}, /* L401 */
+{2.7997875356778432e+00, 1.2495560142156137e-13,
+	2.2204460492503131e-16, 3.3084646133829665e-14,
+	4.2188474935755949e-15}, /* L402 */
+{3.3145477446901417e+00, 1.4829804051430528e-13,
+	2.2204460492503131e-16, -2.3092638912203256e-14,
+	-1.1568523916594131e-13}, /* L403 */
+{2.7840612091019641e+00, 1.2487233469471448e-13,
+	2.2204460492503131e-16, -1.6764367671839864e-14,
+	1.3833378886829450e-13}, /* L404 */
+{3.1605239736696809e+00, 1.4210854715202004e-13,
+	2.2204460492503131e-16, -2.6978419498391304e-14,
+	-9.9920072216264089e-15}, /* L405 */
+{3.0129597734580815e+00, 1.3580803148727227e-13,
+	2.2204460492503131e-16, -4.8738790781044372e-14,
+	2.6867397195928788e-14}, /* L406 */
+{2.4189419918830888e+00, 1.0930145677434666e-13,
+	2.2204460492503131e-16, 1.3677947663381929e-13,
+	5.4622972811557702e-14}, /* L407 */
+{3.5331219358110206e+00, 1.6003864899971632e-13,
+	2.2204460492503131e-16, 1.1324274851176597e-14,
+	-3.5527136788005009e-14}, /* L408 */
+{2.8530223234434553e+00, 1.2954914918594795e-13,
+	2.2204460492503131e-16, 1.8429702208777599e-14,
+	8.1490370007486490e-14}, /* L409 */
+{3.8695491046318975e+00, 1.7613688285678109e-13,
+	2.2204460492503131e-16, -1.5154544286133387e-13,
+	1.0480505352461478e-13}, /* L410 */
+{2.9185193223444195e+00, 1.3317125180378753e-13,
+	2.2204460492503131e-16, 2.1982415887578100e-14,
+	-2.3314683517128287e-14}, /* L411 */
+{3.2342541507519655e+00, 1.4793721803130211e-13,
+	2.2204460492503131e-16, -8.3155704544424225e-14,
+	8.6153306710912148e-14}, /* L412 */
+{3.4207348076949251e+00, 1.5684675780391899e-13,
+	2.2204460492503131e-16, -8.7707618945387367e-15,
+	2.3980817331903381e-14}, /* L413 */
+{2.8460416395875563e+00, 1.3081202787645907e-13,
+	2.2204460492503131e-16, -1.1868284133242923e-13,
+	-8.6708418223224726e-14}, /* L414 */
+{2.7798457925364786e+00, 1.2807810367831962e-13,
+	2.2204460492503131e-16, -3.2640556923979602e-14,
+	9.6367358537463588e-14}, /* L415 */
+{2.7470213946415964e+00, 1.2687073613903976e-13,
+	2.2204460492503131e-16, -6.2394533983933798e-14,
+	-2.5424107263916085e-14}, /* L416 */
+{2.6235262234220178e+00, 1.2145839889399213e-13,
+	2.2204460492503131e-16, -8.7818641247849882e-14,
+	-1.6586731987899839e-13}, /* L417 */
+{2.7458395881874389e+00, 1.2742584765135234e-13,
+	2.2204460492503131e-16, 3.7547742692822794e-13,
+	3.9968028886505635e-14}, /* L418 */
+{3.5477665371019338e+00, 1.6503465261052952e-13,
+	2.2204460492503131e-16, -2.0539125955565396e-14,
+	-2.5646151868841116e-14}, /* L419 */
+{4.1205750181967931e+00, 1.9213797219919115e-13,
+	2.2204460492503131e-16, 6.1728400169158704e-14,
+	4.0190073491430667e-14}, /* L420 */
+{3.4008637928984364e+00, 1.5895618155070679e-13,
+	2.2204460492503131e-16, -4.8294701571194310e-14,
+	-2.2981616609740740e-14}, /* L421 */
+{3.8163871133290233e+00, 1.7880141811588146e-13,
+	2.2204460492503131e-16, 9.3924867883288243e-14,
+	-7.7937656328685989e-14}, /* L422 */
+{3.4001506354855526e+00, 1.5967782651671314e-13,
+	2.2204460492503131e-16, -1.7641443861293737e-13,
+	4.4186876380081230e-14}, /* L423 */
+{3.1321053471373599e+00, 1.4743761767022079e-13,
+	2.2204460492503131e-16, -2.0161650127192843e-13,
+	-1.0125233984581428e-13}, /* L424 */
+{3.9518023999635195e+00, 1.8646195698579504e-13,
+	2.2204460492503131e-16, 2.8421709430404007e-14,
+	-1.1213252548714081e-14}, /* L425 */
+{3.3518512203012865e+00, 1.5852597012866454e-13,
+	2.2204460492503131e-16, -1.4876988529977098e-14,
+	-4.6074255521943996e-14}, /* L426 */
+{4.1159643184800112e+00, 1.9512169657787126e-13,
+	2.2204460492503131e-16, 3.5971225997855072e-14,
+	-8.3155704544424225e-14}, /* L427 */
+{3.7219981189256077e+00, 1.7685852782278744e-13,
+	2.2204460492503131e-16, 5.3290705182007514e-15,
+	-1.6397994073713562e-13}, /* L428 */
+{3.4720610900995896e+00, 1.6536771951791707e-13,
+	2.2204460492503131e-16, -1.0251799409388695e-12,
+	-1.5043521983670871e-13}, /* L429 */
+{2.9471211342319137e+00, 1.4069301279562296e-13,
+	2.2204460492503131e-16, -1.3877787807814457e-14,
+	7.5273121069585613e-14}, /* L430 */
+{2.8074513726880035e+00, 1.3433698597964394e-13,
+	2.2204460492503131e-16, 2.9909408283401717e-12,
+	2.9931612743894220e-12}, /* L431 */
+{3.4016528168757301e+00, 1.6314727346866675e-13,
+	2.2204460492503131e-16, 4.0190073491430667e-14,
+	-1.1435297153639112e-14}, /* L432 */
+{3.2355966824424964e+00, 1.5554224574998443e-13,
+	2.2204460492503131e-16, 4.2010839251815923e-13,
+	-2.5479618415147343e-13}, /* L433 */
+{3.3554467523147924e+00, 1.6167622796103842e-13,
+	2.2204460492503131e-16, -3.4083846855992306e-14,
+	-1.8318679906315083e-14}, /* L434 */
+{3.5448613987000157e+00, 1.7119639039719914e-13,
+	2.2204460492503131e-16, 7.7271522513910895e-14,
+	-6.8833827526759706e-14}, /* L435 */
+{3.7787057677774731e+00, 1.8290924330699454e-13,
+	2.2204460492503131e-16, -1.4244161405940758e-13,
+	-1.6431300764452317e-14}, /* L436 */
+{2.9176479671478339e+00, 1.4155343563970746e-13,
+	2.2204460492503131e-16, 4.5297099404706387e-14,
+	1.0436096431476471e-14}, /* L437 */
+{3.0650977294400357e+00, 1.4904744105592727e-13,
+	2.2204460492503131e-16, 2.6245672302138701e-13,
+	1.1257661469699087e-13}, /* L438 */
+{3.3363074496354850e+00, 1.6260603974416199e-13,
+	2.2204460492503131e-16, -1.8873791418627661e-14,
+	1.4432899320127035e-14}, /* L439 */
+{3.5079880062308026e+00, 1.7136292385089291e-13,
+	2.2204460492503131e-16, 3.4261482539932331e-13,
+	-6.2172489379008766e-15}, /* L440 */
+{4.0845060800503443e+00, 1.9997892231060632e-13,
+	2.2204460492503131e-16, -5.0515147620444623e-14,
+	9.9698027611339057e-14}, /* L441 */
+{3.3948287615052553e+00, 1.6658896484500474e-13,
+	2.2204460492503131e-16, -2.1982415887578100e-14,
+	2.2870594307278225e-14}, /* L442 */
+{3.2754262763595272e+00, 1.6109336087311021e-13,
+	2.2204460492503131e-16, -3.4416913763379853e-15,
+	-5.1958437552457326e-14}, /* L443 */
+{2.9069815569300879e+00, 1.4329509800958817e-13,
+	2.2204460492503131e-16, -3.6082248300317588e-14,
+	1.3788969965844444e-13}, /* L444 */
+{2.7831726145768565e+00, 1.3750112159982564e-13,
+	2.2204460492503131e-16, -6.0174087934683484e-14,
+	-6.1173288656846125e-14}, /* L445 */
+{4.1408746993324366e+00, 2.0503737596655469e-13,
+	2.2204460492503131e-16, -4.1633363423443370e-14,
+	-8.5043083686286991e-14}, /* L446 */
+{3.5342898637817606e+00, 1.7539442120906301e-13,
+	2.2204460492503131e-16, 3.2418512319054571e-13,
+	-3.8113956435381624e-13}, /* L447 */
+{3.0669935400880073e+00, 1.5254464358349651e-13,
+	2.2204460492503131e-16, -2.0095036745715333e-14,
+	2.5535129566378600e-14}, /* L448 */
+{3.4465807592355593e+00, 1.7180701306074297e-13,
+	2.2204460492503131e-16, 8.0158102377936302e-14,
+	1.1635137298071641e-13}, /* L449 */
+{3.7383689915903049e+00, 1.8676726831756696e-13,
+	2.2204460492503131e-16, 2.1316282072803006e-14,
+	5.5733195836182858e-14}, /* L450 */
+{2.5964770945342641e+00, 1.3000711618360583e-13,
+	2.2204460492503131e-16, -6.3504757008558954e-14,
+	1.0436096431476471e-14}, /* L451 */
+{3.2686982137223382e+00, 1.6402851299446297e-13,
+	2.2204460492503131e-16, -6.3171690101171407e-14,
+	7.3496764230185363e-14}, /* L452 */
+{3.1611780556178743e+00, 1.5898393712632242e-13,
+	2.2204460492503131e-16, 3.5527136788005009e-14,
+	-1.3988810110276972e-14}, /* L453 */
+{3.5870386200857056e+00, 1.8079981956020674e-13,
+	2.2204460492503131e-16, -1.1768364061026659e-14,
+	-5.5733195836182858e-14}, /* L454 */
+{4.3005904715297234e+00, 2.1724289034352751e-13,
+	2.2204460492503131e-16, 8.2156503822261584e-15,
+	-8.9594998087250133e-14}, /* L455 */
+{2.9528790430907952e+00, 1.4949153026577733e-13,
+	2.2204460492503131e-16, -7.2719608112947753e-14,
+	-5.9396931817445875e-14}, /* L456 */
+{3.6603193776794329e+00, 1.8571255644417306e-13,
+	2.2204460492503131e-16, -7.6605388699135801e-15,
+	3.4194869158454821e-14}, /* L457 */
+{4.7243900415343143e+00, 2.4022450695326825e-13,
+	2.2204460492503131e-16, -1.3855583347321954e-13,
+	-1.5176748746625890e-13}, /* L458 */
+{3.5926268606948866e+00, 1.8307577676068831e-13,
+	2.2204460492503131e-16, -2.7644553313166398e-14,
+	3.7969627442180354e-14}, /* L459 */
+{4.4978689896627992e+00, 2.2970514379494489e-13,
+	2.2204460492503131e-16, -3.0420110874729289e-13,
+	5.8086868648388190e-13}, /* L460 */
+{2.7896144611003399e+00, 1.4277468096679513e-13,
+	2.2204460492503131e-16, 6.4392935428259079e-14,
+	2.8199664825478976e-14}, /* L461 */
+{2.6002683090286216e+00, 1.3337247972700084e-13,
+	2.2204460492503131e-16, -5.7287508070658077e-14,
+	-2.5490720645393594e-13}, /* L462 */
+{4.2818982940877479e+00, 2.2010171463193728e-13,
+	2.2204460492503131e-16, 1.0658141036401503e-13,
+	4.6629367034256575e-15}, /* L463 */
+{2.6984362992440358e+00, 1.3900686157697351e-13,
+	2.2204460492503131e-16, -9.1393559387142886e-13,
+	-8.1934459217336553e-13}, /* L464 */
+{2.8634681732717886e+00, 1.4782619572883959e-13,
+	2.2204460492503131e-16, -2.4424906541753444e-15,
+	1.3322676295501878e-14}, /* L465 */
+{4.2065851886922889e+00, 2.1763146840214631e-13,
+	2.2204460492503131e-16, 5.8841820305133297e-14,
+	1.2656542480726785e-14}, /* L466 */
+{3.8931045860150277e+00, 2.0184548477075737e-13,
+	2.2204460492503131e-16, 7.0610184366159956e-14,
+	-5.3845816694320092e-14}, /* L467 */
+{4.0983296900140092e+00, 2.1294077612310502e-13,
+	2.2204460492503131e-16, -1.8496315590255108e-13,
+	1.6742163211347361e-13}, /* L468 */
+{2.7106655976936054e+00, 1.4114154723438022e-13,
+	2.2204460492503131e-16, 1.1612932837579137e-13,
+	2.9753977059954195e-14}, /* L469 */
+{2.8872615825615484e+00, 1.5065726444163374e-13,
+	2.2204460492503131e-16, -5.6954441163270531e-14,
+	1.2612133559741778e-13}, /* L470 */
+{4.3949463795672923e+00, 2.2981616609740740e-13,
+	2.2204460492503131e-16, 1.5809575870662229e-12,
+	-6.8556271770603416e-13}, /* L471 */
+{3.3652333703068122e+00, 1.7634504967389830e-13,
+	2.2204460492503131e-16, -2.0983215165415459e-14,
+	-9.9920072216264089e-16}, /* L472 */
+{3.1363935527024820e+00, 1.6470158570314197e-13,
+	2.2204460492503131e-16, -4.2832404290038539e-13,
+	2.5934809855243657e-13}, /* L473 */
+{3.5095271463458029e+00, 1.8468560014639479e-13,
+	2.2204460492503131e-16, 3.4194869158454821e-14,
+	3.3084646133829665e-14}, /* L474 */
+{3.1543064029916388e+00, 1.6634263411141603e-13,
+	2.2204460492503131e-16, -1.1335377081422848e-13,
+	-1.5565326805244695e-13}, /* L475 */
+{3.2379510530979623e+00, 1.7111312367035225e-13,
+	2.2204460492503131e-16, 7.8581585682968580e-13,
+	-1.4657164371101317e-12}, /* L476 */
+{3.4748759122362918e+00, 1.8401946633161970e-13,
+	2.2204460492503131e-16, 3.9745984281580604e-14,
+	5.0626169922907138e-14}, /* L477 */
+{3.3938608240648978e+00, 1.8010593016981602e-13,
+	2.2204460492503131e-16, -2.4757973449140991e-14,
+	-1.3988810110276972e-14}, /* L478 */
+{2.8485396967577867e+00, 1.5148299281619870e-13,
+	2.2204460492503131e-16, -7.2719608112947753e-14,
+	-4.6851411639181606e-14}, /* L479 */
+{3.2906563877714197e+00, 1.7535972673954348e-13,
+	2.2204460492503131e-16, -2.6090241078691179e-14,
+	4.2188474935755949e-14}, /* L480 */
+{4.2973382872557266e+00, 2.2948309919001986e-13,
+	2.2204460492503131e-16, 2.1738166822160565e-13,
+	-1.9984014443252818e-13}, /* L481 */
+{4.7407091194431139e+00, 2.5368596112684827e-13,
+	2.2204460492503131e-16, -1.7585932710062480e-13,
+	-2.2382096176443156e-13}, /* L482 */
+{3.9701465647087679e+00, 2.1289220386577767e-13,
+	2.2204460492503131e-16, -2.5535129566378600e-14,
+	-1.5099033134902129e-14}, /* L483 */
+{4.2218894438472043e+00, 2.2686019729434292e-13,
+	2.2204460492503131e-16, -9.9698027611339057e-14,
+	-6.6280314570121845e-14}, /* L484 */
+{4.2856078883776236e+00, 2.3075985566833879e-13,
+	2.2204460492503131e-16, 2.6645352591003757e-15,
+	5.2180482157382357e-14}, /* L485 */
+{5.0041629583105456e+00, 2.7000623958883807e-13,
+	2.2204460492503131e-16, -3.5638159090467525e-14,
+	1.1102230246251565e-15}, /* L486 */
+{3.9761672899342675e+00, 2.1498081093085375e-13,
+	2.2204460492503131e-16, 3.6415315207705135e-14,
+	1.3988810110276972e-14}, /* L487 */
+{3.5481895819436158e+00, 1.9223511671384585e-13,
+	2.2204460492503131e-16, 2.0228263508670352e-13,
+	-2.6578739209526248e-13}, /* L488 */
+{3.8568875044854569e+00, 2.0938806244430452e-13,
+	2.2204460492503131e-16, 1.7164047960704920e-13,
+	2.6689761511988763e-13}, /* L489 */
+{3.4296245500450815e+00, 1.8657297928825756e-13,
+	2.2204460492503131e-16, 3.0020430585864233e-13,
+	3.8746783559417963e-13}, /* L490 */
+{3.9857813990434323e+00, 2.1727064591914313e-13,
+	2.2204460492503131e-16, 9.9920072216264089e-15,
+	-4.0634162701280729e-14}, /* L491 */
+{3.5584689016346811e+00, 1.9437229603624928e-13,
+	2.2204460492503131e-16, 5.7531757136075612e-13,
+	-2.8688162956314045e-13}, /* L492 */
+{4.4315838526046063e+00, 2.4255597530498108e-13,
+	2.2204460492503131e-16, -3.0531133177191805e-14,
+	4.2188474935755949e-14}, /* L493 */
+{4.0223055730475217e+00, 2.2060131499301860e-13,
+	2.2204460492503131e-16, -1.9417800700693988e-13,
+	1.8274270985330077e-13}, /* L494 */
+{4.2937278242070258e+00, 2.3596402609626921e-13,
+	2.2204460492503131e-16, 4.1966430330830917e-14,
+	-5.9063864910058328e-14}, /* L495 */
+{3.7994314019880351e+00, 2.0922152899061075e-13,
+	2.2204460492503131e-16, 1.1990408665951691e-14,
+	3.5305092183079978e-14}, /* L496 */
+{3.9527540009447519e+00, 2.1810331318761200e-13,
+	2.2204460492503131e-16, -6.8833827526759706e-14,
+	2.2204460492503131e-16}, /* L497 */
+{3.7806585515930990e+00, 2.0902723996130135e-13,
+	2.2204460492503131e-16, -9.9809049913801573e-14,
+	-4.4408920985006262e-15}, /* L498 */
+{4.0491368188907284e+00, 2.2432056212551288e-13,
+	2.2204460492503131e-16, 4.1522341120980855e-14,
+	1.7097434579227411e-14}, /* L499 */
+{3.6490348061458717e+00, 2.0256019084285981e-13,
+	2.2204460492503131e-16, -1.2634338020234281e-13,
+	9.2814644858663087e-14}, /* L500 */
+{3.7470417290047706e+00, 2.0841661729775751e-13,
+	2.2204460492503131e-16, -1.8318679906315083e-13,
+	1.1390888232654106e-13}, /* L501 */
+{3.7627350938529784e+00, 2.0970725156388426e-13,
+	2.2204460492503131e-16, 5.3290705182007514e-14,
+	5.1114668053742207e-13}, /* L502 */
+{3.8201159608551989e+00, 2.1332935418172383e-13,
+	2.2204460492503131e-16, -4.3942627314663696e-13,
+	-1.6875389974302379e-14}, /* L503 */
+{3.1032042029420688e+00, 1.7363888105137448e-13,
+	2.2204460492503131e-16, 2.8865798640254070e-15,
+	1.9984014443252818e-14}, /* L504 */
+{3.4349337540531777e+00, 1.9258206140904122e-13,
+	2.2204460492503131e-16, 2.4646951146678475e-14,
+	7.4384942649885488e-14}, /* L505 */
+{4.4323545307677756e+00, 2.4899526884780698e-13,
+	2.2204460492503131e-16, -4.5885517607757720e-13,
+	-2.7644553313166398e-14}, /* L506 */
+{3.6381017630030588e+00, 2.0478063689211012e-13,
+	2.2204460492503131e-16, 7.0832228971084987e-13,
+	3.2152058793144533e-13}, /* L507 */
+{4.3248444019275958e+00, 2.4391599851014689e-13,
+	2.2204460492503131e-16, 1.1368683772161603e-13,
+	-4.7928327973068008e-13}, /* L508 */
+{3.7426683122308577e+00, 2.1149748619109232e-13,
+	2.2204460492503131e-16, 1.0769163338864018e-13,
+	-1.8007817459420039e-13}, /* L509 */
+{4.0175628311364857e+00, 2.2747775885179067e-13,
+	2.2204460492503131e-16, 2.7289281945286348e-13,
+	2.2204460492503131e-14}, /* L510 */
+{3.9584526303127823e+00, 2.2457036230605354e-13,
+	2.2204460492503131e-16, 1.5321077739827160e-14,
+	3.8191672047105385e-14}, /* L511 */
+{3.4482750787088032e+00, 1.9600987499757139e-13,
+	2.2204460492503131e-16, -1.0569323194431490e-13,
+	3.0486724256206799e-13}, /* L512 */
+{3.6130948921851922e+00, 2.0577983761427276e-13,
+	2.2204460492503131e-16, 4.8183679268731794e-14,
+	-7.0832228971084987e-14}, /* L513 */
+{4.5914834843654369e+00, 2.6201263381153694e-13,
+	2.2204460492503131e-16, 1.1102230246251565e-14,
+	-6.6613381477509392e-14}, /* L514 */
+{3.7922691820898811e+00, 2.1682655670929307e-13,
+	2.2204460492503131e-16, 2.4424906541753444e-14,
+	-1.8762769116165146e-14}, /* L515 */
+{4.7948616270350248e+00, 2.7468305408007154e-13,
+	2.2204460492503131e-16, -5.1958437552457326e-14,
+	-2.2204460492503131e-16}, /* L516 */
+{3.3007789020518277e+00, 1.8945955915228296e-13,
+	2.2204460492503131e-16, 5.1070259132757201e-15,
+	6.1950444774083735e-14}, /* L517 */
+{3.5608164287359032e+00, 2.0478063689211012e-13,
+	2.2204460492503131e-16, 2.2604140781368187e-13,
+	1.3322676295501878e-15}, /* L518 */
+{4.2230317108763122e+00, 2.4333313142221868e-13,
+	2.2204460492503131e-16, 4.6185277824406512e-14,
+	-2.9976021664879227e-15}, /* L519 */
+{4.2031316313108409e+00, 2.4265311981963578e-13,
+	2.2204460492503131e-16, 2.1094237467877974e-14,
+	1.0014211682118912e-13}, /* L520 */
+{4.0969354464748733e+00, 2.3697710460623966e-13,
+	2.2204460492503131e-16, -6.6946448384896939e-13,
+	2.5091040356528538e-13}, /* L521 */
+{3.2538365512224146e+00, 1.8857138073258284e-13,
+	2.2204460492503131e-16, -3.3395508580724709e-13,
+	-2.6123547769429933e-13}, /* L522 */
+{4.0798343526533376e+00, 2.3689383787939278e-13,
+	2.2204460492503131e-16, 2.2870594307278225e-13,
+	3.1419311596891930e-13}, /* L523 */
+{4.2576403050934264e+00, 2.4769075679387242e-13,
+	2.2204460492503131e-16, 2.5801583092288638e-13,
+	-1.1635137298071641e-13}, /* L524 */
+{3.6419105077699592e+00, 2.1227464230832993e-13,
+	2.2204460492503131e-16, -3.4761082901013651e-13,
+	-2.5857094243519896e-13}, /* L525 */
+{3.8193976608706248e+00, 2.2304380564719395e-13,
+	2.2204460492503131e-16, -8.4598994476436928e-14,
+	-1.2767564783189300e-14}, /* L526 */
+{3.7707602185948801e+00, 2.2062213167473033e-13,
+	2.2204460492503131e-16, -5.6010751592339147e-13,
+	-3.4594549447319878e-13}, /* L527 */
+{2.6875042400933435e+00, 1.5754064719430971e-13,
+	2.2204460492503131e-16, -1.3000711618360583e-13,
+	-1.3233858453531866e-13}, /* L528 */
+{3.4248636264941545e+00, 2.0114465648646274e-13,
+	2.2204460492503131e-16, 1.1990408665951691e-14,
+	1.6808776592824870e-13}, /* L529 */
+{4.7217055626738080e+00, 2.7783331191244542e-13,
+	2.2204460492503131e-16, 2.6112445539183682e-13,
+	4.9049653227939416e-13}, /* L530 */
+{3.9180852776255568e+00, 2.3098190027326382e-13,
+	2.2204460492503131e-16, 1.9537704787353505e-12,
+	1.4488410471358293e-12}, /* L531 */
+{4.4924882908376471e+00, 2.6534330288541241e-13,
+	2.2204460492503131e-16, 2.8865798640254070e-14,
+	-2.1316282072803006e-14}, /* L532 */
+{4.1414523595111215e+00, 2.4506958962167147e-13,
+	2.2204460492503131e-16, -5.2724491439448684e-13,
+	-1.3111733920823099e-13}, /* L533 */
+{4.1638642472613547e+00, 2.4685808952540356e-13,
+	2.2204460492503131e-16, 5.0404125317982107e-14,
+	-1.0758061108617767e-13}, /* L534 */
+{4.0196325100246018e+00, 2.3875346144563991e-13,
+	2.2204460492503131e-16, 3.1397107136399427e-13,
+	4.7517545453956700e-14}, /* L535 */
+{3.3936620706212892e+00, 2.0194956817931597e-13,
+	2.2204460492503131e-16, 5.3290705182007514e-15,
+	-2.0095036745715333e-14}, /* L536 */
+{5.1992633239527803e+00, 3.0997426847534371e-13,
+	2.2204460492503131e-16, -3.4372504842394846e-13,
+	4.6740389336719090e-13}, /* L537 */
+{4.0845789349757995e+00, 2.4397150966137815e-13,
+	2.2204460492503131e-16, 1.7985612998927536e-14,
+	-8.0602191587786365e-14}, /* L538 */
+{4.2013053297279059e+00, 2.5141000392636670e-13,
+	2.2204460492503131e-16, 1.9317880628477724e-14,
+	-2.8643754035329039e-14}, /* L539 */
+{2.8611156251133827e+00, 1.7152945730458669e-13,
+	2.2204460492503131e-16, 7.2164496600635175e-14,
+	2.8643754035329039e-14}, /* L540 */
+{3.7865124435089976e+00, 2.2742918659446332e-13,
+	2.2204460492503131e-16, 4.6629367034256575e-15,
+	5.9952043329758453e-15}, /* L541 */
+{3.8708548155620677e+00, 2.3292479056635784e-13,
+	2.2204460492503131e-16, -1.6209256159527285e-14,
+	-2.4980018054066022e-14}, /* L542 */
+{4.0577872491350524e+00, 2.4462376568834543e-13,
+	2.2204460492503131e-16, 8.3577589293781784e-13,
+	-8.9217522258877580e-13}, /* L543 */
+{4.6378749642641965e+00, 2.8010926911292700e-13,
+	2.2204460492503131e-16, 5.8997251528580819e-13,
+	-3.4339198151656092e-13}, /* L544 */
+{4.3266123307146982e+00, 2.6179058920661191e-13,
+	2.2204460492503131e-16, -1.3322676295501878e-14,
+	4.9960036108132044e-14}, /* L545 */
+{3.5796759773510858e+00, 2.1699309016298685e-13,
+	2.2204460492503131e-16, 4.3298697960381105e-14,
+	5.5733195836182858e-14}, /* L546 */
+{5.1325492311101639e+00, 3.1169511416351270e-13,
+	2.2204460492503131e-16, 4.2810199829546036e-13,
+	1.1435297153639112e-13}, /* L547 */
+{3.7408818144226443e+00, 2.2759572004815709e-13,
+	2.2204460492503131e-16, -1.2267964422107980e-13,
+	3.4283687000424834e-13}, /* L548 */
+{4.3528074139020729e+00, 2.6530860841589288e-13,
+	2.2204460492503131e-16, 1.7474910407599964e-13,
+	-2.0217161278424101e-13}, /* L549 */
+{4.9263714087347372e+00, 3.0081492852218616e-13,
+	2.2204460492503131e-16, 1.0147438445073931e-13,
+	1.1568523916594131e-13}, /* L550 */
+{3.6824014540338030e+00, 2.2526425169644426e-13,
+	2.2204460492503131e-16, -6.3504757008558954e-14,
+	7.6827433304060833e-14}, /* L551 */
+{4.2056225772699012e+00, 2.5773827516673009e-13,
+	2.2204460492503131e-16, -4.9849013805669529e-14,
+	5.9952043329758453e-14}, /* L552 */
+{3.5741466877700083e+00, 2.1943558081716219e-13,
+	2.2204460492503131e-16, -4.3376413572104866e-13,
+	-5.0648374383399641e-13}, /* L553 */
+{5.1525352050029385e+00, 3.1691316237925093e-13,
+	2.2204460492503131e-16, -5.5511151231257827e-16,
+	-6.6280314570121845e-14}, /* L554 */
+{3.6936995212701897e+00, 2.2759572004815709e-13,
+	2.2204460492503131e-16, -4.0301095793893182e-14,
+	3.3528735343679728e-14}, /* L555 */
+{4.3682622875204240e+00, 2.6964541710583489e-13,
+	2.2204460492503131e-16, 4.7073456244106637e-14,
+	-6.9722005946459831e-14}, /* L556 */
+{4.1059310740014645e+00, 2.5390800573177330e-13,
+	2.2204460492503131e-16, 3.6637359812630166e-13,
+	-4.4975134727565091e-13}, /* L557 */
+{4.7016203209999583e+00, 2.9126701051040982e-13,
+	2.2204460492503131e-16, 2.6534330288541241e-13,
+	-2.7255975254547593e-13}, /* L558 */
+{5.0485600671172648e+00, 3.1332055006050297e-13,
+	2.2204460492503131e-16, 8.1490370007486490e-14,
+	-4.2521541843143495e-14}, /* L559 */
+{3.5267912785288869e+00, 2.1926904736346842e-13,
+	2.2204460492503131e-16, -2.1027624086400465e-13,
+	-2.7866597918091429e-14}, /* L560 */
+{4.4986701991871820e+00, 2.8019253583977388e-13,
+	2.2204460492503131e-16, 1.1679546219056647e-13,
+	-1.6986412276764895e-13}, /* L561 */
+{3.5315892017067032e+00, 2.2035151481247794e-13,
+	2.2204460492503131e-16, -1.1635137298071641e-13,
+	1.9340085088970227e-13}, /* L562 */
+{4.0519602116335465e+00, 2.5326962749261384e-13,
+	2.2204460492503131e-16, 4.1300296516055823e-14,
+	-2.0428103653102880e-14}, /* L563 */
+{4.5077365001846319e+00, 2.8225859149966226e-13,
+	2.2204460492503131e-16, -1.2645440250480533e-13,
+	-1.5198953207118393e-13}, /* L564 */
+{4.5657151679584773e+00, 2.8639590698986694e-13,
+	2.2204460492503131e-16, -1.3622436512150671e-13,
+	-3.3761882178851010e-13}, /* L565 */
+{3.4682033516461410e+00, 2.1793677973391823e-13,
+	2.2204460492503131e-16, -1.9362289549462730e-13,
+	-6.3016258877723885e-13}, /* L566 */
+{3.6383434827446650e+00, 2.2903207108626589e-13,
+	2.2204460492503131e-16, 3.8857805861880479e-14,
+	2.6201263381153694e-14}, /* L567 */
+{3.3292306046620355e+00, 2.0994317395661710e-13,
+	2.2204460492503131e-16, 1.2767564783189300e-13,
+	1.7719159473017498e-13}, /* L568 */
+{4.2987765537377243e+00, 2.7156055182331329e-13,
+	2.2204460492503131e-16, -1.6486811915683575e-13,
+	8.9706020389712648e-14}, /* L569 */
+{3.9824624235088586e+00, 2.5202062658991053e-13,
+	2.2204460492503131e-16, -1.8862689188381410e-13,
+	-9.1038288019262836e-15}, /* L570 */
+{4.6795170151308154e+00, 2.9665159217984183e-13,
+	2.2204460492503131e-16, -1.6298074001497298e-13,
+	-1.6020518245341009e-13}, /* L571 */
+{4.3138179947530322e+00, 2.7394753132625738e-13,
+	2.2204460492503131e-16, 1.3322676295501878e-14,
+	5.2846615972157451e-14}, /* L572 */
+{4.7460807863420671e+00, 3.0192515154681132e-13,
+	2.2204460492503131e-16, 1.2829737272568309e-12,
+	2.4802382370125997e-13}, /* L573 */
+{3.8571489425866452e+00, 2.4580337765200966e-13,
+	2.2204460492503131e-16, -3.1641356201816961e-14,
+	-4.1466829969749597e-13}, /* L574 */
+{4.0264737439010414e+00, 2.5704091632938741e-13,
+	2.2204460492503131e-16, 6.9944050551384862e-14,
+	3.2196467714129540e-14}, /* L575 */
+{4.9314313914632564e+00, 3.1535885014477572e-13,
+	2.2204460492503131e-16, -2.9420910152566648e-14,
+	-6.5503158452884236e-15}, /* L576 */
+{3.8318951270626589e+00, 2.4547031074462211e-13,
+	2.2204460492503131e-16, -1.3611334281904419e-13,
+	-2.6900703886667543e-13}, /* L577 */
+{4.6911838718611856e+00, 3.0103697312711120e-13,
+	2.2204460492503131e-16, 2.5763835509451383e-12,
+	1.4515055823949297e-12}, /* L578 */
+{4.9956900924434926e+00, 3.2113200987282653e-13,
+	2.2204460492503131e-16, -5.8508753397745750e-14,
+	-7.5384143372048129e-14}, /* L579 */
+{3.4931089593791089e+00, 2.2493118478905672e-13,
+	2.2204460492503131e-16, 1.2168044349891716e-13,
+	-1.8984813721090177e-14}, /* L580 */
+{4.2082682573108157e+00, 2.7144952952085077e-13,
+	2.2204460492503131e-16, 2.7355895326763857e-13,
+	-3.6737279884846430e-13}, /* L581 */
+{4.7281002430629755e+00, 3.0550562080122745e-13,
+	2.2204460492503131e-16, -3.5527136788005009e-15,
+	9.5479180117763462e-15}, /* L582 */
+{4.1320819909077322e+00, 2.6745272663220021e-13,
+	2.2204460492503131e-16, -6.5503158452884236e-13,
+	-4.9871218266162032e-13}, /* L583 */
+{4.4422159126112470e+00, 2.8801960816338124e-13,
+	2.2204460492503131e-16, 7.9625195326116227e-13,
+	1.3131717935266352e-12}, /* L584 */
+{4.9991531863442376e+00, 3.2468472355162703e-13,
+	2.2204460492503131e-16, -4.0079051188968151e-14,
+	9.6811447747313650e-14}, /* L585 */
+{5.7367837949917355e+00, 3.7322922530336200e-13,
+	2.2204460492503131e-16, 1.8629542353210127e-13,
+	-1.7652546091539989e-14}, /* L586 */
+{4.6771794405476221e+00, 3.0481173141083673e-13,
+	2.2204460492503131e-16, 6.8833827526759706e-15,
+	5.2180482157382357e-14}, /* L587 */
+{4.8469464225722128e+00, 3.1641356201816961e-13,
+	2.2204460492503131e-16, 2.7755575615628914e-14,
+	2.4202861936828413e-14}, /* L588 */
+{3.7822640318199698e+00, 2.4732993431086925e-13,
+	2.2204460492503131e-16, 3.7081449022480228e-13,
+	-4.4630965589931293e-14}, /* L589 */
+{4.7262786431246555e+00, 3.0958569041672490e-13,
+	2.2204460492503131e-16, -5.7176485768195562e-14,
+	2.2426505097428162e-14}, /* L590 */
+{5.2368948951128393e+00, 3.4361402612148595e-13,
+	2.2204460492503131e-16, -3.9968028886505635e-15,
+	-2.6534330288541241e-14}, /* L591 */
+{5.3674071168447686e+00, 3.5277336607464349e-13,
+	2.2204460492503131e-16, 1.2878587085651816e-14,
+	5.5733195836182858e-14}, /* L592 */
+{3.8265237437090223e+00, 2.5192348207525583e-13,
+	2.2204460492503131e-16, -8.8151708155237429e-14,
+	7.3274719625260332e-14}, /* L593 */
+{4.3501752134710729e+00, 2.8688162956314045e-13,
+	2.2204460492503131e-16, -4.9626969200744497e-14,
+	-4.8849813083506888e-15}, /* L594 */
+{4.7840411612590721e+00, 3.1602498395955081e-13,
+	2.2204460492503131e-16, 1.8363088827300089e-13,
+	2.8155255904493970e-13}, /* L595 */
+{5.3028607153457576e+00, 3.5088598693278072e-13,
+	2.2204460492503131e-16, 3.6237679523765109e-13,
+	-6.1373128801278654e-13}, /* L596 */
+{4.3157522026187944e+00, 2.8604896229467158e-13,
+	2.2204460492503131e-16, 1.0604850331219495e-12,
+	4.8694381860059366e-13}, /* L597 */
+{4.9682352631687854e+00, 3.2984726061613401e-13,
+	2.2204460492503131e-16, -8.7041485130612273e-14,
+	1.7741363933510002e-13}, /* L598 */
+{3.8572681891448370e+00, 2.5651702983964242e-13,
+	2.2204460492503131e-16, 1.7985612998927536e-14,
+	1.8363088827300089e-13}, /* L599 */
+{4.7225074506925866e+00, 3.1458169402753811e-13,
+	2.2204460492503131e-16, 3.7112535267169733e-12,
+	4.2388315080188477e-13}, /* L600 */
+{6.0170644016469739e+00, 4.0148440128007223e-13,
+	2.2204460492503131e-16, -1.2723155862204294e-13,
+	3.3750779948604759e-14}, /* L601 */
+{4.7383795687956880e+00, 3.1669111777432590e-13,
+	2.2204460492503131e-16, 5.6177285046032921e-14,
+	-5.5966342671354141e-13}, /* L602 */
+{3.2073019091364419e+00, 2.1471713296250527e-13,
+	2.2204460492503131e-16, 3.5791369867865797e-12,
+	-8.1187279121763822e-12}, /* L603 */
+{3.9147412756285060e+00, 2.6251223417261826e-13,
+	2.2204460492503131e-16, 2.5721647034515627e-12,
+	-1.8585133432225120e-13}, /* L604 */
+{4.1876099126076411e+00, 2.8127500328878341e-13,
+	2.2204460492503131e-16, -1.4432899320127035e-14,
+	-6.4614980033184111e-14}, /* L605 */
+{4.1939010061472404e+00, 2.8216318170848353e-13,
+	2.2204460492503131e-16, -3.3536506904852104e-12,
+	2.5079938126282286e-12}, /* L606 */
+{3.9674691919587990e+00, 2.6736945990535332e-13,
+	2.2204460492503131e-16, 3.9301895071730542e-14,
+	1.9317880628477724e-14}, /* L607 */
+{4.1801052791859110e+00, 2.8216318170848353e-13,
+	2.2204460492503131e-16, 9.3258734068513149e-14,
+	-1.9706458687096529e-13}, /* L608 */
+{5.1695483859186648e+00, 3.4952596372761491e-13,
+	2.2204460492503131e-16, -2.4091839634365897e-14,
+	8.6153306710912148e-14}, /* L609 */
+{4.3811544531626838e+00, 2.9670710333107309e-13,
+	2.2204460492503131e-16, 7.1720407390785113e-14,
+	3.1530333899354446e-14}, /* L610 */
+{5.0167836924298115e+00, 3.4031111262322611e-13,
+	2.2204460492503131e-16, 2.2204460492503131e-14,
+	-9.7033492352238682e-14}, /* L611 */
+{3.3041310299420852e+00, 2.2450097336701447e-13,
+	2.2204460492503131e-16, -3.5094149808401198e-13,
+	-4.4964032497318840e-14}, /* L612 */
+{4.9983765645898623e+00, 3.4017233474514796e-13,
+	2.2204460492503131e-16, -1.8591794770372871e-12,
+	-1.6487922138708200e-12}, /* L613 */
+{5.8326639253624437e+00, 3.9759862069388419e-13,
+	2.2204460492503131e-16, -9.7477581562088744e-14,
+	8.2822637637036678e-14}, /* L614 */
+{8.5264362164440506e+00, 5.8217319853781646e-13,
+	2.2204460492503131e-16, 3.6814995496570191e-13,
+	-1.6675549829869851e-13}, /* L615 */
+{4.6903483090863878e+00, 3.2077118738982335e-13,
+	2.2204460492503131e-16, -1.9961809982760315e-13,
+	-1.4588330543574557e-13}, /* L616 */
+{5.5998872790648981e+00, 3.8359593279579940e-13,
+	2.2204460492503131e-16, 3.5571545708990016e-13,
+	9.1260332624187868e-14}, /* L617 */
+{4.4508565367102459e+00, 3.0538072071095712e-13,
+	2.2204460492503131e-16, 1.2878587085651816e-14,
+	-2.4091839634365897e-13}, /* L618 */
+{5.7932240026869808e+00, 3.9812597663058114e-13,
+	2.2204460492503131e-16, -2.3936408410918375e-13,
+	-2.9509727994536661e-13}, /* L619 */
+{4.2258131187057746e+00, 2.9087843245179101e-13,
+	2.2204460492503131e-16, 3.5638159090467525e-13,
+	5.8286708792820718e-13}, /* L620 */
+{4.2014080979914290e+00, 2.8966499338034524e-13,
+	2.2204460492503131e-16, 4.5674575233078940e-13,
+	4.3054448894963571e-13}, /* L621 */
+{4.2445806504467534e+00, 2.9311275628884914e-13,
+	2.2204460492503131e-16, 8.3488327362601922e-11,
+	-7.2851724652878147e-11}, /* L622 */
+{3.7664585908304860e+00, 2.6051383272829298e-13,
+	2.2204460492503131e-16, 1.7421619702417956e-12,
+	-9.0294438592763981e-13}, /* L623 */
+{5.1935178092343115e+00, 3.5979552670539761e-13,
+	2.2204460492503131e-16, -4.7961634663806763e-14,
+	-1.6853185513809876e-13}, /* L624 */
+{5.9548093949449319e+00, 4.1319725418986764e-13,
+	2.2204460492503131e-16, -8.9928064994637680e-15,
+	-6.3282712403633923e-14}, /* L625 */
+{5.1094329813164139e+00, 3.5510483442635632e-13,
+	2.2204460492503131e-16, -7.5384143372048129e-14,
+	2.1094237467877974e-14}, /* L626 */
+{4.4709001957007031e+00, 3.1122326937804701e-13,
+	2.2204460492503131e-16, 3.2374103398069565e-13,
+	-4.0412118096355698e-14}, /* L627 */
+{3.8051413537108512e+00, 2.6530166952198897e-13,
+	2.2204460492503131e-16, -2.6756374893466273e-14,
+	6.6791017161449417e-13}, /* L628 */
+{6.0685707826870976e+00, 4.2378600628723007e-13,
+	2.2204460492503131e-16, -2.2093438190040615e-14,
+	5.3290705182007514e-14}, /* L629 */
+{5.2039268610432954e+00, 3.6398314917640562e-13,
+	2.2204460492503131e-16, 1.1985967773853190e-12,
+	8.3244522386394237e-13}, /* L630 */
+{5.4496916408061979e+00, 3.8177794259297571e-13,
+	2.2204460492503131e-16, -3.4527936065842368e-14,
+	-7.8603790143461083e-14}, /* L631 */
+{5.2257796055009651e+00, 3.6667197056416967e-13,
+	2.2204460492503131e-16, -9.1382457156896635e-13,
+	7.5939254884360707e-14}, /* L632 */
+{4.9431357609062028e+00, 3.4738878440521148e-13,
+	2.2204460492503131e-16, -4.5186077102243871e-14,
+	8.8817841970012523e-16}, /* L633 */
+{5.2634152441824300e+00, 3.7048142331741474e-13,
+	2.2204460492503131e-16, 2.8221869285971479e-13,
+	2.2826185386293218e-13}, /* L634 */
+{4.6795349419897887e+00, 3.2990277176736527e-13,
+	2.2204460492503131e-16, 7.0832228971084987e-14,
+	-2.5746071941057380e-13}, /* L635 */
+{4.5522870563855422e+00, 3.2143732120459845e-13,
+	2.2204460492503131e-16, -3.0486724256206799e-13,
+	1.7519319328584970e-13}, /* L636 */
+{4.5659412696495645e+00, 3.2290836671222678e-13,
+	2.2204460492503131e-16, -2.2204460492503131e-16,
+	4.1322500976548326e-13}, /* L637 */
+{3.8017301359429263e+00, 2.6928459462283172e-13,
+	2.2204460492503131e-16, 2.5646151868841116e-13,
+	2.4225066397320916e-13}, /* L638 */
+{5.3943747079250342e+00, 3.8269387658829146e-13,
+	2.2204460492503131e-16, 5.3312909642500017e-13,
+	-2.1804780203638074e-13}, /* L639 */
+{5.5650478425127439e+00, 3.9541980800805732e-13,
+	2.2204460492503131e-16, -4.4264591991804991e-13,
+	-3.1874503036988244e-13}, /* L640 */
+{3.5881491867893223e+00, 2.5535129566378600e-13,
+	2.2204460492503131e-16, -4.7850612361344247e-14,
+	-1.7763568394002505e-14}, /* L641 */
+{4.8733527042976643e+00, 3.4735408993569195e-13,
+	2.2204460492503131e-16, 1.3833378886829450e-13,
+	-1.8218759834098819e-13}, /* L642 */
+{4.3335993721418626e+00, 3.0936364581179987e-13,
+	2.2204460492503131e-16, -1.2878587085651816e-13,
+	-5.8508753397745750e-14}, /* L643 */
+{4.8757840900745046e+00, 3.4861002973229915e-13,
+	2.2204460492503131e-16, 4.6629367034256575e-15,
+	-5.9396931817445875e-14}, /* L644 */
+{4.2325648172777619e+00, 3.0309088572266774e-13,
+	2.2204460492503131e-16, 6.3726801613483985e-14,
+	-1.2978507157868080e-13}, /* L645 */
+{5.5464483791548833e+00, 3.9779290972319359e-13,
+	2.2204460492503131e-16, 4.3520742565306136e-14,
+	-2.5868196473766147e-14}, /* L646 */
+{5.4237914010474704e+00, 3.8959807602267915e-13,
+	2.2204460492503131e-16, 1.9406698470447736e-13,
+	-2.2726265314076954e-13}, /* L647 */
+{5.4020146956345565e+00, 3.8863356977003605e-13,
+	2.2204460492503131e-16, -8.4932061383824475e-14,
+	1.0103029524088925e-13}, /* L648 */
+{7.5524002051446724e+00, 5.4417581552002048e-13,
+	2.2204460492503131e-16, 7.7426953737358417e-13,
+	4.0145664570445661e-13}, /* L649 */
+{4.2492374732833662e+00, 3.0664359940146824e-13,
+	2.2204460492503131e-16, -9.0372154204487742e-14,
+	-1.1879386363489175e-14}, /* L650 */
+{4.4527840029154957e+00, 3.2182676662495524e-13,
+	2.2204460492503131e-16, 8.0380146982861334e-14,
+	1.4721557306529576e-13}, /* L651 */
+{3.5874289727938069e+00, 2.5968116545982411e-13,
+	2.2204460492503131e-16, -6.1251004268569886e-13,
+	-9.8809849191638932e-14}, /* L652 */
+{5.3384464010648651e+00, 3.8702374638432957e-13,
+	2.2204460492503131e-16, 8.2156503822261584e-14,
+	-3.9857006584043120e-14}, /* L653 */
+{5.1307420397616967e+00, 3.7253533591297128e-13,
+	2.2204460492503131e-16, -7.5717210279435676e-14,
+	-6.2172489379008766e-14}, /* L654 */
+{4.9259619701975410e+00, 3.5821345889530676e-13,
+	2.2204460492503131e-16, 8.9261931179862586e-14,
+	3.4416913763379853e-14}, /* L655 */
+{4.7033229692459528e+00, 3.4254543646028424e-13,
+	2.2204460492503131e-16, 4.7961634663806763e-14,
+	1.7141843500212417e-13}, /* L656 */
+{4.8297260369403956e+00, 3.5228764350136998e-13,
+	2.2204460492503131e-16, 6.3504757008558954e-14,
+	7.2830630415410269e-14}, /* L657 */
+{4.6573021806852921e+00, 3.4022784589637922e-13,
+	2.2204460492503131e-16, -6.6502359175046877e-14,
+	1.2212453270876722e-14}, /* L658 */
+{4.3228444529591563e+00, 3.1627478414009147e-13,
+	2.2204460492503131e-16, -4.8294701571194310e-14,
+	-2.6090241078691179e-14}, /* L659 */
+{5.0192314037204078e+00, 3.6778219358879483e-13,
+	2.2204460492503131e-16, 6.4859229098601645e-13,
+	-2.9609648066752925e-13}, /* L660 */
+{4.7813993742079255e+00, 3.5088598693278072e-13,
+	2.2204460492503131e-16, -1.0325074129013956e-14,
+	-6.9166894434147252e-14}, /* L661 */
+{4.3923785310871120e+00, 3.2282509998537989e-13,
+	2.2204460492503131e-16, -7.7782225105238467e-13,
+	-2.6545432518787493e-13}, /* L662 */
+{5.7119245471869471e+00, 4.2044145942554678e-13,
+	2.2204460492503131e-16, 1.7896795156957523e-13,
+	1.3966605649784469e-13}, /* L663 */
+{4.2213922022854637e+00, 3.1119551380243138e-13,
+	2.2204460492503131e-16, -2.7755575615628914e-13,
+	-2.6789681584205027e-13}, /* L664 */
+{4.6131651729595946e+00, 3.4058866837938240e-13,
+	2.2204460492503131e-16, -6.3615779311021470e-14,
+	-7.4162898044960457e-14}, /* L665 */
+{4.8611187805292762e+00, 3.5943470422239443e-13,
+	2.2204460492503131e-16, 1.9984014443252818e-15,
+	4.8916426464984397e-13}, /* L666 */
+{5.3725721944840128e+00, 3.9784842087442485e-13,
+	2.2204460492503131e-16, 4.2854608750531042e-13,
+	2.2182256032010628e-13}, /* L667 */
+{5.2133315784024230e+00, 3.8663516832571077e-13,
+	2.2204460492503131e-16, -1.0602629885170245e-13,
+	4.7739590058881731e-14}, /* L668 */
+{5.6393960423081229e+00, 4.1885939161545593e-13,
+	2.2204460492503131e-16, -8.1712414612411521e-14,
+	8.6153306710912148e-14}, /* L669 */
+{5.6223969301958707e+00, 4.1822101337629647e-13,
+	2.2204460492503131e-16, 6.7945649107059580e-14,
+	-7.6605388699135801e-14}, /* L670 */
+{6.2108890834889703e+00, 4.6268544551253399e-13,
+	2.2204460492503131e-16, -3.9124259387790516e-13,
+	5.5047078006964512e-12}, /* L671 */
+{4.7715849091128026e+00, 3.5599301284605644e-13,
+	2.2204460492503131e-16, -2.6090241078691179e-13,
+	-2.8210767055725228e-13}, /* L672 */
+{4.2410913865939781e+00, 3.1688540680363531e-13,
+	2.2204460492503131e-16, 1.6653345369377348e-14,
+	2.8421709430404007e-14}, /* L673 */
+{6.1209295383359006e+00, 4.5802250880910833e-13,
+	2.2204460492503131e-16, -5.8952842607595812e-14,
+	5.1958437552457326e-14}, /* L674 */
+{5.4748234524831494e+00, 4.1028291875022660e-13,
+	2.2204460492503131e-16, 8.0158102377936302e-14,
+	2.5313084961453569e-14}, /* L675 */
+{4.7108062488399876e+00, 3.5355052219188110e-13,
+	2.2204460492503131e-16, -1.6875389974302379e-13,
+	1.0524914273446484e-13}, /* L676 */
+{4.8578363200777002e+00, 3.6512459722359836e-13,
+	2.2204460492503131e-16, -1.7319479184152442e-14,
+	-1.0647038806155251e-13}, /* L677 */
+{3.9719826677937946e+00, 2.9898306053155466e-13,
+	2.2204460492503131e-16, -9.1637808452560421e-13,
+	5.5244697705347789e-13}, /* L678 */
+{5.7054581915063958e+00, 4.3010039973978564e-13,
+	2.2204460492503131e-16, 6.0063065632220969e-13,
+	1.3078427230084344e-12}, /* L679 */
+{4.6167352249966322e+00, 3.4854064079326008e-13,
+	2.2204460492503131e-16, -1.4002132786572474e-12,
+	-7.6849637764553336e-13}, /* L680 */
+{5.6505228649430661e+00, 4.2721381987576024e-13,
+	2.2204460492503131e-16, 2.1027624086400465e-13,
+	9.6589403142388619e-14}, /* L681 */
+{4.1162088402135071e+00, 3.1166735858789707e-13,
+	2.2204460492503131e-16, 5.0404125317982107e-14,
+	7.0166095156309893e-14}, /* L682 */
+{4.5968227722062069e+00, 3.4856839636887571e-13,
+	2.2204460492503131e-16, -5.0404125317982107e-14,
+	5.1070259132757201e-15}, /* L683 */
+{4.0570239446551604e+00, 3.0808688933348094e-13,
+	2.2204460492503131e-16, -6.1506355564233672e-14,
+	-1.5221157667610896e-13}, /* L684 */
+{5.0416137936030383e+00, 3.8341552155429781e-13,
+	2.2204460492503131e-16, 3.5860203695392556e-13,
+	-2.0838886172214188e-13}, /* L685 */
+{3.8443938204289747e+00, 2.9279356716926941e-13,
+	2.2204460492503131e-16, -1.3844481117075702e-13,
+	1.6409096303959814e-13}, /* L686 */
+{6.6259202063039382e+00, 5.0537352080937126e-13,
+	2.2204460492503131e-16, -1.7319479184152442e-13,
+	-1.6875389974302379e-14}, /* L687 */
+{4.8343099527041407e+00, 3.6926017799032707e-13,
+	2.2204460492503131e-16, -1.0014211682118912e-13,
+	-4.4386716524513758e-13}, /* L688 */
+{4.5587880342320082e+00, 3.4872105203476167e-13,
+	2.2204460492503131e-16, 1.1213252548714081e-13,
+	-4.7517545453956700e-14}, /* L689 */
+{6.5869669140207634e+00, 5.0459636469213365e-13,
+	2.2204460492503131e-16, 2.3281376826389533e-12,
+	8.1978868138321559e-13}, /* L690 */
+{6.5066582395463364e+00, 4.9916668021232624e-13,
+	2.2204460492503131e-16, 5.8064664187895687e-13,
+	5.9507954119908391e-14}, /* L691 */
+{6.4544899520722341e+00, 4.9588111394882617e-13,
+	2.2204460492503131e-16, -3.3673064336880998e-13,
+	4.5363712786183896e-13}, /* L692 */
+{4.7359382078537360e+00, 3.6437519668197638e-13,
+	2.2204460492503131e-16, -3.5860203695392556e-14,
+	1.7541523789077473e-14}, /* L693 */
+{3.7175851159186775e+00, 2.8643754035329039e-13,
+	2.2204460492503131e-16, 9.3356433694680163e-12,
+	5.9161564536225342e-12}, /* L694 */
+{6.1838227058953752e+00, 4.7714610040827665e-13,
+	2.2204460492503131e-16, 2.1227464230832993e-13,
+	-3.8768988019910466e-13}, /* L695 */
+{5.1544621552201750e+00, 3.9829251008427491e-13,
+	2.2204460492503131e-16, 1.9850787680297799e-13,
+	1.0214051826551440e-14}, /* L696 */
+{5.2546711310781351e+00, 4.0661918276896358e-13,
+	2.2204460492503131e-16, -2.7644553313166398e-14,
+	6.8167693711984612e-14}, /* L697 */
+{5.1683462630156631e+00, 4.0051295613352522e-13,
+	2.2204460492503131e-16, -2.0594637106796654e-13,
+	-4.8949733155723152e-13}, /* L698 */
+{4.1867018843598354e+00, 3.2490676815655206e-13,
+	2.2204460492503131e-16, -5.4845017416482733e-14,
+	-4.5075054799781356e-14}, /* L699 */
+{4.7735789598809486e+00, 3.7098102367849606e-13,
+	2.2204460492503131e-16, -7.5384143372048129e-14,
+	6.4837024638109142e-14}, /* L700 */
+{5.0649152662736672e+00, 3.9418468489316183e-13,
+	2.2204460492503131e-16, -9.2592600253738055e-14,
+	4.9293902293356950e-14}, /* L701 */
+{4.7935438875946925e+00, 3.7359698668026908e-13,
+	2.2204460492503131e-16, 6.7501559897209518e-14,
+	1.4077627952246985e-13}, /* L702 */
+{5.6426120318247355e+00, 4.4039771829318397e-13,
+	2.2204460492503131e-16, 1.8518520050747611e-13,
+	-9.5368157815300947e-13}, /* L703 */
+{3.8313270674372735e+00, 2.9945490531702035e-13,
+	2.2204460492503131e-16, -3.3473224192448470e-13,
+	4.1144865292608301e-13}, /* L704 */
+{4.0787298392966198e+00, 3.1924463073096376e-13,
+	2.2204460492503131e-16, 4.5963233219481481e-14,
+	1.0991207943789050e-13}, /* L705 */
+{4.3813808502119818e+00, 3.4341973709217655e-13,
+	2.2204460492503131e-16, 9.9920072216264089e-15,
+	1.2878587085651816e-14}, /* L706 */
+{4.5339534050160450e+00, 3.5588199054359393e-13,
+	2.2204460492503131e-16, 3.5682568011452531e-13,
+	5.2891024893142458e-13}, /* L707 */
+{5.2118726295850646e+00, 4.0967229608668276e-13,
+	2.2204460492503131e-16, 2.9398705692074145e-13,
+	9.8809849191638932e-14}, /* L708 */
+{4.8180611981047941e+00, 3.7925218521195347e-13,
+	2.2204460492503131e-16, -1.9650947535865271e-14,
+	-5.1070259132757201e-15}, /* L709 */
+{5.3802901786618191e+00, 4.2410519540680980e-13,
+	2.2204460492503131e-16, 1.4543921622589551e-13,
+	2.7089441800853820e-13}, /* L710 */
+{5.5858034681761168e+00, 4.4092507422988092e-13,
+	2.2204460492503131e-16, -2.0838886172214188e-13,
+	-8.5598195198599569e-14}, /* L711 */
+{4.5674229363923331e+00, 3.6104452760810091e-13,
+	2.2204460492503131e-16, 4.5519144009631418e-14,
+	3.1086244689504383e-15}, /* L712 */
+{4.3099647241253880e+00, 3.4117153546731060e-13,
+	2.2204460492503131e-16, 5.4845017416482733e-14,
+	-3.0830893393840597e-13}, /* L713 */
+{5.5490283625570518e+00, 4.3987036235648702e-13,
+	2.2204460492503131e-16, 1.9406698470447736e-13,
+	-1.0960121699099545e-12}, /* L714 */
+{6.3098001648026454e+00, 5.0087711755963937e-13,
+	2.2204460492503131e-16, 1.1701750679549150e-13,
+	-2.8088642523016460e-14}, /* L715 */
+{5.4015448349052813e+00, 4.2937875477377929e-13,
+	2.2204460492503131e-16, 1.9761969838327786e-14,
+	-1.3244960683778118e-13}, /* L716 */
+{5.9492771686437464e+00, 4.7357950894166834e-13,
+	2.2204460492503131e-16, 4.8405723873656825e-14,
+	-1.4765966227514582e-14}, /* L717 */
+{4.0334325474155115e+00, 3.2152058793144533e-13,
+	2.2204460492503131e-16, -5.9874327718034692e-13,
+	3.4527936065842368e-13}, /* L718 */
+{6.2489667436003877e+00, 4.9882320496408283e-13,
+	2.2204460492503131e-16, -1.4876988529977098e-13,
+	4.6851411639181606e-14}, /* L719 */
+{4.7618130683010955e+00, 3.8063996399273492e-13,
+	2.2204460492503131e-16, -1.5765166949677223e-14,
+	1.8030021919912542e-13}, /* L720 */
+{4.8190089899344413e+00, 3.8574698990601064e-13,
+	2.2204460492503131e-16, 6.0573768223548541e-13,
+	5.7709392820015637e-13}, /* L721 */
+{5.4452994498122900e+00, 4.3648418213138029e-13,
+	2.2204460492503131e-16, -8.8706819667550008e-14,
+	2.6867397195928788e-14}, /* L722 */
+{4.9979331964771694e+00, 4.0117908994830032e-13,
+	2.2204460492503131e-16, -1.9317880628477724e-14,
+	-1.3022916078853086e-13}, /* L723 */
+{5.3266658624814962e+00, 4.2815750944669162e-13,
+	2.2204460492503131e-16, 1.2390088954816747e-13,
+	3.9079850466805510e-14}, /* L724 */
+{5.2551807049291215e+00, 4.2299497238218464e-13,
+	2.2204460492503131e-16, 5.7731597280508140e-14,
+	8.1712414612411521e-14}, /* L725 */
+{5.3311034522421563e+00, 4.2969794389335902e-13,
+	2.2204460492503131e-16, 1.1701750679549150e-13,
+	-3.5416114485542494e-14}, /* L726 */
+{6.4026923574185375e+00, 5.1678106238739474e-13,
+	2.2204460492503131e-16, -2.5424107263916085e-14,
+	3.1086244689504383e-14}, /* L727 */
+{5.4828383206431903e+00, 4.4314552027913123e-13,
+	2.2204460492503131e-16, 3.0198066269804258e-14,
+	-6.8722805224297190e-14}, /* L728 */
+{5.2227448654761517e+00, 4.2270353883822054e-13,
+	2.2204460492503131e-16, -1.1501910535116622e-13,
+	4.6629367034256575e-15}, /* L729 */
+{5.5294607786639238e+00, 4.4814152388994444e-13,
+	2.2204460492503131e-16, 5.4845017416482733e-14,
+	-7.5495165674510645e-15}, /* L730 */
+{3.6812643578872324e+00, 2.9876101592662963e-13,
+	2.2204460492503131e-16, -3.6703973194107675e-13,
+	2.7644553313166398e-13}, /* L731 */
+{5.0747230422844911e+00, 4.1241359285959511e-13,
+	2.2204460492503131e-16, 1.2723155862204294e-13,
+	7.4384942649885488e-14}, /* L732 */
+{4.9051919135809046e+00, 3.9918068850397503e-13,
+	2.2204460492503131e-16, 2.9309887850104133e-14,
+	-7.3940853440035426e-14}, /* L733 */
+{4.4186037015068136e+00, 3.6007308246155389e-13,
+	2.2204460492503131e-16, 2.4424906541753444e-14,
+	3.8902214782865485e-13}, /* L734 */
+{4.7938851143583223e+00, 3.9118708272667391e-13,
+	2.2204460492503131e-16, 3.7636560534792807e-13,
+	4.8228088189716800e-13}, /* L735 */
+{5.0954564086903238e+00, 4.1636138981004933e-13,
+	2.2204460492503131e-16, 7.3430150848707854e-13,
+	-3.8147263126120379e-13}, /* L736 */
+{6.5230767772173435e+00, 5.3373971908854401e-13,
+	2.2204460492503131e-16, -1.7069679003611782e-12,
+	1.9806378759312793e-13}, /* L737 */
+{7.4590226082607352e+00, 6.1115001948053305e-13,
+	2.2204460492503131e-16, 9.1038288019262836e-15,
+	2.9753977059954195e-13}, /* L738 */
+{5.9905371915005796e+00, 4.9149573300155680e-13,
+	2.2204460492503131e-16, -8.9594998087250133e-14,
+	-4.5519144009631418e-15}, /* L739 */
+{6.1905503074137398e+00, 5.0859316758078421e-13,
+	2.2204460492503131e-16, -1.1246559239452836e-13,
+	-2.0738966099997924e-13}, /* L740 */
+{6.0897531975904897e+00, 5.0098813986210189e-13,
+	2.2204460492503131e-16, -5.5622173533720343e-14,
+	5.4845017416482733e-14}, /* L741 */
+{5.0532424738830288e+00, 4.1627812308320244e-13,
+	2.2204460492503131e-16, -1.4299672557172016e-13,
+	1.8651746813702630e-14}, /* L742 */
+{4.7153506426472500e+00, 3.8896663667742359e-13,
+	2.2204460492503131e-16, 5.2047255394427339e-13,
+	-2.2862822746105849e-12}, /* L743 */
+{5.1660027740936192e+00, 4.2671421951467892e-13,
+	2.2204460492503131e-16, -5.1292303737682232e-14,
+	2.4558133304708463e-13}, /* L744 */
+{6.3798758373864874e+00, 5.2768900360433690e-13,
+	2.2204460492503131e-16, -6.7723604502134549e-14,
+	-2.1982415887578100e-13}, /* L745 */
+{6.1806397780477473e+00, 5.1189608107904405e-13,
+	2.2204460492503131e-16, 2.2426505097428162e-14,
+	3.2862601528904634e-14}, /* L746 */
+{4.9215271757058083e+00, 4.0815961721563099e-13,
+	2.2204460492503131e-16, 4.7961634663806763e-14,
+	1.4321877017664519e-13}, /* L747 */
+{6.4737735827010674e+00, 5.3761162188692424e-13,
+	2.2204460492503131e-16, 2.0827783941967937e-13,
+	1.7896795156957523e-13}, /* L748 */
+{5.8938677767679390e+00, 4.9010795422077535e-13,
+	2.2204460492503131e-16, -4.3631764867768652e-14,
+	5.5511151231257827e-15}, /* L749 */
+{5.6600089298247420e+00, 4.7128967395337895e-13,
+	2.2204460492503131e-16, 2.2204460492503131e-14,
+	6.0174087934683484e-13}, /* L750 */
+{5.0938828702085779e+00, 4.2471581807035363e-13,
+	2.2204460492503131e-16, 8.7707618945387367e-14,
+	-2.9309887850104133e-13}, /* L751 */
+{5.9521370503034259e+00, 4.9693582582222007e-13,
+	2.2204460492503131e-16, 2.0428103653102880e-14,
+	-1.7297274723659939e-13}, /* L752 */
+{5.0783612658165858e+00, 4.2454928461665986e-13,
+	2.2204460492503131e-16, -2.5102142586774789e-13,
+	6.1728400169158704e-14}, /* L753 */
+{5.1691062985628413e+00, 4.3270942384765476e-13,
+	2.2204460492503131e-16, -4.0822900615467006e-13,
+	-2.5301982731207318e-13}, /* L754 */
+{4.8622593268501086e+00, 4.0756287233989497e-13,
+	2.2204460492503131e-16, -4.3187675657918589e-14,
+	4.5963233219481481e-14}, /* L755 */
+{4.9604079583435956e+00, 4.1634057312833761e-13,
+	2.2204460492503131e-16, -2.2037927038809357e-13,
+	-1.3766765505351941e-14}, /* L756 */
+{5.0647371848585072e+00, 4.2565950764128502e-13,
+	2.2204460492503131e-16, 6.4170890823334048e-14,
+	-6.9610983643997315e-14}, /* L757 */
+{4.9386621453236152e+00, 4.1561198926842735e-13,
+	2.2204460492503131e-16, 1.4632739464559563e-13,
+	9.3036689463588118e-14}, /* L758 */
+{5.5849890486292120e+00, 4.7062354013860386e-13,
+	2.2204460492503131e-16, -6.3282712403633923e-15,
+	-2.4635848916432224e-13}, /* L759 */
+{6.0394832127454210e+00, 5.0959236830294685e-13,
+	2.2204460492503131e-16, 1.4410694859634532e-13,
+	7.9936057773011271e-15}, /* L760 */
+{6.4704438484036633e+00, 5.4667381732542708e-13,
+	2.2204460492503131e-16, 7.1054273576010019e-14,
+	-2.1083135237631723e-13}, /* L761 */
+{5.8162821422666831e+00, 4.9205084451386938e-13,
+	2.2204460492503131e-16, 3.5282887722587475e-13,
+	8.8817841970012523e-16}, /* L762 */
+{8.0249143647637453e+00, 6.7978955797798335e-13,
+	2.2204460492503131e-16, 3.3750779948604759e-14,
+	-6.9499961341534799e-14}, /* L763 */
+{6.7755342500098648e+00, 5.7470694869721228e-13,
+	2.2204460492503131e-16, 1.8252066524837574e-13,
+	-3.1241675912951905e-13}, /* L764 */
+{4.8758246860250267e+00, 4.1411318818518339e-13,
+	2.2204460492503131e-16, -5.2446935683292395e-13,
+	1.8687273950490635e-12}, /* L765 */
+{5.4402827346089841e+00, 4.6265768993691836e-13,
+	2.2204460492503131e-16, -2.2160051571518125e-13,
+	4.4408920985006262e-15}, /* L766 */
+{6.6494563839787721e+00, 5.6622762034663765e-13,
+	2.2204460492503131e-16, 6.0862426209951082e-13,
+	2.5934809855243657e-13}, /* L767 */
+{5.7496835504787178e+00, 4.9024673209885350e-13,
+	2.2204460492503131e-16, -9.6256336235001072e-14,
+	4.0811798385220754e-13}, /* L768 */
+{5.2392800475839456e+00, 4.4730885662147557e-13,
+	2.2204460492503131e-16, 8.8817841970012523e-15,
+	-1.6431300764452317e-13}, /* L769 */
+{5.4026059263202448e+00, 4.6185277824406512e-13,
+	2.2204460492503131e-16, -1.0125233984581428e-13,
+	-4.4464432136237519e-13}, /* L770 */
+{4.7307143378691014e+00, 4.0493997044421803e-13,
+	2.2204460492503131e-16, -1.3467005288703149e-13,
+	3.7747582837255322e-15}, /* L771 */
+{5.4776640825639777e+00, 4.6948556153836307e-13,
+	2.2204460492503131e-16, 1.1679546219056647e-13,
+	4.2410519540680980e-14}, /* L772 */
+{4.5417277347125538e+00, 3.8977154837027683e-13,
+	2.2204460492503131e-16, -1.1282086376240841e-12,
+	1.0476064460362977e-12}, /* L773 */
+{6.5058242177679810e+00, 5.5905280404999758e-13,
+	2.2204460492503131e-16, -1.4654943925052066e-14,
+	-5.2180482157382357e-14}, /* L774 */
+{5.4361376088906992e+00, 4.6773696027457845e-13,
+	2.2204460492503131e-16, -1.2689849171465539e-13,
+	-3.1863400806741993e-14}, /* L775 */
+{5.5992356380756574e+00, 4.8239190419963052e-13,
+	2.2204460492503131e-16, 3.1130653610489389e-13,
+	3.5282887722587475e-13}, /* L776 */
+{4.8360758409790794e+00, 4.1718017929071038e-13,
+	2.2204460492503131e-16, -8.4487972173974413e-14,
+	-9.9142916099026479e-14}, /* L777 */
+{4.7892106408032511e+00, 4.1366909897533333e-13,
+	2.2204460492503131e-16, -1.5076828674409626e-13,
+	-1.3766765505351941e-14}, /* L778 */
+{6.0006513157923154e+00, 5.1897375286102942e-13,
+	2.2204460492503131e-16, 1.5210055437364645e-13,
+	-1.8762769116165146e-14}, /* L779 */
+{4.2705195581422490e+00, 3.6981528950263964e-13,
+	2.2204460492503131e-16, -7.5051076464660582e-14,
+	6.8833827526759706e-14}, /* L780 */
+{5.5966797646122730e+00, 4.8527848406365592e-13,
+	2.2204460492503131e-16, -4.1222580904332062e-13,
+	-1.1654011089490268e-12}, /* L781 */
+{5.3714918506004858e+00, 4.6634918149379700e-13,
+	2.2204460492503131e-16, -2.4535928844215960e-14,
+	-2.4980018054066022e-14}, /* L782 */
+{5.0805875175942159e+00, 4.4165712753674313e-13,
+	2.2204460492503131e-16, -4.5519144009631418e-15,
+	-9.7699626167013776e-15}, /* L783 */
+{4.7464998355253565e+00, 4.1314174303863638e-13,
+	2.2204460492503131e-16, 6.2394533983933798e-14,
+	7.1720407390785113e-14}, /* L784 */
+{3.9261208439437265e+00, 3.4217073618947325e-13,
+	2.2204460492503131e-16, 5.0648374383399641e-13,
+	2.3536728122053319e-14}, /* L785 */
+{4.6774882957369188e+00, 4.0817349500343880e-13,
+	2.2204460492503131e-16, 1.1102230246251565e-14,
+	2.5091040356528538e-14}, /* L786 */
+{5.4371115006593902e+00, 4.7506443223710448e-13,
+	2.2204460492503131e-16, 5.1070259132757201e-14,
+	-4.1633363423443370e-14}, /* L787 */
+{5.5780544858105578e+00, 4.8799853047398756e-13,
+	2.2204460492503131e-16, -3.7614356074300304e-13,
+	5.6021853822585399e-13}, /* L788 */
+{4.8637592578527356e+00, 4.2604808569990382e-13,
+	2.2204460492503131e-16, -4.6040948831205242e-13,
+	2.9087843245179101e-14}, /* L789 */
+{4.9607673203088325e+00, 4.3509640335059885e-13,
+	2.2204460492503131e-16, 3.0198066269804258e-14,
+	2.1316282072803006e-14}, /* L790 */
+{5.5463997904164684e+00, 4.8707652494650588e-13,
+	2.2204460492503131e-16, 1.3722356584366935e-13,
+	7.3718808835110394e-14}, /* L791 */
+{7.4968552621604037e+00, 6.5919492087118670e-13,
+	2.2204460492503131e-16, 1.0678125050844756e-12,
+	-4.5585757391108928e-13}, /* L792 */
+{5.7465412227243586e+00, 5.0592863232168384e-13,
+	2.2204460492503131e-16, -9.4924068605450884e-14,
+	6.2394533983933798e-14}, /* L793 */
+{5.4773386164466649e+00, 4.8283599340948058e-13,
+	2.2204460492503131e-16, -2.5424107263916085e-14,
+	1.8607337892717624e-13}, /* L794 */
+{6.7452936609527079e+00, 5.9535709695524019e-13,
+	2.2204460492503131e-16, 1.1588507931037384e-12,
+	-1.0323963905989331e-12}, /* L795 */
+{5.6677225098294119e+00, 5.0087711755963937e-13,
+	2.2204460492503131e-16, -1.2045919817182948e-13,
+	3.2107649872159527e-13}, /* L796 */
+{5.7716919793125445e+00, 5.1070606077452396e-13,
+	2.2204460492503131e-16, -2.2648549702353193e-14,
+	1.1546319456101628e-14}, /* L797 */
+{7.7575310361044254e+00, 6.8728356339420316e-13,
+	2.2204460492503131e-16, -1.0436096431476471e-14,
+	-8.3710816056736803e-14}, /* L798 */
+{5.5982566421632196e+00, 4.9660275891483252e-13,
+	2.2204460492503131e-16, 8.9639407008235139e-13,
+	-1.3355982986240633e-13}, /* L799 */
+{5.1640706473886384e+00, 4.5866088704826780e-13,
+	2.2204460492503131e-16, 4.2010839251815923e-13,
+	-2.7089441800853820e-14}, /* L800 */
+{6.0293478396294509e+00, 5.3618220974271935e-13,
+	2.2204460492503131e-16, -3.7680969455777813e-13,
+	2.3270274596143281e-13}, /* L801 */
+{5.9975156967327594e+00, 5.3401727484470030e-13,
+	2.2204460492503131e-16, 8.2600593032111647e-14,
+	8.0158102377936302e-14}, /* L802 */
+{4.9206179749994252e+00, 4.3867687260501498e-13,
+	2.2204460492503131e-16, -6.1395333261771157e-14,
+	-1.1657341758564144e-13}, /* L803 */
+{5.0876945940554847e+00, 4.5413672822292028e-13,
+	2.2204460492503131e-16, 1.3988810110276972e-14,
+	-2.9420910152566648e-14}, /* L804 */
+{5.1867317856259181e+00, 4.6355280725052239e-13,
+	2.2204460492503131e-16, -2.4757973449140991e-14,
+	3.6637359812630166e-14}, /* L805 */
+{6.6606029402411666e+00, 5.9601629187611138e-13,
+	2.2204460492503131e-16, -2.2060131499301860e-13,
+	-5.6732396558345499e-14}, /* L806 */
+{5.3853864395590136e+00, 4.8250292650209303e-13,
+	2.2204460492503131e-16, 1.7186252421197423e-13,
+	1.2012613126444194e-13}, /* L807 */
+{5.3459242758868228e+00, 4.7956083548683637e-13,
+	2.2204460492503131e-16, -7.3052675020335300e-14,
+	4.8849813083506888e-15}, /* L808 */
+{6.3844352890848084e+00, 5.7343019221889335e-13,
+	2.2204460492503131e-16, -1.2412293415309250e-13,
+	-8.6930462828149757e-14}, /* L809 */
+{6.0456885506712004e+00, 5.4367621515893916e-13,
+	2.2204460492503131e-16, -3.7081449022480228e-14,
+	8.7485574340462335e-14}, /* L810 */
+{5.9192448505473703e+00, 5.3296256297130640e-13,
+	2.2204460492503131e-16, 5.7731597280508140e-15,
+	1.2212453270876722e-14}, /* L811 */
+{4.9039486236889385e+00, 4.4209080840573733e-13,
+	2.2204460492503131e-16, 5.7953641885433171e-14,
+	-2.8221869285971479e-13}, /* L812 */
+{5.8108947767463297e+00, 5.2449711240853958e-13,
+	2.2204460492503131e-16, 1.0280665208028950e-13,
+	-8.5487172896137054e-14}, /* L813 */
+{5.8472911663449612e+00, 5.2843146525205498e-13,
+	2.2204460492503131e-16, -7.1720407390785113e-14,
+	2.9531932455029164e-14}, /* L814 */
+{5.2760819437426676e+00, 4.7739590058881731e-13,
+	2.2204460492503131e-16, -6.4392935428259079e-15,
+	2.3536728122053319e-14}, /* L815 */
+{4.9963314121564366e+00, 4.5263792713967632e-13,
+	2.2204460492503131e-16, 2.8066438062523957e-13,
+	-9.9809049913801573e-14}, /* L816 */
+{9.8972004374043845e+00, 8.9772633771190158e-13,
+	2.2204460492503131e-16, 6.7057470687359455e-14,
+	1.0680345496894006e-13}, /* L817 */
+{6.0547161540341738e+00, 5.4986570852122441e-13,
+	2.2204460492503131e-16, 1.0258460747536446e-13,
+	-1.8762769116165146e-13}, /* L818 */
+{5.6835788693408089e+00, 5.1679147072825060e-13,
+	2.2204460492503131e-16, -2.0883295093199195e-13,
+	1.4788170688007085e-13}, /* L819 */
+{7.7658659107967294e+00, 7.0699002208129968e-13,
+	2.2204460492503131e-16, -1.6586731987899839e-13,
+	-2.8610447344590284e-13}, /* L820 */
+{7.6443482359374508e+00, 6.9677597025474824e-13,
+	2.2204460492503131e-16, -2.0738966099997924e-13,
+	-3.7303493627405260e-14}, /* L821 */
+{4.9203240645320649e+00, 4.4902970230964456e-13,
+	2.2204460492503131e-16, -9.9920072216264089e-15,
+	4.5985437679973984e-13}, /* L822 */
+{5.4878579899365851e+00, 5.0143222907195195e-13,
+	2.2204460492503131e-16, 9.5545793499240972e-13,
+	6.0151883474190981e-13}, /* L823 */
+{6.2803497143765901e+00, 5.7454041524351851e-13,
+	2.2204460492503131e-16, 1.0880185641326534e-14,
+	-8.9372953482325102e-14}, /* L824 */
+{8.0253156918978181e+00, 7.3506478681650833e-13,
+	2.2204460492503131e-16, -5.2069459854919842e-14,
+	4.8849813083506888e-14}, /* L825 */
+{4.3955880487509509e+00, 4.0309422466577871e-13,
+	2.2204460492503131e-16, 1.0436096431476471e-14,
+	2.7666757773658901e-13}, /* L826 */
+{4.9359207257683675e+00, 4.5319303865198890e-13,
+	2.2204460492503131e-16, 2.1538326677728037e-14,
+	1.4632739464559563e-13}, /* L827 */
+{6.7110613127196102e+00, 6.1692317920858386e-13,
+	2.2204460492503131e-16, 3.9479530755670567e-13,
+	2.1938006966593093e-13}, /* L828 */
+{4.5184027861190534e+00, 4.1586178944896801e-13,
+	2.2204460492503131e-16, 1.5285550603039155e-12,
+	-1.9910739723627557e-12}, /* L829 */
+{7.1277220888234192e+00, 6.5680794136824261e-13,
+	2.2204460492503131e-16, 2.3336887977620790e-13,
+	-1.4099832412739488e-14}, /* L830 */
+{4.5854464643221036e+00, 4.2305048353341590e-13,
+	2.2204460492503131e-16, 1.5254464358349651e-12,
+	9.8032693074401323e-13}, /* L831 */
+{5.6953590457039507e+00, 5.2608264966558238e-13,
+	2.2204460492503131e-16, 1.4166445794216997e-13,
+	8.8817841970012523e-14}, /* L832 */
+{5.1566708007782589e+00, 4.7689630022773599e-13,
+	2.2204460492503131e-16, -6.5569771834361745e-13,
+	-1.4122036873231991e-13}, /* L833 */
+{5.6810641189063018e+00, 5.2602366906739917e-13,
+	2.2204460492503131e-16, 1.1255441023649837e-12,
+	-2.2061241722326486e-12}, /* L834 */
+{7.5390837507531092e+00, 6.9889927178934386e-13,
+	2.2204460492503131e-16, -2.3314683517128287e-15,
+	-1.8030021919912542e-13}, /* L835 */
+{6.5557818742044169e+00, 6.0847160643362486e-13,
+	2.2204460492503131e-16, 4.0634162701280729e-14,
+	-4.9737991503207013e-14}, /* L836 */
+{4.5770681531677999e+00, 4.2532644073389747e-13,
+	2.2204460492503131e-16, -3.1452618287630685e-13,
+	-9.8920871494101448e-14}, /* L837 */
+{4.8242916208647806e+00, 4.4883541328033516e-13,
+	2.2204460492503131e-16, 6.9944050551384862e-14,
+	2.4202861936828413e-14}, /* L838 */
+{6.6103538439799037e+00, 6.1573836307449170e-13,
+	2.2204460492503131e-16, 1.4455103780619538e-13,
+	-5.7398530373120593e-14}, /* L839 */
+{4.9940554981994092e+00, 4.6573855883025317e-13,
+	2.2204460492503131e-16, 1.5321077739827160e-14,
+	-5.6066262743570405e-14}, /* L840 */
+{5.7401993060558745e+00, 5.3596016513779432e-13,
+	2.2204460492503131e-16, 1.3078427230084344e-13,
+	5.5289106626332796e-14}, /* L841 */
+{6.2256630289172081e+00, 5.8197890950850706e-13,
+	2.2204460492503131e-16, -1.8007817459420039e-13,
+	1.4677148385544569e-13}, /* L842 */
+{5.8446118307928137e+00, 5.4700688423281463e-13,
+	2.2204460492503131e-16, -1.6151524562246777e-12,
+	2.3188118092321020e-12}, /* L843 */
+{5.6466321314715486e+00, 5.2910453796073398e-13,
+	2.2204460492503131e-16, -8.4021678503631847e-13,
+	9.3547392054915690e-13}, /* L844 */
+{5.3997126611756201e+00, 5.0656701056084330e-13,
+	2.2204460492503131e-16, -7.7826634026223473e-14,
+	2.6689761511988763e-13}, /* L845 */
+{5.2452801431278946e+00, 4.9266146717741321e-13,
+	2.2204460492503131e-16, 5.7509552675583109e-14,
+	-5.9285909514983359e-14}, /* L846 */
+{5.7857234138907518e+00, 5.4406479321755796e-13,
+	2.2204460492503131e-16, 1.1901590823981678e-13,
+	1.9317880628477724e-14}, /* L847 */
+{5.3661641266103519e+00, 5.0520698735567748e-13,
+	2.2204460492503131e-16, -2.5424107263916085e-13,
+	-2.2359891715950653e-13}, /* L848 */
+{6.3798687228077453e+00, 6.0135230128821604e-13,
+	2.2204460492503131e-16, -6.2394533983933798e-14,
+	-1.2212453270876722e-15}, /* L849 */
+{6.7017752793213372e+00, 6.3243854597772042e-13,
+	2.2204460492503131e-16, -3.1308289294429414e-14,
+	2.2204460492503131e-16}, /* L850 */
+{5.7622740735211968e+00, 5.4441867680665723e-13,
+	2.2204460492503131e-16, -2.8941293805928581e-12,
+	1.8149926006572059e-12}, /* L851 */
+{5.9629825592457770e+00, 5.6404360349038285e-13,
+	2.2204460492503131e-16, -1.0946799022804043e-13,
+	-1.4777068457760834e-13}, /* L852 */
+{5.0861744957595070e+00, 4.8167025923362417e-13,
+	2.2204460492503131e-16, -1.2292389328649733e-12,
+	6.4215299744319054e-13}, /* L853 */
+{5.0556285851944835e+00, 4.7933879088191134e-13,
+	2.2204460492503131e-16, -5.7731597280508140e-15,
+	1.0635936575909000e-13}, /* L854 */
+{6.2374367413835543e+00, 5.9208193903259598e-13,
+	2.2204460492503131e-16, 4.6629367034256575e-13,
+	4.5146109073357366e-12}, /* L855 */
+{5.9497757421420419e+00, 5.6543658644159223e-13,
+	2.2204460492503131e-16, 1.2900791546144319e-13,
+	1.5099033134902129e-14}, /* L856 */
+{5.0644770684410663e+00, 4.8186454826293357e-13,
+	2.2204460492503131e-16, -1.0880185641326534e-13,
+	1.0436096431476471e-14}, /* L857 */
+{6.2309247489302457e+00, 5.9353910675241650e-13,
+	2.2204460492503131e-16, 1.9899637493381306e-12,
+	4.6647130602650577e-12}, /* L858 */
+{4.4090581785389666e+00, 4.2048309278897023e-13,
+	2.2204460492503131e-16, 7.4784622938750545e-13,
+	-1.0299538999447577e-12}, /* L859 */
+{6.9174527740754632e+00, 6.6047167734950563e-13,
+	2.2204460492503131e-16, -3.7346792325365641e-12,
+	-7.3641093223386633e-13}, /* L860 */
+{5.5769542111074966e+00, 5.3310134084938454e-13,
+	2.2204460492503131e-16, -4.6074255521943996e-14,
+	8.0824236192711396e-14}, /* L861 */
+{6.3616689695639250e+00, 6.0881855112882022e-13,
+	2.2204460492503131e-16, 4.6629367034256575e-15,
+	-7.5939254884360707e-14}, /* L862 */
+{4.7879565690563686e+00, 4.5874415377511468e-13,
+	2.2204460492503131e-16, -1.6431300764452317e-13,
+	1.5742962489184720e-13}, /* L863 */
+{6.5356729271103298e+00, 6.2692212532411418e-13,
+	2.2204460492503131e-16, -1.9484414082171497e-13,
+	-3.0264679651281767e-13}, /* L864 */
+{5.1370023243348175e+00, 4.9332760099218831e-13,
+	2.2204460492503131e-16, -1.8285373215576328e-13,
+	3.6703973194107675e-13}, /* L865 */
+{6.7863848408743417e+00, 6.5247807157220450e-13,
+	2.2204460492503131e-16, -1.8418599978531347e-13,
+	3.0975222387041867e-13}, /* L866 */
+{6.4708867950856597e+00, 6.2286287239032845e-13,
+	2.2204460492503131e-16, 5.3734794391857577e-14,
+	3.0486724256206799e-13}, /* L867 */
+{6.7753563116450861e+00, 6.5292216078205456e-13,
+	2.2204460492503131e-16, -2.4824586830618500e-13,
+	-1.2900791546144319e-13}, /* L868 */
+{5.1585236737345079e+00, 4.9768522636384205e-13,
+	2.2204460492503131e-16, -3.3750779948604759e-14,
+	-1.8984813721090177e-14}, /* L869 */
+{7.3713478367140581e+00, 7.1199296458601680e-13,
+	2.2204460492503131e-16, 2.9332092310596636e-13,
+	-2.4069635173873394e-13}, /* L870 */
+{7.3077038371027525e+00, 7.0665695517391214e-13,
+	2.2204460492503131e-16, -2.8721469647052800e-13,
+	-5.0881521218570924e-13}, /* L871 */
+{5.4753526751941850e+00, 5.3007598310728099e-13,
+	2.2204460492503131e-16, -3.5804692544161298e-13,
+	-1.1535217225855376e-13}, /* L872 */
+{5.1340287185483042e+00, 4.9760195963699516e-13,
+	2.2204460492503131e-16, -2.3170354523927017e-13,
+	-1.6509016376176078e-13}, /* L873 */
+{5.6175717919442070e+00, 5.4509174951533623e-13,
+	2.2204460492503131e-16, 1.7430501486614958e-13,
+	5.7953641885433171e-14}, /* L874 */
+{6.0377238114716985e+00, 5.8653082390947020e-13,
+	2.2204460492503131e-16, -3.1419311596891930e-14,
+	-8.3932860661661834e-14}, /* L875 */
+{6.1301466578670061e+00, 5.9618976422370906e-13,
+	2.2204460492503131e-16, 7.1409544943890069e-13,
+	1.9251267247000214e-12}, /* L876 */
+{6.2750954190688208e+00, 6.1098348602683927e-13,
+	2.2204460492503131e-16, -3.6359804056473877e-13,
+	1.4579448759377556e-12}, /* L877 */
+{6.1107727389561139e+00, 5.9566240828701211e-13,
+	2.2204460492503131e-16, 1.1990408665951691e-14,
+	2.6134649999676185e-13}, /* L878 */
+{6.6204598194266104e+00, 6.4608041139280203e-13,
+	2.2204460492503131e-16, 1.8363088827300089e-13,
+	4.3232084578903596e-13}, /* L879 */
+{6.5198966501069764e+00, 6.3699046037868357e-13,
+	2.2204460492503131e-16, -9.1993079820440471e-13,
+	-2.1993518117824351e-13}, /* L880 */
+{6.6342329413196772e+00, 6.4889760231778837e-13,
+	2.2204460492503131e-16, 2.7200464103316335e-13,
+	1.5276668818842154e-13}, /* L881 */
+{5.9053381150579725e+00, 5.7825966237601278e-13,
+	2.2204460492503131e-16, 1.3633538742396922e-13,
+	6.5702998597316764e-13}, /* L882 */
+{6.0271895770870376e+00, 5.9086069370550831e-13,
+	2.2204460492503131e-16, -6.5503158452884236e-14,
+	2.4469315462738450e-13}, /* L883 */
+{5.7030632964053680e+00, 5.5971893786477267e-13,
+	2.2204460492503131e-16, 8.8595797365087492e-14,
+	9.7699626167013776e-15}, /* L884 */
+{7.0096155788907950e+00, 6.8872685332621586e-13,
+	2.2204460492503131e-16, -3.8880010322372982e-13,
+	2.2115642650533118e-13}, /* L885 */
+{8.0350013901915709e+00, 7.9036777123064894e-13,
+	2.2204460492503131e-16, 7.9491968563161208e-14,
+	-2.5246471579976060e-13}, /* L886 */
+{6.3557033758012915e+00, 6.2588823013243200e-13,
+	2.2204460492503131e-16, -2.5313084961453569e-14,
+	-2.0383694732117874e-13}, /* L887 */
+{5.8378470482479052e+00, 5.7553961596568115e-13,
+	2.2204460492503131e-16, -1.6220358389773537e-13,
+	2.6578739209526248e-13}, /* L888 */
+{5.8582769591789754e+00, 5.7820415122478153e-13,
+	2.2204460492503131e-16, 1.5365486660812167e-13,
+	1.8207657603852567e-13}, /* L889 */
+{6.8000107284255273e+00, 6.7190697450314474e-13,
+	2.2204460492503131e-16, -7.2275518903097691e-14,
+	6.7279515292284486e-14}, /* L890 */
+{8.0757703169420463e+00, 7.9886097736903139e-13,
+	2.2204460492503131e-16, 2.3625545964023331e-13,
+	-8.7863050168834889e-13}, /* L891 */
+{5.7140995420799570e+00, 5.6587720620449034e-13,
+	2.2204460492503131e-16, -3.1863400806741993e-13,
+	9.3480778673438181e-14}, /* L892 */
+{7.0554422624398523e+00, 6.9949601666507988e-13,
+	2.2204460492503131e-16, -3.1752378504279477e-14,
+	-1.6653345369377348e-15}, /* L893 */
+{4.9636543636273327e+00, 4.9266146717741321e-13,
+	2.2204460492503131e-16, -1.6919798895287386e-13,
+	6.9522165802027303e-13}, /* L894 */
+{6.3481943731287842e+00, 6.3078708922859050e-13,
+	2.2204460492503131e-16, -7.0132788465571139e-13,
+	3.3772984409097262e-13}, /* L895 */
+{6.9894083486650374e+00, 6.9527716917150428e-13,
+	2.2204460492503131e-16, -3.1763480734525729e-13,
+	-1.7030821197749901e-13}, /* L896 */
+{6.6542224549305811e+00, 6.6267304144052019e-13,
+	2.2204460492503131e-16, -1.0014211682118912e-13,
+	-3.5593750169482519e-13}, /* L897 */
+{7.0843652973185325e+00, 7.0629613269090896e-13,
+	2.2204460492503131e-16, -1.5165646516379638e-13,
+	2.1693757901175559e-13}, /* L898 */
+{5.8309324475313371e+00, 5.8197890950850706e-13,
+	2.2204460492503131e-16, 1.0942358130705543e-12,
+	6.3282712403633923e-13}, /* L899 */
+{6.6433438145839370e+00, 6.6380234642338110e-13,
+	2.2204460492503131e-16, -4.0523140398818214e-14,
+	7.4384942649885488e-14}, /* L900 */
+{6.9370253729904032e+00, 6.9391714596633847e-13,
+	2.2204460492503131e-16, -7.4795725168996796e-13,
+	-8.1212814251330201e-13}, /* L901 */
+{6.4007861517729747e+00, 6.4098726326733413e-13,
+	2.2204460492503131e-16, 2.6134649999676185e-13,
+	-1.1302070390684094e-13}, /* L902 */
+{7.6472988869014422e+00, 7.6666450965490185e-13,
+	2.2204460492503131e-16, 1.9584334154387761e-13,
+	-8.0824236192711396e-14}, /* L903 */
+{6.6161608808319823e+00, 6.6402439102830613e-13,
+	2.2204460492503131e-16, 7.0898842352562497e-13,
+	2.3647750424515834e-13}, /* L904 */
+{7.4878571174627959e+00, 7.5234263263723733e-13,
+	2.2204460492503131e-16, 3.0724311983476582e-12,
+	4.3143266736933583e-13}, /* L905 */
+{8.0027720079277849e+00, 8.0496720400446975e-13,
+	2.2204460492503131e-16, -4.8738790781044372e-14,
+	6.4392935428259079e-14}, /* L906 */
+{6.3291169314673299e+00, 6.3732352728607111e-13,
+	2.2204460492503131e-16, 2.4646951146678475e-14,
+	2.4868995751603507e-14}, /* L907 */
+{5.9894092292604926e+00, 6.0378091415458357e-13,
+	2.2204460492503131e-16, 1.6608936448392342e-13,
+	-5.2413628992553640e-13}, /* L908 */
+{7.1226735037165598e+00, 7.1881389729355760e-13,
+	2.2204460492503131e-16, -4.6851411639181606e-14,
+	2.2204460492503131e-15}, /* L909 */
+{1.2004963995260768e+01, 1.2128631432517523e-12,
+	2.2204460492503131e-16, -1.1879386363489175e-14,
+	-7.1498362785860081e-14}, /* L910 */
+{5.2436965276595409e+00, 5.3035353886343728e-13,
+	2.2204460492503131e-16, 1.4608314558017810e-12,
+	9.5767838104166003e-13}, /* L911 */
+{5.4082330733706163e+00, 5.4759538917203976e-13,
+	2.2204460492503131e-16, 6.2074789752841752e-12,
+	2.5446311724408588e-13}, /* L912 */
+{5.1336335100961161e+00, 5.2036153164181087e-13,
+	2.2204460492503131e-16, 1.3966605649784469e-13,
+	9.4058094646243262e-13}, /* L913 */
+{6.1307536550257353e+00, 6.2211347184870647e-13,
+	2.2204460492503131e-16, 9.4368957093138306e-14,
+	2.1094237467877974e-14}, /* L914 */
+{6.5106660096199507e+00, 6.6138761134482138e-13,
+	2.2204460492503131e-16, 5.0759396685862157e-13,
+	-1.1102230246251565e-13}, /* L915 */
+{8.3286157600311341e+00, 8.4698914548653192e-13,
+	2.2204460492503131e-16, -1.0836886943366153e-12,
+	5.4738436006118718e-12}, /* L916 */
+{5.2467367401910279e+00, 5.3415605272277844e-13,
+	2.2204460492503131e-16, 2.6645352591003757e-15,
+	-4.6740389336719090e-14}, /* L917 */
+{7.6448922354710795e+00, 7.7915451868193486e-13,
+	2.2204460492503131e-16, 6.1779470428291461e-12,
+	1.6034951144661136e-11}, /* L918 */
+{5.4037081990071005e+00, 5.5133675402885274e-13,
+	2.2204460492503131e-16, -4.3998138465894954e-13,
+	-1.2402301408087624e-12}, /* L919 */
+{4.3652242783491957e+00, 4.4586556668946287e-13,
+	2.2204460492503131e-16, -3.4305891460917337e-14,
+	-6.0951244051921094e-14}, /* L920 */
+{6.3895323392144743e+00, 6.5333849441628900e-13,
+	2.2204460492503131e-16, 1.1612932837579137e-13,
+	-3.1674662892555716e-13}, /* L921 */
+{5.8123735953795981e+00, 5.9496851889662139e-13,
+	2.2204460492503131e-16, -5.8375526634790731e-13,
+	-9.4768637382003362e-13}, /* L922 */
+{6.5474101132018605e+00, 6.7093552935659773e-13,
+	2.2204460492503131e-16, -6.0607074914287296e-13,
+	-8.4632301167175683e-13}, /* L923 */
+{5.7401335151183037e+00, 5.8884841447337521e-13,
+	2.2204460492503131e-16, 5.9752203185325925e-13,
+	4.7628567756419216e-13}, /* L924 */
+{6.8264972566862019e+00, 7.0105032889955510e-13,
+	2.2204460492503131e-16, 1.4004353232621725e-12,
+	-5.8375526634790731e-13}, /* L925 */
+{6.4638330921997484e+00, 6.6452399138938745e-13,
+	2.2204460492503131e-16, -2.8677060726067793e-13,
+	-5.5944138210861638e-13}, /* L926 */
+{6.1794865563184924e+00, 6.3597738186871311e-13,
+	2.2204460492503131e-16, 4.0101255649460654e-13,
+	-1.5787371410169726e-13}, /* L927 */
+{8.3223124297326248e+00, 8.5743565025886426e-13,
+	2.2204460492503131e-16, -1.8762769116165146e-14,
+	-2.0916601783937949e-13}, /* L928 */
+{7.4370407969731209e+00, 7.6705308771352065e-13,
+	2.2204460492503131e-16, -9.6112007241799802e-13,
+	3.5260683262094972e-13}, /* L929 */
+{6.5539081896025664e+00, 6.7669481129684073e-13,
+	2.2204460492503131e-16, 1.1857181902996672e-13,
+	-9.2148511043887993e-15}, /* L930 */
+{8.1063500611954957e+00, 8.3788531668460564e-13,
+	2.2204460492503131e-16, 8.1490370007486490e-14,
+	7.0832228971084987e-14}, /* L931 */
+{5.0944286380281163e+00, 5.2713389209202433e-13,
+	2.2204460492503131e-16, 7.9602990865623724e-13,
+	-1.0729306332279975e-11}, /* L932 */
+{6.4677553810622532e+00, 6.6995367586919485e-13,
+	2.2204460492503131e-16, 4.0856207306205761e-13,
+	-2.1882495815361835e-13}, /* L933 */
+{5.1754631974800116e+00, 5.3666793231599286e-13,
+	2.2204460492503131e-16, 6.5281113847959205e-13,
+	1.9029222642075183e-13}, /* L934 */
+{5.5473349552734277e+00, 5.7584492729745307e-13,
+	2.2204460492503131e-16, -1.0713652187632761e-13,
+	-1.4399592629388280e-13}, /* L935 */
+{6.4204161123026866e+00, 6.6718852664848782e-13,
+	2.2204460492503131e-16, -1.6613377340490842e-12,
+	6.1659566341631944e-12}, /* L936 */
+{5.8863486679335608e+00, 6.1234350923200509e-13,
+	2.2204460492503131e-16, -1.5709655798445965e-13,
+	4.4408920985006262e-14}, /* L937 */
+{7.0773032767795323e+00, 7.3702155489741017e-13,
+	2.2204460492503131e-16, 4.1899816949353408e-13,
+	-5.4400928206632670e-14}, /* L938 */
+{7.1384564168047788e+00, 7.4418249340624243e-13,
+	2.2204460492503131e-16, 2.1316282072803006e-13,
+	8.6930462828149757e-13}, /* L939 */
+{7.2005432752390668e+00, 7.5145445421753720e-13,
+	2.2204460492503131e-16, 1.1635137298071641e-13,
+	-1.0236256287043943e-13}, /* L940 */
+{5.2109540236965906e+00, 5.4439786012494551e-13,
+	2.2204460492503131e-16, -1.0424994201230220e-13,
+	4.4408920985006262e-16}, /* L941 */
+{7.2018425725798965e+00, 7.5318917769351401e-13,
+	2.2204460492503131e-16, 6.1728400169158704e-13,
+	1.6231460620019789e-13}, /* L942 */
+{7.5646991034900575e+00, 7.9197759461635542e-13,
+	2.2204460492503131e-16, -4.1189274213593308e-14,
+	6.6391336872584361e-14}, /* L943 */
+{8.0042499164981002e+00, 8.3888451740676828e-13,
+	2.2204460492503131e-16, 9.6811447747313650e-14,
+	1.1080025785759062e-13}, /* L944 */
+{7.2097997347402023e+00, 7.5642270225273478e-13,
+	2.2204460492503131e-16, 3.7081449022480228e-14,
+	8.9483975784787617e-14}, /* L945 */
+{4.6287007350864569e+00, 4.8613890690774042e-13,
+	2.2204460492503131e-16, -9.7588603864551260e-14,
+	2.5313084961453569e-14}, /* L946 */
+{6.6119337702020271e+00, 6.9516614686904177e-13,
+	2.2204460492503131e-16, 1.8274270985330077e-13,
+	6.1461946643248666e-13}, /* L947 */
+{5.5200433228603947e+00, 5.8097970878634442e-13,
+	2.2204460492503131e-16, 1.6053824936079764e-13,
+	2.1138646388862981e-13}, /* L948 */
+{5.4968399016857976e+00, 5.7914784079571291e-13,
+	2.2204460492503131e-16, -9.5479180117763462e-15,
+	-1.3922196728799463e-13}, /* L949 */
+{5.8255275069440060e+00, 6.1442517740317726e-13,
+	2.2204460492503131e-16, -7.0555783437953323e-12,
+	1.0891287871572786e-11}, /* L950 */
+{6.8811791147795152e+00, 7.2652994731470244e-13,
+	2.2204460492503131e-16, -8.1379347705023974e-14,
+	-2.1538326677728037e-14}, /* L951 */
+{9.0120816747706520e+00, 9.5251584397715305e-13,
+	2.2204460492503131e-16, 2.0716761639505421e-13,
+	3.2818192607919627e-13}, /* L952 */
+{6.6128030311209933e+00, 6.9966255011877365e-13,
+	2.2204460492503131e-16, 1.1841638780651920e-12,
+	1.8962609260597674e-13}, /* L953 */
+{4.9091991170558229e+00, 5.1995907579538425e-13,
+	2.2204460492503131e-16, 2.1982415887578100e-14,
+	9.2126306583395490e-13}, /* L954 */
+{6.3900536626935871e+00, 6.7751360077750178e-13,
+	2.2204460492503131e-16, 1.2656542480726785e-13,
+	7.9691808707593736e-13}, /* L955 */
+{5.8969677330262291e+00, 6.2588823013243200e-13,
+	2.2204460492503131e-16, 1.5756285165480222e-12,
+	-6.2350125062948791e-13}, /* L956 */
+{7.6933140078650801e+00, 8.1740170188027150e-13,
+	2.2204460492503131e-16, -5.2735593669694936e-14,
+	-1.6120438317557273e-13}, /* L957 */
+{5.8556901326765569e+00, 6.2280736123909719e-13,
+	2.2204460492503131e-16, -1.0802470029602773e-13,
+	7.5406347832540632e-13}, /* L958 */
+{6.8952047467702009e+00, 7.3413497503338476e-13,
+	2.2204460492503131e-16, 2.0872192862952943e-13,
+	9.4035890185750759e-13}, /* L959 */
+{6.1161470839986061e+00, 6.5186744890866066e-13,
+	2.2204460492503131e-16, 6.1728400169158704e-14,
+	-6.3837823915946501e-14}, /* L960 */
+{6.1335860617206910e+00, 6.5440708407749071e-13,
+	2.2204460492503131e-16, -4.2188474935755949e-14,
+	-1.3622436512150671e-13}, /* L961 */
+{5.7419450410871500e+00, 6.1325944322732084e-13,
+	2.2204460492503131e-16, -4.3332004651119860e-13,
+	-2.2770674235061961e-13}, /* L962 */
+{6.4761176274904235e+00, 6.9239058930747888e-13,
+	2.2204460492503131e-16, 6.6613381477509392e-14,
+	5.0648374383399641e-13}, /* L963 */
+{5.2842334456957394e+00, 5.6554760874405474e-13,
+	2.2204460492503131e-16, -2.0439205883349132e-13,
+	-1.0547118733938987e-13}, /* L964 */
+{6.9018148828218333e+00, 7.3943628997596988e-13,
+	2.2204460492503131e-16, -1.1624035067825389e-13,
+	2.8044233602031454e-13}, /* L965 */
+{5.8033138160706299e+00, 6.2239102760486276e-13,
+	2.2204460492503131e-16, -6.7146288529329468e-13,
+	-2.7422508708241367e-14}, /* L966 */
+{7.3660821680963160e+00, 7.9081186044049900e-13,
+	2.2204460492503131e-16, 1.3300471835009375e-13,
+	2.1360690993788012e-13}, /* L967 */
+{6.4925116581854301e+00, 6.9774741540129526e-13,
+	2.2204460492503131e-16, -4.2765790908561030e-13,
+	1.6875389974302379e-13}, /* L968 */
+{5.7084634995950481e+00, 6.1411986607140534e-13,
+	2.2204460492503131e-16, -4.5641268542340185e-13,
+	-3.9779290972319359e-13}, /* L969 */
+{6.9384034806582662e+00, 7.4720785114834598e-13,
+	2.2204460492503131e-16, 1.8429702208777599e-14,
+	2.3026025530725747e-13}, /* L970 */
+{6.5687449065401884e+00, 7.0812800068154047e-13,
+	2.2204460492503131e-16, 3.3595348725157237e-13,
+	-9.3069996154326873e-13}, /* L971 */
+{5.8868324794816296e+00, 6.3526961469051457e-13,
+	2.2204460492503131e-16, 7.2875039336395275e-13,
+	-1.0487166690609229e-12}, /* L972 */
+{7.8915740700310826e+00, 8.5248474945842645e-13,
+	2.2204460492503131e-16, -2.3903101720179620e-13,
+	-1.8807178037150152e-13}, /* L973 */
+{5.2992823977846522e+00, 5.7304161416027455e-13,
+	2.2204460492503131e-16, -8.4809936851115708e-13,
+	-8.0846440653203899e-13}, /* L974 */
+{7.8897452030801762e+00, 8.5403906169290167e-13,
+	2.2204460492503131e-16, -4.7895021282329253e-13,
+	1.0214051826551440e-14}, /* L975 */
+{5.5701855652531194e+00, 6.0357274733746635e-13,
+	2.2204460492503131e-16, -1.5420997812043424e-13,
+	5.4400928206632670e-14}, /* L976 */
+{8.8536353826019187e+00, 9.6034291630076041e-13,
+	2.2204460492503131e-16, 7.2830630415410269e-14,
+	2.6645352591003757e-14}, /* L977 */
+{7.4910547015443365e+00, 8.1337714341600531e-13,
+	2.2204460492503131e-16, -1.8041124150158794e-13,
+	-1.5976109324356003e-13}, /* L978 */
+{6.9984692553917132e+00, 7.6066930532192600e-13,
+	2.2204460492503131e-16, 9.5701224722688494e-14,
+	9.5146113210375916e-13}, /* L979 */
+{5.6237256397473212e+00, 6.1187166444653940e-13,
+	2.2204460492503131e-16, -1.4513945600924671e-12,
+	1.7341683644644945e-12}, /* L980 */
+{6.8144764189416032e+00, 7.4218409196191715e-13,
+	2.2204460492503131e-16, 3.3084646133829665e-14,
+	7.1054273576010019e-14}, /* L981 */
+{6.8194387671740184e+00, 7.4348166512194780e-13,
+	2.2204460492503131e-16, 3.8768988019910466e-13,
+	1.0855760734784781e-12}, /* L982 */
+{6.1744671832417808e+00, 6.7384986479623876e-13,
+	2.2204460492503131e-16, -1.1679546219056647e-13,
+	1.3034018309099338e-13}, /* L983 */
+{6.6580298167526362e+00, 7.2736261458317131e-13,
+	2.2204460492503131e-16, -2.4358293160275934e-13,
+	-3.3195668436292181e-14}, /* L984 */
+{6.9218288265079506e+00, 7.5695005818943173e-13,
+	2.2204460492503131e-16, -5.2785553705803068e-12,
+	1.2372325386422744e-12}, /* L985 */
+{8.8133892261460289e+00, 9.6478380839926103e-13,
+	2.2204460492503131e-16, -2.9298785619857881e-13,
+	-9.4368957093138306e-14}, /* L986 */
+{7.7326510239734114e+00, 8.4733609018172729e-13,
+	2.2204460492503131e-16, -1.3389289676979388e-13,
+	1.5210055437364645e-13}, /* L987 */
+{6.5222685401886586e+00, 7.1542771706845087e-13,
+	2.2204460492503131e-16, 1.2811973704174306e-13,
+	3.2640556923979602e-14}, /* L988 */
+{9.8710839194041888e+00, 1.0838552277903091e-12,
+	2.2204460492503131e-16, -5.1725290717286043e-13,
+	5.0848214527832170e-13}, /* L989 */
+{6.3823245374172632e+00, 7.0149441810940516e-13,
+	2.2204460492503131e-16, 2.0516921495072893e-13,
+	3.2551739082009590e-13}, /* L990 */
+{6.0630688482802162e+00, 6.6707750434602531e-13,
+	2.2204460492503131e-16, -3.6415315207705135e-13,
+	5.9574567501385900e-13}, /* L991 */
+{6.6491949080503927e+00, 7.3230310704275325e-13,
+	2.2204460492503131e-16, 3.1996627569697011e-13,
+	1.2234657731369225e-13}, /* L992 */
+{7.4598454327789847e+00, 8.2241158327889252e-13,
+	2.2204460492503131e-16, 6.7812422344104561e-13,
+	4.6185277824406512e-14}, /* L993 */
+{8.9547302012872230e+00, 9.8820951421885184e-13,
+	2.2204460492503131e-16, -1.5176748746625890e-12,
+	2.4202861936828413e-14}, /* L994 */
+{6.8987451292889022e+00, 7.6208483967832308e-13,
+	2.2204460492503131e-16, -4.3742787170231168e-14,
+	3.8413716652030416e-14}, /* L995 */
+{5.9713867632325286e+00, 6.6030514389581185e-13,
+	2.2204460492503131e-16, -9.8809849191638932e-15,
+	1.8718360195180139e-13}, /* L996 */
+{5.5250763554684852e+00, 6.1156635311476748e-13,
+	2.2204460492503131e-16, -1.3222756223285614e-13,
+	1.8895995879120164e-13}, /* L997 */
+{6.2720453707206296e+00, 6.9494410226411674e-13,
+	2.2204460492503131e-16, -4.5630166312093934e-14,
+	-1.0880185641326534e-13}, /* L998 */
+{8.0370386804875285e+00, 8.9139806647153819e-13,
+	2.2204460492503131e-16, -3.5416114485542494e-14,
+	-4.7517545453956700e-14}, /* L999 */
+{7.2375014799653465e+00, 8.0352391407245705e-13,
+	2.2204460492503131e-16, -3.5860203695392556e-14,
+	-1.8474111129762605e-13}, /* L1000 */
+{1.0704751534462535e+01, 2.3769319845712289e-12,
+	2.2204460492503131e-16, -5.1324500205396362e-12,
+	2.5088819910479288e-12}, /* L1001 */
+{1.9969666668716467e+01, 6.6512351182268503e-12,
+	2.2204460492503131e-16, -7.0245698147175517e-11,
+	9.7082342165322189e-12}, /* L1002 */
+{2.5142056782565259e+01, 1.1209977390791437e-11,
+	2.2204460492503131e-16, 5.4001247917767614e-13,
+	-5.6191717945353048e-12}, /* L1003 */
+{2.8323200010548174e+01, 1.5722534385531617e-11,
+	2.2204460492503131e-16, -3.7680969455777813e-12,
+	-3.6082248300317588e-12}, /* L1004 */
+{3.2321791678561532e+01, 2.1530638383282508e-11,
+	2.2204460492503131e-16, 1.4333201292515696e-11,
+	6.5796257331385277e-12}, /* L1005 */
+{3.7391747446514401e+01, 2.9125646339167588e-11,
+	2.2204460492503131e-16, -2.7823965353945823e-11,
+	-1.8096635301390052e-11}, /* L1006 */
+{3.5997876224631987e+01, 3.2108420089382861e-11,
+	2.2204460492503131e-16, 1.3131717935266352e-11,
+	1.3136158827364852e-11}, /* L1007 */
+{4.6061583130257695e+01, 4.6024767330621330e-11,
+	2.2204460492503131e-16, -8.7482243671388460e-11,
+	9.2451313271624258e-10}, /* L1008 */
+{6.2174100014595624e+01, 6.9027117355346945e-11,
+	2.2204460492503131e-16, -4.0004777268620728e-11,
+	1.7784218542260533e-11}, /* L1009 */#else  /* }  { */
+
+/* Start of SP golden values */
+
+
+{, 0.0000000000000000e+00,
+	0.0000000000000000e+00, 0.0000000000000000e+00,
+	0.0000000000000000e+00, /* L1010 */
+{0.0000000000000000e+00, 0.0000000000000000e+00,
+	1.1920928955078125e-07, 0.0000000000000000e+00,
+	0.0000000000000000e+00}, /* L1011 */
+{0.0000000000000000e+00, 0.0000000000000000e+00,
+	1.1920928955078125e-07, 0.0000000000000000e+00,
+	0.0000000000000000e+00}, /* L1012 */
+{6.8018096685409546e-01, 1.1920928955078125e-07,
+	1.1920928955078125e-07, -5.9604644775390625e-08,
+	-1.1920928955078125e-07}, /* L1013 */
+{8.9273703098297119e-01, 2.0861625671386719e-07,
+	1.1920928955078125e-07, -1.1920928955078125e-07,
+	-2.3841857910156250e-07}, /* L1014 */
+{7.1418994665145874e-01, 2.0861625671386719e-07,
+	1.1920928955078125e-07, -5.9604644775390625e-08,
+	1.1920928955078125e-07}, /* L1015 */
+{3.6134567856788635e-01, 1.2665987014770508e-07,
+	1.1920928955078125e-07, 2.3841857910156250e-07,
+	7.1525573730468750e-07}, /* L1016 */
+{4.3648514151573181e-01, 1.7881393432617188e-07,
+	1.1920928955078125e-07, -5.9604644775390625e-08,
+	3.5762786865234375e-07}, /* L1017 */
+{4.7549185156822205e-01, 2.2351741790771484e-07,
+	1.1920928955078125e-07, 3.6954879760742188e-06,
+	-5.9604644775390625e-07}, /* L1018 */
+{4.2266038060188293e-01, 2.2351741790771484e-07,
+	1.1920928955078125e-07, 4.7683715820312500e-07,
+	8.3446502685546875e-07}, /* L1019 */
+{4.0575435757637024e-01, 2.3841857910156250e-07,
+	1.1920928955078125e-07, 3.5762786865234375e-07,
+	3.5762786865234375e-07}, /* L1020 */
+{3.2275927066802979e-01, 2.0861625671386719e-07,
+	1.1920928955078125e-07, -1.1920928955078125e-07,
+	1.1920928955078125e-07}, /* L1021 */
+{2.9586255550384521e-01, 2.0861625671386719e-07,
+	1.1920928955078125e-07, -1.1920928955078125e-07,
+	-2.3841857910156250e-07}, /* L1022 */
+{7.8410917520523071e-01, 6.0349702835083008e-07,
+	1.1920928955078125e-07, 7.1525573730468750e-07,
+	-7.1525573730468750e-07}, /* L1023 */
+{3.5955643653869629e-01, 2.9802322387695312e-07,
+	1.1920928955078125e-07, -3.5762786865234375e-07,
+	-3.5762786865234375e-07}, /* L1024 */
+{4.0270313620567322e-01, 3.5762786865234375e-07,
+	1.1920928955078125e-07, -2.3841857910156250e-07,
+	3.5762786865234375e-07}, /* L1025 */
+{2.9888099431991577e-01, 2.8312206268310547e-07,
+	1.1920928955078125e-07, -7.1525573730468750e-07,
+	-1.1920928955078125e-07}, /* L1026 */
+{5.8850812911987305e-01, 5.9232115745544434e-07,
+	1.1920928955078125e-07, -1.7285346984863281e-06,
+	3.5762786865234375e-07}, /* L1027 */
+{5.0337857007980347e-01, 5.3644180297851562e-07,
+	1.1920928955078125e-07, -4.7683715820312500e-07,
+	-4.7683715820312500e-07}, /* L1028 */
+{4.5867058634757996e-01, 5.1595270633697510e-07,
+	1.1920928955078125e-07, 7.1525573730468750e-07,
+	-1.2516975402832031e-06}, /* L1029 */
+{4.7820881009101868e-01, 5.6624412536621094e-07,
+	1.1920928955078125e-07, 0.0000000000000000e+00,
+	-1.0728836059570312e-06}, /* L1030 */
+{9.7883027791976929e-01, 1.2218952178955078e-06,
+	1.1920928955078125e-07, 8.3446502685546875e-07,
+	2.3841857910156250e-07}, /* L1031 */
+{4.2159116268157959e-01, 5.5134296417236328e-07,
+	1.1920928955078125e-07, -2.6822090148925781e-06,
+	-8.9406967163085938e-07}, /* L1032 */
+{5.0135254859924316e-01, 6.8545341491699219e-07,
+	1.1920928955078125e-07, 1.1920928955078125e-07,
+	-1.7881393432617188e-07}, /* L1033 */
+{1.0027021169662476e+00, 1.4305114746093750e-06,
+	1.1920928955078125e-07, -3.6954879760742188e-06,
+	-2.3841857910156250e-07}, /* L1034 */
+{7.2194659709930420e-01, 1.0728836059570312e-06,
+	1.1920928955078125e-07, -5.3644180297851562e-07,
+	4.7683715820312500e-07}, /* L1035 */
+{3.9529633522033691e-01, 6.1094760894775391e-07,
+	1.1920928955078125e-07, -1.6093254089355469e-06,
+	1.1920928955078125e-07}, /* L1036 */
+{5.9419322013854980e-01, 9.5367431640625000e-07,
+	1.1920928955078125e-07, 2.2649765014648438e-06,
+	0.0000000000000000e+00}, /* L1037 */
+{5.9087789058685303e-01, 9.8347663879394531e-07,
+	1.1920928955078125e-07, 2.2649765014648438e-06,
+	-2.9802322387695312e-06}, /* L1038 */
+{6.3101136684417725e-01, 1.0877847671508789e-06,
+	1.1920928955078125e-07, 2.3841857910156250e-07,
+	1.1920928955078125e-06}, /* L1039 */
+{1.1363973617553711e+00, 2.0265579223632812e-06,
+	1.1920928955078125e-07, -5.9604644775390625e-07,
+	2.3841857910156250e-07}, /* L1040 */
+{5.0943696498870850e-01, 9.3877315521240234e-07,
+	1.1920928955078125e-07, 2.8610229492187500e-06,
+	-3.1590461730957031e-06}, /* L1041 */
+{9.7332048416137695e-01, 1.8514692783355713e-06,
+	1.1920928955078125e-07, -5.9604644775390625e-07,
+	7.2717666625976562e-06}, /* L1042 */
+{8.8116312026977539e-01, 1.7285346984863281e-06,
+	1.1920928955078125e-07, 1.0728836059570312e-06,
+	-1.0132789611816406e-06}, /* L1043 */
+{1.0469392538070679e+00, 2.1159648895263672e-06,
+	1.1920928955078125e-07, 0.0000000000000000e+00,
+	-1.7285346984863281e-06}, /* L1044 */
+{6.3979321718215942e-01, 1.3336539268493652e-06,
+	1.1920928955078125e-07, -1.1920928955078125e-07,
+	1.4305114746093750e-06}, /* L1045 */
+{9.8686885833740234e-01, 2.1159648895263672e-06,
+	1.1920928955078125e-07, 2.7179718017578125e-05,
+	-2.1398067474365234e-05}, /* L1046 */
+{5.1392030715942383e-01, 1.1324882507324219e-06,
+	1.1920928955078125e-07, 3.0994415283203125e-06,
+	-1.0728836059570312e-06}, /* L1047 */
+{5.0039225816726685e-01, 1.1324882507324219e-06,
+	1.1920928955078125e-07, 4.2915344238281250e-06,
+	1.1920928955078125e-07}, /* L1048 */
+{8.0833417177200317e-01, 1.8775463104248047e-06,
+	1.1920928955078125e-07, 9.5367431640625000e-07,
+	-4.7683715820312500e-07}, /* L1049 */
+{6.4095199108123779e-01, 1.5273690223693848e-06,
+	1.1920928955078125e-07, -9.3042850494384766e-05,
+	2.2375583648681641e-04}, /* L1050 */
+{1.0251988172531128e+00, 2.5033950805664062e-06,
+	1.1920928955078125e-07, -2.5629997253417969e-06,
+	-2.5629997253417969e-06}, /* L1051 */
+{7.3866742849349976e-01, 1.8477439880371094e-06,
+	1.1920928955078125e-07, -3.5762786865234375e-07,
+	1.0728836059570312e-06}, /* L1052 */
+{1.1637136936187744e+00, 2.9802322387695312e-06,
+	1.1920928955078125e-07, 1.9073486328125000e-06,
+	-9.5367431640625000e-07}, /* L1053 */
+{6.5105575323104858e-01, 1.7061829566955566e-06,
+	1.1920928955078125e-07, -1.5676021575927734e-05,
+	1.1682510375976562e-05}, /* L1054 */
+{8.4511369466781616e-01, 2.2649765014648438e-06,
+	1.1920928955078125e-07, -4.7683715820312500e-07,
+	-6.1392784118652344e-06}, /* L1055 */
+{1.0660614967346191e+00, 2.9206275939941406e-06,
+	1.1920928955078125e-07, -5.5432319641113281e-06,
+	-1.7881393432617188e-06}, /* L1056 */
+{1.0486901998519897e+00, 2.9355287551879883e-06,
+	1.1920928955078125e-07, 1.1920928955078125e-07,
+	-6.5565109252929688e-07}, /* L1057 */
+{8.1313973665237427e-01, 2.3245811462402344e-06,
+	1.1920928955078125e-07, 2.2649765014648438e-06,
+	7.1525573730468750e-07}, /* L1058 */
+{1.0204066038131714e+00, 2.9802322387695312e-06,
+	1.1920928955078125e-07, 1.0013580322265625e-05,
+	-3.5762786865234375e-07}, /* L1059 */
+{8.1000715494155884e-01, 2.4139881134033203e-06,
+	1.1920928955078125e-07, -1.7881393432617188e-06,
+	-3.0398368835449219e-06}, /* L1060 */
+{9.7052782773971558e-01, 2.9504299163818359e-06,
+	1.1920928955078125e-07, 6.0796737670898438e-06,
+	-2.6702880859375000e-05}, /* L1061 */
+{6.6346895694732666e-01, 2.0563602447509766e-06,
+	1.1920928955078125e-07, -1.0728836059570312e-06,
+	-1.1324882507324219e-06}, /* L1062 */
+{8.2547765970230103e-01, 2.6077032089233398e-06,
+	1.1920928955078125e-07, 7.1525573730468750e-07,
+	7.1525573730468750e-07}, /* L1063 */
+{1.0555671453475952e+00, 3.3974647521972656e-06,
+	1.1920928955078125e-07, 3.5762786865234375e-07,
+	-7.1525573730468750e-07}, /* L1064 */
+{6.0000658035278320e-01, 1.9669532775878906e-06,
+	1.1920928955078125e-07, -1.0132789611816406e-06,
+	-5.9604644775390625e-08}, /* L1065 */
+{6.0714846849441528e-01, 2.0265579223632812e-06,
+	1.1920928955078125e-07, -5.8412551879882812e-06,
+	-1.4305114746093750e-06}, /* L1066 */
+{6.2719875574111938e-01, 2.1308660507202148e-06,
+	1.1920928955078125e-07, -3.4570693969726562e-06,
+	-8.3446502685546875e-07}, /* L1067 */
+{7.5642675161361694e-01, 2.6151537895202637e-06,
+	1.1920928955078125e-07, -3.0875205993652344e-05,
+	-1.6927719116210938e-05}, /* L1068 */
+{7.1186864376068115e-01, 2.5033950805664062e-06,
+	1.1920928955078125e-07, -4.4107437133789062e-06,
+	-4.2319297790527344e-06}, /* L1069 */
+{5.5729919672012329e-01, 1.9930303096771240e-06,
+	1.1920928955078125e-07, 5.9604644775390625e-07,
+	1.0728836059570312e-06}, /* L1070 */
+{9.2214035987854004e-01, 3.3527612686157227e-06,
+	1.1920928955078125e-07, -2.3841857910156250e-07,
+	2.3841857910156250e-06}, /* L1071 */
+{1.1209777593612671e+00, 4.1425228118896484e-06,
+	1.1920928955078125e-07, -8.3446502685546875e-07,
+	-3.3378601074218750e-06}, /* L1072 */
+{8.2143312692642212e-01, 3.0845403671264648e-06,
+	1.1920928955078125e-07, 2.0265579223632812e-06,
+	1.4305114746093750e-06}, /* L1073 */
+{9.1016262769699097e-01, 3.4719705581665039e-06,
+	1.1920928955078125e-07, 4.7683715820312500e-07,
+	-7.2121620178222656e-06}, /* L1074 */
+{8.4808546304702759e-01, 3.2857060432434082e-06,
+	1.1920928955078125e-07, 3.8146972656250000e-06,
+	-1.7285346984863281e-06}, /* L1075 */
+{7.8788590431213379e-01, 3.0994415283203125e-06,
+	1.1920928955078125e-07, -4.7087669372558594e-06,
+	2.0265579223632812e-06}, /* L1076 */
+{8.2463252544403076e-01, 3.2931566238403320e-06,
+	1.1920928955078125e-07, -2.3841857910156250e-07,
+	-1.9073486328125000e-06}, /* L1077 */
+{8.6029779911041260e-01, 3.4868717193603516e-06,
+	1.1920928955078125e-07, 1.5497207641601562e-06,
+	1.9073486328125000e-06}, /* L1078 */
+{8.8033676147460938e-01, 3.6209821701049805e-06,
+	1.1920928955078125e-07, -5.0604343414306641e-05,
+	-1.2701749801635742e-04}, /* L1079 */
+{1.2535502910614014e+00, 5.2303075790405273e-06,
+	1.1920928955078125e-07, 8.4638595581054688e-06,
+	1.1920928955078125e-06}, /* L1080 */
+{9.0141552686691284e-01, 3.8146972656250000e-06,
+	1.1920928955078125e-07, 2.2649765014648438e-06,
+	3.3378601074218750e-06}, /* L1081 */
+{7.7777242660522461e-01, 3.3378601074218750e-06,
+	1.1920928955078125e-07, -9.0599060058593750e-06,
+	-1.4185905456542969e-05}, /* L1082 */
+{1.0034232139587402e+00, 4.3660402297973633e-06,
+	1.1920928955078125e-07, -1.0013580322265625e-05,
+	2.9802322387695312e-06}, /* L1083 */
+{8.9863836765289307e-01, 3.9637088775634766e-06,
+	1.1920928955078125e-07, -7.4505805969238281e-06,
+	-6.9737434387207031e-06}, /* L1084 */
+{1.0266774892807007e+00, 4.5895576477050781e-06,
+	1.1920928955078125e-07, 1.6689300537109375e-06,
+	-7.7486038208007812e-07}, /* L1085 */
+{6.6445106267929077e-01, 3.0100345611572266e-06,
+	1.1920928955078125e-07, -2.8014183044433594e-05,
+	-2.6226043701171875e-05}, /* L1086 */
+{1.2500019073486328e+00, 5.7369470596313477e-06,
+	1.1920928955078125e-07, 1.0728836059570312e-06,
+	-2.9802322387695312e-07}, /* L1087 */
+{1.0576709508895874e+00, 4.9173831939697266e-06,
+	1.1920928955078125e-07, 4.7683715820312500e-07,
+	1.9669532775878906e-05}, /* L1088 */
+{8.0380576848983765e-01, 3.7848949432373047e-06,
+	1.1920928955078125e-07, -2.9802322387695312e-07,
+	1.3113021850585938e-06}, /* L1089 */
+{6.3124734163284302e-01, 3.0100345611572266e-06,
+	1.1920928955078125e-07, -7.3313713073730469e-06,
+	-4.0531158447265625e-06}, /* L1090 */
+{1.2044825553894043e+00, 5.8151781558990479e-06,
+	1.1920928955078125e-07, 2.8610229492187500e-06,
+	-4.4107437133789062e-06}, /* L1091 */
+{8.1098091602325439e-01, 3.9637088775634766e-06,
+	1.1920928955078125e-07, 2.6226043701171875e-06,
+	-5.0067901611328125e-06}, /* L1092 */
+{1.2168718576431274e+00, 6.0200691223144531e-06,
+	1.1920928955078125e-07, 1.4305114746093750e-06,
+	-1.4901161193847656e-06}, /* L1093 */
+{5.6548178195953369e-01, 2.8312206268310547e-06,
+	1.1920928955078125e-07, 5.1259994506835938e-06,
+	-1.6689300537109375e-06}, /* L1094 */
+{1.3882204294204712e+00, 7.0333480834960938e-06,
+	1.1920928955078125e-07, 2.8610229492187500e-06,
+	1.5497207641601562e-06}, /* L1095 */
+{1.7107630968093872e+00, 8.7693333625793457e-06,
+	1.1920928955078125e-07, 6.7949295043945312e-06,
+	3.0994415283203125e-06}, /* L1096 */
+{8.1896400451660156e-01, 4.2468309402465820e-06,
+	1.1920928955078125e-07, 5.2452087402343750e-06,
+	5.4836273193359375e-06}, /* L1097 */
+{7.6276636123657227e-01, 4.0009617805480957e-06,
+	1.1920928955078125e-07, 1.5497207641601562e-06,
+	2.9802322387695312e-06}, /* L1098 */
+{8.0899810791015625e-01, 4.2915344238281250e-06,
+	1.1920928955078125e-07, -2.2053718566894531e-06,
+	1.1920928955078125e-07}, /* L1099 */
+{8.7223005294799805e-01, 4.6789646148681641e-06,
+	1.1920928955078125e-07, -2.2649765014648438e-06,
+	-1.1920928955078125e-06}, /* L1100 */
+{8.2417380809783936e-01, 4.4703483581542969e-06,
+	1.1920928955078125e-07, 8.5830688476562500e-06,
+	1.2516975402832031e-05}, /* L1101 */
+{7.5204324722290039e-01, 4.1238963603973389e-06,
+	1.1920928955078125e-07, 1.3113021850585938e-06,
+	-5.0663948059082031e-06}, /* L1102 */
+{1.4193508625030518e+00, 7.8678131103515625e-06,
+	1.1920928955078125e-07, 9.6559524536132812e-06,
+	0.0000000000000000e+00}, /* L1103 */
+{9.6275132894515991e-01, 5.3942203521728516e-06,
+	1.1920928955078125e-07, -6.2584877014160156e-06,
+	-3.3974647521972656e-06}, /* L1104 */
+{9.3683904409408569e-01, 5.3048133850097656e-06,
+	1.1920928955078125e-07, -5.9008598327636719e-06,
+	5.3644180297851562e-06}, /* L1105 */
+{1.0781044960021973e+00, 6.1690807342529297e-06,
+	1.1920928955078125e-07, 7.1525573730468750e-06,
+	1.6689300537109375e-06}, /* L1106 */
+{1.0644396543502808e+00, 6.1541795730590820e-06,
+	1.1920928955078125e-07, -1.3113021850585938e-06,
+	3.4570693969726562e-06}, /* L1107 */
+{9.8469865322113037e-01, 5.7518482208251953e-06,
+	1.1920928955078125e-07, 2.2649765014648438e-06,
+	-5.4240226745605469e-06}, /* L1108 */
+{1.1337554454803467e+00, 6.6906213760375977e-06,
+	1.1920928955078125e-07, -6.7949295043945312e-06,
+	9.0599060058593750e-06}, /* L1109 */
+{9.7000402212142944e-01, 5.7816505432128906e-06,
+	1.1920928955078125e-07, -2.0265579223632812e-06,
+	1.0728836059570312e-06}, /* L1110 */
+{9.5541024208068848e-01, 5.7518482208251953e-06,
+	1.1920928955078125e-07, -3.1709671020507812e-05,
+	-8.5830688476562500e-06}, /* L1111 */
+{8.3822196722030640e-01, 5.0961971282958984e-06,
+	1.1920928955078125e-07, -6.6757202148437500e-06,
+	1.7881393432617188e-06}, /* L1112 */
+{1.9174509048461914e+00, 1.1771917343139648e-05,
+	1.1920928955078125e-07, -5.0663948059082031e-06,
+	-2.3245811462402344e-06}, /* L1113 */
+{1.0769299268722534e+00, 6.6757202148437500e-06,
+	1.1920928955078125e-07, -2.4437904357910156e-06,
+	2.8610229492187500e-06}, /* L1114 */
+{1.1833299398422241e+00, 7.4058771133422852e-06,
+	1.1920928955078125e-07, -8.3446502685546875e-06,
+	-1.7285346984863281e-06}, /* L1115 */
+{8.6897367238998413e-01, 5.4910778999328613e-06,
+	1.1920928955078125e-07, 2.3961067199707031e-05,
+	-4.7624111175537109e-05}, /* L1116 */
+{1.0105159282684326e+00, 6.4447522163391113e-06,
+	1.1920928955078125e-07, -5.5432319641113281e-06,
+	-1.4901161193847656e-06}, /* L1117 */
+{1.2222226858139038e+00, 7.8678131103515625e-06,
+	1.1920928955078125e-07, -9.9539756774902344e-06,
+	-1.0073184967041016e-05}, /* L1118 */
+{9.9771076440811157e-01, 6.4820051193237305e-06,
+	1.1920928955078125e-07, 6.6757202148437500e-06,
+	3.8146972656250000e-06}, /* L1119 */
+{8.5909843444824219e-01, 5.6326389312744141e-06,
+	1.1920928955078125e-07, 1.7881393432617188e-06,
+	-1.6689300537109375e-06}, /* L1120 */
+{1.0945979356765747e+00, 7.2419643402099609e-06,
+	1.1920928955078125e-07, 1.7881393432617188e-06,
+	4.7683715820312500e-06}, /* L1121 */
+{9.4642227888107300e-01, 6.3180923461914062e-06,
+	1.1920928955078125e-07, -9.1791152954101562e-06,
+	7.2717666625976562e-06}, /* L1122 */
+{9.4248169660568237e-01, 6.3478946685791016e-06,
+	1.1920928955078125e-07, -1.5497207641601562e-06,
+	-7.8678131103515625e-06}, /* L1123 */
+{1.0350898504257202e+00, 7.0333480834960938e-06,
+	1.1920928955078125e-07, 1.4305114746093750e-06,
+	-6.0200691223144531e-06}, /* L1124 */
+{1.2651975154876709e+00, 8.6724758148193359e-06,
+	1.1920928955078125e-07, -1.4424324035644531e-05,
+	1.0013580322265625e-05}, /* L1125 */
+{9.2753994464874268e-01, 6.4130872488021851e-06,
+	1.1920928955078125e-07, -2.0265579223632812e-06,
+	-4.7683715820312500e-06}, /* L1126 */
+{1.3073544502258301e+00, 9.1195106506347656e-06,
+	1.1920928955078125e-07, 7.1644783020019531e-05,
+	6.3896179199218750e-05}, /* L1127 */
+{9.6987730264663696e-01, 6.8247318267822266e-06,
+	1.1920928955078125e-07, 3.6954879760742188e-06,
+	-5.2165985107421875e-04}, /* L1128 */
+{9.7899848222732544e-01, 6.9439411163330078e-06,
+	1.1920928955078125e-07, 2.0265579223632812e-06,
+	-5.4836273193359375e-06}, /* L1129 */
+{8.6979395151138306e-01, 6.2212347984313965e-06,
+	1.1920928955078125e-07, 1.4305114746093750e-06,
+	-1.5497207641601562e-06}, /* L1130 */
+{9.7924292087554932e-01, 7.0631504058837891e-06,
+	1.1920928955078125e-07, -4.1127204895019531e-05,
+	1.7762184143066406e-05}, /* L1131 */
+{9.7541624307632446e-01, 7.0929527282714844e-06,
+	1.1920928955078125e-07, -7.6293945312500000e-06,
+	-1.0728836059570312e-06}, /* L1132 */
+{1.6664739847183228e+00, 1.2218952178955078e-05,
+	1.1920928955078125e-07, -1.9609928131103516e-05,
+	-1.3291835784912109e-05}, /* L1133 */
+{8.2053667306900024e-01, 6.0647726058959961e-06,
+	1.1920928955078125e-07, -1.8298625946044922e-05,
+	-2.4974346160888672e-05}, /* L1134 */
+{1.2599431276321411e+00, 9.3877315521240234e-06,
+	1.1920928955078125e-07, 1.0609626770019531e-05,
+	3.5762786865234375e-07}, /* L1135 */
+{1.3730195760726929e+00, 1.0311603546142578e-05,
+	1.1920928955078125e-07, -1.5497207641601562e-06,
+	-1.9669532775878906e-06}, /* L1136 */
+{1.4950799942016602e+00, 1.1317431926727295e-05,
+	1.1920928955078125e-07, -1.1920928955078125e-07,
+	-2.9802322387695312e-06}, /* L1137 */
+{8.7696063518524170e-01, 6.6906213760375977e-06,
+	1.1920928955078125e-07, 3.9339065551757812e-06,
+	0.0000000000000000e+00}, /* L1138 */
+{9.5106983184814453e-01, 7.3127448558807373e-06,
+	1.1920928955078125e-07, -5.5432319641113281e-06,
+	-6.6161155700683594e-06}, /* L1139 */
+{9.4996523857116699e-01, 7.3611736297607422e-06,
+	1.1920928955078125e-07, 9.1791152954101562e-06,
+	-3.5166740417480469e-06}, /* L1140 */
+{1.2995917797088623e+00, 1.0147690773010254e-05,
+	1.1920928955078125e-07, 1.2397766113281250e-05,
+	-2.5868415832519531e-05}, /* L1141 */
+{7.4620795249938965e-01, 5.8710575103759766e-06,
+	1.1920928955078125e-07, 9.5367431640625000e-07,
+	-2.0861625671386719e-06}, /* L1142 */
+{1.1202967166900635e+00, 8.8810920715332031e-06,
+	1.1920928955078125e-07, -2.9802322387695312e-07,
+	-8.5234642028808594e-06}, /* L1143 */
+{1.3694064617156982e+00, 1.0937452316284180e-05,
+	1.1920928955078125e-07, 5.0067901611328125e-06,
+	-6.6161155700683594e-06}, /* L1144 */
+{1.0537055730819702e+00, 8.4787607192993164e-06,
+	1.1920928955078125e-07, -2.8610229492187500e-06,
+	-4.7087669372558594e-06}, /* L1145 */
+{1.2646913528442383e+00, 1.0251998901367188e-05,
+	1.1920928955078125e-07, -1.2874603271484375e-05,
+	-3.1590461730957031e-06}, /* L1146 */
+{1.2353997230529785e+00, 1.0088086128234863e-05,
+	1.1920928955078125e-07, 2.9802322387695312e-06,
+	0.0000000000000000e+00}, /* L1147 */
+{1.0905735492706299e+00, 8.9704990386962891e-06,
+	1.1920928955078125e-07, -1.7642974853515625e-05,
+	-1.9550323486328125e-05}, /* L1148 */
+{1.2841809988021851e+00, 1.0639429092407227e-05,
+	1.1920928955078125e-07, -2.2053718566894531e-06,
+	-3.3378601074218750e-06}, /* L1149 */
+{1.1500061750411987e+00, 9.5963478088378906e-06,
+	1.1920928955078125e-07, 5.1259994506835938e-06,
+	-4.1723251342773438e-07}, /* L1150 */
+{1.3510324954986572e+00, 1.1354684829711914e-05,
+	1.1920928955078125e-07, 1.2159347534179688e-05,
+	1.5377998352050781e-05}, /* L1151 */
+{9.4499003887176514e-01, 7.9981982707977295e-06,
+	1.1920928955078125e-07, -8.1062316894531250e-06,
+	-1.0132789611816406e-06}, /* L1152 */
+{1.3810083866119385e+00, 1.1771917343139648e-05,
+	1.1920928955078125e-07, 2.1457672119140625e-06,
+	4.3511390686035156e-05}, /* L1153 */
+{1.1562519073486328e+00, 9.9241733551025391e-06,
+	1.1920928955078125e-07, 2.3841857910156250e-07,
+	9.2983245849609375e-06}, /* L1154 */
+{1.0793009996414185e+00, 9.3281269073486328e-06,
+	1.1920928955078125e-07, -1.0728836059570312e-05,
+	-1.5497207641601562e-06}, /* L1155 */
+{1.6061439514160156e+00, 1.3977289199829102e-05,
+	1.1920928955078125e-07, 8.8214874267578125e-06,
+	2.2649765014648438e-06}, /* L1156 */
+{1.0843659639358521e+00, 9.5013529062271118e-06,
+	1.1920928955078125e-07, -4.5716762542724609e-05,
+	-7.1525573730468750e-06}, /* L1157 */
+{1.2195807695388794e+00, 1.0758638381958008e-05,
+	1.1920928955078125e-07, 1.1086463928222656e-05,
+	-5.5432319641113281e-06}, /* L1158 */
+{1.0805189609527588e+00, 9.5963478088378906e-06,
+	1.1920928955078125e-07, -5.7816505432128906e-06,
+	-5.5432319641113281e-06}, /* L1159 */
+{1.2214741706848145e+00, 1.0922551155090332e-05,
+	1.1920928955078125e-07, 4.6491622924804688e-06,
+	3.4809112548828125e-05}, /* L1160 */
+{9.9667584896087646e-01, 8.9704990386962891e-06,
+	1.1920928955078125e-07, -2.3365020751953125e-05,
+	-1.6868114471435547e-05}, /* L1161 */
+{1.1175954341888428e+00, 1.0125339031219482e-05,
+	1.1920928955078125e-07, 1.0728836059570312e-06,
+	-2.3841857910156250e-06}, /* L1162 */
+{1.5759546756744385e+00, 1.4372169971466064e-05,
+	1.1920928955078125e-07, -7.0333480834960938e-06,
+	-1.6748905181884766e-05}, /* L1163 */
+{1.2970726490020752e+00, 1.1906027793884277e-05,
+	1.1920928955078125e-07, 8.2254409790039062e-06,
+	1.3113021850585938e-06}, /* L1164 */
+{1.3951190710067749e+00, 1.2889504432678223e-05,
+	1.1920928955078125e-07, 2.3841857910156250e-07,
+	3.2186508178710938e-05}, /* L1165 */
+{1.2964704036712646e+00, 1.2055039405822754e-05,
+	1.1920928955078125e-07, 1.5139579772949219e-05,
+	-1.1920928955078125e-06}, /* L1166 */
+{1.0063484907150269e+00, 9.4175338745117188e-06,
+	1.1920928955078125e-07, -6.7949295043945312e-06,
+	-2.3782253265380859e-05}, /* L1167 */
+{9.6187907457351685e-01, 9.0599060058593750e-06,
+	1.1920928955078125e-07, -7.9274177551269531e-06,
+	-2.8252601623535156e-05}, /* L1168 */
+{1.5304667949676514e+00, 1.4506280422210693e-05,
+	1.1920928955078125e-07, 6.9260597229003906e-05,
+	-3.3318996429443359e-05}, /* L1169 */
+{1.2531182765960693e+00, 1.1950731277465820e-05,
+	1.1920928955078125e-07, -4.2319297790527344e-06,
+	-8.0466270446777344e-06}, /* L1170 */
+{1.0869301557540894e+00, 1.0430812835693359e-05,
+	1.1920928955078125e-07, -4.5299530029296875e-06,
+	1.6331672668457031e-05}, /* L1171 */
+{9.2123973369598389e-01, 8.8959932327270508e-06,
+	1.1920928955078125e-07, 2.6345252990722656e-05,
+	1.5497207641601562e-06}, /* L1172 */
+{1.2883348464965820e+00, 1.2516975402832031e-05,
+	1.1920928955078125e-07, -1.9252300262451172e-05,
+	-8.9406967163085938e-07}, /* L1173 */
+{7.4848139286041260e-01, 7.3164701461791992e-06,
+	1.1920928955078125e-07, -2.7418136596679688e-06,
+	2.3841857910156250e-07}, /* L1174 */
+{1.0303035974502563e+00, 1.0132789611816406e-05,
+	1.1920928955078125e-07, -3.9339065551757812e-06,
+	2.0265579223632812e-06}, /* L1175 */
+{1.1414912939071655e+00, 1.1295080184936523e-05,
+	1.1920928955078125e-07, 7.2717666625976562e-06,
+	8.0943107604980469e-05}, /* L1176 */
+{1.5194602012634277e+00, 1.5124678611755371e-05,
+	1.1920928955078125e-07, 2.6226043701171875e-06,
+	-7.7486038208007812e-06}, /* L1177 */
+{1.0238080024719238e+00, 1.0251998901367188e-05,
+	1.1920928955078125e-07, 2.7418136596679688e-06,
+	-3.1590461730957031e-06}, /* L1178 */
+{1.1346142292022705e+00, 1.1429190635681152e-05,
+	1.1920928955078125e-07, -7.5101852416992188e-06,
+	1.6331672668457031e-05}, /* L1179 */
+{1.1793857812881470e+00, 1.1950731277465820e-05,
+	1.1920928955078125e-07, -1.6629695892333984e-05,
+	-1.3232231140136719e-05}, /* L1180 */
+{1.6403435468673706e+00, 1.6719102859497070e-05,
+	1.1920928955078125e-07, 3.6954879760742188e-06,
+	-3.3974647521972656e-06}, /* L1181 */
+{1.7790050506591797e+00, 1.8239021301269531e-05,
+	1.1920928955078125e-07, -3.5166740417480469e-06,
+	-7.7486038208007812e-07}, /* L1182 */
+{1.4508632421493530e+00, 1.4960765838623047e-05,
+	1.1920928955078125e-07, -7.3909759521484375e-06,
+	-4.1723251342773438e-06}, /* L1183 */
+{1.5513389110565186e+00, 1.6093254089355469e-05,
+	1.1920928955078125e-07, -6.1690807342529297e-05,
+	6.1869621276855469e-05}, /* L1184 */
+{1.2285547256469727e+00, 1.2814998626708984e-05,
+	1.1920928955078125e-07, -1.9431114196777344e-05,
+	2.0623207092285156e-05}, /* L1185 */
+{1.1248027086257935e+00, 1.1801719665527344e-05,
+	1.1920928955078125e-07, 4.4107437133789062e-05,
+	-1.8775463104248047e-05}, /* L1186 */
+{1.0338598489761353e+00, 1.0907649993896484e-05,
+	1.1920928955078125e-07, -2.4080276489257812e-05,
+	2.3841857910156250e-07}, /* L1187 */
+{8.8742196559906006e-01, 9.4175338745117188e-06,
+	1.1920928955078125e-07, -4.1007995605468750e-05,
+	-4.6312808990478516e-05}, /* L1188 */
+{1.2569568157196045e+00, 1.3411045074462891e-05,
+	1.1920928955078125e-07, -8.0466270446777344e-06,
+	1.7642974853515625e-05}, /* L1189 */
+{1.0193126201629639e+00, 1.0937452316284180e-05,
+	1.1920928955078125e-07, -3.6358833312988281e-06,
+	5.1140785217285156e-05}, /* L1190 */
+{1.2982742786407471e+00, 1.4007091522216797e-05,
+	1.1920928955078125e-07, -1.6629695892333984e-05,
+	-8.1062316894531250e-06}, /* L1191 */
+{1.0288227796554565e+00, 1.1160969734191895e-05,
+	1.1920928955078125e-07, 7.0333480834960938e-06,
+	1.4305114746093750e-06}, /* L1192 */
+{1.3306066989898682e+00, 1.4513731002807617e-05,
+	1.1920928955078125e-07, 8.9406967163085938e-06,
+	9.5367431640625000e-07}, /* L1193 */
+{1.0203016996383667e+00, 1.1190772056579590e-05,
+	1.1920928955078125e-07, -1.9669532775878906e-06,
+	2.0265579223632812e-05}, /* L1194 */
+{1.1182178258895874e+00, 1.2330710887908936e-05,
+	1.1920928955078125e-07, -7.9274177551269531e-06,
+	-3.2186508178710938e-06}, /* L1195 */
+{1.2682054042816162e+00, 1.4066696166992188e-05,
+	1.1920928955078125e-07, 1.9752979278564453e-04,
+	1.2481212615966797e-04}, /* L1196 */
+{1.1684124469757080e+00, 1.3023614883422852e-05,
+	1.1920928955078125e-07, -3.2961368560791016e-05,
+	-7.0333480834960938e-06}, /* L1197 */
+{1.3009834289550781e+00, 1.4580786228179932e-05,
+	1.1920928955078125e-07, -3.2722949981689453e-05,
+	-5.5491924285888672e-05}, /* L1198 */
+{1.6348913908004761e+00, 1.8417835235595703e-05,
+	1.1920928955078125e-07, -3.5762786865234375e-06,
+	2.9802322387695312e-06}, /* L1199 */
+{1.6420391798019409e+00, 1.8596649169921875e-05,
+	1.1920928955078125e-07, -2.4318695068359375e-05,
+	2.7537345886230469e-05}, /* L1200 */
+{9.4108945131301880e-01, 1.0713934898376465e-05,
+	1.1920928955078125e-07, 1.5974044799804688e-05,
+	1.3232231140136719e-05}, /* L1201 */
+{9.9413573741912842e-01, 1.1377036571502686e-05,
+	1.1920928955078125e-07, 5.6028366088867188e-06,
+	1.9073486328125000e-06}, /* L1202 */
+{1.2357484102249146e+00, 1.4215707778930664e-05,
+	1.1920928955078125e-07, 6.6757202148437500e-06,
+	-2.3841857910156250e-07}, /* L1203 */
+{1.6301261186599731e+00, 1.8849968910217285e-05,
+	1.1920928955078125e-07, 1.4662742614746094e-05,
+	2.6226043701171875e-06}, /* L1204 */
+{1.0974243879318237e+00, 1.2755393981933594e-05,
+	1.1920928955078125e-07, 4.2915344238281250e-06,
+	2.3961067199707031e-05}, /* L1205 */
+{1.0510134696960449e+00, 1.2278556823730469e-05,
+	1.1920928955078125e-07, 5.4836273193359375e-06,
+	2.3841857910156250e-06}, /* L1206 */
+{1.4908643960952759e+00, 1.7508864402770996e-05,
+	1.1920928955078125e-07, 7.8082084655761719e-05,
+	-3.7074089050292969e-05}, /* L1207 */
+{1.0176256895065308e+00, 1.2010335922241211e-05,
+	1.1920928955078125e-07, 4.4465065002441406e-05,
+	-1.7285346984863281e-05}, /* L1208 */
+{1.5929344892501831e+00, 1.8894672393798828e-05,
+	1.1920928955078125e-07, -3.8385391235351562e-05,
+	7.7486038208007812e-06}, /* L1209 */
+{1.7058891057968140e+00, 2.0340085029602051e-05,
+	1.1920928955078125e-07, 6.0558319091796875e-05,
+	2.7537345886230469e-05}, /* L1210 */
+{1.1977496147155762e+00, 1.4349818229675293e-05,
+	1.1920928955078125e-07, -5.0663948059082031e-06,
+	-7.9274177551269531e-06}, /* L1211 */
+{1.0519545078277588e+00, 1.2665987014770508e-05,
+	1.1920928955078125e-07, -9.4175338745117188e-06,
+	-2.5033950805664062e-05}, /* L1212 */
+{1.8053981065750122e+00, 2.1845102310180664e-05,
+	1.1920928955078125e-07, 5.8412551879882812e-06,
+	4.7683715820312500e-07}, /* L1213 */
+{1.2401795387268066e+00, 1.5079975128173828e-05,
+	1.1920928955078125e-07, 9.1791152954101562e-06,
+	-6.3180923461914062e-06}, /* L1214 */
+{1.1975620985031128e+00, 1.4707446098327637e-05,
+	1.1920928955078125e-07, 3.4335851669311523e-03,
+	-5.1164627075195312e-04}, /* L1215 */
+{1.5048525333404541e+00, 1.8477439880371094e-05,
+	1.1920928955078125e-07, 3.6954879760742188e-06,
+	-7.8082084655761719e-06}, /* L1216 */
+{1.1292189359664917e+00, 1.3932585716247559e-05,
+	1.1920928955078125e-07, 1.3113021850585938e-06,
+	1.0848045349121094e-05}, /* L1217 */
+{1.1700141429901123e+00, 1.4506280422210693e-05,
+	1.1920928955078125e-07, 1.8239021301269531e-05,
+	-1.8358230590820312e-05}, /* L1218 */
+{1.1943764686584473e+00, 1.4878809452056885e-05,
+	1.1920928955078125e-07, 4.7683715820312500e-06,
+	-9.2387199401855469e-06}, /* L1219 */
+{1.7291518449783325e+00, 2.1643936634063721e-05,
+	1.1920928955078125e-07, -2.0265579223632812e-06,
+	-1.9729137420654297e-05}, /* L1220 */
+{1.6042573451995850e+00, 2.0176172256469727e-05,
+	1.1920928955078125e-07, 5.0067901611328125e-06,
+	1.6689300537109375e-06}, /* L1221 */
+{1.4740267992019653e+00, 1.8626451492309570e-05,
+	1.1920928955078125e-07, 8.3446502685546875e-07,
+	-3.9339065551757812e-06}, /* L1222 */
+{1.4295392036437988e+00, 1.8149614334106445e-05,
+	1.1920928955078125e-07, -2.3841857910156250e-07,
+	5.7220458984375000e-06}, /* L1223 */
+{1.4392251968383789e+00, 1.8358230590820312e-05,
+	1.1920928955078125e-07, -1.6987323760986328e-05,
+	-2.1576881408691406e-05}, /* L1224 */
+{2.1736485958099365e+00, 2.7865171432495117e-05,
+	1.1920928955078125e-07, -5.3107738494873047e-05,
+	-4.2319297790527344e-05}, /* L1225 */
+{1.1919932365417480e+00, 1.5348196029663086e-05,
+	1.1920928955078125e-07, -7.0035457611083984e-05,
+	8.1062316894531250e-06}, /* L1226 */
+{1.6522569656372070e+00, 2.1398067474365234e-05,
+	1.1920928955078125e-07, -7.0112943649291992e-04,
+	2.2172927856445312e-04}, /* L1227 */
+{1.6680214405059814e+00, 2.1681189537048340e-05,
+	1.1920928955078125e-07, -8.1539154052734375e-05,
+	-7.9333782196044922e-05}, /* L1228 */
+{2.1757786273956299e+00, 2.8401613235473633e-05,
+	1.1920928955078125e-07, 8.4638595581054688e-06,
+	1.0490417480468750e-05}, /* L1229 */
+{1.3124855756759644e+00, 1.7210841178894043e-05,
+	1.1920928955078125e-07, 7.9870223999023438e-06,
+	-1.4483928680419922e-05}, /* L1230 */
+{1.5203121900558472e+00, 2.0027160644531250e-05,
+	1.1920928955078125e-07, -1.9431114196777344e-05,
+	3.5762786865234375e-07}, /* L1231 */
+{1.4143544435501099e+00, 1.8715858459472656e-05,
+	1.1920928955078125e-07, -2.3245811462402344e-06,
+	-9.0003013610839844e-06}, /* L1232 */
+{1.4371609687805176e+00, 1.9103288650512695e-05,
+	1.1920928955078125e-07, 6.3180923461914062e-06,
+	-3.1292438507080078e-05}, /* L1233 */
+{1.6026908159255981e+00, 2.1427869796752930e-05,
+	1.1920928955078125e-07, -3.3575296401977539e-04,
+	-6.3514709472656250e-04}, /* L1234 */
+{1.6288132667541504e+00, 2.1845102310180664e-05,
+	1.1920928955078125e-07, -4.0888786315917969e-05,
+	9.1791152954101562e-06}, /* L1235 */
+{1.0187907218933105e+00, 1.3723969459533691e-05,
+	1.1920928955078125e-07, 1.3470649719238281e-05,
+	2.3841857910156250e-06}, /* L1236 */
+{1.2462819814682007e+00, 1.6862526535987854e-05,
+	1.1920928955078125e-07, 3.8146972656250000e-06,
+	1.1920928955078125e-06}, /* L1237 */
+{1.4384590387344360e+00, 1.9550323486328125e-05,
+	1.1920928955078125e-07, -3.6537647247314453e-05,
+	-3.3259391784667969e-05}, /* L1238 */
+{1.3267810344696045e+00, 1.8194317817687988e-05,
+	1.1920928955078125e-07, -1.6243457794189453e-03,
+	5.1963329315185547e-04}, /* L1239 */
+{1.2517757415771484e+00, 1.7166137695312500e-05,
+	1.1920928955078125e-07, -3.6954879760742188e-05,
+	-4.6491622924804688e-05}, /* L1240 */
+{1.6038647890090942e+00, 2.2083520889282227e-05,
+	1.1920928955078125e-07, -6.8545341491699219e-06,
+	2.6226043701171875e-06}, /* L1241 */
+{1.1713200807571411e+00, 1.6197562217712402e-05,
+	1.1920928955078125e-07, -4.7683715820312500e-06,
+	-5.6028366088867188e-06}, /* L1242 */
+{1.8583130836486816e+00, 2.5808811187744141e-05,
+	1.1920928955078125e-07, -1.2278556823730469e-05,
+	-1.6689300537109375e-05}, /* L1243 */
+{1.2964105606079102e+00, 1.8082559108734131e-05,
+	1.1920928955078125e-07, -4.8756599426269531e-05,
+	-3.9100646972656250e-05}, /* L1244 */
+{1.4914346933364868e+00, 2.0891427993774414e-05,
+	1.1920928955078125e-07, -2.7477741241455078e-05,
+	-1.9073486328125000e-06}, /* L1245 */
+{1.2626861333847046e+00, 1.7762184143066406e-05,
+	1.1920928955078125e-07, -1.7881393432617188e-07,
+	1.1920928955078125e-07}, /* L1246 */
+{1.3563674688339233e+00, 1.9162893295288086e-05,
+	1.1920928955078125e-07, 2.0980834960937500e-05,
+	2.7418136596679688e-05}, /* L1247 */
+{1.5367653369903564e+00, 2.1800398826599121e-05,
+	1.1920928955078125e-07, 4.0531158447265625e-06,
+	-1.1324882507324219e-06}, /* L1248 */
+{1.2470778226852417e+00, 1.7765909433364868e-05,
+	1.1920928955078125e-07, 3.4332275390625000e-05,
+	2.9921531677246094e-05}, /* L1249 */
+{1.0934772491455078e+00, 1.5646219253540039e-05,
+	1.1920928955078125e-07, 2.8252601623535156e-05,
+	3.8146972656250000e-05}, /* L1250 */
+{1.9852321147918701e+00, 2.8520822525024414e-05,
+	1.1920928955078125e-07, -2.0563602447509766e-05,
+	1.2874603271484375e-05}, /* L1251 */
+{1.2313609123229980e+00, 1.7762184143066406e-05,
+	1.1920928955078125e-07, 7.0333480834960938e-06,
+	-8.5234642028808594e-06}, /* L1252 */
+{1.2252029180526733e+00, 1.7762184143066406e-05,
+	1.1920928955078125e-07, -6.1577558517456055e-04,
+	-2.3275613784790039e-04}, /* L1253 */
+{1.0384093523025513e+00, 1.5102326869964600e-05,
+	1.1920928955078125e-07, -4.2915344238281250e-06,
+	-7.1525573730468750e-07}, /* L1254 */
+{1.4937413930892944e+00, 2.1815299987792969e-05,
+	1.1920928955078125e-07, 4.0650367736816406e-05,
+	-1.2755393981933594e-05}, /* L1255 */
+{1.2570779323577881e+00, 1.8432736396789551e-05,
+	1.1920928955078125e-07, 2.6345252990722656e-05,
+	-5.1259994506835938e-06}, /* L1256 */
+{1.8190509080886841e+00, 2.6784837245941162e-05,
+	1.1920928955078125e-07, -9.2089176177978516e-05,
+	-7.8439712524414062e-05}, /* L1257 */
+{1.0523401498794556e+00, 1.5556812286376953e-05,
+	1.1920928955078125e-07, 4.8518180847167969e-05,
+	7.2598457336425781e-05}, /* L1258 */
+{1.8098148107528687e+00, 2.6866793632507324e-05,
+	1.1920928955078125e-07, -2.8133392333984375e-05,
+	-1.0192394256591797e-05}, /* L1259 */
+{1.5516481399536133e+00, 2.3126602172851562e-05,
+	1.1920928955078125e-07, -1.1730194091796875e-04,
+	-5.0246715545654297e-05}, /* L1260 */
+{1.7170596122741699e+00, 2.5689601898193359e-05,
+	1.1920928955078125e-07, 8.1062316894531250e-06,
+	1.6212463378906250e-05}, /* L1261 */
+{1.6130100488662720e+00, 2.4229288101196289e-05,
+	1.1920928955078125e-07, 2.0265579223632812e-05,
+	1.2755393981933594e-05}, /* L1262 */
+{1.5766159296035767e+00, 2.3778527975082397e-05,
+	1.1920928955078125e-07, -2.6404857635498047e-05,
+	-6.1452388763427734e-05}, /* L1263 */
+{1.3089818954467773e+00, 1.9818544387817383e-05,
+	1.1920928955078125e-07, 6.5565109252929688e-06,
+	3.5405158996582031e-05}, /* L1264 */
+{2.3881494998931885e+00, 3.6299228668212891e-05,
+	1.1920928955078125e-07, 5.2452087402343750e-06,
+	-2.7954578399658203e-05}, /* L1265 */
+{1.3607747554779053e+00, 2.0766630768775940e-05,
+	1.1920928955078125e-07, -2.3841857910156250e-06,
+	1.5258789062500000e-05}, /* L1266 */
+{1.0377191305160522e+00, 1.5914440155029297e-05,
+	1.1920928955078125e-07, -3.7550926208496094e-06,
+	-1.6212463378906250e-04}, /* L1267 */
+{9.7865903377532959e-01, 1.5050172805786133e-05,
+	1.1920928955078125e-07, 1.8000602722167969e-05,
+	-1.6272068023681641e-05}, /* L1268 */
+{1.3841279745101929e+00, 2.1368265151977539e-05,
+	1.1920928955078125e-07, -1.3709068298339844e-06,
+	-2.2470951080322266e-05}, /* L1269 */
+{8.3651173114776611e-01, 1.2964010238647461e-05,
+	1.1920928955078125e-07, 1.1682510375976562e-05,
+	-2.2053718566894531e-06}, /* L1270 */
+{1.2979427576065063e+00, 2.0192470401525497e-05,
+	1.1920928955078125e-07, 6.4373016357421875e-06,
+	6.3180923461914062e-06}, /* L1271 */
+{1.2060588598251343e+00, 1.8835067749023438e-05,
+	1.1920928955078125e-07, 4.1604042053222656e-05,
+	1.4305114746093750e-06}, /* L1272 */
+{1.0417672395706177e+00, 1.6331672668457031e-05,
+	1.1920928955078125e-07, -4.5776367187500000e-05,
+	5.2809715270996094e-05}, /* L1273 */
+{1.1557486057281494e+00, 1.8186867237091064e-05,
+	1.1920928955078125e-07, -1.0728836059570312e-06,
+	1.9907951354980469e-05}, /* L1274 */
+{1.1678060293197632e+00, 1.8447637557983398e-05,
+	1.1920928955078125e-07, -4.3451786041259766e-05,
+	-3.6835670471191406e-05}, /* L1275 */
+{1.0798661708831787e+00, 1.7121434211730957e-05,
+	1.1920928955078125e-07, 7.5101852416992188e-06,
+	1.3113021850585938e-05}, /* L1276 */
+{1.6089533567428589e+00, 2.5607645511627197e-05,
+	1.1920928955078125e-07, 4.4941902160644531e-05,
+	2.3841857910156250e-06}, /* L1277 */
+{9.2531841993331909e-01, 1.4781951904296875e-05,
+	1.1920928955078125e-07, -4.5180320739746094e-05,
+	2.0861625671386719e-05}, /* L1278 */
+{1.0825912952423096e+00, 1.7359852790832520e-05,
+	1.1920928955078125e-07, -4.7683715820312500e-06,
+	1.0967254638671875e-05}, /* L1279 */
+{1.1458694934844971e+00, 1.8447637557983398e-05,
+	1.1920928955078125e-07, 1.3041496276855469e-04,
+	5.2809715270996094e-05}, /* L1280 */
+{1.2772612571716309e+00, 2.0634382963180542e-05,
+	1.1920928955078125e-07, -5.6743621826171875e-05,
+	-4.6730041503906250e-05}, /* L1281 */
+{9.4301450252532959e-01, 1.5288591384887695e-05,
+	1.1920928955078125e-07, -2.3245811462402344e-06,
+	2.5033950805664062e-06}, /* L1282 */
+{1.3827694654464722e+00, 2.2500753402709961e-05,
+	1.1920928955078125e-07, -1.3172626495361328e-05,
+	2.1457672119140625e-06}, /* L1283 */
+{9.4524723291397095e-01, 1.5437602996826172e-05,
+	1.1920928955078125e-07, -4.1723251342773438e-07,
+	2.3841857910156250e-07}, /* L1284 */
+{1.4381570816040039e+00, 2.3573637008666992e-05,
+	1.1920928955078125e-07, 1.8000602722167969e-05,
+	1.4305114746093750e-06}, /* L1285 */
+{9.2118191719055176e-01, 1.5154480934143066e-05,
+	1.1920928955078125e-07, -7.0929527282714844e-06,
+	-7.2121620178222656e-06}, /* L1286 */
+{1.1705466508865356e+00, 1.9326806068420410e-05,
+	1.1920928955078125e-07, 1.7881393432617188e-06,
+	-6.7353248596191406e-06}, /* L1287 */
+{1.0789124965667725e+00, 1.7881393432617188e-05,
+	1.1920928955078125e-07, -3.2961368560791016e-05,
+	9.3221664428710938e-05}, /* L1288 */
+{1.6003317832946777e+00, 2.6613473892211914e-05,
+	1.1920928955078125e-07, 5.8412551879882812e-06,
+	-9.7155570983886719e-06}, /* L1289 */
+{1.8595010042190552e+00, 3.1039118766784668e-05,
+	1.1920928955078125e-07, -1.0073184967041016e-05,
+	7.3909759521484375e-06}, /* L1290 */
+{9.3055397272109985e-01, 1.5586614608764648e-05,
+	1.1920928955078125e-07, 2.1219253540039062e-05,
+	-1.3828277587890625e-05}, /* L1291 */
+{1.5620447397232056e+00, 2.6255846023559570e-05,
+	1.1920928955078125e-07, -7.0333480834960938e-06,
+	8.2254409790039062e-06}, /* L1292 */
+{1.6129204034805298e+00, 2.7209520339965820e-05,
+	1.1920928955078125e-07, 9.7751617431640625e-06,
+	-1.7225742340087891e-05}, /* L1293 */
+{1.5218948125839233e+00, 2.5764107704162598e-05,
+	1.1920928955078125e-07, -2.7179718017578125e-05,
+	-7.5697898864746094e-06}, /* L1294 */
+{1.9754331111907959e+00, 3.3557415008544922e-05,
+	1.1920928955078125e-07, -1.9669532775878906e-06,
+	2.6226043701171875e-06}, /* L1295 */
+{1.2727109193801880e+00, 2.1696090698242188e-05,
+	1.1920928955078125e-07, -1.1682510375976562e-05,
+	-3.6358833312988281e-06}, /* L1296 */
+{1.7381219863891602e+00, 2.9733870178461075e-05,
+	1.1920928955078125e-07, 8.9406967163085938e-06,
+	-2.3245811462402344e-06}, /* L1297 */
+{9.6112900972366333e-01, 1.6510486602783203e-05,
+	1.1920928955078125e-07, -1.1205673217773438e-05,
+	-1.2153387069702148e-04}, /* L1298 */
+{1.1695462465286255e+00, 2.0146369934082031e-05,
+	1.1920928955078125e-07, 4.0531158447265625e-06,
+	3.4570693969726562e-06}, /* L1299 */
+{1.1542683839797974e+00, 1.9952654838562012e-05,
+	1.1920928955078125e-07, -2.8014183044433594e-06,
+	-1.2993812561035156e-05}, /* L1300 */
+{1.8624702692031860e+00, 3.2305717468261719e-05,
+	1.1920928955078125e-07, 7.5101852416992188e-06,
+	7.0333480834960938e-06}, /* L1301 */
+{8.9964288473129272e-01, 1.5661120414733887e-05,
+	1.1920928955078125e-07, 4.3392181396484375e-05,
+	-1.3691186904907227e-04}, /* L1302 */
+{1.2183562517166138e+00, 2.1278858184814453e-05,
+	1.1920928955078125e-07, -3.4034252166748047e-05,
+	4.7683715820312500e-07}, /* L1303 */
+{8.7741857767105103e-01, 1.5377998352050781e-05,
+	1.1920928955078125e-07, 2.3484230041503906e-05,
+	-1.2856721878051758e-04}, /* L1304 */
+{2.1357288360595703e+00, 3.7610530853271484e-05,
+	1.1920928955078125e-07, 1.3327598571777344e-04,
+	4.8029422760009766e-04}, /* L1305 */
+{1.2161464691162109e+00, 2.1457672119140625e-05,
+	1.1920928955078125e-07, -1.2576580047607422e-05,
+	6.6161155700683594e-05}, /* L1306 */
+{1.2137373685836792e+00, 2.1487474441528320e-05,
+	1.1920928955078125e-07, -6.9141387939453125e-06,
+	2.0265579223632812e-06}, /* L1307 */
+{1.1658335924148560e+00, 2.0712614059448242e-05,
+	1.1920928955078125e-07, -2.8371810913085938e-05,
+	-1.1879205703735352e-04}, /* L1308 */
+{1.5931706428527832e+00, 2.8394162654876709e-05,
+	1.1920928955078125e-07, 2.2649765014648438e-05,
+	-2.1696090698242188e-05}, /* L1309 */
+{1.0907585620880127e+00, 1.9505620002746582e-05,
+	1.1920928955078125e-07, 3.1471252441406250e-05,
+	-4.2617321014404297e-05}, /* L1310 */
+{1.7374719381332397e+00, 3.1173229217529297e-05,
+	1.1920928955078125e-07, 2.9087066650390625e-05,
+	1.1086463928222656e-05}, /* L1311 */
+{1.3886525630950928e+00, 2.5004148483276367e-05,
+	1.1920928955078125e-07, 5.1259994506835938e-05,
+	-6.4969062805175781e-05}, /* L1312 */
+{1.2540564537048340e+00, 2.2649765014648438e-05,
+	1.1920928955078125e-07, 2.1815299987792969e-05,
+	-2.0980834960937500e-05}, /* L1313 */
+{9.9175816774368286e-01, 1.7970800399780273e-05,
+	1.1920928955078125e-07, -7.5101852416992188e-06,
+	4.8875808715820312e-06}, /* L1314 */
+{1.6540836095809937e+00, 3.0070543289184570e-05,
+	1.1920928955078125e-07, -9.4175338745117188e-06,
+	5.2452087402343750e-06}, /* L1315 */
+{1.1118304729461670e+00, 2.0295381546020508e-05,
+	1.1920928955078125e-07, 2.0480155944824219e-04,
+	3.4022331237792969e-04}, /* L1316 */
+{1.3232371807098389e+00, 2.4214386940002441e-05,
+	1.1920928955078125e-07, -6.5565109252929688e-06,
+	2.3841857910156250e-07}, /* L1317 */
+{1.0291864871978760e+00, 1.8894672393798828e-05,
+	1.1920928955078125e-07, 1.3351440429687500e-05,
+	-2.4378299713134766e-05}, /* L1318 */
+{1.3769135475158691e+00, 2.5361776351928711e-05,
+	1.1920928955078125e-07, -3.3974647521972656e-05,
+	4.1365623474121094e-05}, /* L1319 */
+{9.7899967432022095e-01, 1.8090009689331055e-05,
+	1.1920928955078125e-07, -1.9192695617675781e-05,
+	-9.4771385192871094e-06}, /* L1320 */
+{1.4660800695419312e+00, 2.7179718017578125e-05,
+	1.1920928955078125e-07, 4.3511390686035156e-05,
+	2.3245811462402344e-05}, /* L1321 */
+{9.0497338771820068e-01, 1.6830861568450928e-05,
+	1.1920928955078125e-07, 4.5299530029296875e-05,
+	-4.8875808715820312e-06}, /* L1322 */
+{1.5557006597518921e+00, 2.9027462005615234e-05,
+	1.1920928955078125e-07, -1.0615587234497070e-04,
+	-3.7848949432373047e-05}, /* L1323 */
+{1.4645508527755737e+00, 2.7418136596679688e-05,
+	1.1920928955078125e-07, -1.2248754501342773e-04,
+	-8.8274478912353516e-05}, /* L1324 */
+{1.8489490747451782e+00, 3.4719705581665039e-05,
+	1.1920928955078125e-07, 5.4359436035156250e-05,
+	6.0319900512695312e-05}, /* L1325 */
+{1.7372847795486450e+00, 3.2722949981689453e-05,
+	1.1920928955078125e-07, -3.4034252166748047e-05,
+	9.8943710327148438e-06}, /* L1326 */
+{1.8800387382507324e+00, 3.5524368286132812e-05,
+	1.1920928955078125e-07, -2.5987625122070312e-05,
+	9.5367431640625000e-07}, /* L1327 */
+{1.3620268106460571e+00, 2.5816261768341064e-05,
+	1.1920928955078125e-07, -5.9008598327636719e-06,
+	8.4638595581054688e-06}, /* L1328 */
+{1.4184815883636475e+00, 2.6971101760864258e-05,
+	1.1920928955078125e-07, -1.2934207916259766e-05,
+	8.2254409790039062e-06}, /* L1329 */
+{1.2609255313873291e+00, 2.4050474166870117e-05,
+	1.1920928955078125e-07, 2.0265579223632812e-06,
+	7.8678131103515625e-06}, /* L1330 */
+{1.2538588047027588e+00, 2.3990869522094727e-05,
+	1.1920928955078125e-07, 4.1723251342773438e-05,
+	-2.0742416381835938e-05}, /* L1331 */
+{1.2079840898513794e+00, 2.3186206817626953e-05,
+	1.1920928955078125e-07, -3.0159950256347656e-05,
+	-2.9742717742919922e-05}, /* L1332 */
+{1.6592340469360352e+00, 3.1948089599609375e-05,
+	1.1920928955078125e-07, 1.2278556823730469e-05,
+	4.2915344238281250e-06}, /* L1333 */
+{1.2129570245742798e+00, 2.3424625396728516e-05,
+	1.1920928955078125e-07, 1.4901161193847656e-05,
+	7.8678131103515625e-06}, /* L1334 */
+{1.3397462368011475e+00, 2.5957822799682617e-05,
+	1.1920928955078125e-07, -2.9981136322021484e-05,
+	-2.6106834411621094e-05}, /* L1335 */
+{1.3335621356964111e+00, 2.5913119316101074e-05,
+	1.1920928955078125e-07, 4.0531158447265625e-06,
+	-6.5565109252929688e-07}, /* L1336 */
+{1.8132857084274292e+00, 3.5345554351806641e-05,
+	1.1920928955078125e-07, 5.1259994506835938e-06,
+	8.7022781372070312e-06}, /* L1337 */
+{1.0045012235641479e+00, 1.9639730453491211e-05,
+	1.1920928955078125e-07, -2.8669834136962891e-05,
+	-7.5697898864746094e-05}, /* L1338 */
+{1.1465537548065186e+00, 2.2485852241516113e-05,
+	1.1920928955078125e-07, -7.8082084655761719e-06,
+	7.8678131103515625e-06}, /* L1339 */
+{1.3559750318527222e+00, 2.6673078536987305e-05,
+	1.1920928955078125e-07, -4.9650669097900391e-05,
+	-2.2232532501220703e-05}, /* L1340 */
+{1.6374152898788452e+00, 3.2305717468261719e-05,
+	1.1920928955078125e-07, -9.5367431640625000e-07,
+	-1.4901161193847656e-06}, /* L1341 */
+{8.7349468469619751e-01, 1.7285346984863281e-05,
+	1.1920928955078125e-07, -7.6293945312500000e-06,
+	4.0531158447265625e-06}, /* L1342 */
+{1.3870619535446167e+00, 2.7537345886230469e-05,
+	1.1920928955078125e-07, -5.0723552703857422e-05,
+	-1.3619661331176758e-04}, /* L1343 */
+{1.3697391748428345e+00, 2.7269124984741211e-05,
+	1.1920928955078125e-07, -1.1205673217773438e-05,
+	5.3644180297851562e-06}, /* L1344 */
+{1.2577501535415649e+00, 2.5123357772827148e-05,
+	1.1920928955078125e-07, 1.1873245239257812e-04,
+	4.7564506530761719e-05}, /* L1345 */
+{8.5861575603485107e-01, 1.7195940017700195e-05,
+	1.1920928955078125e-07, -1.9669532775878906e-06,
+	-4.4107437133789062e-06}, /* L1346 */
+{1.3351397514343262e+00, 2.6836991310119629e-05,
+	1.1920928955078125e-07, 1.3399124145507812e-04,
+	-2.2524595260620117e-04}, /* L1347 */
+{1.2263201475143433e+00, 2.4706125259399414e-05,
+	1.1920928955078125e-07, -8.2850456237792969e-06,
+	-1.7881393432617188e-07}, /* L1348 */
+{1.4231839179992676e+00, 2.8759241104125977e-05,
+	1.1920928955078125e-07, 1.0848045349121094e-05,
+	6.0796737670898438e-06}, /* L1349 */
+{1.2554723024368286e+00, 2.5451183319091797e-05,
+	1.1920928955078125e-07, 5.8650970458984375e-05,
+	1.0848045349121094e-04}, /* L1350 */
+{1.6113200187683105e+00, 3.2752752304077148e-05,
+	1.1920928955078125e-07, -2.0503997802734375e-05,
+	-2.0384788513183594e-05}, /* L1351 */
+{1.6944191455841064e+00, 3.4540891647338867e-05,
+	1.1920928955078125e-07, 2.2888183593750000e-05,
+	1.5258789062500000e-05}, /* L1352 */
+{1.7725239992141724e+00, 3.6239624023437500e-05,
+	1.1920928955078125e-07, -8.8214874267578125e-06,
+	-1.6987323760986328e-05}, /* L1353 */
+{1.3036923408508301e+00, 2.6732683181762695e-05,
+	1.1920928955078125e-07, -3.6478042602539062e-05,
+	1.8358230590820312e-05}, /* L1354 */
+{2.0716965198516846e+00, 4.2602419853210449e-05,
+	1.1920928955078125e-07, 1.3113021850585938e-06,
+	9.6559524536132812e-06}, /* L1355 */
+{1.7556488513946533e+00, 3.6209821701049805e-05,
+	1.1920928955078125e-07, 2.3722648620605469e-05,
+	3.1232833862304688e-05}, /* L1356 */
+{1.4149175882339478e+00, 2.9265880584716797e-05,
+	1.1920928955078125e-07, 1.0251998901367188e-05,
+	4.9829483032226562e-05}, /* L1357 */
+{1.2239744663238525e+00, 2.5391578674316406e-05,
+	1.1920928955078125e-07, -2.2232532501220703e-05,
+	4.9352645874023438e-05}, /* L1358 */
+{1.8379373550415039e+00, 3.8236379623413086e-05,
+	1.1920928955078125e-07, -1.0788440704345703e-05,
+	4.6849250793457031e-05}, /* L1359 */
+{1.2392036914825439e+00, 2.5853514671325684e-05,
+	1.1920928955078125e-07, -9.1791152954101562e-06,
+	-1.1205673217773438e-05}, /* L1360 */
+{2.0640878677368164e+00, 4.3183565139770508e-05,
+	1.1920928955078125e-07, 1.3828277587890625e-05,
+	-3.8146972656250000e-06}, /* L1361 */
+{1.1540567874908447e+00, 2.4214386940002441e-05,
+	1.1920928955078125e-07, -3.8743019104003906e-06,
+	3.1232833862304688e-05}, /* L1362 */
+{1.4506357908248901e+00, 3.0525028705596924e-05,
+	1.1920928955078125e-07, 4.7802925109863281e-05,
+	5.4121017456054688e-05}, /* L1363 */
+{1.2244940996170044e+00, 2.5838613510131836e-05,
+	1.1920928955078125e-07, -1.0192394256591797e-05,
+	-7.2121620178222656e-05}, /* L1364 */
+{1.7947084903717041e+00, 3.7983059883117676e-05,
+	1.1920928955078125e-07, 4.1365623474121094e-05,
+	2.0873546600341797e-04}, /* L1365 */
+{1.0404492616653442e+00, 2.2083520889282227e-05,
+	1.1920928955078125e-07, -1.0049343109130859e-04,
+	-1.7166137695312500e-05}, /* L1366 */
+{1.6932382583618164e+00, 3.6031007766723633e-05,
+	1.1920928955078125e-07, 2.6226043701171875e-06,
+	3.8504600524902344e-05}, /* L1367 */
+{1.0041375160217285e+00, 2.1427869796752930e-05,
+	1.1920928955078125e-07, -1.4364719390869141e-05,
+	8.8214874267578125e-06}, /* L1368 */
+{1.1350351572036743e+00, 2.4288892745971680e-05,
+	1.1920928955078125e-07, -2.1457672119140625e-05,
+	-1.6570091247558594e-05}, /* L1369 */
+{1.4458054304122925e+00, 3.1024217605590820e-05,
+	1.1920928955078125e-07, 7.0333480834960938e-06,
+	-6.3776969909667969e-06}, /* L1370 */
+{1.7375079393386841e+00, 3.7387013435363770e-05,
+	1.1920928955078125e-07, -7.9870223999023438e-06,
+	1.2874603271484375e-05}, /* L1371 */
+{1.5731759071350098e+00, 3.3944845199584961e-05,
+	1.1920928955078125e-07, 1.9073486328125000e-06,
+	4.1723251342773438e-06}, /* L1372 */
+{1.6914273500442505e+00, 3.6597251892089844e-05,
+	1.1920928955078125e-07, -1.3411045074462891e-05,
+	-1.8477439880371094e-06}, /* L1373 */
+{1.3100943565368652e+00, 2.8431415557861328e-05,
+	1.1920928955078125e-07, -3.6180019378662109e-05,
+	5.9962272644042969e-05}, /* L1374 */
+{1.7335295677185059e+00, 3.7714838981628418e-05,
+	1.1920928955078125e-07, -1.4305114746093750e-06,
+	-1.6272068023681641e-05}, /* L1375 */
+{2.4289181232452393e+00, 5.2988529205322266e-05,
+	1.1920928955078125e-07, -1.0311603546142578e-05,
+	-8.0466270446777344e-06}, /* L1376 */
+{2.0093674659729004e+00, 4.3958425521850586e-05,
+	1.1920928955078125e-07, -2.3722648620605469e-05,
+	1.5974044799804688e-05}, /* L1377 */
+{1.0772960186004639e+00, 2.3633241653442383e-05,
+	1.1920928955078125e-07, 1.3828277587890625e-05,
+	1.1920928955078125e-07}, /* L1378 */
+{1.4037636518478394e+00, 3.0875205993652344e-05,
+	1.1920928955078125e-07, -1.6927719116210938e-05,
+	-1.4841556549072266e-05}, /* L1379 */
+{1.2685499191284180e+00, 2.7976930141448975e-05,
+	1.1920928955078125e-07, 1.3351440429687500e-05,
+	1.4185905456542969e-05}, /* L1380 */
+{1.5781387090682983e+00, 3.4898519515991211e-05,
+	1.1920928955078125e-07, -3.5464763641357422e-05,
+	7.1525573730468750e-07}, /* L1381 */
+{1.2983435392379761e+00, 2.8789043426513672e-05,
+	1.1920928955078125e-07, -2.9802322387695312e-06,
+	-2.2351741790771484e-05}, /* L1382 */
+{1.6043317317962646e+00, 3.5673379898071289e-05,
+	1.1920928955078125e-07, -2.7775764465332031e-05,
+	-5.3167343139648438e-05}, /* L1383 */
+{1.3502142429351807e+00, 3.0130147933959961e-05,
+	1.1920928955078125e-07, -5.1420927047729492e-04,
+	-5.3250789642333984e-04}, /* L1384 */
+{1.6409204006195068e+00, 3.6686658859252930e-05,
+	1.1920928955078125e-07, -1.8000602722167969e-05,
+	1.1622905731201172e-04}, /* L1385 */
+{1.0525113344192505e+00, 2.3588538169860840e-05,
+	1.1920928955078125e-07, -1.0013580322265625e-05,
+	1.0609626770019531e-05}, /* L1386 */
+{1.2797068357467651e+00, 2.8759241104125977e-05,
+	1.1920928955078125e-07, 2.0265579223632812e-05,
+	1.4901161193847656e-05}, /* L1387 */
+{1.6454463005065918e+00, 3.7074089050292969e-05,
+	1.1920928955078125e-07, 5.4836273193359375e-06,
+	1.4305114746093750e-06}, /* L1388 */
+{1.8370115756988525e+00, 4.1499733924865723e-05,
+	1.1920928955078125e-07, 4.7683715820312500e-07,
+	2.0265579223632812e-06}, /* L1389 */
+{1.2052081823348999e+00, 2.7298927307128906e-05,
+	1.1920928955078125e-07, 1.0371208190917969e-05,
+	-4.7683715820312500e-06}, /* L1390 */
+{1.7833750247955322e+00, 4.0501356124877930e-05,
+	1.1920928955078125e-07, 1.4781951904296875e-05,
+	-1.3470649719238281e-05}, /* L1391 */
+{1.2067022323608398e+00, 2.7477741241455078e-05,
+	1.1920928955078125e-07, -1.1444091796875000e-05,
+	-1.1801719665527344e-05}, /* L1392 */
+{1.0259829759597778e+00, 2.3424625396728516e-05,
+	1.1920928955078125e-07, 1.9192695617675781e-05,
+	1.4305114746093750e-06}, /* L1393 */
+{1.1892608404159546e+00, 2.7224421501159668e-05,
+	1.1920928955078125e-07, -8.7261199951171875e-05,
+	-1.5497207641601562e-06}, /* L1394 */
+{1.6310317516326904e+00, 3.7431716918945312e-05,
+	1.1920928955078125e-07, -4.2319297790527344e-06,
+	-2.7894973754882812e-05}, /* L1395 */
+{1.1712638139724731e+00, 2.6956200599670410e-05,
+	1.1920928955078125e-07, 8.2492828369140625e-05,
+	1.4388561248779297e-04}, /* L1396 */
+{1.3191109895706177e+00, 3.0428171157836914e-05,
+	1.1920928955078125e-07, -1.4424324035644531e-05,
+	-5.8412551879882812e-06}, /* L1397 */
+{1.1687425374984741e+00, 2.7030706405639648e-05,
+	1.1920928955078125e-07, -1.4185905456542969e-05,
+	2.9802322387695312e-05}, /* L1398 */
+{1.5179406404495239e+00, 3.5196542739868164e-05,
+	1.1920928955078125e-07, 3.5762786865234375e-07,
+	-1.4960765838623047e-05}, /* L1399 */
+{1.1524952650070190e+00, 2.6792287826538086e-05,
+	1.1920928955078125e-07, 1.4662742614746094e-05,
+	-2.1994113922119141e-05}, /* L1400 */
+{1.6869832277297974e+00, 3.9316713809967041e-05,
+	1.1920928955078125e-07, -3.8743019104003906e-06,
+	-5.0663948059082031e-06}, /* L1401 */
+{1.1122173070907593e+00, 2.5987625122070312e-05,
+	1.1920928955078125e-07, -7.2717666625976562e-06,
+	2.2411346435546875e-05}, /* L1402 */
+{2.0101656913757324e+00, 4.7087669372558594e-05,
+	1.1920928955078125e-07, -4.5299530029296875e-06,
+	-2.1457672119140625e-06}, /* L1403 */
+{1.1953006982803345e+00, 2.8073787689208984e-05,
+	1.1920928955078125e-07, -3.3438205718994141e-05,
+	2.3722648620605469e-05}, /* L1404 */
+{1.9925403594970703e+00, 4.6916306018829346e-05,
+	1.1920928955078125e-07, 3.3855438232421875e-05,
+	-8.9406967163085938e-06}, /* L1405 */
+{1.2078046798706055e+00, 2.8520822525024414e-05,
+	1.1920928955078125e-07, -1.5026330947875977e-04,
+	1.0275840759277344e-04}, /* L1406 */
+{1.7974610328674316e+00, 4.2535364627838135e-05,
+	1.1920928955078125e-07, -7.9870223999023438e-06,
+	-2.5153160095214844e-05}, /* L1407 */
+{1.2951791286468506e+00, 3.0726194381713867e-05,
+	1.1920928955078125e-07, 6.7949295043945312e-06,
+	-3.8146972656250000e-06}, /* L1408 */
+{1.7307336330413818e+00, 4.1201710700988770e-05,
+	1.1920928955078125e-07, 4.6491622924804688e-05,
+	9.8228454589843750e-05}, /* L1409 */
+{1.1131089925765991e+00, 2.6538968086242676e-05,
+	1.1920928955078125e-07, -1.7881393432617188e-07,
+	6.3180923461914062e-06}, /* L1410 */
+{1.2630264759063721e+00, 3.0189752578735352e-05,
+	1.1920928955078125e-07, 4.4584274291992188e-05,
+	-3.6537647247314453e-05}, /* L1411 */
+{2.2866775989532471e+00, 5.4791569709777832e-05,
+	1.1920928955078125e-07, -5.9604644775390625e-06,
+	-7.0333480834960938e-06}, /* L1412 */
+{1.9254223108291626e+00, 4.6253204345703125e-05,
+	1.1920928955078125e-07, 2.0861625671386719e-05,
+	2.3841857910156250e-06}, /* L1413 */
+{1.2598603963851929e+00, 3.0338764190673828e-05,
+	1.1920928955078125e-07, -1.7583370208740234e-05,
+	1.1920928955078125e-05}, /* L1414 */
+{2.0592036247253418e+00, 4.9710273742675781e-05,
+	1.1920928955078125e-07, -1.4901161193847656e-06,
+	3.5762786865234375e-06}, /* L1415 */
+{1.3841522932052612e+00, 3.3497810363769531e-05,
+	1.1920928955078125e-07, -3.2186508178710938e-06,
+	-2.5570392608642578e-05}, /* L1416 */
+{1.2210686206817627e+00, 2.9623508453369141e-05,
+	1.1920928955078125e-07, -3.8444995880126953e-05,
+	-1.9669532775878906e-05}, /* L1417 */
+{1.3291358947753906e+00, 3.2335519790649414e-05,
+	1.1920928955078125e-07, 1.2874603271484375e-05,
+	8.9764595031738281e-05}, /* L1418 */
+{1.6585131883621216e+00, 4.0441751480102539e-05,
+	1.1920928955078125e-07, 6.4969062805175781e-05,
+	6.7114830017089844e-05}, /* L1419 */
+{2.3393919467926025e+00, 5.7190656661987305e-05,
+	1.1920928955078125e-07, -6.0796737670898438e-05,
+	-2.4616718292236328e-05}, /* L1420 */
+{1.9875842332839966e+00, 4.8696994781494141e-05,
+	1.1920928955078125e-07, -1.2636184692382812e-05,
+	2.1696090698242188e-05}, /* L1421 */
+{1.2387638092041016e+00, 3.0420720577239990e-05,
+	1.1920928955078125e-07, -1.8477439880371094e-06,
+	2.2649765014648438e-06}, /* L1422 */
+{1.3376426696777344e+00, 3.2931566238403320e-05,
+	1.1920928955078125e-07, -4.5418739318847656e-05,
+	3.3497810363769531e-05}, /* L1423 */
+{1.5897701978683472e+00, 3.9234757423400879e-05,
+	1.1920928955078125e-07, -4.0054321289062500e-05,
+	3.0994415283203125e-06}, /* L1424 */
+{1.9498820304870605e+00, 4.8235058784484863e-05,
+	1.1920928955078125e-07, -1.3053417205810547e-05,
+	1.9550323486328125e-05}, /* L1425 */
+{1.1309252977371216e+00, 2.8043985366821289e-05,
+	1.1920928955078125e-07, 3.8504600524902344e-05,
+	-4.1723251342773438e-07}, /* L1426 */
+{1.7441880702972412e+00, 4.3362379074096680e-05,
+	1.1920928955078125e-07, -8.7559223175048828e-05,
+	1.6105175018310547e-04}, /* L1427 */
+{1.1221930980682373e+00, 2.7962028980255127e-05,
+	1.1920928955078125e-07, -2.7894973754882812e-05,
+	-5.0067901611328125e-06}, /* L1428 */
+{1.8358938694000244e+00, 4.5850872993469238e-05,
+	1.1920928955078125e-07, -1.2040138244628906e-05,
+	4.2915344238281250e-06}, /* L1429 */
+{1.4915813207626343e+00, 3.7342309951782227e-05,
+	1.1920928955078125e-07, 1.2159347534179688e-05,
+	-3.9339065551757812e-06}, /* L1430 */
+{1.3514995574951172e+00, 3.3915042877197266e-05,
+	1.1920928955078125e-07, -1.9609928131103516e-05,
+	5.0067901611328125e-06}, /* L1431 */
+{1.9424787759780884e+00, 4.8860907554626465e-05,
+	1.1920928955078125e-07, -1.4305114746093750e-06,
+	1.0132789611816406e-05}, /* L1432 */
+{2.2824485301971436e+00, 5.7548284530639648e-05,
+	1.1920928955078125e-07, 1.6808509826660156e-05,
+	1.0967254638671875e-05}, /* L1433 */
+{1.4196853637695312e+00, 3.5881996154785156e-05,
+	1.1920928955078125e-07, 8.3565711975097656e-05,
+	2.6822090148925781e-05}, /* L1434 */
+{2.0587852001190186e+00, 5.2154064178466797e-05,
+	1.1920928955078125e-07, -2.0265579223632812e-05,
+	1.1086463928222656e-05}, /* L1435 */
+{1.5611630678176880e+00, 3.9644539356231689e-05,
+	1.1920928955078125e-07, 3.7789344787597656e-05,
+	6.9737434387207031e-05}, /* L1436 */
+{2.0004017353057861e+00, 5.0917267799377441e-05,
+	1.1920928955078125e-07, -1.9073486328125000e-05,
+	3.4332275390625000e-05}, /* L1437 */
+{1.6173666715621948e+00, 4.1261315345764160e-05,
+	1.1920928955078125e-07, -1.1444091796875000e-05,
+	1.4901161193847656e-05}, /* L1438 */
+{1.7316709756851196e+00, 4.4301152229309082e-05,
+	1.1920928955078125e-07, -7.6353549957275391e-05,
+	-3.4749507904052734e-05}, /* L1439 */
+{1.2825214862823486e+00, 3.2871961593627930e-05,
+	1.1920928955078125e-07, 1.1682510375976562e-05,
+	-1.0311603546142578e-05}, /* L1440 */
+{1.3583186864852905e+00, 3.4898519515991211e-05,
+	1.1920928955078125e-07, 4.6014785766601562e-05,
+	5.9366226196289062e-05}, /* L1441 */
+{1.0954340696334839e+00, 2.8207898139953613e-05,
+	1.1920928955078125e-07, -8.7022781372070312e-06,
+	6.6757202148437500e-06}, /* L1442 */
+{1.8105490207672119e+00, 4.6759843826293945e-05,
+	1.1920928955078125e-07, -1.4382600784301758e-04,
+	8.7976455688476562e-05}, /* L1443 */
+{1.7050383090972900e+00, 4.4107437133789062e-05,
+	1.1920928955078125e-07, -1.1205673217773438e-05,
+	-9.2983245849609375e-06}, /* L1444 */
+{1.9364947080612183e+00, 5.0216913223266602e-05,
+	1.1920928955078125e-07, 3.5166740417480469e-05,
+	2.8252601623535156e-05}, /* L1445 */
+{1.2488127946853638e+00, 3.2454729080200195e-05,
+	1.1920928955078125e-07, -1.1682510375976562e-05,
+	3.0994415283203125e-06}, /* L1446 */
+{1.4114278554916382e+00, 3.6776065826416016e-05,
+	1.1920928955078125e-07, 7.9035758972167969e-05,
+	-1.0204315185546875e-04}, /* L1447 */
+{1.2499012947082520e+00, 3.2633543014526367e-05,
+	1.1920928955078125e-07, -3.6060810089111328e-05,
+	6.3180923461914062e-06}, /* L1448 */
+{1.5762051343917847e+00, 4.1246414184570312e-05,
+	1.1920928955078125e-07, -2.9206275939941406e-06,
+	4.1007995605468750e-05}, /* L1449 */
+{1.2615462541580200e+00, 3.3088028430938721e-05,
+	1.1920928955078125e-07, -2.5629997253417969e-05,
+	-1.4305114746093750e-06}, /* L1450 */
+{1.7548559904098511e+00, 4.6133995056152344e-05,
+	1.1920928955078125e-07, 1.1801719665527344e-05,
+	6.3061714172363281e-05}, /* L1451 */
+{1.3512141704559326e+00, 3.5598874092102051e-05,
+	1.1920928955078125e-07, -2.8610229492187500e-06,
+	-1.2516975402832031e-06}, /* L1452 */
+{1.9481852054595947e+00, 5.1444396376609802e-05,
+	1.1920928955078125e-07, -1.4483928680419922e-05,
+	-2.7835369110107422e-05}, /* L1453 */
+{1.3838692903518677e+00, 3.6627054214477539e-05,
+	1.1920928955078125e-07, -1.9133090972900391e-05,
+	2.9802322387695312e-06}, /* L1454 */
+{1.4002081155776978e+00, 3.7141144275665283e-05,
+	1.1920928955078125e-07, 2.9802322387695312e-06,
+	-1.8239021301269531e-05}, /* L1455 */
+{1.3880631923675537e+00, 3.6900863051414490e-05,
+	1.1920928955078125e-07, 4.1723251342773438e-06,
+	-9.4175338745117188e-06}, /* L1456 */
+{2.1057124137878418e+00, 5.6110322475433350e-05,
+	1.1920928955078125e-07, -1.0114908218383789e-04,
+	9.7036361694335938e-05}, /* L1457 */
+{1.0557851791381836e+00, 2.8192996978759766e-05,
+	1.1920928955078125e-07, -2.8610229492187500e-06,
+	-3.3378601074218750e-06}, /* L1458 */
+{1.4353449344635010e+00, 3.8415193557739258e-05,
+	1.1920928955078125e-07, 4.5418739318847656e-05,
+	2.6464462280273438e-05}, /* L1459 */
+{1.9754149913787842e+00, 5.2988529205322266e-05,
+	1.1920928955078125e-07, -1.7285346984863281e-05,
+	-3.3855438232421875e-05}, /* L1460 */
+{1.6584044694900513e+00, 4.4584274291992188e-05,
+	1.1920928955078125e-07, -1.9073486328125000e-06,
+	-3.1471252441406250e-05}, /* L1461 */
+{1.1271488666534424e+00, 3.0368566513061523e-05,
+	1.1920928955078125e-07, -2.9087066650390625e-05,
+	2.1696090698242188e-05}, /* L1462 */
+{1.5054625272750854e+00, 4.0650367736816406e-05,
+	1.1920928955078125e-07, -1.5974044799804688e-05,
+	-4.7087669372558594e-06}, /* L1463 */
+{1.2962318658828735e+00, 3.5077333450317383e-05,
+	1.1920928955078125e-07, 1.5497207641601562e-05,
+	2.3841857910156250e-07}, /* L1464 */
+{1.5944050550460815e+00, 4.3243169784545898e-05,
+	1.1920928955078125e-07, 5.9604644775390625e-06,
+	3.1828880310058594e-05}, /* L1465 */
+{1.1379826068878174e+00, 3.0934810638427734e-05,
+	1.1920928955078125e-07, -2.9325485229492188e-05,
+	-3.5881996154785156e-05}, /* L1466 */
+{1.4034835100173950e+00, 3.8236379623413086e-05,
+	1.1920928955078125e-07, -2.2113323211669922e-05,
+	9.2029571533203125e-05}, /* L1467 */
+{1.2783238887786865e+00, 3.4898519515991211e-05,
+	1.1920928955078125e-07, 1.4066696166992188e-05,
+	-1.3351440429687500e-05}, /* L1468 */
+{1.8538811206817627e+00, 5.0723552703857422e-05,
+	1.1920928955078125e-07, -2.9742717742919922e-05,
+	-5.3167343139648438e-05}, /* L1469 */
+{1.2802045345306396e+00, 3.5107135772705078e-05,
+	1.1920928955078125e-07, 8.9049339294433594e-05,
+	-8.8810920715332031e-06}, /* L1470 */
+{1.7689334154129028e+00, 4.8622488975524902e-05,
+	1.1920928955078125e-07, -2.5033950805664062e-05,
+	2.8729438781738281e-05}, /* L1471 */
+{1.2634744644165039e+00, 3.4809112548828125e-05,
+	1.1920928955078125e-07, 4.8279762268066406e-05,
+	1.1134147644042969e-04}, /* L1472 */
+{1.8021466732025146e+00, 4.9740076065063477e-05,
+	1.1920928955078125e-07, -1.3172626495361328e-05,
+	1.3113021850585938e-06}, /* L1473 */
+{1.3816223144531250e+00, 3.8225203752517700e-05,
+	1.1920928955078125e-07, 1.0883808135986328e-04,
+	1.0025501251220703e-04}, /* L1474 */
+{1.6515465974807739e+00, 4.5776367187500000e-05,
+	1.1920928955078125e-07, -4.2915344238281250e-06,
+	-1.3113021850585938e-05}, /* L1475 */
+{1.6826131343841553e+00, 4.6737492084503174e-05,
+	1.1920928955078125e-07, -7.3313713073730469e-06,
+	-9.0003013610839844e-06}, /* L1476 */
+{2.1497521400451660e+00, 5.9850513935089111e-05,
+	1.1920928955078125e-07, -1.0550022125244141e-04,
+	7.2121620178222656e-05}, /* L1477 */
+{1.4881008863449097e+00, 4.1529536247253418e-05,
+	1.1920928955078125e-07, -7.3134899139404297e-05,
+	1.6868114471435547e-04}, /* L1478 */
+{1.5448435544967651e+00, 4.3187290430068970e-05,
+	1.1920928955078125e-07, -2.5331974029541016e-05,
+	-7.7486038208007812e-07}, /* L1479 */
+{1.4849699735641479e+00, 4.1604042053222656e-05,
+	1.1920928955078125e-07, -2.9683113098144531e-05,
+	1.8715858459472656e-05}, /* L1480 */
+{2.2235758304595947e+00, 6.2428414821624756e-05,
+	1.1920928955078125e-07, 4.5776367187500000e-05,
+	-1.0371208190917969e-05}, /* L1481 */
+{1.5330740213394165e+00, 4.3131411075592041e-05,
+	1.1920928955078125e-07, -2.3245811462402344e-06,
+	8.2254409790039062e-06}, /* L1482 */
+{1.6582512855529785e+00, 4.6759843826293945e-05,
+	1.1920928955078125e-07, 6.7472457885742188e-05,
+	-2.4318695068359375e-05}, /* L1483 */
+{1.5347341299057007e+00, 4.3362379074096680e-05,
+	1.1920928955078125e-07, -2.5570392608642578e-05,
+	-4.9471855163574219e-06}, /* L1484 */
+{1.9177533388137817e+00, 5.4359436035156250e-05,
+	1.1920928955078125e-07, 3.9815902709960938e-05,
+	-1.4597177505493164e-04}, /* L1485 */
+{1.6128203868865967e+00, 4.5783817768096924e-05,
+	1.1920928955078125e-07, 1.1062622070312500e-04,
+	-1.9127130508422852e-04}, /* L1486 */
+{1.5746463537216187e+00, 4.4770538806915283e-05,
+	1.1920928955078125e-07, -4.1723251342773438e-06,
+	1.4305114746093750e-06}, /* L1487 */
+{1.2361463308334351e+00, 3.5226345062255859e-05,
+	1.1920928955078125e-07, 5.7697296142578125e-05,
+	-5.0783157348632812e-05}, /* L1488 */
+{1.2776293754577637e+00, 3.6478042602539062e-05,
+	1.1920928955078125e-07, 1.1920928955078125e-06,
+	5.0067901611328125e-06}, /* L1489 */
+{1.0395350456237793e+00, 2.9742717742919922e-05,
+	1.1920928955078125e-07, -4.7445297241210938e-05,
+	4.5895576477050781e-05}, /* L1490 */
+{2.0484542846679688e+00, 5.8740377426147461e-05,
+	1.1920928955078125e-07, 1.4066696166992188e-04,
+	-1.4621019363403320e-04}, /* L1491 */
+{1.4003931283950806e+00, 4.0233135223388672e-05,
+	1.1920928955078125e-07, -8.4042549133300781e-06,
+	4.1723251342773438e-06}, /* L1492 */
+{1.9649422168731689e+00, 5.6572258472442627e-05,
+	1.1920928955078125e-07, 1.3113021850585938e-06,
+	-6.3776969909667969e-06}, /* L1493 */
+{1.1796791553497314e+00, 3.4034252166748047e-05,
+	1.1920928955078125e-07, -5.1259994506835938e-06,
+	-1.0490417480468750e-05}, /* L1494 */
+{1.8512749671936035e+00, 5.3524971008300781e-05,
+	1.1920928955078125e-07, 5.6028366088867188e-06,
+	1.4185905456542969e-05}, /* L1495 */
+{1.9978289604187012e+00, 5.7876110076904297e-05,
+	1.1920928955078125e-07, -1.6629695892333984e-05,
+	6.1988830566406250e-06}, /* L1496 */
+{1.6106010675430298e+00, 4.6759843826293945e-05,
+	1.1920928955078125e-07, 4.8637390136718750e-05,
+	-3.3199787139892578e-05}, /* L1497 */
+{1.1299568414688110e+00, 3.2871961593627930e-05,
+	1.1920928955078125e-07, 1.0883808135986328e-04,
+	-7.4744224548339844e-05}, /* L1498 */
+{1.9313563108444214e+00, 5.6296586990356445e-05,
+	1.1920928955078125e-07, -3.9637088775634766e-05,
+	-3.9339065551757812e-05}, /* L1499 */
+{1.3632235527038574e+00, 3.9815902709960938e-05,
+	1.1920928955078125e-07, 9.6559524536132812e-06,
+	-2.0623207092285156e-05}, /* L1500 */
+{1.6506551504135132e+00, 4.8309564590454102e-05,
+	1.1920928955078125e-07, -1.0490417480468750e-05,
+	2.0980834960937500e-05}, /* L1501 */
+{1.5693887472152710e+00, 4.6029686927795410e-05,
+	1.1920928955078125e-07, -8.8930130004882812e-05,
+	2.0623207092285156e-05}, /* L1502 */
+{1.7611865997314453e+00, 5.1754526793956757e-05,
+	1.1920928955078125e-07, 2.1457672119140625e-06,
+	-1.9907951354980469e-05}, /* L1503 */
+{1.9873125553131104e+00, 5.8531761169433594e-05,
+	1.1920928955078125e-07, 5.8889389038085938e-05,
+	-8.2612037658691406e-05}, /* L1504 */
+{1.8383181095123291e+00, 5.4240226745605469e-05,
+	1.1920928955078125e-07, 1.2636184692382812e-05,
+	1.0371208190917969e-05}, /* L1505 */
+{1.1027753353118896e+00, 3.2603740692138672e-05,
+	1.1920928955078125e-07, -5.2452087402343750e-06,
+	1.0728836059570312e-06}, /* L1506 */
+{1.7803213596343994e+00, 5.2742660045623779e-05,
+	1.1920928955078125e-07, 1.7881393432617188e-06,
+	1.5258789062500000e-05}, /* L1507 */
+{1.4907630681991577e+00, 4.4256448745727539e-05,
+	1.1920928955078125e-07, -4.9173831939697266e-05,
+	-9.0599060058593750e-05}, /* L1508 */
+{2.0239846706390381e+00, 6.0200691223144531e-05,
+	1.1920928955078125e-07, -1.8477439880371094e-05,
+	1.8119812011718750e-05}, /* L1509 */
+{1.1144508123397827e+00, 3.3214688301086426e-05,
+	1.1920928955078125e-07, 6.9141387939453125e-06,
+	-1.4901161193847656e-05}, /* L1510 */
+{1.9620109796524048e+00, 5.8606266975402832e-05,
+	1.1920928955078125e-07, -1.1438131332397461e-04,
+	1.2576580047607422e-04}, /* L1511 */
+{1.5394760370254517e+00, 4.6074390411376953e-05,
+	1.1920928955078125e-07, -1.8656253814697266e-05,
+	-5.3524971008300781e-05}, /* L1512 */
+{1.6924753189086914e+00, 5.0827860832214355e-05,
+	1.1920928955078125e-07, 9.6690654754638672e-04,
+	8.7499618530273438e-05}, /* L1513 */
+{1.1616461277008057e+00, 3.4898519515991211e-05,
+	1.1920928955078125e-07, 1.0728836059570312e-06,
+	4.6491622924804688e-06}, /* L1514 */
+{2.3611564636230469e+00, 7.1078538894653320e-05,
+	1.1920928955078125e-07, 2.3365020751953125e-05,
+	5.2690505981445312e-05}, /* L1515 */
+{1.7132921218872070e+00, 5.1677227020263672e-05,
+	1.1920928955078125e-07, -6.0558319091796875e-05,
+	1.4305114746093750e-06}, /* L1516 */
+{1.9700919389724731e+00, 5.9545040130615234e-05,
+	1.1920928955078125e-07, 1.2826919555664062e-04,
+	5.2452087402343750e-05}, /* L1517 */
+{1.4536706209182739e+00, 4.4047832489013672e-05,
+	1.1920928955078125e-07, 1.8703937530517578e-04,
+	-3.3789873123168945e-04}, /* L1518 */
+{2.0969827175140381e+00, 6.3627958297729492e-05,
+	1.1920928955078125e-07, -4.3094158172607422e-05,
+	2.2411346435546875e-05}, /* L1519 */
+{1.4146339893341064e+00, 4.3004751205444336e-05,
+	1.1920928955078125e-07, 3.0159950256347656e-05,
+	-5.8412551879882812e-06}, /* L1520 */
+{2.1186771392822266e+00, 6.4536929130554199e-05,
+	1.1920928955078125e-07, 5.9962272644042969e-05,
+	4.8875808715820312e-06}, /* L1521 */
+{1.7401461601257324e+00, 5.3107738494873047e-05,
+	1.1920928955078125e-07, -1.7881393432617188e-06,
+	-5.2869319915771484e-05}, /* L1522 */
+{1.5861666202545166e+00, 4.8510730266571045e-05,
+	1.1920928955078125e-07, -6.2406063079833984e-05,
+	1.7404556274414062e-05}, /* L1523 */
+{1.9230616092681885e+00, 5.8919191360473633e-05,
+	1.1920928955078125e-07, -5.6028366088867188e-06,
+	-1.4722347259521484e-05}, /* L1524 */
+{1.7132749557495117e+00, 5.2593648433685303e-05,
+	1.1920928955078125e-07, 2.5510787963867188e-05,
+	-1.8477439880371094e-05}, /* L1525 */
+{1.1891524791717529e+00, 3.6582350730895996e-05,
+	1.1920928955078125e-07, -2.5570392608642578e-05,
+	6.9737434387207031e-05}, /* L1526 */
+{1.7972261905670166e+00, 5.5409967899322510e-05,
+	1.1920928955078125e-07, -5.0067901611328125e-06,
+	-5.6266784667968750e-05}, /* L1527 */
+{1.8937269449234009e+00, 5.8472156524658203e-05,
+	1.1920928955078125e-07, 1.6570091247558594e-05,
+	-1.3291835784912109e-05}, /* L1528 */
+{1.9247720241546631e+00, 5.9559941291809082e-05,
+	1.1920928955078125e-07, -2.3424625396728516e-05,
+	4.8160552978515625e-05}, /* L1529 */
+{1.2874305248260498e+00, 3.9905309677124023e-05,
+	1.1920928955078125e-07, -2.1457672119140625e-06,
+	2.6226043701171875e-05}, /* L1530 */
+{2.1404082775115967e+00, 6.6488981246948242e-05,
+	1.1920928955078125e-07, -4.4941902160644531e-05,
+	4.6849250793457031e-05}, /* L1531 */
+{1.6732366085052490e+00, 5.2064657211303711e-05,
+	1.1920928955078125e-07, 4.3392181396484375e-05,
+	-8.8810920715332031e-06}, /* L1532 */
+{2.1306273937225342e+00, 6.6429376602172852e-05,
+	1.1920928955078125e-07, -1.2165307998657227e-04,
+	-1.2755393981933594e-04}, /* L1533 */
+{1.5713833570480347e+00, 4.9084424972534180e-05,
+	1.1920928955078125e-07, -3.7610530853271484e-05,
+	2.7894973754882812e-05}, /* L1534 */
+{2.1737983226776123e+00, 6.8031251430511475e-05,
+	1.1920928955078125e-07, -4.6491622924804688e-06,
+	-1.7523765563964844e-05}, /* L1535 */
+{1.7201981544494629e+00, 5.3938478231430054e-05,
+	1.1920928955078125e-07, 7.6293945312500000e-06,
+	-4.4107437133789062e-06}, /* L1536 */
+{1.5260287523269653e+00, 4.7951936721801758e-05,
+	1.1920928955078125e-07, -8.6069107055664062e-05,
+	-5.7756900787353516e-05}, /* L1537 */
+{1.3840992450714111e+00, 4.3570995330810547e-05,
+	1.1920928955078125e-07, -7.3254108428955078e-05,
+	-1.1271238327026367e-04}, /* L1538 */
+{1.5215897560119629e+00, 4.7981739044189453e-05,
+	1.1920928955078125e-07, 3.2782554626464844e-05,
+	-6.2108039855957031e-05}, /* L1539 */
+{1.6385518312454224e+00, 5.1766633987426758e-05,
+	1.1920928955078125e-07, -3.0159950256347656e-05,
+	-4.3332576751708984e-05}, /* L1540 */
+{2.6145944595336914e+00, 8.2880258560180664e-05,
+	1.1920928955078125e-07, 8.7380409240722656e-04,
+	6.5803527832031250e-04}, /* L1541 */
+{1.4643225669860840e+00, 4.6461820602416992e-05,
+	1.1920928955078125e-07, -6.2167644500732422e-05,
+	7.0214271545410156e-05}, /* L1542 */
+{1.5510369539260864e+00, 4.9471855163574219e-05,
+	1.1920928955078125e-07, 2.1610260009765625e-03,
+	6.7126750946044922e-04}, /* L1543 */
+{1.6978869438171387e+00, 5.4046511650085449e-05,
+	1.1920928955078125e-07, -8.3446502685546875e-06,
+	4.9710273742675781e-05}, /* L1544 */
+{2.9040098190307617e+00, 9.2715024948120117e-05,
+	1.1920928955078125e-07, -3.6090612411499023e-04,
+	2.8729438781738281e-05}, /* L1545 */
+{1.4747371673583984e+00, 4.7117471694946289e-05,
+	1.1920928955078125e-07, 1.6689300537109375e-06,
+	1.5497207641601562e-05}, /* L1546 */
+{2.5894241333007812e+00, 8.2999467849731445e-05,
+	1.1920928955078125e-07, -2.7740001678466797e-04,
+	3.2389163970947266e-04}, /* L1547 */
+{1.4263014793395996e+00, 4.5739114284515381e-05,
+	1.1920928955078125e-07, -2.9802322387695312e-07,
+	-7.9274177551269531e-06}, /* L1548 */
+{2.3825769424438477e+00, 7.6547265052795410e-05,
+	1.1920928955078125e-07, -6.4373016357421875e-06,
+	8.4638595581054688e-06}, /* L1549 */
+{1.0481963157653809e+00, 3.3739954233169556e-05,
+	1.1920928955078125e-07, 1.0490417480468750e-05,
+	1.7642974853515625e-05}, /* L1550 */
+{1.7919580936431885e+00, 5.7786703109741211e-05,
+	1.1920928955078125e-07, 2.8610229492187500e-06,
+	-1.8477439880371094e-06}, /* L1551 */
+{1.4354053735733032e+00, 4.6379864215850830e-05,
+	1.1920928955078125e-07, 4.2319297790527344e-05,
+	-8.8214874267578125e-06}, /* L1552 */
+{2.2453553676605225e+00, 7.3224306106567383e-05,
+	1.1920928955078125e-07, -2.3877620697021484e-03,
+	2.1587610244750977e-03}, /* L1553 */
+{1.5011637210845947e+00, 4.8726797103881836e-05,
+	1.1920928955078125e-07, -5.8555603027343750e-04,
+	2.6702880859375000e-04}, /* L1554 */
+{1.6169064044952393e+00, 5.2530318498611450e-05,
+	1.1920928955078125e-07, 7.9870223999023438e-06,
+	1.0597705841064453e-04}, /* L1555 */
+{1.5450292825698853e+00, 5.0283968448638916e-05,
+	1.1920928955078125e-07, 1.7762184143066406e-05,
+	-8.7022781372070312e-06}, /* L1556 */
+{2.0099329948425293e+00, 6.5542757511138916e-05,
+	1.1920928955078125e-07, -4.9233436584472656e-05,
+	-4.2319297790527344e-05}, /* L1557 */
+{1.2560998201370239e+00, 4.1037797927856445e-05,
+	1.1920928955078125e-07, -1.8179416656494141e-05,
+	5.8293342590332031e-05}, /* L1558 */
+{1.7137652635574341e+00, 5.6087970733642578e-05,
+	1.1920928955078125e-07, 4.6014785766601562e-05,
+	-6.8128108978271484e-05}, /* L1559 */
+{1.6471037864685059e+00, 5.4001808166503906e-05,
+	1.1920928955078125e-07, -6.6041946411132812e-05,
+	3.2544136047363281e-05}, /* L1560 */
+{2.0242938995361328e+00, 6.6488981246948242e-05,
+	1.1920928955078125e-07, -7.0929527282714844e-06,
+	-6.1333179473876953e-05}, /* L1561 */
+{1.3907424211502075e+00, 4.5776367187500000e-05,
+	1.1920928955078125e-07, -1.0359287261962891e-04,
+	2.0051002502441406e-04}, /* L1562 */
+{1.7893331050872803e+00, 5.9008598327636719e-05,
+	1.1920928955078125e-07, 5.8770179748535156e-05,
+	4.8637390136718750e-05}, /* L1563 */
+{1.4569642543792725e+00, 4.8115849494934082e-05,
+	1.1920928955078125e-07, -1.8179416656494141e-05,
+	-1.7285346984863281e-06}, /* L1564 */
+{1.7615898847579956e+00, 5.8293342590332031e-05,
+	1.1920928955078125e-07, -1.2439489364624023e-04,
+	-2.0325183868408203e-04}, /* L1565 */
+{1.4934916496276855e+00, 4.9497932195663452e-05,
+	1.1920928955078125e-07, -1.6391277313232422e-05,
+	1.8239021301269531e-05}, /* L1566 */
+{1.6852548122406006e+00, 5.5953860282897949e-05,
+	1.1920928955078125e-07, -1.6689300537109375e-05,
+	-2.6106834411621094e-05}, /* L1567 */
+{1.9645620584487915e+00, 6.5356492996215820e-05,
+	1.1920928955078125e-07, 4.7922134399414062e-05,
+	-5.2571296691894531e-05}, /* L1568 */
+{2.5756866931915283e+00, 8.5830688476562500e-05,
+	1.1920928955078125e-07, -6.6757202148437500e-06,
+	-6.2286853790283203e-05}, /* L1569 */
+{1.2981446981430054e+00, 4.3332576751708984e-05,
+	1.1920928955078125e-07, -1.5437602996826172e-05,
+	9.6559524536132812e-06}, /* L1570 */
+{1.6806840896606445e+00, 5.6207180023193359e-05,
+	1.1920928955078125e-07, -2.0265579223632812e-06,
+	-1.2218952178955078e-05}, /* L1571 */
+{1.3308761119842529e+00, 4.4584274291992188e-05,
+	1.1920928955078125e-07, -3.0398368835449219e-06,
+	2.4318695068359375e-05}, /* L1572 */
+{2.1907477378845215e+00, 7.3522329330444336e-05,
+	1.1920928955078125e-07, -2.8610229492187500e-06,
+	1.1682510375976562e-05}, /* L1573 */
+{1.2211368083953857e+00, 4.1067600250244141e-05,
+	1.1920928955078125e-07, 6.9379806518554688e-05,
+	1.7130374908447266e-04}, /* L1574 */
+{1.9338735342025757e+00, 6.5132975578308105e-05,
+	1.1920928955078125e-07, -9.0003013610839844e-06,
+	-5.5611133575439453e-05}, /* L1575 */
+{1.5046993494033813e+00, 5.0768256187438965e-05,
+	1.1920928955078125e-07, -1.1861324310302734e-05,
+	-2.9683113098144531e-05}, /* L1576 */
+{2.0874316692352295e+00, 7.0601701736450195e-05,
+	1.1920928955078125e-07, -1.6301870346069336e-04,
+	9.2267990112304688e-05}, /* L1577 */
+{1.3573189973831177e+00, 4.5955181121826172e-05,
+	1.1920928955078125e-07, -2.6822090148925781e-06,
+	-3.5762786865234375e-06}, /* L1578 */
+{2.6554052829742432e+00, 9.0062618255615234e-05,
+	1.1920928955078125e-07, 3.5762786865234375e-06,
+	2.2649765014648438e-06}, /* L1579 */
+{1.5302015542984009e+00, 5.1990151405334473e-05,
+	1.1920928955078125e-07, -1.6152858734130859e-05,
+	9.4175338745117188e-06}, /* L1580 */
+{2.1459891796112061e+00, 7.3045492172241211e-05,
+	1.1920928955078125e-07, 2.6106834411621094e-05,
+	1.4066696166992188e-05}, /* L1581 */
+{1.6581412553787231e+00, 5.6535005569458008e-05,
+	1.1920928955078125e-07, 1.1444091796875000e-05,
+	5.8412551879882812e-06}, /* L1582 */
+{1.6590129137039185e+00, 5.6669116020202637e-05,
+	1.1920928955078125e-07, -6.9975852966308594e-05,
+	-1.0192394256591797e-05}, /* L1583 */
+{2.0739428997039795e+00, 7.0989131927490234e-05,
+	1.1920928955078125e-07, -5.2452087402343750e-05,
+	-8.0108642578125000e-05}, /* L1584 */
+{2.2205832004547119e+00, 7.6107680797576904e-05,
+	1.1920928955078125e-07, -1.0907649993896484e-05,
+	6.4373016357421875e-06}, /* L1585 */
+{1.2821903228759766e+00, 4.4047832489013672e-05,
+	1.1920928955078125e-07, -4.5537948608398438e-05,
+	-6.0796737670898438e-06}, /* L1586 */
+{2.3135478496551514e+00, 7.9602003097534180e-05,
+	1.1920928955078125e-07, -1.2749433517456055e-04,
+	-1.6570091247558594e-04}, /* L1587 */
+{1.6386511325836182e+00, 5.6475400924682617e-05,
+	1.1920928955078125e-07, -9.7990036010742188e-05,
+	-4.5359134674072266e-05}, /* L1588 */
+{1.7943061590194702e+00, 6.1929225921630859e-05,
+	1.1920928955078125e-07, -6.3478946685791016e-05,
+	-2.4855136871337891e-05}, /* L1589 */
+{1.3809245824813843e+00, 4.7743320465087891e-05,
+	1.1920928955078125e-07, -1.2099742889404297e-05,
+	-3.4332275390625000e-05}, /* L1590 */
+{2.4040441513061523e+00, 8.3267688751220703e-05,
+	1.1920928955078125e-07, -1.2350082397460938e-04,
+	8.3804130554199219e-05}, /* L1591 */
+{1.8293954133987427e+00, 6.3464045524597168e-05,
+	1.1920928955078125e-07, -1.0907649993896484e-05,
+	5.0067901611328125e-06}, /* L1592 */
+{2.0455167293548584e+00, 7.1084126830101013e-05,
+	1.1920928955078125e-07, 9.8943710327148438e-06,
+	-4.8279762268066406e-06}, /* L1593 */
+{1.6171967983245850e+00, 5.6326389312744141e-05,
+	1.1920928955078125e-07, 1.4758110046386719e-04,
+	2.2685527801513672e-04}, /* L1594 */
+{2.0097320079803467e+00, 7.0080161094665527e-05,
+	1.1920928955078125e-07, 3.6716461181640625e-05,
+	-1.9192695617675781e-05}, /* L1595 */
+{1.5680779218673706e+00, 5.4776668548583984e-05,
+	1.1920928955078125e-07, 5.2213668823242188e-05,
+	-2.2053718566894531e-05}, /* L1596 */
+{2.9544463157653809e+00, 1.0338425636291504e-04,
+	1.1920928955078125e-07, 3.8862228393554688e-05,
+	-4.4286251068115234e-05}, /* L1597 */
+{1.8332197666168213e+00, 6.4253807067871094e-05,
+	1.1920928955078125e-07, 1.3828277587890625e-05,
+	2.0265579223632812e-05}, /* L1598 */
+{1.9086176156997681e+00, 6.7010521888732910e-05,
+	1.1920928955078125e-07, 3.7908554077148438e-05,
+	-3.4511089324951172e-05}, /* L1599 */
+{1.5753525495529175e+00, 5.5402517318725586e-05,
+	1.1920928955078125e-07, -4.1723251342773438e-06,
+	-2.5808811187744141e-05}, /* L1600 */
+{1.9220883846282959e+00, 6.7710876464843750e-05,
+	1.1920928955078125e-07, 7.3909759521484375e-06,
+	1.3828277587890625e-05}, /* L1601 */
+{1.3358314037322998e+00, 4.7139823436737061e-05,
+	1.1920928955078125e-07, -2.8252601623535156e-05,
+	1.9669532775878906e-05}, /* L1602 */
+{2.1455285549163818e+00, 7.5843185186386108e-05,
+	1.1920928955078125e-07, 2.7179718017578125e-05,
+	-1.8298625946044922e-05}, /* L1603 */
+{1.4477404356002808e+00, 5.1259994506835938e-05,
+	1.1920928955078125e-07, -3.1590461730957031e-05,
+	-1.1920928955078125e-05}, /* L1604 */
+{2.4598176479339600e+00, 8.7320804595947266e-05,
+	1.1920928955078125e-07, -4.3809413909912109e-04,
+	-4.8255920410156250e-04}, /* L1605 */
+{1.4193363189697266e+00, 5.0425529479980469e-05,
+	1.1920928955078125e-07, 5.9604644775390625e-07,
+	3.6239624023437500e-05}, /* L1606 */
+{1.6554319858551025e+00, 5.8919191360473633e-05,
+	1.1920928955078125e-07, -1.8656253814697266e-05,
+	-5.9962272644042969e-05}, /* L1607 */
+{1.6987222433090210e+00, 6.0550868511199951e-05,
+	1.1920928955078125e-07, -1.0550022125244141e-05,
+	1.0728836059570312e-06}, /* L1608 */
+{2.6107833385467529e+00, 9.3219801783561707e-05,
+	1.1920928955078125e-07, -1.0728836059570312e-06,
+	-3.1828880310058594e-05}, /* L1609 */
+{1.4334782361984253e+00, 5.1409006118774414e-05,
+	1.1920928955078125e-07, -1.0981559753417969e-03,
+	-1.0913610458374023e-04}, /* L1610 */
+{2.5392487049102783e+00, 9.0986490249633789e-05,
+	1.1920928955078125e-07, 6.1750411987304688e-05,
+	1.6331672668457031e-05}, /* L1611 */
+{1.4882453680038452e+00, 5.3405761718750000e-05,
+	1.1920928955078125e-07, 4.7683715820312500e-07,
+	-4.7862529754638672e-05}, /* L1612 */
+{1.7979615926742554e+00, 6.4939260482788086e-05,
+	1.1920928955078125e-07, 4.2915344238281250e-04,
+	-9.5635652542114258e-04}, /* L1613 */
+{1.7160894870758057e+00, 6.1810016632080078e-05,
+	1.1920928955078125e-07, 1.8751621246337891e-04,
+	-1.7344951629638672e-05}, /* L1614 */
+{2.0119936466217041e+00, 7.2568655014038086e-05,
+	1.1920928955078125e-07, -2.7894973754882812e-05,
+	5.8650970458984375e-05}, /* L1615 */
+{1.6964043378829956e+00, 6.1303377151489258e-05,
+	1.1920928955078125e-07, 1.7869472503662109e-04,
+	-1.1575222015380859e-04}, /* L1616 */
+{2.3658163547515869e+00, 8.5614621639251709e-05,
+	1.1920928955078125e-07, 8.9406967163085938e-06,
+	4.0650367736816406e-05}, /* L1617 */
+{1.9094018936157227e+00, 6.9200992584228516e-05,
+	1.1920928955078125e-07, -1.5377998352050781e-05,
+	7.9870223999023438e-06}, /* L1618 */
+{2.4481444358825684e+00, 8.8870525360107422e-05,
+	1.1920928955078125e-07, 5.0425529479980469e-05,
+	7.0333480834960938e-06}, /* L1619 */
+{1.8851681947708130e+00, 6.8545341491699219e-05,
+	1.1920928955078125e-07, -2.0265579223632812e-06,
+	4.0531158447265625e-06}, /* L1620 */
+{2.6643478870391846e+00, 9.7036361694335938e-05,
+	1.1920928955078125e-07, -7.8678131103515625e-06,
+	2.9563903808593750e-05}, /* L1621 */
+{2.1620888710021973e+00, 7.8931450843811035e-05,
+	1.1920928955078125e-07, -1.8262863159179688e-04,
+	-8.1658363342285156e-06}, /* L1622 */
+{2.5466248989105225e+00, 9.3065202236175537e-05,
+	1.1920928955078125e-07, 1.0585784912109375e-04,
+	7.0333480834960938e-06}, /* L1623 */
+{1.8539042472839355e+00, 6.7859888076782227e-05,
+	1.1920928955078125e-07, -3.1411647796630859e-05,
+	-1.5497207641601562e-06}, /* L1624 */
+{1.9892973899841309e+00, 7.2926282882690430e-05,
+	1.1920928955078125e-07, -3.9339065551757812e-06,
+	-1.2695789337158203e-05}, /* L1625 */
+{1.2623553276062012e+00, 4.6372413635253906e-05,
+	1.1920928955078125e-07, -2.1350383758544922e-04,
+	-2.0825862884521484e-04}, /* L1626 */
+{1.4568940401077271e+00, 5.3584575653076172e-05,
+	1.1920928955078125e-07, 2.8133392333984375e-05,
+	1.6689300537109375e-06}, /* L1627 */
+{1.7426048517227173e+00, 6.4194202423095703e-05,
+	1.1920928955078125e-07, -5.3644180297851562e-06,
+	-4.3392181396484375e-05}, /* L1628 */
+{2.1693186759948730e+00, 8.0078840255737305e-05,
+	1.1920928955078125e-07, 1.6331672668457031e-05,
+	7.0452690124511719e-05}, /* L1629 */
+{1.7258934974670410e+00, 6.3784420490264893e-05,
+	1.1920928955078125e-07, -2.5808811187744141e-05,
+	-2.8431415557861328e-05}, /* L1630 */
+{2.1555266380310059e+00, 7.9799443483352661e-05,
+	1.1920928955078125e-07, -5.4597854614257812e-05,
+	-4.8995018005371094e-05}, /* L1631 */
+{1.6544167995452881e+00, 6.2882900238037109e-05,
+	1.1920928955078125e-07, -6.6698789596557617e-03,
+	5.8200359344482422e-03}, /* L1632 */
+{2.3437118530273438e+00, 8.7037682533264160e-05,
+	1.1920928955078125e-07, -7.3909759521484375e-06,
+	3.3378601074218750e-06}, /* L1633 */
+{1.5294830799102783e+00, 5.6892633438110352e-05,
+	1.1920928955078125e-07, 6.5565109252929688e-06,
+	3.5643577575683594e-05}, /* L1634 */
+{1.7582176923751831e+00, 6.5505504608154297e-05,
+	1.1920928955078125e-07, -1.3053417205810547e-05,
+	4.1007995605468750e-05}, /* L1635 */
+{1.7990097999572754e+00, 6.7129731178283691e-05,
+	1.1920928955078125e-07, 2.6106834411621094e-05,
+	-7.0333480834960938e-06}, /* L1636 */
+{2.2227990627288818e+00, 8.3133578300476074e-05,
+	1.1920928955078125e-07, -5.3405761718750000e-05,
+	1.1205673217773438e-05}, /* L1637 */
+{1.7688533067703247e+00, 6.6220760345458984e-05,
+	1.1920928955078125e-07, 1.9073486328125000e-06,
+	-4.5478343963623047e-05}, /* L1638 */
+{1.8815815448760986e+00, 7.0706009864807129e-05,
+	1.1920928955078125e-07, -1.2922286987304688e-04,
+	-4.6312808990478516e-05}, /* L1639 */
+{1.6056692600250244e+00, 6.0424208641052246e-05,
+	1.1920928955078125e-07, -5.6302547454833984e-04,
+	-3.9988756179809570e-04}, /* L1640 */
+{2.4445848464965820e+00, 9.1969966888427734e-05,
+	1.1920928955078125e-07, -1.5676021575927734e-04,
+	-3.7372112274169922e-05}, /* L1641 */
+{1.3839454650878906e+00, 5.2139163017272949e-05,
+	1.1920928955078125e-07, -6.7174434661865234e-05,
+	5.0067901611328125e-06}, /* L1642 */
+{2.0602412223815918e+00, 7.7739357948303223e-05,
+	1.1920928955078125e-07, 6.9141387939453125e-06,
+	8.4638595581054688e-06}, /* L1643 */
+{1.8682886362075806e+00, 7.0616602897644043e-05,
+	1.1920928955078125e-07, 2.3245811462402344e-05,
+	2.0384788513183594e-05}, /* L1644 */
+{3.0392105579376221e+00, 1.1503696441650391e-04,
+	1.1920928955078125e-07, 1.7881393432617188e-06,
+	3.0517578125000000e-05}, /* L1645 */
+{1.5671128034591675e+00, 5.9410929679870605e-05,
+	1.1920928955078125e-07, -2.5212764739990234e-05,
+	-8.1658363342285156e-06}, /* L1646 */
+{2.5605208873748779e+00, 9.7230076789855957e-05,
+	1.1920928955078125e-07, -4.9471855163574219e-06,
+	-4.5120716094970703e-05}, /* L1647 */
+{1.5962239503860474e+00, 6.0707330703735352e-05,
+	1.1920928955078125e-07, -7.3969364166259766e-05,
+	-5.0246715545654297e-05}, /* L1648 */
+{2.5346782207489014e+00, 9.6559524536132812e-05,
+	1.1920928955078125e-07, -1.8376111984252930e-04,
+	5.5193901062011719e-05}, /* L1649 */
+{1.4176317453384399e+00, 5.4091215133666992e-05,
+	1.1920928955078125e-07, -6.7174434661865234e-05,
+	-1.0311603546142578e-05}, /* L1650 */
+{2.1029851436614990e+00, 8.0352649092674255e-05,
+	1.1920928955078125e-07, -4.8875808715820312e-06,
+	2.2292137145996094e-05}, /* L1651 */
+{1.9991426467895508e+00, 7.6502561569213867e-05,
+	1.1920928955078125e-07, 3.5762786865234375e-07,
+	1.5497207641601562e-06}, /* L1652 */
+{1.7428052425384521e+00, 6.6801905632019043e-05,
+	1.1920928955078125e-07, 1.8119812011718750e-05,
+	6.0439109802246094e-05}, /* L1653 */
+{1.7064628601074219e+00, 6.5505504608154297e-05,
+	1.1920928955078125e-07, -6.5565109252929688e-07,
+	2.2649765014648438e-06}, /* L1654 */
+{2.1256141662597656e+00, 8.1729143857955933e-05,
+	1.1920928955078125e-07, -3.9041042327880859e-05,
+	2.1934509277343750e-05}, /* L1655 */
+{1.6816952228546143e+00, 6.4760446548461914e-05,
+	1.1920928955078125e-07, -2.7298927307128906e-05,
+	-1.9848346710205078e-05}, /* L1656 */
+{2.0869371891021729e+00, 8.0496072769165039e-05,
+	1.1920928955078125e-07, -4.7445297241210938e-05,
+	5.9485435485839844e-05}, /* L1657 */
+{1.5306817293167114e+00, 5.9127807617187500e-05,
+	1.1920928955078125e-07, 2.1219253540039062e-05,
+	-7.3015689849853516e-05}, /* L1658 */
+{2.3187510967254639e+00, 8.9704990386962891e-05,
+	1.1920928955078125e-07, -6.8902969360351562e-05,
+	-4.3213367462158203e-05}, /* L1659 */
+{1.7622005939483643e+00, 6.8277120590209961e-05,
+	1.1920928955078125e-07, 3.1948089599609375e-05,
+	9.7751617431640625e-06}, /* L1660 */
+{1.9776018857955933e+00, 7.6770782470703125e-05,
+	1.1920928955078125e-07, -8.1002712249755859e-05,
+	2.0635128021240234e-04}, /* L1661 */
+{1.4050763845443726e+00, 5.4612755775451660e-05,
+	1.1920928955078125e-07, -7.3790550231933594e-05,
+	-2.4676322937011719e-05}, /* L1662 */
+{2.3198952674865723e+00, 9.0301036834716797e-05,
+	1.1920928955078125e-07, 2.3841857910156250e-07,
+	2.6226043701171875e-06}, /* L1663 */
+{1.1947917938232422e+00, 4.6581029891967773e-05,
+	1.1920928955078125e-07, -3.3915042877197266e-05,
+	-3.9041042327880859e-05}, /* L1664 */
+{2.1869087219238281e+00, 8.5383653640747070e-05,
+	1.1920928955078125e-07, 7.9870223999023438e-06,
+	5.0067901611328125e-06}, /* L1665 */
+{1.8649330139160156e+00, 7.2926282882690430e-05,
+	1.1920928955078125e-07, 2.6702880859375000e-05,
+	1.0132789611816406e-05}, /* L1666 */
+{2.2221548557281494e+00, 8.7022781372070312e-05,
+	1.1920928955078125e-07, 5.4836273193359375e-06,
+	-1.6689300537109375e-06}, /* L1667 */
+{1.5864865779876709e+00, 6.2227249145507812e-05,
+	1.1920928955078125e-07, -2.9146671295166016e-05,
+	-1.2278556823730469e-05}, /* L1668 */
+{2.3221783638000488e+00, 9.1221183538436890e-05,
+	1.1920928955078125e-07, -2.0861625671386719e-05,
+	-2.8610229492187500e-06}, /* L1669 */
+{1.7372859716415405e+00, 6.8373978137969971e-05,
+	1.1920928955078125e-07, -2.1171569824218750e-04,
+	1.2695789337158203e-04}, /* L1670 */
+{2.5208034515380859e+00, 9.9360942840576172e-05,
+	1.1920928955078125e-07, -2.5212764739990234e-05,
+	1.1920928955078125e-06}, /* L1671 */
+{1.6139509677886963e+00, 6.3687562942504883e-05,
+	1.1920928955078125e-07, 2.5391578674316406e-05,
+	1.8477439880371094e-05}, /* L1672 */
+{2.0792121887207031e+00, 8.2179903984069824e-05,
+	1.1920928955078125e-07, -5.9783458709716797e-05,
+	-3.7074089050292969e-05}, /* L1673 */
+{1.6847186088562012e+00, 6.6684558987617493e-05,
+	1.1920928955078125e-07, -2.7477741241455078e-05,
+	-4.2378902435302734e-05}, /* L1674 */
+{1.8724658489227295e+00, 7.4222683906555176e-05,
+	1.1920928955078125e-07, -1.9252300262451172e-05,
+	-4.8875808715820312e-06}, /* L1675 */
+{1.4882587194442749e+00, 5.9083104133605957e-05,
+	1.1920928955078125e-07, -2.0802021026611328e-05,
+	-1.9371509552001953e-05}, /* L1676 */
+{2.2740080356597900e+00, 9.0420246124267578e-05,
+	1.1920928955078125e-07, -8.6903572082519531e-05,
+	-4.6372413635253906e-05}, /* L1677 */
+{1.8998298645019531e+00, 7.5817108154296875e-05,
+	1.1920928955078125e-07, -1.6093254089355469e-06,
+	-6.2245130538940430e-04}, /* L1678 */
+{2.1470892429351807e+00, 8.5622072219848633e-05,
+	1.1920928955078125e-07, -3.1411647796630859e-05,
+	1.0609626770019531e-05}, /* L1679 */
+{2.1589746475219727e+00, 8.6233019828796387e-05,
+	1.1920928955078125e-07, -1.7940998077392578e-05,
+	-7.7486038208007812e-05}, /* L1680 */
+{2.6408479213714600e+00, 1.0585784912109375e-04,
+	1.1920928955078125e-07, -1.2010335922241211e-04,
+	5.7911872863769531e-04}, /* L1681 */
+{2.2424156665802002e+00, 8.9854001998901367e-05,
+	1.1920928955078125e-07, -1.0979175567626953e-04,
+	-8.6069107055664062e-05}, /* L1682 */
+{2.6493763923645020e+00, 1.0631978511810303e-04,
+	1.1920928955078125e-07, 2.0098686218261719e-04,
+	-6.5386295318603516e-05}, /* L1683 */
+{1.9800323247909546e+00, 7.9557299613952637e-05,
+	1.1920928955078125e-07, 8.5592269897460938e-05,
+	-1.5676021575927734e-05}, /* L1684 */
+{2.6626889705657959e+00, 1.0713934898376465e-04,
+	1.1920928955078125e-07, -7.1525573730468750e-07,
+	2.2411346435546875e-05}, /* L1685 */
+{1.7357704639434814e+00, 6.9946050643920898e-05,
+	1.1920928955078125e-07, 2.1457672119140625e-05,
+	-2.8610229492187500e-06}, /* L1686 */
+{1.8876268863677979e+00, 7.6174736022949219e-05,
+	1.1920928955078125e-07, 4.7683715820312500e-07,
+	-2.4318695068359375e-05}, /* L1687 */
+{1.7651349306106567e+00, 7.1346759796142578e-05,
+	1.1920928955078125e-07, -2.9444694519042969e-05,
+	6.4253807067871094e-05}, /* L1688 */
+{2.3339831829071045e+00, 9.4525516033172607e-05,
+	1.1920928955078125e-07, -1.0180473327636719e-04,
+	-2.0563602447509766e-04}, /* L1689 */
+{2.0596404075622559e+00, 8.3655118942260742e-05,
+	1.1920928955078125e-07, 2.8145313262939453e-04,
+	1.8250942230224609e-04}, /* L1690 */
+{2.4040806293487549e+00, 9.7632408142089844e-05,
+	1.1920928955078125e-07, -3.1763315200805664e-04,
+	1.4066696166992188e-05}, /* L1691 */
+{1.6582144498825073e+00, 6.7412853240966797e-05,
+	1.1920928955078125e-07, 1.1563301086425781e-05,
+	3.6954879760742188e-05}, /* L1692 */
+{2.1082248687744141e+00, 8.5830688476562500e-05,
+	1.1920928955078125e-07, -1.3113021850585938e-06,
+	-6.7353248596191406e-06}, /* L1693 */
+{1.4668284654617310e+00, 5.9828162193298340e-05,
+	1.1920928955078125e-07, 3.5762786865234375e-06,
+	-1.4495849609375000e-04}, /* L1694 */
+{2.2771246433258057e+00, 9.2990696430206299e-05,
+	1.1920928955078125e-07, -7.5519084930419922e-05,
+	4.1842460632324219e-05}, /* L1695 */
+{2.1812453269958496e+00, 8.9198350906372070e-05,
+	1.1920928955078125e-07, -1.7046928405761719e-05,
+	3.8623809814453125e-05}, /* L1696 */
+{1.8539848327636719e+00, 7.5936317443847656e-05,
+	1.1920928955078125e-07, -9.1195106506347656e-05,
+	5.6028366088867188e-06}, /* L1697 */
+{1.6613483428955078e+00, 6.8135559558868408e-05,
+	1.1920928955078125e-07, 1.2993812561035156e-05,
+	-2.0563602447509766e-05}, /* L1698 */
+{2.2887988090515137e+00, 9.4026327133178711e-05,
+	1.1920928955078125e-07, 1.0752677917480469e-04,
+	2.4557113647460938e-05}, /* L1699 */
+{2.0444700717926025e+00, 8.4146857261657715e-05,
+	1.1920928955078125e-07, -4.5561790466308594e-04,
+	-1.3476610183715820e-04}, /* L1700 */
+{3.1926982402801514e+00, 1.3151764869689941e-04,
+	1.1920928955078125e-07, -1.0341405868530273e-04,
+	-4.1961669921875000e-05}, /* L1701 */
+{1.7540787458419800e+00, 7.2360038757324219e-05,
+	1.1920928955078125e-07, -1.4305114746093750e-05,
+	-3.6776065826416016e-05}, /* L1702 */
+{1.9683402776718140e+00, 8.1311911344528198e-05,
+	1.1920928955078125e-07, -2.1815299987792969e-05,
+	-1.0132789611816406e-05}, /* L1703 */
+{1.5366808176040649e+00, 6.3728541135787964e-05,
+	1.1920928955078125e-07, 1.4095306396484375e-03,
+	8.8453292846679688e-04}, /* L1704 */
+{2.3481090068817139e+00, 9.7325071692466736e-05,
+	1.1920928955078125e-07, -1.1062622070312500e-04,
+	2.0515918731689453e-04}, /* L1705 */
+{1.2620661258697510e+00, 5.2362680435180664e-05,
+	1.1920928955078125e-07, 1.1765956878662109e-04,
+	-1.0788440704345703e-05}, /* L1706 */
+{1.8564250469207764e+00, 7.7128410339355469e-05,
+	1.1920928955078125e-07, -2.3066997528076172e-05,
+	-1.0609626770019531e-05}, /* L1707 */
+{1.9809130430221558e+00, 8.2433223724365234e-05,
+	1.1920928955078125e-07, 1.2719631195068359e-04,
+	1.4805793762207031e-04}, /* L1708 */
+{2.1545314788818359e+00, 8.9779496192932129e-05,
+	1.1920928955078125e-07, 6.8545341491699219e-05,
+	-1.4424324035644531e-05}, /* L1709 */
+{1.9002609252929688e+00, 7.9289078712463379e-05,
+	1.1920928955078125e-07, -1.6629695892333984e-05,
+	-2.0861625671386719e-05}, /* L1710 */
+{2.1194939613342285e+00, 8.8572502136230469e-05,
+	1.1920928955078125e-07, -6.1452388763427734e-05,
+	1.3589859008789062e-05}, /* L1711 */
+{1.7199875116348267e+00, 7.1972608566284180e-05,
+	1.1920928955078125e-07, -9.8943710327148438e-06,
+	-4.2438507080078125e-05}, /* L1712 */
+{2.3216865062713623e+00, 9.7289681434631348e-05,
+	1.1920928955078125e-07, -1.4841556549072266e-05,
+	-8.7618827819824219e-06}, /* L1713 */
+{1.7669166326522827e+00, 7.4148178100585938e-05,
+	1.1920928955078125e-07, 6.7949295043945312e-06,
+	-2.2649765014648438e-05}, /* L1714 */
+{1.6694194078445435e+00, 7.0154666900634766e-05,
+	1.1920928955078125e-07, 2.0265579223632812e-05,
+	0.0000000000000000e+00}, /* L1715 */
+{1.6188361644744873e+00, 6.8128108978271484e-05,
+	1.1920928955078125e-07, -1.1086463928222656e-05,
+	1.1444091796875000e-05}, /* L1716 */
+{2.3602023124694824e+00, 9.9480152130126953e-05,
+	1.1920928955078125e-07, -4.8875808715820312e-06,
+	-1.1706352233886719e-04}, /* L1717 */
+{1.4274255037307739e+00, 6.0252845287322998e-05,
+	1.1920928955078125e-07, 1.2528896331787109e-04,
+	-1.0192394256591797e-05}, /* L1718 */
+{2.2988367080688477e+00, 9.7155570983886719e-05,
+	1.1920928955078125e-07, 2.7298927307128906e-05,
+	2.9206275939941406e-05}, /* L1719 */
+{1.5461632013320923e+00, 6.5445899963378906e-05,
+	1.1920928955078125e-07, 3.9935111999511719e-05,
+	6.6280364990234375e-05}, /* L1720 */
+{1.9090785980224609e+00, 8.0959871411323547e-05,
+	1.1920928955078125e-07, 1.1324882507324219e-04,
+	-3.7992000579833984e-04}, /* L1721 */
+{1.5375938415527344e+00, 6.5263360738754272e-05,
+	1.1920928955078125e-07, 5.7220458984375000e-06,
+	-9.2983245849609375e-06}, /* L1722 */
+{2.0910115242004395e+00, 8.8870525360107422e-05,
+	1.1920928955078125e-07, -4.2915344238281250e-06,
+	6.5207481384277344e-05}, /* L1723 */
+{1.7595071792602539e+00, 7.4893236160278320e-05,
+	1.1920928955078125e-07, -1.2814998626708984e-05,
+	7.4505805969238281e-05}, /* L1724 */
+{2.1591715812683105e+00, 9.2029571533203125e-05,
+	1.1920928955078125e-07, 1.1086463928222656e-05,
+	-1.8179416656494141e-05}, /* L1725 */
+{1.6088076829910278e+00, 6.8664550781250000e-05,
+	1.1920928955078125e-07, 2.8610229492187500e-06,
+	-3.0219554901123047e-05}, /* L1726 */
+{2.5671923160552979e+00, 1.0973215103149414e-04,
+	1.1920928955078125e-07, 5.8293342590332031e-05,
+	-6.3776969909667969e-06}, /* L1727 */
+{1.9288637638092041e+00, 8.2552433013916016e-05,
+	1.1920928955078125e-07, 1.1920928955078125e-06,
+	-1.1801719665527344e-05}, /* L1728 */
+{3.1062536239624023e+00, 1.3312697410583496e-04,
+	1.1920928955078125e-07, 1.2636184692382812e-05,
+	9.5367431640625000e-06}, /* L1729 */
+{1.7863671779632568e+00, 7.6666474342346191e-05,
+	1.1920928955078125e-07, 2.2649765014648438e-06,
+	-1.2338161468505859e-05}, /* L1730 */
+{2.3592751026153564e+00, 1.0144710540771484e-04,
+	1.1920928955078125e-07, 1.3911724090576172e-04,
+	1.4853477478027344e-04}, /* L1731 */
+{2.2422988414764404e+00, 9.6499919891357422e-05,
+	1.1920928955078125e-07, 4.0531158447265625e-06,
+	1.0132789611816406e-05}, /* L1732 */
+{2.1561350822448730e+00, 9.2923641204833984e-05,
+	1.1920928955078125e-07, -7.0333480834960938e-06,
+	-9.0003013610839844e-06}, /* L1733 */
+{1.4140819311141968e+00, 6.1035156250000000e-05,
+	1.1920928955078125e-07, -9.4473361968994141e-05,
+	3.5405158996582031e-05}, /* L1734 */
+{2.0418946743011475e+00, 8.8244676589965820e-05,
+	1.1920928955078125e-07, 2.3722648620605469e-05,
+	1.0251998901367188e-05}, /* L1735 */
+{1.7496078014373779e+00, 7.5727701187133789e-05,
+	1.1920928955078125e-07, -4.5716762542724609e-05,
+	8.7022781372070312e-06}, /* L1736 */
+{2.6250491142272949e+00, 1.1377036571502686e-04,
+	1.1920928955078125e-07, -2.0861625671386719e-05,
+	5.3882598876953125e-05}, /* L1737 */
+{1.9813417196273804e+00, 8.5987150669097900e-05,
+	1.1920928955078125e-07, 1.1444091796875000e-05,
+	4.3392181396484375e-05}, /* L1738 */
+{1.9966820478439331e+00, 8.6769461631774902e-05,
+	1.1920928955078125e-07, 4.7683715820312500e-06,
+	-1.8954277038574219e-05}, /* L1739 */
+{2.2731249332427979e+00, 9.8913908004760742e-05,
+	1.1920928955078125e-07, 3.5762786865234375e-07,
+	-3.2544136047363281e-05}, /* L1740 */
+{2.2289917469024658e+00, 9.7140669822692871e-05,
+	1.1920928955078125e-07, 1.3172626495361328e-04,
+	-9.3936920166015625e-05}, /* L1741 */
+{1.7321634292602539e+00, 7.5578689575195312e-05,
+	1.1920928955078125e-07, -1.1980533599853516e-05,
+	6.4373016357421875e-06}, /* L1742 */
+{2.0246231555938721e+00, 8.8483095169067383e-05,
+	1.1920928955078125e-07, -4.3988227844238281e-05,
+	1.7797946929931641e-04}, /* L1743 */
+{1.6644182205200195e+00, 7.2836875915527344e-05,
+	1.1920928955078125e-07, 7.3909759521484375e-06,
+	-1.5354156494140625e-04}, /* L1744 */
+{2.4302031993865967e+00, 1.0648369789123535e-04,
+	1.1920928955078125e-07, -3.1471252441406250e-05,
+	-3.3199787139892578e-05}, /* L1745 */
+{1.4454622268676758e+00, 6.3419342041015625e-05,
+	1.1920928955078125e-07, 8.2254409790039062e-06,
+	1.2040138244628906e-05}, /* L1746 */
+{2.6828982830047607e+00, 1.1789239943027496e-04,
+	1.1920928955078125e-07, -8.8095664978027344e-05,
+	-4.1723251342773438e-06}, /* L1747 */
+{2.0662176609039307e+00, 9.0897083282470703e-05,
+	1.1920928955078125e-07, -5.0067901611328125e-06,
+	2.8967857360839844e-05}, /* L1748 */
+{2.2055304050445557e+00, 9.7155570983886719e-05,
+	1.1920928955078125e-07, 3.3378601074218750e-06,
+	1.0013580322265625e-05}, /* L1749 */
+{1.7370011806488037e+00, 7.6621770858764648e-05,
+	1.1920928955078125e-07, -9.0599060058593750e-06,
+	1.3113021850585938e-06}, /* L1750 */
+{2.3647711277008057e+00, 1.0445713996887207e-04,
+	1.1920928955078125e-07, 5.1259994506835938e-06,
+	-2.0325183868408203e-05}, /* L1751 */
+{1.8752216100692749e+00, 8.2969665527343750e-05,
+	1.1920928955078125e-07, -2.1624565124511719e-04,
+	-2.8014183044433594e-05}, /* L1752 */
+{2.6947195529937744e+00, 1.1956691741943359e-04,
+	1.1920928955078125e-07, -1.6885995864868164e-04,
+	6.8485736846923828e-04}, /* L1753 */
+{1.5535091161727905e+00, 6.8902969360351562e-05,
+	1.1920928955078125e-07, 1.0728836059570312e-06,
+	6.6161155700683594e-05}, /* L1754 */
+{2.1915209293365479e+00, 9.7334384918212891e-05,
+	1.1920928955078125e-07, -4.5061111450195312e-05,
+	-5.9604644775390625e-06}, /* L1755 */
+{1.7833107709884644e+00, 7.9303979873657227e-05,
+	1.1920928955078125e-07, -1.1324882507324219e-06,
+	2.4080276489257812e-05}, /* L1756 */
+{2.2707669734954834e+00, 1.0111927986145020e-04,
+	1.1920928955078125e-07, 3.3378601074218750e-05,
+	2.6941299438476562e-05}, /* L1757 */
+{1.7618168592453003e+00, 7.8558921813964844e-05,
+	1.1920928955078125e-07, -1.5437602996826172e-05,
+	4.1484832763671875e-05}, /* L1758 */
+{2.4681625366210938e+00, 1.1019408702850342e-04,
+	1.1920928955078125e-07, 3.4093856811523438e-05,
+	2.2172927856445312e-05}, /* L1759 */
+{2.0890531539916992e+00, 9.3489885330200195e-05,
+	1.1920928955078125e-07, 5.6982040405273438e-05,
+	2.6929378509521484e-04}, /* L1760 */
+{2.3426351547241211e+00, 1.0506063699722290e-04,
+	1.1920928955078125e-07, 1.4781951904296875e-04,
+	-7.5107812881469727e-04}, /* L1761 */
+{2.2498238086700439e+00, 1.0085105895996094e-04,
+	1.1920928955078125e-07, 9.4175338745117188e-06,
+	-2.9623508453369141e-05}, /* L1762 */
+{2.3314814567565918e+00, 1.0466575622558594e-04,
+	1.1920928955078125e-07, -6.3478946685791016e-05,
+	1.8239021301269531e-05}, /* L1763 */
+{1.9313265085220337e+00, 8.6814165115356445e-05,
+	1.1920928955078125e-07, -7.4088573455810547e-05,
+	-1.2397766113281250e-05}, /* L1764 */
+{2.4335935115814209e+00, 1.0952353477478027e-04,
+	1.1920928955078125e-07, -3.3378601074218750e-06,
+	2.9683113098144531e-05}, /* L1765 */
+{1.9520809650421143e+00, 8.8006258010864258e-05,
+	1.1920928955078125e-07, 2.1100044250488281e-05,
+	-2.3126602172851562e-04}, /* L1766 */
+{2.6704120635986328e+00, 1.2052059173583984e-04,
+	1.1920928955078125e-07, 1.0371208190917969e-05,
+	-2.0444393157958984e-05}, /* L1767 */
+{2.2689750194549561e+00, 1.0254979133605957e-04,
+	1.1920928955078125e-07, 6.0796737670898438e-05,
+	6.0081481933593750e-05}, /* L1768 */
+{2.1498427391052246e+00, 9.7543001174926758e-05,
+	1.1920928955078125e-07, 1.1360645294189453e-04,
+	-7.7557563781738281e-04}, /* L1769 */
+{1.6386512517929077e+00, 7.4237585067749023e-05,
+	1.1920928955078125e-07, 1.3709068298339844e-05,
+	-1.9431114196777344e-05}, /* L1770 */
+{2.2027707099914551e+00, 1.0001659393310547e-04,
+	1.1920928955078125e-07, 7.8558921813964844e-05,
+	-1.3780593872070312e-04}, /* L1771 */
+{1.6518601179122925e+00, 7.5042247772216797e-05,
+	1.1920928955078125e-07, -9.8109245300292969e-05,
+	-4.5895576477050781e-06}, /* L1772 */
+{2.7681057453155518e+00, 1.2591481208801270e-04,
+	1.1920928955078125e-07, 2.3126602172851562e-05,
+	-1.4662742614746094e-05}, /* L1773 */
+{1.5092557668685913e+00, 6.8739056587219238e-05,
+	1.1920928955078125e-07, -2.4676322937011719e-05,
+	9.1314315795898438e-05}, /* L1774 */
+{2.9111638069152832e+00, 1.3326480984687805e-04,
+	1.1920928955078125e-07, 1.3482570648193359e-04,
+	-4.5239925384521484e-04}, /* L1775 */
+{1.8229529857635498e+00, 8.3237886428833008e-05,
+	1.1920928955078125e-07, 3.3617019653320312e-05,
+	-1.5854835510253906e-05}, /* L1776 */
+{2.8705987930297852e+00, 1.3126060366630554e-04,
+	1.1920928955078125e-07, -5.2928924560546875e-05,
+	-4.9710273742675781e-05}, /* L1777 */
+{1.7384099960327148e+00, 7.9587101936340332e-05,
+	1.1920928955078125e-07, 3.2186508178710938e-06,
+	-3.5226345062255859e-05}, /* L1778 */
+{3.0848710536956787e+00, 1.4144182205200195e-04,
+	1.1920928955078125e-07, -1.3554096221923828e-04,
+	2.1183490753173828e-04}, /* L1779 */
+{1.8776628971099854e+00, 8.6203217506408691e-05,
+	1.1920928955078125e-07, 5.5551528930664062e-05,
+	1.5830993652343750e-04}, /* L1780 */
+{2.5466752052307129e+00, 1.1704862117767334e-04,
+	1.1920928955078125e-07, 1.2755393981933594e-05,
+	-6.7055225372314453e-05}, /* L1781 */
+{1.6701420545578003e+00, 7.6856464147567749e-05,
+	1.1920928955078125e-07, 1.9192695617675781e-05,
+	9.5367431640625000e-06}, /* L1782 */
+{1.9069079160690308e+00, 8.7916851043701172e-05,
+	1.1920928955078125e-07, 1.9538402557373047e-04,
+	-2.2816658020019531e-04}, /* L1783 */
+{1.6976265907287598e+00, 7.8350305557250977e-05,
+	1.1920928955078125e-07, 2.2172927856445312e-05,
+	-6.0200691223144531e-06}, /* L1784 */
+{2.4320957660675049e+00, 1.1235475540161133e-04,
+	1.1920928955078125e-07, 3.4332275390625000e-05,
+	1.2159347534179688e-05}, /* L1785 */
+{1.7184666395187378e+00, 7.9512596130371094e-05,
+	1.1920928955078125e-07, 1.5294551849365234e-04,
+	1.7213821411132812e-04}, /* L1786 */
+{2.2211933135986328e+00, 1.0287761688232422e-04,
+	1.1920928955078125e-07, -6.5565109252929688e-07,
+	-3.8146972656250000e-06}, /* L1787 */
+{1.9474271535873413e+00, 9.0315937995910645e-05,
+	1.1920928955078125e-07, -3.8444995880126953e-05,
+	1.5377998352050781e-05}, /* L1788 */
+{3.1050331592559814e+00, 1.4419946819543839e-04,
+	1.1920928955078125e-07, 5.5551528930664062e-05,
+	-4.5359134674072266e-05}, /* L1789 */
+{1.9431529045104980e+00, 9.0345740318298340e-05,
+	1.1920928955078125e-07, 1.4901161193847656e-05,
+	1.0132789611816406e-05}, /* L1790 */
+{2.2056438922882080e+00, 1.0269880294799805e-04,
+	1.1920928955078125e-07, 6.1392784118652344e-05,
+	-7.2658061981201172e-05}, /* L1791 */
+{2.1218938827514648e+00, 9.8913908004760742e-05,
+	1.1920928955078125e-07, -1.6689300537109375e-05,
+	4.7922134399414062e-05}, /* L1792 */
+{2.9662759304046631e+00, 1.3846158981323242e-04,
+	1.1920928955078125e-07, 8.4280967712402344e-05,
+	-1.3887882232666016e-05}, /* L1793 */
+{1.7498950958251953e+00, 8.1777572631835938e-05,
+	1.1920928955078125e-07, -1.4185905456542969e-05,
+	-1.8239021301269531e-05}, /* L1794 */
+{2.3507330417633057e+00, 1.1000037193298340e-04,
+	1.1920928955078125e-07, -1.4960765838623047e-05,
+	3.3140182495117188e-05}, /* L1795 */
+{1.7486015558242798e+00, 8.1926584243774414e-05,
+	1.1920928955078125e-07, 9.1791152954101562e-06,
+	-4.5299530029296875e-06}, /* L1796 */
+{2.3049988746643066e+00, 1.0815262794494629e-04,
+	1.1920928955078125e-07, -2.1219253540039062e-05,
+	7.3909759521484375e-06}, /* L1797 */
+{1.8053104877471924e+00, 8.4817409515380859e-05,
+	1.1920928955078125e-07, 8.4877014160156250e-05,
+	-1.0639429092407227e-04}, /* L1798 */
+{2.3539047241210938e+00, 1.1071562767028809e-04,
+	1.1920928955078125e-07, -3.9219856262207031e-05,
+	3.0875205993652344e-05}, /* L1799 */
+{1.6418801546096802e+00, 7.7322125434875488e-05,
+	1.1920928955078125e-07, 6.4134597778320312e-05,
+	-1.6093254089355469e-05}, /* L1800 */
+{2.2988612651824951e+00, 1.0839104652404785e-04,
+	1.1920928955078125e-07, 1.3232231140136719e-05,
+	3.5881996154785156e-05}, /* L1801 */
+{2.3134348392486572e+00, 1.0941177606582642e-04,
+	1.1920928955078125e-07, -4.9430131912231445e-04,
+	2.1958351135253906e-04}, /* L1802 */
+{2.1120645999908447e+00, 9.9837779998779297e-05,
+	1.1920928955078125e-07, 1.3470649719238281e-05,
+	-9.8943710327148438e-06}, /* L1803 */
+{2.1017658710479736e+00, 9.9480777862481773e-05,
+	1.1920928955078125e-07, 1.5616416931152344e-05,
+	-1.9729137420654297e-05}, /* L1804 */
+{2.8653111457824707e+00, 1.3579800724983215e-04,
+	1.1920928955078125e-07, 9.3102455139160156e-05,
+	-7.1227550506591797e-05}, /* L1805 */
+{1.8221752643585205e+00, 8.6486339569091797e-05,
+	1.1920928955078125e-07, -3.4570693969726562e-05,
+	5.8770179748535156e-05}, /* L1806 */
+{2.8210661411285400e+00, 1.3402104377746582e-04,
+	1.1920928955078125e-07, -6.4969062805175781e-06,
+	1.4424324035644531e-05}, /* L1807 */
+{2.3456311225891113e+00, 1.1157989501953125e-04,
+	1.1920928955078125e-07, 1.0728836059570312e-06,
+	-2.2053718566894531e-06}, /* L1808 */
+{2.7881257534027100e+00, 1.3284385204315186e-04,
+	1.1920928955078125e-07, -2.9605627059936523e-04,
+	-5.5432319641113281e-05}, /* L1809 */
+{1.8128116130828857e+00, 8.6463987827301025e-05,
+	1.1920928955078125e-07, 1.3208389282226562e-04,
+	-6.4373016357421875e-05}, /* L1810 */
+{2.1947944164276123e+00, 1.0484457015991211e-04,
+	1.1920928955078125e-07, -1.1676549911499023e-04,
+	9.1195106506347656e-05}, /* L1811 */
+{2.0533421039581299e+00, 9.8168849945068359e-05,
+	1.1920928955078125e-07, 8.7022781372070312e-06,
+	-5.0902366638183594e-05}, /* L1812 */
+{1.9979074001312256e+00, 9.5635652542114258e-05,
+	1.1920928955078125e-07, -1.0967254638671875e-05,
+	-5.1677227020263672e-05}, /* L1813 */
+{2.0360455513000488e+00, 9.7587704658508301e-05,
+	1.1920928955078125e-07, 3.5285949707031250e-05,
+	2.7179718017578125e-05}, /* L1814 */
+{1.9578819274902344e+00, 9.3963928520679474e-05,
+	1.1920928955078125e-07, 2.1934509277343750e-05,
+	6.6757202148437500e-06}, /* L1815 */
+{2.2573385238647461e+00, 1.0845065116882324e-04,
+	1.1920928955078125e-07, 2.4795532226562500e-05,
+	2.0265579223632812e-06}, /* L1816 */
+{2.5022745132446289e+00, 1.2037158012390137e-04,
+	1.1920928955078125e-07, 3.0279159545898438e-05,
+	-1.5020370483398438e-05}, /* L1817 */
+{1.6966168880462646e+00, 8.1717967987060547e-05,
+	1.1920928955078125e-07, -2.5331974029541016e-05,
+	4.3392181396484375e-05}, /* L1818 */
+{2.3328707218170166e+00, 1.1250376701354980e-04,
+	1.1920928955078125e-07, -5.4657459259033203e-05,
+	-4.7385692596435547e-05}, /* L1819 */
+{3.4232356548309326e+00, 1.6528367996215820e-04,
+	1.1920928955078125e-07, -1.7762184143066406e-05,
+	2.3722648620605469e-05}, /* L1820 */
+{2.4594986438751221e+00, 1.1903047561645508e-04,
+	1.1920928955078125e-07, -1.2093782424926758e-04,
+	-1.2809038162231445e-04}, /* L1821 */
+{2.0857689380645752e+00, 1.0097026824951172e-04,
+	1.1920928955078125e-07, -4.5776367187500000e-05,
+	1.1920928955078125e-05}, /* L1822 */
+{2.0649635791778564e+00, 1.0007619857788086e-04,
+	1.1920928955078125e-07, -1.0907649993896484e-05,
+	-1.5556812286376953e-05}, /* L1823 */
+{2.1299760341644287e+00, 1.0335445404052734e-04,
+	1.1920928955078125e-07, 1.0204315185546875e-04,
+	-1.8000602722167969e-05}, /* L1824 */
+{2.5681340694427490e+00, 1.2478232383728027e-04,
+	1.1920928955078125e-07, -3.0994415283203125e-06,
+	1.1384487152099609e-04}, /* L1825 */
+{1.8315933942794800e+00, 8.9108943939208984e-05,
+	1.1920928955078125e-07, 1.4650821685791016e-04,
+	-9.8943710327148438e-05}, /* L1826 */
+{2.3002212047576904e+00, 1.1202692985534668e-04,
+	1.1920928955078125e-07, 1.5497207641601562e-05,
+	2.1934509277343750e-05}, /* L1827 */
+{2.1280312538146973e+00, 1.0377913713455200e-04,
+	1.1920928955078125e-07, 9.8943710327148438e-05,
+	1.8239021301269531e-05}, /* L1828 */
+{2.4616782665252686e+00, 1.2018531560897827e-04,
+	1.1920928955078125e-07, -3.8444995880126953e-05,
+	1.0848045349121094e-05}, /* L1829 */
+{2.0719974040985107e+00, 1.0128319263458252e-04,
+	1.1920928955078125e-07, 7.9035758972167969e-05,
+	8.3446502685546875e-07}, /* L1830 */
+{2.0984549522399902e+00, 1.0269880294799805e-04,
+	1.1920928955078125e-07, -8.1062316894531250e-06,
+	-3.5762786865234375e-06}, /* L1831 */
+{2.0673472881317139e+00, 1.0129809379577637e-04,
+	1.1920928955078125e-07, 4.2915344238281250e-06,
+	-4.0709972381591797e-05}, /* L1832 */
+{2.0363466739654541e+00, 9.9942088127136230e-05,
+	1.1920928955078125e-07, 1.0824203491210938e-04,
+	1.8596649169921875e-04}, /* L1833 */
+{2.1924707889556885e+00, 1.0769069194793701e-04,
+	1.1920928955078125e-07, -1.4305114746093750e-05,
+	2.8133392333984375e-05}, /* L1834 */
+{2.5006375312805176e+00, 1.2305378913879395e-04,
+	1.1920928955078125e-07, 4.5537948608398438e-05,
+	3.9339065551757812e-05}, /* L1835 */
+{1.8640559911727905e+00, 9.1791152954101562e-05,
+	1.1920928955078125e-07, -1.6212463378906250e-05,
+	-9.2744827270507812e-05}, /* L1836 */
+{2.5396268367767334e+00, 1.2522935867309570e-04,
+	1.1920928955078125e-07, 4.4941902160644531e-05,
+	1.0871887207031250e-04}, /* L1837 */
+{1.9220930337905884e+00, 9.5002353191375732e-05,
+	1.1920928955078125e-07, -2.2161006927490234e-04,
+	-1.8966197967529297e-04}, /* L1838 */
+{2.1667468547821045e+00, 1.0711699724197388e-04,
+	1.1920928955078125e-07, -2.0056962966918945e-04,
+	2.6929378509521484e-04}, /* L1839 */
+{2.7691848278045654e+00, 1.3703107833862305e-04,
+	1.1920928955078125e-07, -1.7881393432617188e-06,
+	-6.0796737670898438e-06}, /* L1840 */
+{2.3119692802429199e+00, 1.1458992958068848e-04,
+	1.1920928955078125e-07, -2.3329257965087891e-04,
+	-1.9490718841552734e-04}, /* L1841 */
+{1.4835515022277832e+00, 7.3593109846115112e-05,
+	1.1920928955078125e-07, 6.4849853515625000e-05,
+	1.3387203216552734e-04}, /* L1842 */
+{2.1553435325622559e+00, 1.0703504085540771e-04,
+	1.1920928955078125e-07, 8.3804130554199219e-05,
+	-2.7060508728027344e-05}, /* L1843 */
+{2.2853090763092041e+00, 1.1369585990905762e-04,
+	1.1920928955078125e-07, -1.7964839935302734e-04,
+	4.3475627899169922e-04}, /* L1844 */
+{2.8922224044799805e+00, 1.4400482177734375e-04,
+	1.1920928955078125e-07, -2.4354457855224609e-04,
+	1.1134147644042969e-04}, /* L1845 */
+{1.6120048761367798e+00, 8.0332159996032715e-05,
+	1.1920928955078125e-07, 9.5367431640625000e-07,
+	-5.7220458984375000e-06}, /* L1846 */
+{1.8666315078735352e+00, 9.3132257461547852e-05,
+	1.1920928955078125e-07, 2.8371810913085938e-05,
+	-8.2254409790039062e-06}, /* L1847 */
+{2.4853396415710449e+00, 1.2415647506713867e-04,
+	1.1920928955078125e-07, 2.3007392883300781e-05,
+	-2.0742416381835938e-05}, /* L1848 */
+{2.4352109432220459e+00, 1.2187659740447998e-04,
+	1.1920928955078125e-07, -7.4505805969238281e-05,
+	1.6856193542480469e-04}, /* L1849 */
+{1.7282103300094604e+00, 8.6545944213867188e-05,
+	1.1920928955078125e-07, -1.9967555999755859e-05,
+	2.8014183044433594e-05}, /* L1850 */
+{2.6603484153747559e+00, 1.3339519500732422e-04,
+	1.1920928955078125e-07, -1.8048286437988281e-04,
+	1.0716915130615234e-04}, /* L1851 */
+{1.6997557878494263e+00, 8.5324048995971680e-05,
+	1.1920928955078125e-07, 4.4584274291992188e-05,
+	1.6570091247558594e-05}, /* L1852 */
+{2.8429338932037354e+00, 1.4299154281616211e-04,
+	1.1920928955078125e-07, 4.3642520904541016e-04,
+	-5.4985284805297852e-04}, /* L1853 */
+{1.6515436172485352e+00, 8.3103775978088379e-05,
+	1.1920928955078125e-07, 8.7261199951171875e-05,
+	-8.0823898315429688e-05}, /* L1854 */
+{2.4816195964813232e+00, 1.2502074241638184e-04,
+	1.1920928955078125e-07, 1.4424324035644531e-05,
+	-1.3703107833862305e-04}, /* L1855 */
+{1.7384079694747925e+00, 8.7663531303405762e-05,
+	1.1920928955078125e-07, -1.7166137695312500e-05,
+	-2.5212764739990234e-05}, /* L1856 */
+{2.6873564720153809e+00, 1.3568997383117676e-04,
+	1.1920928955078125e-07, 1.3232231140136719e-05,
+	-8.1658363342285156e-06}, /* L1857 */
+{1.4985584020614624e+00, 7.5755640864372253e-05,
+	1.1920928955078125e-07, 6.7830085754394531e-05,
+	2.9563903808593750e-05}, /* L1858 */
+{2.7007632255554199e+00, 1.3668090105056763e-04,
+	1.1920928955078125e-07, -2.7596950531005859e-05,
+	-2.2888183593750000e-05}, /* L1859 */
+{1.8015152215957642e+00, 9.1284513473510742e-05,
+	1.1920928955078125e-07, 5.6028366088867188e-06,
+	3.4570693969726562e-06}, /* L1860 */
+{2.7948830127716064e+00, 1.4185905456542969e-04,
+	1.1920928955078125e-07, 3.4213066101074219e-04,
+	-1.6695261001586914e-04}, /* L1861 */
+{1.6055277585983276e+00, 8.1539154052734375e-05,
+	1.1920928955078125e-07, 1.5974044799804688e-05,
+	7.9870223999023438e-06}, /* L1862 */
+{2.0925402641296387e+00, 1.0641291737556458e-04,
+	1.1920928955078125e-07, -1.0961294174194336e-04,
+	5.2690505981445312e-05}, /* L1863 */
+{1.7606729269027710e+00, 8.9645385742187500e-05,
+	1.1920928955078125e-07, -1.7881393432617188e-06,
+	1.4185905456542969e-05}, /* L1864 */
+{2.4618394374847412e+00, 1.2559443712234497e-04,
+	1.1920928955078125e-07, -8.3386898040771484e-05,
+	-5.7774782180786133e-04}, /* L1865 */
+{1.4373915195465088e+00, 7.3343515396118164e-05,
+	1.1920928955078125e-07, 8.1062316894531250e-06,
+	-1.3828277587890625e-05}, /* L1866 */
+{2.2235951423645020e+00, 1.1359155178070068e-04,
+	1.1920928955078125e-07, 6.6757202148437500e-06,
+	-1.7762184143066406e-05}, /* L1867 */
+{1.8781640529632568e+00, 9.6112489700317383e-05,
+	1.1920928955078125e-07, -1.3083219528198242e-04,
+	-3.3730268478393555e-04}, /* L1868 */
+{2.2864773273468018e+00, 1.1712312698364258e-04,
+	1.1920928955078125e-07, 5.9366226196289062e-05,
+	-1.1742115020751953e-04}, /* L1869 */
+{2.1287276744842529e+00, 1.0952353477478027e-04,
+	1.1920928955078125e-07, -8.8697671890258789e-04,
+	-1.9913911819458008e-04}, /* L1870 */
+{2.4328908920288086e+00, 1.2487173080444336e-04,
+	1.1920928955078125e-07, -2.9146671295166016e-05,
+	-1.3232231140136719e-05}, /* L1871 */
+{2.4926898479461670e+00, 1.2809038162231445e-04,
+	1.1920928955078125e-07, -3.0219554901123047e-05,
+	-5.2571296691894531e-05}, /* L1872 */
+{2.2158510684967041e+00, 1.1399388313293457e-04,
+	1.1920928955078125e-07, -2.5570392608642578e-05,
+	-7.7486038208007812e-06}, /* L1873 */
+{1.9853980541229248e+00, 1.0225176811218262e-04,
+	1.1920928955078125e-07, -3.9935111999511719e-06,
+	1.8239021301269531e-05}, /* L1874 */
+{2.8388967514038086e+00, 1.4643371105194092e-04,
+	1.1920928955078125e-07, 2.5629997253417969e-05,
+	7.2717666625976562e-06}, /* L1875 */
+{2.8566086292266846e+00, 1.4749169349670410e-04,
+	1.1920928955078125e-07, 7.2360038757324219e-05,
+	-7.2836875915527344e-05}, /* L1876 */
+{2.5184569358825684e+00, 1.3017654418945312e-04,
+	1.1920928955078125e-07, 6.4015388488769531e-05,
+	7.3075294494628906e-05}, /* L1877 */
+{1.9263958930969238e+00, 9.9688768386840820e-05,
+	1.1920928955078125e-07, -4.3511390686035156e-05,
+	4.7206878662109375e-05}, /* L1878 */
+{2.7452421188354492e+00, 1.4221668243408203e-04,
+	1.1920928955078125e-07, -1.4662742614746094e-05,
+	-1.7523765563964844e-05}, /* L1879 */
+{2.5641698837280273e+00, 1.3311207294464111e-04,
+	1.1920928955078125e-07, -1.4489889144897461e-04,
+	1.7321109771728516e-04}, /* L1880 */
+{3.2108201980590820e+00, 1.6671419143676758e-04,
+	1.1920928955078125e-07, 6.9499015808105469e-05,
+	5.6385993957519531e-05}, /* L1881 */
+{1.6079204082489014e+00, 8.3580613136291504e-05,
+	1.1920928955078125e-07, 2.1338462829589844e-05,
+	-6.5565109252929688e-07}, /* L1882 */
+{2.5309545993804932e+00, 1.3172626495361328e-04,
+	1.1920928955078125e-07, 5.1140785217285156e-05,
+	2.4795532226562500e-05}, /* L1883 */
+{2.4556424617767334e+00, 1.2794137001037598e-04,
+	1.1920928955078125e-07, 3.9935111999511719e-05,
+	4.5180320739746094e-05}, /* L1884 */
+{3.3386497497558594e+00, 1.7437338829040527e-04,
+	1.1920928955078125e-07, 2.8991699218750000e-04,
+	2.4509429931640625e-04}, /* L1885 */
+{1.6634821891784668e+00, 8.6873769760131836e-05,
+	1.1920928955078125e-07, 2.9802322387695312e-05,
+	1.2159347534179688e-04}, /* L1886 */
+{2.3434493541717529e+00, 1.2252479791641235e-04,
+	1.1920928955078125e-07, -6.9260597229003906e-05,
+	1.6069412231445312e-04}, /* L1887 */
+{2.0525343418121338e+00, 1.0743364691734314e-04,
+	1.1920928955078125e-07, -4.4703483581542969e-05,
+	-8.9704990386962891e-05}, /* L1888 */
+{2.4524402618408203e+00, 1.2850761413574219e-04,
+	1.1920928955078125e-07, 1.2397766113281250e-05,
+	-1.2993812561035156e-05}, /* L1889 */
+{1.4443668127059937e+00, 7.5876712799072266e-05,
+	1.1920928955078125e-07, -5.4794549942016602e-04,
+	-1.8507242202758789e-04}, /* L1890 */
+{2.2905726432800293e+00, 1.2062489986419678e-04,
+	1.1920928955078125e-07, 3.5476684570312500e-04,
+	6.0319900512695312e-05}, /* L1891 */
+{1.7725929021835327e+00, 9.3251466751098633e-05,
+	1.1920928955078125e-07, 2.3245811462402344e-05,
+	1.3601779937744141e-04}, /* L1892 */
+{2.2941467761993408e+00, 1.2078881263732910e-04,
+	1.1920928955078125e-07, -3.1471252441406250e-05,
+	1.6784667968750000e-04}, /* L1893 */
+{1.7702763080596924e+00, 9.3281269073486328e-05,
+	1.1920928955078125e-07, -3.5762786865234375e-07,
+	7.1525573730468750e-06}, /* L1894 */
+{3.2860200405120850e+00, 1.7338991165161133e-04,
+	1.1920928955078125e-07, 7.8082084655761719e-05,
+	1.5020370483398438e-05}, /* L1895 */
+{2.0420827865600586e+00, 1.0788440704345703e-04,
+	1.1920928955078125e-07, 2.7298927307128906e-05,
+	4.7802925109863281e-05}, /* L1896 */
+{3.2731742858886719e+00, 1.7306208610534668e-04,
+	1.1920928955078125e-07, 1.1444091796875000e-05,
+	3.5762786865234375e-06}, /* L1897 */
+{1.7687418460845947e+00, 9.3623995780944824e-05,
+	1.1920928955078125e-07, -9.0599060058593750e-06,
+	-2.0384788513183594e-05}, /* L1898 */
+{3.4269099235534668e+00, 1.8161535263061523e-04,
+	1.1920928955078125e-07, -3.2961368560791016e-05,
+	3.2305717468261719e-05}, /* L1899 */
+{1.8056877851486206e+00, 9.5814466476440430e-05,
+	1.1920928955078125e-07, -5.0246715545654297e-05,
+	5.2571296691894531e-05}, /* L1900 */
+{3.3191819190979004e+00, 1.7637014389038086e-04,
+	1.1920928955078125e-07, -5.1081180572509766e-05,
+	1.8763542175292969e-04}, /* L1901 */
+{1.8332746028900146e+00, 9.7483396530151367e-05,
+	1.1920928955078125e-07, 5.1259994506835938e-06,
+	4.2915344238281250e-06}, /* L1902 */
+{2.8806416988372803e+00, 1.5336275100708008e-04,
+	1.1920928955078125e-07, -1.3530254364013672e-05,
+	-5.7041645050048828e-05}, /* L1903 */
+{1.8356271982192993e+00, 9.7870826721191406e-05,
+	1.1920928955078125e-07, -6.8008899688720703e-05,
+	3.0159950256347656e-04}, /* L1904 */
+{3.9514160156250000e+00, 2.1086633205413818e-04,
+	1.1920928955078125e-07, 2.4271011352539062e-04,
+	-1.0418891906738281e-04}, /* L1905 */
+{1.8275932073593140e+00, 9.7610056400299072e-05,
+	1.1920928955078125e-07, 2.5629997253417969e-05,
+	1.5854835510253906e-05}, /* L1906 */
+{2.8603291511535645e+00, 1.5297532081604004e-04,
+	1.1920928955078125e-07, 4.1723251342773438e-05,
+	1.3470649719238281e-04}, /* L1907 */
+{1.7409679889678955e+00, 9.3191862106323242e-05,
+	1.1920928955078125e-07, 1.0013580322265625e-05,
+	-2.5689601898193359e-05}, /* L1908 */
+{2.8995096683502197e+00, 1.5538558363914490e-04,
+	1.1920928955078125e-07, -4.3570995330810547e-05,
+	-6.4253807067871094e-05}, /* L1909 */
+{2.8324661254882812e+00, 1.5196204185485840e-04,
+	1.1920928955078125e-07, 2.2292137145996094e-05,
+	-3.4868717193603516e-05}, /* L1910 */
+{2.8509500026702881e+00, 1.5318393707275391e-04,
+	1.1920928955078125e-07, 1.5032291412353516e-04,
+	1.3399124145507812e-04}, /* L1911 */
+{2.2605297565460205e+00, 1.2156367301940918e-04,
+	1.1920928955078125e-07, 5.0067901611328125e-06,
+	-4.2378902435302734e-05}, /* L1912 */
+{2.9011981487274170e+00, 1.5616416931152344e-04,
+	1.1920928955078125e-07, -2.0563602447509766e-05,
+	1.3589859008789062e-05}, /* L1913 */
+{2.5663242340087891e+00, 1.3829022645950317e-04,
+	1.1920928955078125e-07, 1.5139579772949219e-05,
+	1.3113021850585938e-05}, /* L1914 */
+{2.0113093852996826e+00, 1.0858476161956787e-04,
+	1.1920928955078125e-07, -4.3809413909912109e-04,
+	-5.3048133850097656e-05}, /* L1915 */
+{2.0161223411560059e+00, 1.0888278484344482e-04,
+	1.1920928955078125e-07, -8.8810920715332031e-06,
+	-1.1563301086425781e-05}, /* L1916 */
+{2.6440193653106689e+00, 1.4299154281616211e-04,
+	1.1920928955078125e-07, 7.0095062255859375e-05,
+	2.8491020202636719e-04}, /* L1917 */
+{1.9061421155929565e+00, 1.0319054126739502e-04,
+	1.1920928955078125e-07, 4.1961669921875000e-05,
+	-4.8875808715820312e-05}, /* L1918 */
+{2.4617960453033447e+00, 1.3339519500732422e-04,
+	1.1920928955078125e-07, -5.1856040954589844e-06,
+	-3.5047531127929688e-05}, /* L1919 */
+{1.9810401201248169e+00, 1.0752677917480469e-04,
+	1.1920928955078125e-07, 1.4865398406982422e-04,
+	1.0263919830322266e-04}, /* L1920 */
+{3.1827111244201660e+00, 1.7300248146057129e-04,
+	1.1920928955078125e-07, 3.3664703369140625e-04,
+	2.4199485778808594e-04}, /* L1921 */
+{2.2300319671630859e+00, 1.2132152915000916e-04,
+	1.1920928955078125e-07, 3.6871433258056641e-04,
+	3.3855438232421875e-05}, /* L1922 */
+{2.5846183300018311e+00, 1.4070421457290649e-04,
+	1.1920928955078125e-07, -4.1723251342773438e-06,
+	2.0492076873779297e-04}, /* L1923 */
+{1.9145039319992065e+00, 1.0430812835693359e-04,
+	1.1920928955078125e-07, -7.1525573730468750e-06,
+	-1.8239021301269531e-05}, /* L1924 */
+{2.9107191562652588e+00, 1.5877932310104370e-04,
+	1.1920928955078125e-07, -8.4042549133300781e-05,
+	-1.3709068298339844e-05}, /* L1925 */
+{1.8062936067581177e+00, 9.9033117294311523e-05,
+	1.1920928955078125e-07, -1.8262863159179688e-04,
+	1.1172294616699219e-03}, /* L1926 */
+{2.5536561012268066e+00, 1.3959407806396484e-04,
+	1.1920928955078125e-07, -3.8385391235351562e-05,
+	4.6849250793457031e-05}, /* L1927 */
+{1.8466471433639526e+00, 1.0144710540771484e-04,
+	1.1920928955078125e-07, -8.3380937576293945e-04,
+	-2.2706985473632812e-03}, /* L1928 */
+{3.5425333976745605e+00, 1.9410252571105957e-04,
+	1.1920928955078125e-07, 2.7298927307128906e-05,
+	-7.5578689575195312e-05}, /* L1929 */
+{2.3763818740844727e+00, 1.3034790754318237e-04,
+	1.1920928955078125e-07, 5.1259994506835938e-05,
+	1.0454654693603516e-04}, /* L1930 */
+{2.4987885951995850e+00, 1.3723969459533691e-04,
+	1.1920928955078125e-07, 7.9989433288574219e-05,
+	-1.3691186904907227e-04}, /* L1931 */
+{2.6794495582580566e+00, 1.4726817607879639e-04,
+	1.1920928955078125e-07, 4.9114227294921875e-05,
+	4.7087669372558594e-05}, /* L1932 */
+{3.0614643096923828e+00, 1.6847252845764160e-04,
+	1.1920928955078125e-07, 6.6876411437988281e-05,
+	1.3005733489990234e-04}, /* L1933 */
+{1.6402275562286377e+00, 9.0479850769042969e-05,
+	1.1920928955078125e-07, -6.8700313568115234e-04,
+	-7.1400403976440430e-04}, /* L1934 */
+{2.5690569877624512e+00, 1.4166533946990967e-04,
+	1.1920928955078125e-07, -4.3630599975585938e-05,
+	-2.5928020477294922e-05}, /* L1935 */
+{2.4554016590118408e+00, 1.3554748147726059e-04,
+	1.1920928955078125e-07, -4.5895576477050781e-05,
+	-7.5817108154296875e-05}, /* L1936 */
+{3.0257985591888428e+00, 1.6725063323974609e-04,
+	1.1920928955078125e-07, -8.1956386566162109e-05,
+	-1.1086463928222656e-05}, /* L1937 */
+{1.9632952213287354e+00, 1.0865926742553711e-04,
+	1.1920928955078125e-07, -1.8268823623657227e-04,
+	1.3363361358642578e-04}, /* L1938 */
+{3.0890502929687500e+00, 1.7106533050537109e-04,
+	1.1920928955078125e-07, -1.0490417480468750e-05,
+	-5.2452087402343750e-06}, /* L1939 */
+{2.1422698497772217e+00, 1.1889636516571045e-04,
+	1.1920928955078125e-07, 3.7908554077148438e-05,
+	-2.7596950531005859e-05}, /* L1940 */
+{2.5277142524719238e+00, 1.4027953147888184e-04,
+	1.1920928955078125e-07, 3.3497810363769531e-05,
+	1.5497207641601562e-05}, /* L1941 */
+{2.0290853977203369e+00, 1.1365115642547607e-04,
+	1.1920928955078125e-07, 8.6903572082519531e-05,
+	-1.2836456298828125e-03}, /* L1942 */
+{2.8987660408020020e+00, 1.6123056411743164e-04,
+	1.1920928955078125e-07, -2.4557113647460938e-05,
+	-2.8192996978759766e-05}, /* L1943 */
+{2.0777528285980225e+00, 1.1569261550903320e-04,
+	1.1920928955078125e-07, -6.7949295043945312e-05,
+	8.2969665527343750e-05}, /* L1944 */
+{3.0584731101989746e+00, 1.7046928405761719e-04,
+	1.1920928955078125e-07, -1.7464160919189453e-05,
+	2.1815299987792969e-05}, /* L1945 */
+{2.4689078330993652e+00, 1.3846158981323242e-04,
+	1.1920928955078125e-07, -5.6564807891845703e-05,
+	1.3842582702636719e-03}, /* L1946 */
+{2.8085601329803467e+00, 1.5702843666076660e-04,
+	1.1920928955078125e-07, 7.7486038208007812e-05,
+	2.4795532226562500e-05}, /* L1947 */
+{2.0344049930572510e+00, 1.1381506919860840e-04,
+	1.1920928955078125e-07, 1.6880035400390625e-04,
+	-2.5749206542968750e-05}, /* L1948 */
+{3.2024304866790771e+00, 1.7935037612915039e-04,
+	1.1920928955078125e-07, 1.2314319610595703e-04,
+	4.3618679046630859e-04}, /* L1949 */
+{2.3651342391967773e+00, 1.3273954391479492e-04,
+	1.1920928955078125e-07, -3.7831068038940430e-04,
+	-3.2556056976318359e-04}, /* L1950 */
+{2.8672444820404053e+00, 1.6085803508758545e-04,
+	1.1920928955078125e-07, -1.7046928405761719e-04,
+	-2.2709369659423828e-05}, /* L1951 */
+{2.1778659820556641e+00, 1.2230873107910156e-04,
+	1.1920928955078125e-07, -1.1670589447021484e-04,
+	-4.8816204071044922e-05}, /* L1952 */
+{3.4397442340850830e+00, 1.9359588623046875e-04,
+	1.1920928955078125e-07, 1.4424324035644531e-04,
+	2.7120113372802734e-04}, /* L1953 */
+{2.8241491317749023e+00, 1.5892460942268372e-04,
+	1.1920928955078125e-07, 1.3351440429687500e-05,
+	-4.4703483581542969e-06}, /* L1954 */
+{2.5162622928619385e+00, 1.4173984527587891e-04,
+	1.1920928955078125e-07, -1.1503696441650391e-05,
+	1.8715858459472656e-05}, /* L1955 */
+{2.1169745922088623e+00, 1.1938810348510742e-04,
+	1.1920928955078125e-07, -2.1398067474365234e-05,
+	1.4305114746093750e-05}, /* L1956 */
+{2.7241365909576416e+00, 1.5377998352050781e-04,
+	1.1920928955078125e-07, 6.0796737670898438e-05,
+	-1.6331672668457031e-05}, /* L1957 */
+{1.7056642770767212e+00, 9.6410512924194336e-05,
+	1.1920928955078125e-07, 8.0347061157226562e-05,
+	6.6399574279785156e-05}, /* L1958 */
+{3.1809294223785400e+00, 1.7994642257690430e-04,
+	1.1920928955078125e-07, -3.5762786865234375e-06,
+	-4.8279762268066406e-06}, /* L1959 */
+{2.2413270473480225e+00, 1.2692809104919434e-04,
+	1.1920928955078125e-07, 7.9154968261718750e-05,
+	-1.1438131332397461e-04}, /* L1960 */
+{2.8122732639312744e+00, 1.5943124890327454e-04,
+	1.1920928955078125e-07, 6.9141387939453125e-06,
+	-4.6074390411376953e-05}, /* L1961 */
+{2.1340303421020508e+00, 1.2111663818359375e-04,
+	1.1920928955078125e-07, 6.0319900512695312e-05,
+	7.6651573181152344e-05}, /* L1962 */
+{2.8176293373107910e+00, 1.6009807586669922e-04,
+	1.1920928955078125e-07, -7.7486038208007812e-06,
+	1.0097026824951172e-04}, /* L1963 */
+{1.9855377674102783e+00, 1.1295080184936523e-04,
+	1.1920928955078125e-07, 3.9935111999511719e-05,
+	-1.1801719665527344e-04}, /* L1964 */
+{2.6457307338714600e+00, 1.5062093734741211e-04,
+	1.1920928955078125e-07, 2.6226043701171875e-06,
+	1.1563301086425781e-04}, /* L1965 */
+{1.8793472051620483e+00, 1.0713934898376465e-04,
+	1.1920928955078125e-07, -2.2655725479125977e-04,
+	9.6440315246582031e-05}, /* L1966 */
+{3.2956936359405518e+00, 1.8802285194396973e-04,
+	1.1920928955078125e-07, 3.4451484680175781e-05,
+	7.5101852416992188e-06}, /* L1967 */
+{2.8477327823638916e+00, 1.6269087791442871e-04,
+	1.1920928955078125e-07, -1.2516975402832031e-05,
+	-1.8274784088134766e-04}, /* L1968 */
+{3.2187063694000244e+00, 1.8413364887237549e-04,
+	1.1920928955078125e-07, -1.2969970703125000e-04,
+	-3.2395124435424805e-04}, /* L1969 */
+{2.1435589790344238e+00, 1.2266635894775391e-04,
+	1.1920928955078125e-07, -2.9802322387695312e-07,
+	1.5735626220703125e-05}, /* L1970 */
+{2.9644253253936768e+00, 1.6984343528747559e-04,
+	1.1920928955078125e-07, -6.0856342315673828e-05,
+	-2.7418136596679688e-05}, /* L1971 */
+{2.0189805030822754e+00, 1.1578202247619629e-04,
+	1.1920928955078125e-07, 4.8637390136718750e-05,
+	3.1709671020507812e-05}, /* L1972 */
+{3.2408525943756104e+00, 1.8605589866638184e-04,
+	1.1920928955078125e-07, 3.2901763916015625e-05,
+	2.5033950805664062e-05}, /* L1973 */
+{2.0035963058471680e+00, 1.1513382196426392e-04,
+	1.1920928955078125e-07, 6.1988830566406250e-06,
+	7.2717666625976562e-06}, /* L1974 */
+{2.5991616249084473e+00, 1.4951080083847046e-04,
+	1.1920928955078125e-07, -2.2470951080322266e-05,
+	3.5166740417480469e-05}, /* L1975 */
+{2.3958036899566650e+00, 1.3831257820129395e-04,
+	1.1920928955078125e-07, 3.6430358886718750e-04,
+	-1.8298625946044922e-05}, /* L1976 */
+{2.4136555194854736e+00, 1.3914704322814941e-04,
+	1.1920928955078125e-07, -9.2267990112304688e-05,
+	-5.2571296691894531e-05}, /* L1977 */
+{1.7428263425827026e+00, 1.0064337402582169e-04,
+	1.1920928955078125e-07, -2.9265880584716797e-05,
+	-5.3644180297851562e-06}, /* L1978 */
+{2.9059805870056152e+00, 1.6786158084869385e-04,
+	1.1920928955078125e-07, 3.3378601074218750e-05,
+	-1.9073486328125000e-05}, /* L1979 */
+{2.4391889572143555e+00, 1.4105439186096191e-04,
+	1.1920928955078125e-07, -2.0980834960937500e-05,
+	-5.3048133850097656e-05}, /* L1980 */
+{2.7203071117401123e+00, 1.5753507614135742e-04,
+	1.1920928955078125e-07, 1.8715858459472656e-05,
+	-2.5969743728637695e-04}, /* L1981 */
+{2.3946189880371094e+00, 1.3878196477890015e-04,
+	1.1920928955078125e-07, 7.3790550231933594e-05,
+	-1.0365247726440430e-04}, /* L1982 */
+{2.7591810226440430e+00, 1.6010552644729614e-04,
+	1.1920928955078125e-07, 2.5033950805664062e-06,
+	-6.5505504608154297e-05}, /* L1983 */
+{1.9628891944885254e+00, 1.1396408081054688e-04,
+	1.1920928955078125e-07, -5.1259994506835938e-06,
+	2.6583671569824219e-05}, /* L1984 */
+{2.9665896892547607e+00, 1.7242133617401123e-04,
+	1.1920928955078125e-07, 3.1590461730957031e-05,
+	-1.5020370483398438e-05}, /* L1985 */
+{2.2222132682800293e+00, 1.2928247451782227e-04,
+	1.1920928955078125e-07, -2.9802322387695312e-07,
+	8.1062316894531250e-06}, /* L1986 */
+{3.0559027194976807e+00, 1.7797946929931641e-04,
+	1.1920928955078125e-07, -5.0067901611328125e-06,
+	5.0902366638183594e-05}, /* L1987 */
+{2.2775073051452637e+00, 1.3278424739837646e-04,
+	1.1920928955078125e-07, -5.6326389312744141e-05,
+	-2.2768974304199219e-05}, /* L1988 */
+{3.2548406124114990e+00, 1.8998980522155762e-04,
+	1.1920928955078125e-07, -9.1791152954101562e-06,
+	2.3043155670166016e-04}, /* L1989 */
+{2.2917304039001465e+00, 1.3398379087448120e-04,
+	1.1920928955078125e-07, -3.1322240829467773e-04,
+	3.6585330963134766e-04}, /* L1990 */
+{3.1600151062011719e+00, 1.8480420112609863e-04,
+	1.1920928955078125e-07, -1.0609626770019531e-05,
+	3.3617019653320312e-05}, /* L1991 */
+{2.4353582859039307e+00, 1.4257431030273438e-04,
+	1.1920928955078125e-07, 2.9563903808593750e-05,
+	-2.1994113922119141e-05}, /* L1992 */
+{2.9273936748504639e+00, 1.7154216766357422e-04,
+	1.1920928955078125e-07, -6.2525272369384766e-05,
+	1.2946128845214844e-04}, /* L1993 */
+{1.8083318471908569e+00, 1.0606646537780762e-04,
+	1.1920928955078125e-07, -1.6152858734130859e-05,
+	5.7220458984375000e-06}, /* L1994 */
+{3.1197268962860107e+00, 1.8335878849029541e-04,
+	1.1920928955078125e-07, -4.8440694808959961e-04,
+	1.3887882232666016e-04}, /* L1995 */
+{2.1046981811523438e+00, 1.2370944023132324e-04,
+	1.1920928955078125e-07, -7.1525573730468750e-06,
+	-1.9729137420654297e-05}, /* L1996 */
+{2.5268464088439941e+00, 1.4868378639221191e-04,
+	1.1920928955078125e-07, -4.7683715820312500e-06,
+	4.7683715820312500e-07}, /* L1997 */
+{2.1645905971527100e+00, 1.2749433517456055e-04,
+	1.1920928955078125e-07, 1.1086463928222656e-05,
+	4.1127204895019531e-05}, /* L1998 */
+{2.8154706954956055e+00, 1.6599893569946289e-04,
+	1.1920928955078125e-07, -5.4836273193359375e-05,
+	9.7393989562988281e-05}, /* L1999 */
+{2.4877271652221680e+00, 1.4683604240417480e-04,
+	1.1920928955078125e-07, 4.1484832763671875e-05,
+	7.0452690124511719e-05}, /* L2000 */
+{2.8615453243255615e+00, 1.6911327838897705e-04,
+	1.1920928955078125e-07, -7.2240829467773438e-05,
+	1.5532970428466797e-04}, /* L2001 */
+{2.2114782333374023e+00, 1.3077259063720703e-04,
+	1.1920928955078125e-07, -9.8943710327148438e-06,
+	2.6226043701171875e-06}, /* L2002 */
+{2.9739820957183838e+00, 1.7631053924560547e-04,
+	1.1920928955078125e-07, -8.5550546646118164e-04,
+	1.8191337585449219e-04}, /* L2003 */
+{2.7283720970153809e+00, 1.6182661056518555e-04,
+	1.1920928955078125e-07, 2.6714801788330078e-04,
+	-1.5407800674438477e-04}, /* L2004 */
+{3.0635843276977539e+00, 1.8173456192016602e-04,
+	1.1920928955078125e-07, -7.9572200775146484e-05,
+	-2.6226043701171875e-05}, /* L2005 */
+{1.9393781423568726e+00, 1.1515617370605469e-04,
+	1.1920928955078125e-07, -1.3172626495361328e-05,
+	1.8358230590820312e-05}, /* L2006 */
+{2.5894029140472412e+00, 1.5389174222946167e-04,
+	1.1920928955078125e-07, 2.5153160095214844e-05,
+	3.6954879760742188e-05}, /* L2007 */
+{2.0099897384643555e+00, 1.1957064270973206e-04,
+	1.1920928955078125e-07, 2.3841857910156250e-05,
+	5.7220458984375000e-06}, /* L2008 */
+{2.7748332023620605e+00, 1.6534328460693359e-04,
+	1.1920928955078125e-07, -3.9339065551757812e-06,
+	4.6014785766601562e-05}, /* L2009 */
+{2.0054776668548584e+00, 1.1956691741943359e-04,
+	1.1920928955078125e-07, 6.5326690673828125e-05,
+	-1.2040138244628906e-05}, /* L2010 */
+{3.6920042037963867e+00, 4.4040381908416748e-04,
+	1.1920928955078125e-07, 2.8407573699951172e-04,
+	-8.6128711700439453e-05}, /* L2011 */
+{4.4301600456237793e+00, 7.9256296157836914e-04,
+	1.1920928955078125e-07, 1.4102458953857422e-04,
+	-7.6711177825927734e-05}, /* L2012 */
+{6.0660715103149414e+00, 1.4528632164001465e-03,
+	1.1920928955078125e-07, -8.8810920715332031e-06,
+	-3.0279159545898438e-05}, /* L2013 */
+{7.6663098335266113e+00, 2.2868216037750244e-03,
+	1.1920928955078125e-07, -8.6307525634765625e-05,
+	-1.0907649993896484e-05}, /* L2014 */
+{9.7100963592529297e+00, 3.4745782613754272e-03,
+	1.1920928955078125e-07, -9.0360641479492188e-05,
+	1.2743473052978516e-04}, /* L2015 */
+{1.1466410636901855e+01, 4.8325955867767334e-03,
+	1.1920928955078125e-07, -6.0528516769409180e-04,
+	-1.0817050933837891e-03}, /* L2016 */
+{1.1994355201721191e+01, 5.7648420333862305e-03,
+	1.1920928955078125e-07, -1.5127658843994141e-04,
+	1.9207000732421875e-03}, /* L2017 */
+{1.2910548210144043e+01, 7.8035499900579453e-03,
+	1.1920928955078125e-07, -1.2465119361877441e-03,
+	2.3229956626892090e-02}, /* L2018 */
+{1.4922426223754883e+01, 8.9192017912864685e-03,
+	1.1920928955078125e-07, -1.7597675323486328e-03,
+	7.2169303894042969e-04}, /* L2019 */
+#endif	/* } */
+
+/* Always the last one. Common to both DP and SP */
+
+{, 0.0000000000000000e+00,
+	0.0000000000000000e+00, 0.0000000000000000e+00,
+	0.0000000000000000e+00, /* L2020 */
+};
+
+#endif	/* LAPACK_V9A_SS13 */
--- a/usr/src/cmd/fps/fptest/singdoub64_ss13.h	Wed Aug 05 18:08:09 2009 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,6113 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License (the "License").
- * You may not use this file except in compliance with the License.
- *
- * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
- * or http://www.opensolaris.org/os/licensing.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information: Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- */
-
-/*
- * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
- * Use is subject to license terms.
- */
-
-#ifndef	LAPACK_V9A_SS13
-#define	LAPACK_V9A_SS13
-
-/* 64-bit golden values for V9A/SS13 Lapack */
-
-
-static struct LinpVals LinpValsA[] = {
-
-#ifdef DP /* { */
-
-/* Start of DP golden values */
-
-
-{, 0.0000000000000000e+00,
-	0.0000000000000000e+00, 0.0000000000000000e+00,
-	0.0000000000000000e+00, /* L0 */
-{0.0000000000000000e+00, 0.0000000000000000e+00,
-	2.2204460492503131e-16, 0.0000000000000000e+00,
-	0.0000000000000000e+00}, /* L1 */
-{0.0000000000000000e+00, 0.0000000000000000e+00,
-	2.2204460492503131e-16, 0.0000000000000000e+00,
-	0.0000000000000000e+00}, /* L2 */
-{0.0000000000000000e+00, 0.0000000000000000e+00,
-	2.2204460492503131e-16, 0.0000000000000000e+00,
-	0.0000000000000000e+00}, /* L3 */
-{3.8260177822204688e-01, 1.6653345369377348e-16,
-	2.2204460492503131e-16, 2.2204460492503131e-16,
-	2.2204460492503131e-16}, /* L4 */
-{4.0810856343684981e-01, 2.2204460492503131e-16,
-	2.2204460492503131e-16, -3.3306690738754696e-16,
-	0.0000000000000000e+00}, /* L5 */
-{3.4009046953070693e-01, 2.2204460492503131e-16,
-	2.2204460492503131e-16, 8.8817841970012523e-16,
-	2.6645352591003757e-15}, /* L6 */
-{3.6373773558278227e-01, 2.7755575615628914e-16,
-	2.2204460492503131e-16, -3.3306690738754696e-16,
-	8.8817841970012523e-16}, /* L7 */
-{3.2492063115128750e-01, 2.8449465006019636e-16,
-	2.2204460492503131e-16, -1.7763568394002505e-15,
-	-1.1102230246251565e-16}, /* L8 */
-{4.5083838251885799e-01, 4.4408920985006262e-16,
-	2.2204460492503131e-16, -1.5543122344752192e-15,
-	-4.5519144009631418e-15}, /* L9 */
-{4.0575454426697483e-01, 4.4408920985006262e-16,
-	2.2204460492503131e-16, -1.1102230246251565e-16,
-	-2.2204460492503131e-16}, /* L10 */
-{5.9941012221257661e-01, 7.2164496600635175e-16,
-	2.2204460492503131e-16, 2.2204460492503131e-16,
-	2.2204460492503131e-16}, /* L11 */
-{2.9586268852800246e-01, 3.8857805861880479e-16,
-	2.2204460492503131e-16, -5.5511151231257827e-16,
-	0.0000000000000000e+00}, /* L12 */
-{6.2922387221750764e-01, 9.0205620750793969e-16,
-	2.2204460492503131e-16, -1.6653345369377348e-15,
-	-2.2204460492503131e-16}, /* L13 */
-{5.3933474761500677e-01, 8.3266726846886741e-16,
-	2.2204460492503131e-16, -4.4408920985006262e-16,
-	0.0000000000000000e+00}, /* L14 */
-{6.7117213036534140e-01, 1.1102230246251565e-15,
-	2.2204460492503131e-16, -6.6613381477509392e-16,
-	-1.1102230246251565e-16}, /* L15 */
-{7.8652984027188344e-01, 1.3877787807814457e-15,
-	2.2204460492503131e-16, -6.6613381477509392e-16,
-	0.0000000000000000e+00}, /* L16 */
-{6.3662650600829918e-01, 1.1934897514720433e-15,
-	2.2204460492503131e-16, -1.1102230246251565e-15,
-	-1.3322676295501878e-15}, /* L17 */
-{2.9363780703483666e-01, 5.8286708792820718e-16,
-	2.2204460492503131e-16, 4.4408920985006262e-16,
-	4.4408920985006262e-16}, /* L18 */
-{8.0143251092966705e-01, 1.6792123247455493e-15,
-	2.2204460492503131e-16, -5.5511151231257827e-16,
-	8.8817841970012523e-16}, /* L19 */
-{5.9147043988445613e-01, 1.3045120539345589e-15,
-	2.2204460492503131e-16, -6.6613381477509392e-16,
-	-2.2204460492503131e-16}, /* L20 */
-{5.9684867319455459e-01, 1.3877787807814457e-15,
-	2.2204460492503131e-16, 2.2204460492503131e-15,
-	-1.4432899320127035e-15}, /* L21 */
-{4.7856411796145321e-01, 1.1657341758564144e-15,
-	2.2204460492503131e-16, -5.5511151231257827e-16,
-	-2.3314683517128287e-15}, /* L22 */
-{4.5775698239791013e-01, 1.1657341758564144e-15,
-	2.2204460492503131e-16, 2.4424906541753444e-15,
-	-2.9976021664879227e-15}, /* L23 */
-{6.7891536575880340e-01, 1.8041124150158794e-15,
-	2.2204460492503131e-16, -1.1546319456101628e-14,
-	-2.2204460492503131e-15}, /* L24 */
-{5.8156934716077235e-01, 1.6098233857064770e-15,
-	2.2204460492503131e-16, 1.5543122344752192e-15,
-	3.3306690738754696e-15}, /* L25 */
-{6.1704970521036173e-01, 1.7763568394002505e-15,
-	2.2204460492503131e-16, -2.9976021664879227e-15,
-	-4.2188474935755949e-15}, /* L26 */
-{8.9129401863720303e-01, 2.6645352591003757e-15,
-	2.2204460492503131e-16, -4.4408920985006262e-16,
-	2.4424906541753444e-15}, /* L27 */
-{8.9527300979183411e-01, 2.7755575615628914e-15,
-	2.2204460492503131e-16, 1.5543122344752192e-15,
-	-1.3322676295501878e-15}, /* L28 */
-{8.1253743509383025e-01, 2.6090241078691179e-15,
-	2.2204460492503131e-16, 0.0000000000000000e+00,
-	6.6613381477509392e-16}, /* L29 */
-{8.6065578674654963e-01, 2.8588242884097781e-15,
-	2.2204460492503131e-16, 8.8817841970012523e-16,
-	8.8817841970012523e-16}, /* L30 */
-{9.0566972861522066e-01, 3.1086244689504383e-15,
-	2.2204460492503131e-16, 1.7763568394002505e-15,
-	-1.6653345369377348e-15}, /* L31 */
-{7.3636205055376436e-01, 2.6090241078691179e-15,
-	2.2204460492503131e-16, -9.9920072216264089e-16,
-	2.1760371282653068e-14}, /* L32 */
-{8.4318439831303504e-01, 3.0808688933348094e-15,
-	2.2204460492503131e-16, 6.6613381477509392e-16,
-	1.1102230246251565e-15}, /* L33 */
-{9.7321442476194397e-01, 3.6637359812630166e-15,
-	2.2204460492503131e-16, -2.6645352591003757e-15,
-	2.2204460492503131e-16}, /* L34 */
-{1.4583044708110673e+00, 5.6621374255882984e-15,
-	2.2204460492503131e-16, -3.9968028886505635e-15,
-	-4.4408920985006262e-16}, /* L35 */
-{8.0446023793208044e-01, 3.2127078775090467e-15,
-	2.2204460492503131e-16, -2.4091839634365897e-14,
-	1.9984014443252818e-14}, /* L36 */
-{5.3420930866356575e-01, 2.1926904736346842e-15,
-	2.2204460492503131e-16, -2.2204460492503131e-15,
-	-5.5511151231257827e-16}, /* L37 */
-{4.6747763286447808e-01, 1.9706458687096529e-15,
-	2.2204460492503131e-16, 7.1054273576010019e-15,
-	1.5543122344752192e-15}, /* L38 */
-{9.8796645269880079e-01, 4.2743586448068527e-15,
-	2.2204460492503131e-16, 8.8817841970012523e-16,
-	1.3322676295501878e-15}, /* L39 */
-{6.1611576753753372e-01, 2.7339241981394480e-15,
-	2.2204460492503131e-16, -9.5390362275793450e-13,
-	2.3319124409226788e-12}, /* L40 */
-{6.2244703022421788e-01, 2.8310687127941492e-15,
-	2.2204460492503131e-16, 2.3536728122053319e-14,
-	2.1982415887578100e-14}, /* L41 */
-{8.7271897456624437e-01, 4.0661918276896358e-15,
-	2.2204460492503131e-16, 7.9936057773011271e-15,
-	-9.8809849191638932e-15}, /* L42 */
-{6.8659341819991870e-01, 3.2751579226442118e-15,
-	2.2204460492503131e-16, -2.2204460492503131e-16,
-	-2.9976021664879227e-15}, /* L43 */
-{7.2500932497707793e-01, 3.5388358909926865e-15,
-	2.2204460492503131e-16, -1.1657341758564144e-14,
-	4.2188474935755949e-15}, /* L44 */
-{8.8403751416813714e-01, 4.4131365228849972e-15,
-	2.2204460492503131e-16, -4.5519144009631418e-15,
-	-1.2101430968414206e-14}, /* L45 */
-{6.3093735629719305e-01, 3.2196467714129540e-15,
-	2.2204460492503131e-16, -7.9936057773011271e-15,
-	-3.3306690738754696e-15}, /* L46 */
-{9.2094634655374696e-01, 4.8017145815038020e-15,
-	2.2204460492503131e-16, -1.9872992140790302e-14,
-	1.3322676295501878e-15}, /* L47 */
-{7.9229777213175645e-01, 4.2188474935755949e-15,
-	2.2204460492503131e-16, 2.1538326677728037e-14,
-	1.2212453270876722e-14}, /* L48 */
-{6.0205010610116116e-01, 3.2751579226442118e-15,
-	2.2204460492503131e-16, -4.4408920985006262e-16,
-	1.3322676295501878e-15}, /* L49 */
-{1.3500208311387045e+00, 7.4940054162198066e-15,
-	2.2204460492503131e-16, 4.4408920985006262e-16,
-	-1.9984014443252818e-15}, /* L50 */
-{1.1666846688849217e+00, 6.6058269965196814e-15,
-	2.2204460492503131e-16, -1.2212453270876722e-14,
-	9.3702823278363212e-14}, /* L51 */
-{1.0480930953997019e+00, 6.0507154842071031e-15,
-	2.2204460492503131e-16, 1.1102230246251565e-15,
-	9.9920072216264089e-15}, /* L52 */
-{8.8208908253996454e-01, 5.1902926401226068e-15,
-	2.2204460492503131e-16, 1.5543122344752192e-15,
-	-2.4424906541753444e-15}, /* L53 */
-{8.2408678992692186e-01, 4.9404924595819466e-15,
-	2.2204460492503131e-16, 1.7763568394002505e-15,
-	-6.8833827526759706e-15}, /* L54 */
-{8.6364968995405822e-01, 5.2735593669694936e-15,
-	2.2204460492503131e-16, 3.1086244689504383e-15,
-	-6.6613381477509392e-16}, /* L55 */
-{7.5001157285481435e-01, 4.6629367034256575e-15,
-	2.2204460492503131e-16, 2.2204460492503131e-14,
-	8.8817841970012523e-16}, /* L56 */
-{1.2017729296036601e+00, 7.6050277186823223e-15,
-	2.2204460492503131e-16, 1.9984014443252818e-15,
-	5.5511151231257827e-15}, /* L57 */
-{1.0194122814946389e+00, 6.5641936330962380e-15,
-	2.2204460492503131e-16, 2.6534330288541241e-13,
-	1.6364687382974807e-13}, /* L58 */
-{9.9577807695415899e-01, 6.5225602696727947e-15,
-	2.2204460492503131e-16, 3.3306690738754696e-15,
-	3.7747582837255322e-15}, /* L59 */
-{8.5001311590214701e-01, 5.6621374255882984e-15,
-	2.2204460492503131e-16, -6.5503158452884236e-15,
-	1.5543122344752192e-15}, /* L60 */
-{9.2624380035615839e-01, 6.2727600891321345e-15,
-	2.2204460492503131e-16, -5.4067861299245124e-14,
-	-9.2481577951275540e-14}, /* L61 */
-{1.5242170674146556e+00, 1.0491607582707729e-14,
-	2.2204460492503131e-16, 6.8833827526759706e-15,
-	3.9968028886505635e-15}, /* L62 */
-{8.9981547166579190e-01, 6.2935767708438561e-15,
-	2.2204460492503131e-16, 3.7747582837255322e-15,
-	4.4408920985006262e-16}, /* L63 */
-{7.6563681395596928e-01, 5.4400928206632670e-15,
-	2.2204460492503131e-16, -5.5511151231257827e-15,
-	1.6875389974302379e-14}, /* L64 */
-{9.1155252700817435e-01, 6.5780714209040525e-15,
-	2.2204460492503131e-16, -5.8841820305133297e-15,
-	-1.3322676295501878e-15}, /* L65 */
-{8.6364968995405356e-01, 6.3282712403633923e-15,
-	2.2204460492503131e-16, 3.7747582837255322e-15,
-	-1.3322676295501878e-15}, /* L66 */
-{1.0447922407927950e+00, 7.7715611723760958e-15,
-	2.2204460492503131e-16, -6.7723604502134549e-15,
-	4.8849813083506888e-15}, /* L67 */
-{7.8677684603399289e-01, 5.9396931817445875e-15,
-	2.2204460492503131e-16, -6.8833827526759706e-15,
-	-2.9976021664879227e-15}, /* L68 */
-{1.2246565778977070e+00, 9.3813845580825728e-15,
-	2.2204460492503131e-16, 1.5032419753424620e-13,
-	3.1863400806741993e-13}, /* L69 */
-{1.6214535908385190e+00, 1.2601031329495527e-14,
-	2.2204460492503131e-16, 2.2204460492503131e-15,
-	-1.2212453270876722e-15}, /* L70 */
-{9.7184598172736347e-01, 7.6605388699135801e-15,
-	2.2204460492503131e-16, -1.9206858326015208e-14,
-	-1.0325074129013956e-14}, /* L71 */
-{8.4723529526194563e-01, 6.7723604502134549e-15,
-	2.2204460492503131e-16, -1.4432899320127035e-15,
-	4.2188474935755949e-15}, /* L72 */
-{1.3493358890629930e+00, 1.0935696792557792e-14,
-	2.2204460492503131e-16, -1.8318679906315083e-14,
-	5.1070259132757201e-15}, /* L73 */
-{1.1790722474159370e+00, 9.6866958898544908e-15,
-	2.2204460492503131e-16, 2.8865798640254070e-15,
-	-7.1054273576010019e-15}, /* L74 */
-{1.0000154304731115e+00, 8.3266726846886741e-15,
-	2.2204460492503131e-16, 1.7763568394002505e-15,
-	-5.3290705182007514e-15}, /* L75 */
-{9.9672590603067746e-01, 8.4099394115355608e-15,
-	2.2204460492503131e-16, -5.6510351953420468e-14,
-	-4.3631764867768652e-14}, /* L76 */
-{1.8831459405013156e+00, 1.6098233857064770e-14,
-	2.2204460492503131e-16, -1.2212453270876722e-15,
-	-1.9984014443252818e-15}, /* L77 */
-{1.1538639582381141e+00, 9.9920072216264089e-15,
-	2.2204460492503131e-16, -3.3306690738754696e-16,
-	4.2410519540680980e-14}, /* L78 */
-{9.2090028565720605e-01, 8.0768725041480138e-15,
-	2.2204460492503131e-16, 1.7763568394002505e-15,
-	-6.4392935428259079e-15}, /* L79 */
-{1.0812666841987244e+00, 9.6034291630076041e-15,
-	2.2204460492503131e-16, 1.5609735726229701e-13,
-	4.5519144009631418e-14}, /* L80 */
-{9.4445901766904117e-01, 8.4932061383824475e-15,
-	2.2204460492503131e-16, -6.5503158452884236e-15,
-	1.1768364061026659e-14}, /* L81 */
-{1.1158708766864638e+00, 1.0158540675320182e-14,
-	2.2204460492503131e-16, -2.2204460492503131e-15,
-	-1.7763568394002505e-15}, /* L82 */
-{1.3976119269262395e+00, 1.2878587085651816e-14,
-	2.2204460492503131e-16, 1.6209256159527285e-14,
-	-9.8809849191638932e-15}, /* L83 */
-{1.1964470328874373e+00, 1.1157741397482823e-14,
-	2.2204460492503131e-16, 4.5075054799781356e-14,
-	-7.4384942649885488e-15}, /* L84 */
-{1.5279647533258061e+00, 1.4419021532319221e-14,
-	2.2204460492503131e-16, 1.3322676295501878e-15,
-	1.3322676295501878e-15}, /* L85 */
-{1.0581558624773642e+00, 1.0103029524088925e-14,
-	2.2204460492503131e-16, -2.5535129566378600e-15,
-	2.2204460492503131e-15}, /* L86 */
-{1.3391011224150913e+00, 1.2934098236883074e-14,
-	2.2204460492503131e-16, -3.1752378504279477e-14,
-	-1.2878587085651816e-14}, /* L87 */
-{1.1306992651372059e+00, 1.1046719095020308e-14,
-	2.2204460492503131e-16, 3.3306690738754696e-15,
-	-1.8873791418627661e-15}, /* L88 */
-{1.2584463844155744e+00, 1.2434497875801753e-14,
-	2.2204460492503131e-16, 6.6613381477509392e-15,
-	8.8817841970012523e-16}, /* L89 */
-{1.4757172151078655e+00, 1.4745149545802860e-14,
-	2.2204460492503131e-16, 3.2196467714129540e-14,
-	2.1094237467877974e-14}, /* L90 */
-{9.5880600339315103e-01, 9.6866958898544908e-15,
-	2.2204460492503131e-16, 1.2434497875801753e-14,
-	2.6645352591003757e-14}, /* L91 */
-{1.0407769289978044e+00, 1.0630385460785874e-14,
-	2.2204460492503131e-16, 2.8421709430404007e-14,
-	-2.7755575615628914e-15}, /* L92 */
-{1.3226010532063741e+00, 1.3655743202889425e-14,
-	2.2204460492503131e-16, -5.6621374255882984e-15,
-	1.9984014443252818e-15}, /* L93 */
-{9.5480196686123875e-01, 9.9642516460107800e-15,
-	2.2204460492503131e-16, -1.8873791418627661e-15,
-	-1.5543122344752192e-15}, /* L94 */
-{1.3822581706736938e+00, 1.4578616092109087e-14,
-	2.2204460492503131e-16, 8.4376949871511897e-15,
-	-5.1070259132757201e-15}, /* L95 */
-{1.9166962417400433e+00, 2.0428103653102880e-14,
-	2.2204460492503131e-16, -3.7747582837255322e-15,
-	-3.1086244689504383e-15}, /* L96 */
-{1.2371324913069346e+00, 1.3322676295501878e-14,
-	2.2204460492503131e-16, -8.8817841970012523e-16,
-	6.6613381477509392e-15}, /* L97 */
-{8.9797303960849595e-01, 9.7699626167013776e-15,
-	2.2204460492503131e-16, 6.4392935428259079e-15,
-	-1.1102230246251565e-15}, /* L98 */
-{1.4040620690480938e+00, 1.5432100042289676e-14,
-	2.2204460492503131e-16, 6.2172489379008766e-15,
-	1.3322676295501878e-15}, /* L99 */
-{1.2800197510055726e+00, 1.4210854715202004e-14,
-	2.2204460492503131e-16, 9.9920072216264089e-15,
-	5.7731597280508140e-15}, /* L100 */
-{1.5198254314615605e+00, 1.7041923427996153e-14,
-	2.2204460492503131e-16, -1.7097434579227411e-14,
-	2.8865798640254070e-15}, /* L101 */
-{1.0593760277936337e+00, 1.1996480198117609e-14,
-	2.2204460492503131e-16, -6.1062266354383610e-15,
-	-1.5543122344752192e-15}, /* L102 */
-{9.8059765512410590e-01, 1.1213252548714081e-14,
-	2.2204460492503131e-16, -1.2989609388114332e-14,
-	3.3306690738754696e-15}, /* L103 */
-{1.1184066803548092e+00, 1.2913281555171352e-14,
-	2.2204460492503131e-16, -9.6589403142388619e-15,
-	1.1546319456101628e-14}, /* L104 */
-{1.4190695156236912e+00, 1.6542323066914832e-14,
-	2.2204460492503131e-16, -3.1641356201816961e-14,
-	-6.1062266354383610e-15}, /* L105 */
-{9.9529837655541686e-01, 1.1712852909795402e-14,
-	2.2204460492503131e-16, 4.6851411639181606e-14,
-	-1.0380585280245214e-13}, /* L106 */
-{1.7804013037862301e+00, 2.1149748619109232e-14,
-	2.2204460492503131e-16, 7.1054273576010019e-15,
-	7.3274719625260332e-15}, /* L107 */
-{1.2916865976944309e+00, 1.5487611193520934e-14,
-	2.2204460492503131e-16, 7.7715611723760958e-15,
-	1.4654943925052066e-14}, /* L108 */
-{1.0527685380438851e+00, 1.2739809207573671e-14,
-	2.2204460492503131e-16, -1.4321877017664519e-14,
-	-5.3290705182007514e-15}, /* L109 */
-{1.0727438254166126e+00, 1.3100631690576847e-14,
-	2.2204460492503131e-16, 4.8849813083506888e-15,
-	-2.2204460492503131e-15}, /* L110 */
-{1.6441695140661536e+00, 2.0261570199409107e-14,
-	2.2204460492503131e-16, 1.1102230246251565e-15,
-	-5.6621374255882984e-15}, /* L111 */
-{1.4509152451060254e+00, 1.8041124150158794e-14,
-	2.2204460492503131e-16, 1.7097434579227411e-14,
-	-2.2426505097428162e-14}, /* L112 */
-{1.1725844649352746e+00, 1.4710455076283324e-14,
-	2.2204460492503131e-16, 5.3290705182007514e-15,
-	8.6597395920762210e-15}, /* L113 */
-{1.0033049549154456e+00, 1.2698175844150228e-14,
-	2.2204460492503131e-16, -5.5511151231257827e-15,
-	3.9968028886505635e-15}, /* L114 */
-{1.5000231457096496e+00, 1.9151347174783950e-14,
-	2.2204460492503131e-16, 5.9952043329758453e-15,
-	-1.4432899320127035e-15}, /* L115 */
-{8.9279394843423010e-01, 1.1497747198774277e-14,
-	2.2204460492503131e-16, -4.9960036108132044e-15,
-	-1.1990408665951691e-14}, /* L116 */
-{1.5042967159233618e+00, 1.9539925233402755e-14,
-	2.2204460492503131e-16, -2.7056135110115065e-13,
-	-2.5757174171303632e-13}, /* L117 */
-{1.3474784190248486e+00, 1.7652546091539989e-14,
-	2.2204460492503131e-16, 3.9968028886505635e-15,
-	-1.9443335830260366e-12}, /* L118 */
-{9.4119099338644763e-01, 1.2434497875801753e-14,
-	2.2204460492503131e-16, -4.6629367034256575e-15,
-	-2.1094237467877974e-15}, /* L119 */
-{1.7194275728381851e+00, 2.2907023500273738e-14,
-	2.2204460492503131e-16, -1.4099832412739488e-14,
-	-7.5495165674510645e-15}, /* L120 */
-{1.1518772778689883e+00, 1.5473733405713119e-14,
-	2.2204460492503131e-16, 5.4178883601707639e-14,
-	-3.8413716652030416e-14}, /* L121 */
-{1.3360861898943925e+00, 1.8096635301390052e-14,
-	2.2204460492503131e-16, 1.8429702208777599e-14,
-	-3.4416913763379853e-15}, /* L122 */
-{1.1829450823886922e+00, 1.6153745008296028e-14,
-	2.2204460492503131e-16, -1.7763568394002505e-14,
-	-1.9317880628477724e-14}, /* L123 */
-{1.5010312257805758e+00, 2.0664026045835726e-14,
-	2.2204460492503131e-16, 4.3298697960381105e-14,
-	5.4845017416482733e-14}, /* L124 */
-{1.1720180845143169e+00, 1.6264767310758543e-14,
-	2.2204460492503131e-16, -4.9960036108132044e-14,
-	3.3750779948604759e-14}, /* L125 */
-{1.6666923841217633e+00, 2.3314683517128287e-14,
-	2.2204460492503131e-16, 4.3520742565306136e-14,
-	-6.3282712403633923e-15}, /* L126 */
-{1.4389985820389368e+00, 2.0289325775024736e-14,
-	2.2204460492503131e-16, 4.4408920985006262e-15,
-	-4.0301095793893182e-14}, /* L127 */
-{1.2754103048807188e+00, 1.8124390877005681e-14,
-	2.2204460492503131e-16, -4.9960036108132044e-15,
-	6.6613381477509392e-16}, /* L128 */
-{1.4728909441076405e+00, 2.1094237467877974e-14,
-	2.2204460492503131e-16, 2.6645352591003757e-14,
-	3.0864200084579352e-14}, /* L129 */
-{1.8423361199869592e+00, 2.6589841439772499e-14,
-	2.2204460492503131e-16, -2.1649348980190553e-14,
-	-1.7652546091539989e-14}, /* L130 */
-{1.7175837546289456e+00, 2.4980018054066022e-14,
-	2.2204460492503131e-16, -6.5059069243034173e-14,
-	-1.1546319456101628e-14}, /* L131 */
-{1.5094929888012547e+00, 2.2121193765656244e-14,
-	2.2204460492503131e-16, 1.4432899320127035e-14,
-	-5.5511151231257827e-16}, /* L132 */
-{1.4812258631818391e+00, 2.1871393585115584e-14,
-	2.2204460492503131e-16, -1.3655743202889425e-14,
-	5.4400928206632670e-14}, /* L133 */
-{2.1977951065248100e+00, 3.2696068075210860e-14,
-	2.2204460492503131e-16, 1.1102230246251565e-15,
-	-8.4376949871511897e-15}, /* L134 */
-{1.1889072340069056e+00, 1.7819079545233762e-14,
-	2.2204460492503131e-16, -3.3306690738754696e-15,
-	-4.1078251911130792e-15}, /* L135 */
-{1.7610565852814140e+00, 2.6589841439772499e-14,
-	2.2204460492503131e-16, -7.6272321791748254e-14,
-	-3.0642155479654321e-14}, /* L136 */
-{1.7591512317081397e+00, 2.6756374893466273e-14,
-	2.2204460492503131e-16, 4.8849813083506888e-15,
-	2.6645352591003757e-15}, /* L137 */
-{2.3614494811986848e+00, 3.6179392814972289e-14,
-	2.2204460492503131e-16, -3.4749980670767400e-14,
-	-1.0991207943789050e-14}, /* L138 */
-{1.6259243689706477e+00, 2.5091040356528538e-14,
-	2.2204460492503131e-16, 1.0658141036401503e-14,
-	-9.3258734068513149e-15}, /* L139 */
-{1.2660909646518197e+00, 1.9678703111480900e-14,
-	2.2204460492503131e-16, -2.0439205883349132e-13,
-	-2.3725466036239595e-13}, /* L140 */
-{1.5895635344310999e+00, 2.4882873539411321e-14,
-	2.2204460492503131e-16, -1.3211653993039363e-14,
-	5.1070259132757201e-15}, /* L141 */
-{1.1056508632695603e+00, 1.7430501486614958e-14,
-	2.2204460492503131e-16, 2.6645352591003757e-15,
-	7.7715611723760958e-15}, /* L142 */
-{1.5489749499983407e+00, 2.4591439995447217e-14,
-	2.2204460492503131e-16, 3.3306690738754696e-15,
-	-8.8151708155237429e-14}, /* L143 */
-{1.3066607870829714e+00, 2.0889540097712711e-14,
-	2.2204460492503131e-16, -1.4543921622589551e-14,
-	-4.2188474935755949e-15}, /* L144 */
-{1.1310519351557555e+00, 1.8207657603852567e-14,
-	2.2204460492503131e-16, 2.0206059048177849e-14,
-	3.0198066269804258e-14}, /* L145 */
-{1.5753667740327297e+00, 2.5535129566378600e-14,
-	2.2204460492503131e-16, 5.9952043329758453e-15,
-	2.0206059048177849e-14}, /* L146 */
-{1.4864174935942889e+00, 2.4258373088059670e-14,
-	2.2204460492503131e-16, -6.9610983643997315e-14,
-	-4.4408920985006262e-15}, /* L147 */
-{1.3116756448688298e+00, 2.1552204465535851e-14,
-	2.2204460492503131e-16, 1.0658141036401503e-14,
-	-5.1070259132757201e-15}, /* L148 */
-{1.7114358038296786e+00, 2.8310687127941492e-14,
-	2.2204460492503131e-16, 3.0642155479654321e-14,
-	4.5297099404706387e-14}, /* L149 */
-{2.0364897568488090e+00, 3.3913843955346579e-14,
-	2.2204460492503131e-16, -4.6185277824406512e-14,
-	-2.0539125955565396e-14}, /* L150 */
-{1.2980332739915474e+00, 2.1760371282653068e-14,
-	2.2204460492503131e-16, 4.1078251911130792e-14,
-	2.3536728122053319e-14}, /* L151 */
-{1.5806164945471264e+00, 2.6673108166619386e-14,
-	2.2204460492503131e-16, 5.7731597280508140e-15,
-	8.8817841970012523e-16}, /* L152 */
-{1.5425074613829926e+00, 2.6201263381153694e-14,
-	2.2204460492503131e-16, -4.6962433941644122e-14,
-	-6.8056671409522096e-14}, /* L153 */
-{1.6688569196855765e+00, 2.8532731732866523e-14,
-	2.2204460492503131e-16, 3.1086244689504383e-15,
-	1.0436096431476471e-14}, /* L154 */
-{1.8822871086485009e+00, 3.2390756743438942e-14,
-	2.2204460492503131e-16, 2.8865798640254070e-15,
-	-2.5424107263916085e-14}, /* L155 */
-{1.8654133991516275e+00, 3.2307490016592055e-14,
-	2.2204460492503131e-16, 8.9483975784787617e-14,
-	-5.5511151231257827e-15}, /* L156 */
-{1.5637183960582457e+00, 2.7255975254547593e-14,
-	2.2204460492503131e-16, 9.9920072216264089e-15,
-	3.2862601528904634e-14}, /* L157 */
-{1.7595208207058148e+00, 3.0864200084579352e-14,
-	2.2204460492503131e-16, 3.9968028886505635e-15,
-	1.7097434579227411e-14}, /* L158 */
-{1.6069430345020865e+00, 2.8366198279172750e-14,
-	2.2204460492503131e-16, 9.9920072216264089e-14,
-	-5.9285909514983359e-14}, /* L159 */
-{1.5562740136737514e+00, 2.7644553313166398e-14,
-	2.2204460492503131e-16, -4.2188474935755949e-15,
-	9.1038288019262836e-15}, /* L160 */
-{1.7942823445832710e+00, 3.2071567623859210e-14,
-	2.2204460492503131e-16, 2.5091040356528538e-14,
-	-3.3306690738754696e-15}, /* L161 */
-{1.7515702370168520e+00, 3.1502578323738817e-14,
-	2.2204460492503131e-16, -1.4988010832439613e-14,
-	8.4376949871511897e-15}, /* L162 */
-{1.7753341422891886e+00, 3.2127078775090467e-14,
-	2.2204460492503131e-16, 1.7097434579227411e-14,
-	1.5099033134902129e-14}, /* L163 */
-{1.8529249325305224e+00, 3.3736902160796944e-14,
-	2.2204460492503131e-16, 1.3544720900426910e-14,
-	-1.0769163338864018e-14}, /* L164 */
-{1.1894122923051262e+00, 2.1788126858268697e-14,
-	2.2204460492503131e-16, -1.4210854715202004e-14,
-	-3.3306690738754696e-15}, /* L165 */
-{1.7620753820078119e+00, 3.2474023470285829e-14,
-	2.2204460492503131e-16, 9.4368957093138306e-14,
-	2.8954616482224083e-13}, /* L166 */
-{2.1242842752113966e+00, 3.9385161798577428e-14,
-	2.2204460492503131e-16, -1.9984014443252818e-15,
-	-3.2196467714129540e-14}, /* L167 */
-{2.2321773001623937e+00, 4.1633363423443370e-14,
-	2.2204460492503131e-16, 1.3367085216486885e-13,
-	-8.4710016778899444e-14}, /* L168 */
-{1.4674782648362414e+00, 2.7533531010703882e-14,
-	2.2204460492503131e-16, 1.1990408665951691e-14,
-	1.3100631690576847e-14}, /* L169 */
-{1.3264910563040142e+00, 2.5035529205297280e-14,
-	2.2204460492503131e-16, 5.7731597280508140e-15,
-	1.7541523789077473e-14}, /* L170 */
-{2.4971145544562403e+00, 4.7406523151494184e-14,
-	2.2204460492503131e-16, -1.0991207943789050e-14,
-	-8.3266726846886741e-15}, /* L171 */
-{1.0436207544762772e+00, 1.9928503292021560e-14,
-	2.2204460492503131e-16, 1.7763568394002505e-15,
-	-4.3298697960381105e-15}, /* L172 */
-{1.6792166621527975e+00, 3.2251978865360797e-14,
-	2.2204460492503131e-16, -7.1054273576010019e-15,
-	5.3290705182007514e-15}, /* L173 */
-{1.6322090934143754e+00, 3.1530333899354446e-14,
-	2.2204460492503131e-16, 2.0317081350640365e-13,
-	-2.2049029269055609e-13}, /* L174 */
-{2.5086101370152787e+00, 4.8738790781044372e-14,
-	2.2204460492503131e-16, -8.5487172896137054e-15,
-	-2.8088642523016460e-14}, /* L175 */
-{1.6988898506325165e+00, 3.3195668436292181e-14,
-	2.2204460492503131e-16, -9.6589403142388619e-14,
-	4.7073456244106637e-14}, /* L176 */
-{1.7683888685765838e+00, 3.4749980670767400e-14,
-	2.2204460492503131e-16, 6.1284310959308641e-14,
-	2.8421709430404007e-14}, /* L177 */
-{1.5955302373829998e+00, 3.1530333899354446e-14,
-	2.2204460492503131e-16, -1.1901590823981678e-13,
-	-1.3200551762793111e-13}, /* L178 */
-{1.7758653908470168e+00, 3.5291214395272164e-14,
-	2.2204460492503131e-16, -1.6764367671839864e-14,
-	5.8397731095283234e-14}, /* L179 */
-{1.1736292204852639e+00, 2.3453461395206432e-14,
-	2.2204460492503131e-16, -8.8817841970012523e-16,
-	-1.6053824936079764e-13}, /* L180 */
-{2.2514159553467405e+00, 4.5241588253475129e-14,
-	2.2204460492503131e-16, -3.6859404417555197e-14,
-	-3.8302694349567901e-14}, /* L181 */
-{1.9890416803911044e+00, 4.0190073491430667e-14,
-	2.2204460492503131e-16, -3.1530333899354446e-14,
-	1.2212453270876722e-14}, /* L182 */
-{1.8494137827908461e+00, 3.7574110489657642e-14,
-	2.2204460492503131e-16, -4.8183679268731794e-14,
-	4.4630965589931293e-14}, /* L183 */
-{2.5000385761827033e+00, 5.1070259132757201e-14,
-	2.2204460492503131e-16, 7.1054273576010019e-15,
-	1.8429702208777599e-14}, /* L184 */
-{2.2189531578855655e+00, 4.5574655160862676e-14,
-	2.2204460492503131e-16, -4.9027448767446913e-13,
-	2.4358293160275934e-13}, /* L185 */
-{2.3306811242462593e+00, 4.8128168117500536e-14,
-	2.2204460492503131e-16, 2.9753977059954195e-13,
-	1.7630341631047486e-13}, /* L186 */
-{2.3422821312684450e+00, 4.8627768478581856e-14,
-	2.2204460492503131e-16, -3.3306690738754696e-15,
-	-7.6605388699135801e-15}, /* L187 */
-{1.7260904637671115e+00, 3.6026737149086330e-14,
-	2.2204460492503131e-16, 1.6564527527407336e-13,
-	2.0938806244430452e-13}, /* L188 */
-{1.8733754674700820e+00, 3.9308833965634449e-14,
-	2.2204460492503131e-16, -3.0420110874729289e-14,
-	-2.8865798640254070e-15}, /* L189 */
-{1.5184444825867374e+00, 3.2029934260435766e-14,
-	2.2204460492503131e-16, -3.0309088572266774e-14,
-	2.0650148258027912e-14}, /* L190 */
-{1.8900815204229877e+00, 4.0079051188968151e-14,
-	2.2204460492503131e-16, -7.1054273576010019e-15,
-	-1.3100631690576847e-14}, /* L191 */
-{1.4349179744548259e+00, 3.0586644328423063e-14,
-	2.2204460492503131e-16, -2.3314683517128287e-15,
-	-5.1070259132757201e-15}, /* L192 */
-{2.2979629192475857e+00, 4.9238391142125693e-14,
-	2.2204460492503131e-16, 7.5495165674510645e-15,
-	-3.6082248300317588e-14}, /* L193 */
-{1.5876533638438366e+00, 3.4194869158454821e-14,
-	2.2204460492503131e-16, 3.1308289294429414e-14,
-	2.2204460492503131e-14}, /* L194 */
-{1.7923353484632876e+00, 3.8802294710649221e-14,
-	2.2204460492503131e-16, 9.7699626167013776e-15,
-	4.7961634663806763e-14}, /* L195 */
-{1.8922884459041780e+00, 4.1176263787523482e-14,
-	2.2204460492503131e-16, 4.3964831775156199e-14,
-	4.8405723873656825e-14}, /* L196 */
-{2.3109493640753707e+00, 5.0542903196060252e-14,
-	2.2204460492503131e-16, 6.6613381477509392e-14,
-	-1.7541523789077473e-14}, /* L197 */
-{2.2374082611088202e+00, 4.9182879990894435e-14,
-	2.2204460492503131e-16, -6.1284310959308641e-14,
-	1.9761969838327786e-14}, /* L198 */
-{1.9786737474811122e+00, 4.3715031594615539e-14,
-	2.2204460492503131e-16, 1.3100631690576847e-13,
-	-2.2315482794965646e-14}, /* L199 */
-{2.8323874544038095e+00, 6.2890664898063164e-14,
-	2.2204460492503131e-16, 1.6875389974302379e-14,
-	2.0872192862952943e-14}, /* L200 */
-{2.4428237629964049e+00, 5.4511950509095186e-14,
-	2.2204460492503131e-16, 2.2648549702353193e-14,
-	1.1324274851176597e-14}, /* L201 */
-{1.4604185742056859e+00, 3.2751579226442118e-14,
-	2.2204460492503131e-16, -7.4829031859735551e-14,
-	3.4194869158454821e-14}, /* L202 */
-{2.0000308609461306e+00, 4.5075054799781356e-14,
-	2.2204460492503131e-16, 1.2212453270876722e-14,
-	1.4654943925052066e-14}, /* L203 */
-{1.8284595861100834e+00, 4.1411318818518339e-14,
-	2.2204460492503131e-16, 2.0206059048177849e-14,
-	9.9920072216264089e-15}, /* L204 */
-{2.1146667761305893e+00, 4.8128168117500536e-14,
-	2.2204460492503131e-16, 5.1856297034191812e-12,
-	-7.4718009557273035e-13}, /* L205 */
-{1.6650742361758482e+00, 3.8080649744642869e-14,
-	2.2204460492503131e-16, -7.4051875742497941e-14,
-	1.6853185513809876e-13}, /* L206 */
-{1.9770836469618631e+00, 4.5435877282784531e-14,
-	2.2204460492503131e-16, 7.3274719625260332e-15,
-	3.4194869158454821e-14}, /* L207 */
-{2.9327375605219776e+00, 6.7723604502134549e-14,
-	2.2204460492503131e-16, 1.1990408665951691e-14,
-	-7.6605388699135801e-15}, /* L208 */
-{1.7512231940341563e+00, 4.0634162701280729e-14,
-	2.2204460492503131e-16, -2.6645352591003757e-15,
-	6.5503158452884236e-14}, /* L209 */
-{2.1286042734352204e+00, 4.9626969200744497e-14,
-	2.2204460492503131e-16, 2.6867397195928788e-14,
-	1.1679546219056647e-13}, /* L210 */
-{2.0885985782776806e+00, 4.8926140916449867e-14,
-	2.2204460492503131e-16, 6.6613381477509392e-15,
-	5.7731597280508140e-15}, /* L211 */
-{2.4599436178854401e+00, 5.7898130734201914e-14,
-	2.2204460492503131e-16, 1.3100631690576847e-14,
-	-4.1078251911130792e-15}, /* L212 */
-{2.1353029012769920e+00, 5.0494330938732901e-14,
-	2.2204460492503131e-16, 1.0214051826551440e-14,
-	1.3544720900426910e-14}, /* L213 */
-{1.7967566963405959e+00, 4.2688075296837269e-14,
-	2.2204460492503131e-16, -2.2093438190040615e-14,
-	-5.1736392947532295e-14}, /* L214 */
-{2.7514959446009066e+00, 6.5676630800481917e-14,
-	2.2204460492503131e-16, 1.3544720900426910e-14,
-	-5.2180482157382357e-15}, /* L215 */
-{1.8773437826704427e+00, 4.5019543648550098e-14,
-	2.2204460492503131e-16, 2.3758772726978350e-14,
-	5.3512749786932545e-14}, /* L216 */
-{1.5345858910015440e+00, 3.6970426720017713e-14,
-	2.2204460492503131e-16, -3.7159164634203989e-13,
-	9.9698027611339057e-14}, /* L217 */
-{1.7683759103089505e+00, 4.2799097599299785e-14,
-	2.2204460492503131e-16, -2.2648549702353193e-14,
-	-2.0095036745715333e-14}, /* L218 */
-{2.2546009990687268e+00, 5.4817261840867104e-14,
-	2.2204460492503131e-16, 4.0856207306205761e-14,
-	1.6875389974302379e-14}, /* L219 */
-{2.4454922799750403e+00, 5.9729998724833422e-14,
-	2.2204460492503131e-16, -2.9976021664879227e-15,
-	3.3306690738754696e-15}, /* L220 */
-{1.5588475827962787e+00, 3.8247183198336643e-14,
-	2.2204460492503131e-16, -1.1768364061026659e-14,
-	-1.5099033134902129e-14}, /* L221 */
-{1.9651204123596644e+00, 4.8433479449272454e-14,
-	2.2204460492503131e-16, 4.4408920985006262e-16,
-	3.4861002973229915e-14}, /* L222 */
-{2.5762729363532069e+00, 6.3782312764715243e-14,
-	2.2204460492503131e-16, -4.3409720262843621e-14,
-	1.1102230246251565e-14}, /* L223 */
-{2.6339692141866542e+00, 6.5503158452884236e-14,
-	2.2204460492503131e-16, -5.6299409578741688e-13,
-	-1.0330625244137082e-12}, /* L224 */
-{2.3311470812579520e+00, 5.8231197641589461e-14,
-	2.2204460492503131e-16, 2.2093438190040615e-13,
-	-3.2973623831367149e-14}, /* L225 */
-{1.3761274286598091e+00, 3.4527936065842368e-14,
-	2.2204460492503131e-16, 1.3100631690576847e-14,
-	1.8429702208777599e-14}, /* L226 */
-{2.2401226713460232e+00, 5.6454840802189210e-14,
-	2.2204460492503131e-16, 1.2656542480726785e-14,
-	-4.9404924595819466e-14}, /* L227 */
-{4.3926116386781411e+00, 1.1118883591620943e-13,
-	2.2204460492503131e-16, 3.0198066269804258e-14,
-	1.5099033134902129e-14}, /* L228 */
-{2.3013455539520424e+00, 5.8508753397745750e-14,
-	2.2204460492503131e-16, -2.8419488984354757e-12,
-	9.1238128163695364e-13}, /* L229 */
-{1.7543748965038315e+00, 4.4797499043625066e-14,
-	2.2204460492503131e-16, 2.6201263381153694e-14,
-	3.3972824553529790e-14}, /* L230 */
-{1.9348242270864668e+00, 4.9620030306840590e-14,
-	2.2204460492503131e-16, 7.5495165674510645e-15,
-	-1.5543122344752192e-15}, /* L231 */
-{3.2349637093533472e+00, 8.3322237998117998e-14,
-	2.2204460492503131e-16, 3.8191672047105385e-14,
-	2.7755575615628914e-14}, /* L232 */
-{2.3412378425880735e+00, 6.0562665993302289e-14,
-	2.2204460492503131e-16, -5.0404125317982107e-14,
-	3.0198066269804258e-14}, /* L233 */
-{2.1773840248973513e+00, 5.6565863104651726e-14,
-	2.2204460492503131e-16, 1.0125233984581428e-13,
-	-9.7699626167013776e-15}, /* L234 */
-{1.8787523938461115e+00, 4.9016346537200661e-14,
-	2.2204460492503131e-16, -3.6637359812630166e-14,
-	-2.1538326677728037e-14}, /* L235 */
-{2.1292701432741032e+00, 5.5788706987414116e-14,
-	2.2204460492503131e-16, 1.3544720900426910e-14,
-	-2.3425705819590803e-14}, /* L236 */
-{2.5422333200845082e+00, 6.6890937233665682e-14,
-	2.2204460492503131e-16, -8.7707618945387367e-15,
-	9.5479180117763462e-15}, /* L237 */
-{1.7195643484079930e+00, 4.5435877282784531e-14,
-	2.2204460492503131e-16, 1.9984014443252818e-15,
-	1.6653345369377348e-14}, /* L238 */
-{2.6799576703675378e+00, 7.1109784727241276e-14,
-	2.2204460492503131e-16, -2.0827783941967937e-13,
-	-2.3203661214665772e-14}, /* L239 */
-{2.6667078145948717e+00, 7.1054273576010019e-14,
-	2.2204460492503131e-16, -2.5091040356528538e-14,
-	-1.2101430968414206e-14}, /* L240 */
-{2.8563718753176426e+00, 7.6424977457634213e-14,
-	2.2204460492503131e-16, 8.0380146982861334e-14,
-	-7.8381745538536052e-14}, /* L241 */
-{2.0961067235843580e+00, 5.6316062924111066e-14,
-	2.2204460492503131e-16, 7.0388139761234925e-14,
-	5.6399329650957952e-14}, /* L242 */
-{1.7572287605426158e+00, 4.7406523151494184e-14,
-	2.2204460492503131e-16, 3.1152858070981893e-13,
-	1.0946799022804043e-13}, /* L243 */
-{2.0896838836574534e+00, 5.6607496468075169e-14,
-	2.2204460492503131e-16, -1.6764367671839864e-14,
-	1.7541523789077473e-14}, /* L244 */
-{2.0265618825707352e+00, 5.5122573172639022e-14,
-	2.2204460492503131e-16, 1.3988810110276972e-14,
-	5.4400928206632670e-14}, /* L245 */
-{1.9146636900521390e+00, 5.2291504459844873e-14,
-	2.2204460492503131e-16, -1.4321877017664519e-14,
-	7.1054273576010019e-15}, /* L246 */
-{2.9433652548737679e+00, 8.0713213890248880e-14,
-	2.2204460492503131e-16, 1.0835776720341528e-13,
-	6.5725203057809267e-14}, /* L247 */
-{2.1814852737334989e+00, 6.0063065632220969e-14,
-	2.2204460492503131e-16, -9.3258734068513149e-14,
-	-1.6431300764452317e-14}, /* L248 */
-{2.6255425207666603e+00, 7.2580830234869609e-14,
-	2.2204460492503131e-16, -7.2830630415410269e-14,
-	-1.2911893776390571e-13}, /* L249 */
-{2.7360422177743606e+00, 7.5939254884360707e-14,
-	2.2204460492503131e-16, 4.8849813083506888e-15,
-	-1.8429702208777599e-14}, /* L250 */
-{1.8685547286517161e+00, 5.2069459854919842e-14,
-	2.2204460492503131e-16, -3.3528735343679728e-14,
-	-8.8040685852774914e-14}, /* L251 */
-{2.0397140129490610e+00, 5.7065463465733046e-14,
-	2.2204460492503131e-16, -1.8873791418627661e-15,
-	-1.3433698597964394e-14}, /* L252 */
-{1.9461762750161948e+00, 5.4664606174981145e-14,
-	2.2204460492503131e-16, 3.5749181392930041e-14,
-	9.3480778673438181e-14}, /* L253 */
-{2.2825155347116022e+00, 6.4365179852643450e-14,
-	2.2204460492503131e-16, 2.9531932455029164e-14,
-	4.7517545453956700e-14}, /* L254 */
-{2.7804350596286973e+00, 7.8714812445923599e-14,
-	2.2204460492503131e-16, 2.0428103653102880e-14,
-	-9.3369756370975665e-14}, /* L255 */
-{2.5801179368259426e+00, 7.3330230776491589e-14,
-	2.2204460492503131e-16, -4.7739590058881731e-14,
-	5.0626169922907138e-14}, /* L256 */
-{1.7938019978472670e+00, 5.1181281435219717e-14,
-	2.2204460492503131e-16, -2.3425705819590803e-14,
-	-4.4841907964610073e-13}, /* L257 */
-{2.3566255105721221e+00, 6.7501559897209518e-14,
-	2.2204460492503131e-16, -3.4194869158454821e-14,
-	2.6201263381153694e-14}, /* L258 */
-{2.8436732221749996e+00, 8.1767925763642779e-14,
-	2.2204460492503131e-16, -2.5424107263916085e-14,
-	4.0856207306205761e-14}, /* L259 */
-{2.9615841594774968e+00, 8.5487172896137054e-14,
-	2.2204460492503131e-16, -2.8754776337791554e-14,
-	6.2172489379008766e-15}, /* L260 */
-{2.3122962156713154e+00, 6.7001959536128197e-14,
-	2.2204460492503131e-16, 7.2830630415410269e-14,
-	8.6375351315837179e-14}, /* L261 */
-{3.0114968497822918e+00, 8.7596596642924851e-14,
-	2.2204460492503131e-16, -2.2726265314076954e-13,
-	1.7963408538435033e-13}, /* L262 */
-{3.1902227049732002e+00, 9.3149446489526611e-14,
-	2.2204460492503131e-16, 6.8167693711984612e-14,
-	-5.0515147620444623e-14}, /* L263 */
-{2.2905182977808596e+00, 6.7133798520302435e-14,
-	2.2204460492503131e-16, -1.2545520178264269e-14,
-	-6.3282712403633923e-14}, /* L264 */
-{2.2878890762496615e+00, 6.7310740314852069e-14,
-	2.2204460492503131e-16, -2.8799185258776561e-13,
-	-2.1671553440683056e-13}, /* L265 */
-{2.6334992821291503e+00, 7.7771122874992216e-14,
-	2.2204460492503131e-16, -3.5416114485542494e-14,
-	-4.5186077102243871e-14}, /* L266 */
-{2.6835620072418931e+00, 7.9547479714392466e-14,
-	2.2204460492503131e-16, -1.8418599978531347e-13,
-	-9.0816243414337805e-14}, /* L267 */
-{1.7780125097773152e+00, 5.2902127123388709e-14,
-	2.2204460492503131e-16, -1.6719958750854857e-13,
-	6.4170890823334048e-14}, /* L268 */
-{2.7816414343914424e+00, 8.3072437817577338e-14,
-	2.2204460492503131e-16, -9.4368957093138306e-15,
-	4.9737991503207013e-14}, /* L269 */
-{2.0782728089783720e+00, 6.2297389469279096e-14,
-	2.2204460492503131e-16, 8.7263529735537304e-14,
-	3.6859404417555197e-14}, /* L270 */
-{2.4742079193066253e+00, 7.4440453801116746e-14,
-	2.2204460492503131e-16, 1.0436096431476471e-13,
-	6.6835426082434424e-14}, /* L271 */
-{2.5055533671591936e+00, 7.5661699128204418e-14,
-	2.2204460492503131e-16, -4.7850612361344247e-14,
-	-5.4622972811557702e-14}, /* L272 */
-{2.1612055090809590e+00, 6.5503158452884236e-14,
-	2.2204460492503131e-16, 1.9984014443252818e-14,
-	-1.3322676295501878e-14}, /* L273 */
-{3.1560705967207814e+00, 9.6006536054460412e-14,
-	2.2204460492503131e-16, 1.2212453270876722e-14,
-	-5.7731597280508140e-15}, /* L274 */
-{2.0473043176593291e+00, 6.2505556286396313e-14,
-	2.2204460492503131e-16, -4.1744385725905886e-14,
-	2.8865798640254070e-15}, /* L275 */
-{2.4710526216759376e+00, 7.5717210279435676e-14,
-	2.2204460492503131e-16, 1.1546319456101628e-14,
-	-1.4432899320127035e-14}, /* L276 */
-{2.2798185716353379e+00, 7.0110584005078636e-14,
-	2.2204460492503131e-16, -5.1492143882114760e-13,
-	5.0959236830294685e-13}, /* L277 */
-{2.6448249829313464e+00, 8.1629147885564635e-14,
-	2.2204460492503131e-16, 5.9285909514983359e-14,
-	-1.6264767310758543e-13}, /* L278 */
-{1.7132880851832031e+00, 5.3068660577082483e-14,
-	2.2204460492503131e-16, -1.6098233857064770e-14,
-	1.7763568394002505e-14}, /* L279 */
-{2.6000401192288352e+00, 8.0824236192711396e-14,
-	2.2204460492503131e-16, -5.7953641885433171e-14,
-	2.2426505097428162e-14}, /* L280 */
-{2.1094631544940370e+00, 6.5808469784656154e-14,
-	2.2204460492503131e-16, -2.2204460492503131e-15,
-	1.9317880628477724e-14}, /* L281 */
-{2.4060654949502083e+00, 7.5328632220816871e-14,
-	2.2204460492503131e-16, 3.1086244689504383e-14,
-	8.8817841970012523e-15}, /* L282 */
-{3.0861783624971655e+00, 9.6964103413199609e-14,
-	2.2204460492503131e-16, 4.8849813083506888e-14,
-	4.5741188614556449e-13}, /* L283 */
-{2.8415931422244336e+00, 8.9594998087250133e-14,
-	2.2204460492503131e-16, 2.6645352591003757e-14,
-	-1.0880185641326534e-14}, /* L284 */
-{2.6057419615963195e+00, 8.2447937366225688e-14,
-	2.2204460492503131e-16, 6.3282712403633923e-14,
-	5.7953641885433171e-14}, /* L285 */
-{3.2002242053862524e+00, 1.0161316232881745e-13,
-	2.2204460492503131e-16, -1.4876988529977098e-14,
-	7.1054273576010019e-15}, /* L286 */
-{3.0923822109572510e+00, 9.8532293435482643e-14,
-	2.2204460492503131e-16, -1.3322676295501878e-15,
-	1.1102230246251565e-14}, /* L287 */
-{2.6523846769162907e+00, 8.4807161293554145e-14,
-	2.2204460492503131e-16, 4.7739590058881731e-14,
-	-1.7608137170554983e-13}, /* L288 */
-{2.7219278131344971e+00, 8.7332918674576376e-14,
-	2.2204460492503131e-16, 6.8167693711984612e-14,
-	2.0206059048177849e-14}, /* L289 */
-{1.7474407565246566e+00, 5.6260551772879808e-14,
-	2.2204460492503131e-16, 6.4392935428259079e-15,
-	9.9920072216264089e-15}, /* L290 */
-{3.4055508302359989e+00, 1.1002310174035301e-13,
-	2.2204460492503131e-16, -8.1823436914874037e-14,
-	-1.1013412404281553e-13}, /* L291 */
-{2.3493513195358955e+00, 7.6161299489285739e-14,
-	2.2204460492503131e-16, 2.7755575615628914e-14,
-	-8.3710816056736803e-14}, /* L292 */
-{2.8763242458400216e+00, 9.3564045400285067e-14,
-	2.2204460492503131e-16, -2.9976021664879227e-15,
-	4.2410519540680980e-14}, /* L293 */
-{3.3895080832180957e+00, 1.1063372440389685e-13,
-	2.2204460492503131e-16, -1.1379786002407855e-13,
-	2.9021229863701592e-13}, /* L294 */
-{2.9129686765961855e+00, 9.5402852284820483e-14,
-	2.2204460492503131e-16, 2.0605739337042905e-13,
-	8.3821838359199319e-13}, /* L295 */
-{2.5253768049952692e+00, 8.2989171090730451e-14,
-	2.2204460492503131e-16, 7.9936057773011271e-15,
-	5.9063864910058328e-14}, /* L296 */
-{2.1254536716697880e+00, 7.0082828429463007e-14,
-	2.2204460492503131e-16, 7.9491968563161208e-14,
-	6.0840221749458578e-14}, /* L297 */
-{2.7013839648678228e+00, 8.9372953482325102e-14,
-	2.2204460492503131e-16, 8.4376949871511897e-15,
-	-2.5812685322534890e-13}, /* L298 */
-{2.2257868527747759e+00, 7.3885342288804168e-14,
-	2.2204460492503131e-16, -1.0258460747536446e-13,
-	1.2811973704174306e-13}, /* L299 */
-{2.3400361073059397e+00, 7.7937656328685989e-14,
-	2.2204460492503131e-16, 2.4669155607170978e-13,
-	-3.1974423109204508e-13}, /* L300 */
-{2.9302777730136529e+00, 9.7921670771938807e-14,
-	2.2204460492503131e-16, 8.5931262105987116e-14,
-	5.5289106626332796e-14}, /* L301 */
-{2.9487209961444791e+00, 9.8865360342870190e-14,
-	2.2204460492503131e-16, -1.5509815654013437e-13,
-	1.5654144647214707e-13}, /* L302 */
-{2.8465785768414800e+00, 9.5756735873919752e-14,
-	2.2204460492503131e-16, -1.4099832412739488e-14,
-	5.2846615972157451e-14}, /* L303 */
-{2.5691185894716448e+00, 8.6708418223224726e-14,
-	2.2204460492503131e-16, 3.1530333899354446e-14,
-	-3.7414515929867775e-14}, /* L304 */
-{2.4983992066243110e+00, 8.4598994476436928e-14,
-	2.2204460492503131e-16, 1.1768364061026659e-14,
-	1.3988810110276972e-14}, /* L305 */
-{2.9363198179032119e+00, 9.9753538762570315e-14,
-	2.2204460492503131e-16, 4.5385917246676399e-13,
-	7.8381745538536052e-13}, /* L306 */
-{2.5782156782379668e+00, 8.7874152399081140e-14,
-	2.2204460492503131e-16, 5.4622972811557702e-14,
-	3.7747582837255322e-15}, /* L307 */
-{3.2955053958770213e+00, 1.1268763699945339e-13,
-	2.2204460492503131e-16, 3.7747582837255322e-14,
-	6.6613381477509392e-14}, /* L308 */
-{2.7338609543427785e+00, 9.3786090005210099e-14,
-	2.2204460492503131e-16, -7.4384942649885488e-15,
-	-5.5733195836182858e-14}, /* L309 */
-{3.1911782728880511e+00, 1.0982881271104361e-13,
-	2.2204460492503131e-16, -1.8207657603852567e-14,
-	7.5273121069585613e-14}, /* L310 */
-{2.1286502089167438e+00, 7.3496764230185363e-14,
-	2.2204460492503131e-16, -9.1926466438962962e-14,
-	-3.2196467714129540e-15}, /* L311 */
-{3.2378304092011843e+00, 1.1215334216885253e-13,
-	2.2204460492503131e-16, 1.7652546091539989e-13,
-	-4.4408920985006262e-15}, /* L312 */
-{2.3195246087010419e+00, 8.0602191587786365e-14,
-	2.2204460492503131e-16, -6.7279515292284486e-14,
-	-4.0745185003743245e-14}, /* L313 */
-{3.9773702889525016e+00, 1.3865297798787424e-13,
-	2.2204460492503131e-16, -2.9842794901924208e-13,
-	-3.2984726061613401e-13}, /* L314 */
-{2.6254373365114159e+00, 9.1815444136500446e-14,
-	2.2204460492503131e-16, -5.9396931817445875e-14,
-	-1.4765966227514582e-14}, /* L315 */
-{3.0429662574816128e+00, 1.0675488271161271e-13,
-	2.2204460492503131e-16, 8.2822637637036678e-14,
-	-2.6090241078691179e-14}, /* L316 */
-{2.7642382364412246e+00, 9.7283292532779342e-14,
-	2.2204460492503131e-16, -8.3932860661661834e-14,
-	1.7097434579227411e-14}, /* L317 */
-{2.0049444587766967e+00, 7.0783656713757637e-14,
-	2.2204460492503131e-16, 3.3306690738754696e-15,
-	-6.7723604502134549e-15}, /* L318 */
-{2.1990934936576845e+00, 7.7882145177454731e-14,
-	2.2204460492503131e-16, 1.2434497875801753e-14,
-	8.3488771451811772e-14}, /* L319 */
-{2.8328562116367904e+00, 1.0064171718227044e-13,
-	2.2204460492503131e-16, -4.7184478546569153e-14,
-	-4.2965631052993558e-14}, /* L320 */
-{2.3009506132426520e+00, 8.2000378709423671e-14,
-	2.2204460492503131e-16, -1.4299672557172016e-13,
-	7.7937656328685989e-14}, /* L321 */
-{2.5365298224804689e+00, 9.0677465536259660e-14,
-	2.2204460492503131e-16, -2.3869795029440866e-14,
-	-1.2401191185062999e-13}, /* L322 */
-{2.7523644510519953e+00, 9.8698826889176416e-14,
-	2.2204460492503131e-16, -1.8451906669270102e-13,
-	2.9309887850104133e-14}, /* L323 */
-{2.7114615915716738e+00, 9.7533092713320002e-14,
-	2.2204460492503131e-16, -3.1452618287630685e-13,
-	-8.4598994476436928e-14}, /* L324 */
-{3.1777413409872746e+00, 1.1465828286816304e-13,
-	2.2204460492503131e-16, -1.9984014443252818e-15,
-	-1.2656542480726785e-14}, /* L325 */
-{2.6779554319104117e+00, 9.6922470049776166e-14,
-	2.2204460492503131e-16, -9.4591001698063337e-14,
-	8.5487172896137054e-14}, /* L326 */
-{2.9427059571018237e+00, 1.0683121054455569e-13,
-	2.2204460492503131e-16, 5.3290705182007514e-15,
-	-2.5535129566378600e-14}, /* L327 */
-{2.3811343024345368e+00, 8.6708418223224726e-14,
-	2.2204460492503131e-16, 3.2818192607919627e-13,
-	1.2407852523210749e-12}, /* L328 */
-{3.4149463104369420e+00, 1.2473355681663634e-13,
-	2.2204460492503131e-16, -2.5512925105886097e-13,
-	2.5934809855243657e-13}, /* L329 */
-{3.9894554976294163e+00, 1.4616086119190186e-13,
-	2.2204460492503131e-16, -7.4940054162198066e-14,
-	-3.3306690738754696e-14}, /* L330 */
-{3.5517919651051515e+00, 1.3052059433249497e-13,
-	2.2204460492503131e-16, -9.5479180117763462e-15,
-	-5.9174887212520844e-14}, /* L331 */
-{2.5734583837660527e+00, 9.4854679666411812e-14,
-	2.2204460492503131e-16, 3.1752378504279477e-14,
-	-3.2640556923979602e-14}, /* L332 */
-{3.2230227049620011e+00, 1.1915468611789493e-13,
-	2.2204460492503131e-16, -6.2794214272798854e-13,
-	-1.5784040741095851e-12}, /* L333 */
-{2.4483910726605513e+00, 9.0788487838722176e-14,
-	2.2204460492503131e-16, 3.3506530883187224e-13,
-	6.6613381477509392e-14}, /* L334 */
-{3.4418441532396629e+00, 1.2800871473928055e-13,
-	2.2204460492503131e-16, 5.9952043329758453e-14,
-	2.4424906541753444e-14}, /* L335 */
-{2.7664117340012329e+00, 1.0319523013890830e-13,
-	2.2204460492503131e-16, 1.9761969838327786e-14,
-	-4.6518344731794059e-14}, /* L336 */
-{2.7700724164584529e+00, 1.0363931934875836e-13,
-	2.2204460492503131e-16, -4.4853010194856324e-14,
-	2.9976021664879227e-14}, /* L337 */
-{3.4142538661712134e+00, 1.2811973704174306e-13,
-	2.2204460492503131e-16, -6.7945649107059580e-14,
-	-5.3290705182007514e-15}, /* L338 */
-{2.5929603639686984e+00, 9.7588603864551260e-14,
-	2.2204460492503131e-16, -5.1070259132757201e-15,
-	-1.1579626146840383e-13}, /* L339 */
-{3.1441661622755182e+00, 1.1868284133242923e-13,
-	2.2204460492503131e-16, -3.9046543776066756e-13,
-	-5.3890225615305098e-13}, /* L340 */
-{3.3284971072928826e+00, 1.2601031329495527e-13,
-	2.2204460492503131e-16, 6.9499961341534799e-14,
-	6.5503158452884236e-14}, /* L341 */
-{2.4766464023700530e+00, 9.4035890185750759e-14,
-	2.2204460492503131e-16, 1.2523315717771766e-13,
-	-3.1086244689504383e-15}, /* L342 */
-{2.5496020231715848e+00, 9.7089003503469939e-14,
-	2.2204460492503131e-16, -4.8194781498978045e-13,
-	-1.8129941992128806e-13}, /* L343 */
-{3.1846421630322994e+00, 1.2162493234768590e-13,
-	2.2204460492503131e-16, -1.1912693054227930e-13,
-	5.1514348342607263e-14}, /* L344 */
-{2.8420728393588695e+00, 1.0885736756449660e-13,
-	2.2204460492503131e-16, -1.4765966227514582e-14,
-	2.3758772726978350e-14}, /* L345 */
-{2.8743218081081521e+00, 1.1041167979897182e-13,
-	2.2204460492503131e-16, -1.1990408665951691e-14,
-	-1.3877787807814457e-14}, /* L346 */
-{3.5324752562018067e+00, 1.3608558724342856e-13,
-	2.2204460492503131e-16, -5.5511151231257827e-14,
-	-3.1308289294429414e-14}, /* L347 */
-{2.3351653424946766e+00, 9.0219498538601783e-14,
-	2.2204460492503131e-16, 1.7319479184152442e-14,
-	5.4622972811557702e-14}, /* L348 */
-{2.5845671011079387e+00, 1.0014211682118912e-13,
-	2.2204460492503131e-16, -5.3734794391857577e-14,
-	8.8817841970012523e-15}, /* L349 */
-{4.4757833481027554e+00, 1.7391643680753077e-13,
-	2.2204460492503131e-16, 7.4162898044960457e-14,
-	-1.6209256159527285e-14}, /* L350 */
-{2.3652430489624368e+00, 9.2169327725599715e-14,
-	2.2204460492503131e-16, -5.8952842607595812e-14,
-	1.6653345369377348e-14}, /* L351 */
-{3.5341454417838407e+00, 1.3811174426336947e-13,
-	2.2204460492503131e-16, 5.5511151231257827e-14,
-	2.7533531010703882e-14}, /* L352 */
-{3.5156349836156866e+00, 1.3777867735598193e-13,
-	2.2204460492503131e-16, -2.9143354396410359e-13,
-	-2.9243274468626623e-13}, /* L353 */
-{2.6426961446536787e+00, 1.0386136395368339e-13,
-	2.2204460492503131e-16, -6.6835426082434424e-14,
-	-2.0872192862952943e-13}, /* L354 */
-{3.2127256294481543e+00, 1.2662093595849910e-13,
-	2.2204460492503131e-16, 9.4146912488213275e-14,
-	4.3476333644321130e-13}, /* L355 */
-{3.6638556914563796e+00, 1.4480777688063995e-13,
-	2.2204460492503131e-16, -1.2334577803585489e-13,
-	-8.7485574340462335e-14}, /* L356 */
-{2.6947194513026353e+00, 1.0680345496894006e-13,
-	2.2204460492503131e-16, 7.2830630415410269e-14,
-	2.5757174171303632e-14}, /* L357 */
-{2.8952960717466705e+00, 1.1507461650239748e-13,
-	2.2204460492503131e-16, -8.4376949871511897e-15,
-	-3.8857805861880479e-15}, /* L358 */
-{2.8131092147355066e+00, 1.1212038242280897e-13,
-	2.2204460492503131e-16, 3.3306690738754696e-14,
-	-1.2101430968414206e-14}, /* L359 */
-{3.4507476902917014e+00, 1.3791745523406007e-13,
-	2.2204460492503131e-16, -9.6811447747313650e-14,
-	1.1768364061026659e-14}, /* L360 */
-{2.6420075257996265e+00, 1.0588752097362431e-13,
-	2.2204460492503131e-16, 1.1546319456101628e-14,
-	-3.9745984281580604e-14}, /* L361 */
-{3.9627683287668272e+00, 1.5926149288247871e-13,
-	2.2204460492503131e-16, -4.9404924595819466e-14,
-	-1.8540724511240114e-14}, /* L362 */
-{3.3154781558519222e+00, 1.3361534101363759e-13,
-	2.2204460492503131e-16, -8.1823436914874037e-14,
-	4.7517545453956700e-14}, /* L363 */
-{2.6976721202175087e+00, 1.0901696212428647e-13,
-	2.2204460492503131e-16, -3.0575542098176811e-13,
-	2.9642954757491680e-13}, /* L364 */
-{3.1774462890150366e+00, 1.2875811528090253e-13,
-	2.2204460492503131e-16, -1.7430501486614958e-14,
-	2.2737367544323206e-13}, /* L365 */
-{3.0014124327175957e+00, 1.2195799925507345e-13,
-	2.2204460492503131e-16, -9.6589403142388619e-15,
-	4.6629367034256575e-15}, /* L366 */
-{2.3844032769162014e+00, 9.7151453548605105e-14,
-	2.2204460492503131e-16, 5.3956838996782608e-14,
-	6.3948846218409017e-14}, /* L367 */
-{2.1032933238739719e+00, 8.5931262105987116e-14,
-	2.2204460492503131e-16, 2.9309887850104133e-14,
-	-7.3163697322797816e-14}, /* L368 */
-{3.4905687654446971e+00, 1.4299672557172016e-13,
-	2.2204460492503131e-16, -4.5741188614556449e-14,
-	-7.5606187976973160e-14}, /* L369 */
-{2.4143109020328741e+00, 9.9174141121594062e-14,
-	2.2204460492503131e-16, -1.0325074129013956e-14,
-	-9.9920072216264089e-16}, /* L370 */
-{2.7830618112220349e+00, 1.1463052729254741e-13,
-	2.2204460492503131e-16, 3.9523939676655573e-14,
-	-8.1046280797636427e-15}, /* L371 */
-{2.8863012567365454e+00, 1.1920325837522228e-13,
-	2.2204460492503131e-16, -9.1038288019262836e-15,
-	-2.1871393585115584e-14}, /* L372 */
-{3.5308855815872668e+00, 1.4621637234313312e-13,
-	2.2204460492503131e-16, -1.3034018309099338e-13,
-	-3.0664359940146824e-13}, /* L373 */
-{3.2834731246155977e+00, 1.3633538742396922e-13,
-	2.2204460492503131e-16, 5.8306692807263971e-12,
-	6.0407234769854767e-12}, /* L374 */
-{3.2087161779091744e+00, 1.3358758543802196e-13,
-	2.2204460492503131e-16, 2.7755575615628914e-14,
-	-2.6822988274943782e-13}, /* L375 */
-{3.0652068713280611e+00, 1.2795320358804929e-13,
-	2.2204460492503131e-16, 8.0491169285323849e-13,
-	-1.0191847366058937e-13}, /* L376 */
-{2.8080672018142567e+00, 1.1753098494438063e-13,
-	2.2204460492503131e-16, -9.3147711766050634e-14,
-	-6.7834626804597065e-14}, /* L377 */
-{2.3955809458579114e+00, 1.0053242960328390e-13,
-	2.2204460492503131e-16, 5.6399329650957952e-14,
-	-1.4210854715202004e-14}, /* L378 */
-{3.7916152337449427e+00, 1.5953904863863499e-13,
-	2.2204460492503131e-16, 1.9806378759312793e-13,
-	7.9047879353311146e-14}, /* L379 */
-{3.4263686591469731e+00, 1.4455103780619538e-13,
-	2.2204460492503131e-16, -2.7644553313166398e-14,
-	-2.4980018054066022e-14}, /* L380 */
-{2.8084422850553752e+00, 1.1879386363489175e-13,
-	2.2204460492503131e-16, -7.5495165674510645e-15,
-	-4.0523140398818214e-14}, /* L381 */
-{2.9503000230005201e+00, 1.2512213487525514e-13,
-	2.2204460492503131e-16, -2.6312285683616210e-14,
-	6.5503158452884236e-14}, /* L382 */
-{2.6947150865654810e+00, 1.1458195503522006e-13,
-	2.2204460492503131e-16, -5.0182080713057076e-14,
-	-2.3314683517128287e-14}, /* L383 */
-{3.1471762115440272e+00, 1.3417045252595017e-13,
-	2.2204460492503131e-16, -2.9176661087149114e-13,
-	1.4410694859634532e-13}, /* L384 */
-{3.0870530025517655e+00, 1.3195000647669985e-13,
-	2.2204460492503131e-16, -7.4384942649885488e-15,
-	-1.0524914273446484e-13}, /* L385 */
-{3.0201168680899886e+00, 1.2942424909567762e-13,
-	2.2204460492503131e-16, 4.4497738826976274e-13,
-	6.8389738316909643e-13}, /* L386 */
-{2.6033929192825904e+00, 1.1185496973098452e-13,
-	2.2204460492503131e-16, -7.8159700933611020e-14,
-	-2.9753977059954195e-14}, /* L387 */
-{2.3428138735867621e+00, 1.0091927293842673e-13,
-	2.2204460492503131e-16, -6.0729199446996063e-14,
-	5.3290705182007514e-14}, /* L388 */
-{3.2172653537863467e+00, 1.3894441153183834e-13,
-	2.2204460492503131e-16, -6.1173288656846125e-14,
-	-4.5519144009631418e-15}, /* L389 */
-{3.0296867078335241e+00, 1.3117978925336615e-13,
-	2.2204460492503131e-16, -3.1197266991966899e-14,
-	3.4194869158454821e-14}, /* L390 */
-{3.0224176943362226e+00, 1.3120060593507787e-13,
-	2.2204460492503131e-16, 5.2402526762307389e-14,
-	9.1926466438962962e-14}, /* L391 */
-{3.4356013734763642e+00, 1.4951798479878597e-13,
-	2.2204460492503131e-16, -1.0769163338864018e-14,
-	2.1516122217235534e-13}, /* L392 */
-{4.1081957456122611e+00, 1.7924550732573152e-13,
-	2.2204460492503131e-16, -8.4376949871511897e-15,
-	-2.9864999362416711e-14}, /* L393 */
-{2.8096810901907747e+00, 1.2290168882600483e-13,
-	2.2204460492503131e-16, 1.2789769243681803e-13,
-	-1.0513812043200232e-13}, /* L394 */
-{4.0789294548925659e+00, 1.7887427650187249e-13,
-	2.2204460492503131e-16, -2.6645352591003757e-14,
-	9.1038288019262836e-15}, /* L395 */
-{2.5404369704987446e+00, 1.1168843627729075e-13,
-	2.2204460492503131e-16, -3.9890313274781874e-13,
-	2.1183055309847987e-13}, /* L396 */
-{3.9142509898791693e+00, 1.7252171913284542e-13,
-	2.2204460492503131e-16, -4.2854608750531042e-14,
-	-6.5503158452884236e-14}, /* L397 */
-{3.6018054819236860e+00, 1.5915047058001619e-13,
-	2.2204460492503131e-16, -1.2090328738167955e-13,
-	6.9722005946459831e-14}, /* L398 */
-{3.0501648506604173e+00, 1.3511414209688155e-13,
-	2.2204460492503131e-16, 9.5257135512838431e-14,
-	1.6120438317557273e-13}, /* L399 */
-{3.1037902324932563e+00, 1.3783418850721318e-13,
-	2.2204460492503131e-16, 7.3274719625260332e-15,
-	1.0658141036401503e-14}, /* L400 */
-{2.9077683649015804e+00, 1.2945200467129325e-13,
-	2.2204460492503131e-16, 3.1086244689504383e-15,
-	1.6431300764452317e-14}, /* L401 */
-{2.7997875356778432e+00, 1.2495560142156137e-13,
-	2.2204460492503131e-16, 3.3084646133829665e-14,
-	4.2188474935755949e-15}, /* L402 */
-{3.3145477446901417e+00, 1.4829804051430528e-13,
-	2.2204460492503131e-16, -2.3092638912203256e-14,
-	-1.1568523916594131e-13}, /* L403 */
-{2.7840612091019641e+00, 1.2487233469471448e-13,
-	2.2204460492503131e-16, -1.6764367671839864e-14,
-	1.3833378886829450e-13}, /* L404 */
-{3.1605239736696809e+00, 1.4210854715202004e-13,
-	2.2204460492503131e-16, -2.6978419498391304e-14,
-	-9.9920072216264089e-15}, /* L405 */
-{3.0129597734580815e+00, 1.3580803148727227e-13,
-	2.2204460492503131e-16, -4.8738790781044372e-14,
-	2.6867397195928788e-14}, /* L406 */
-{2.4189419918830888e+00, 1.0930145677434666e-13,
-	2.2204460492503131e-16, 1.3677947663381929e-13,
-	5.4622972811557702e-14}, /* L407 */
-{3.5331219358110206e+00, 1.6003864899971632e-13,
-	2.2204460492503131e-16, 1.1324274851176597e-14,
-	-3.5527136788005009e-14}, /* L408 */
-{2.8530223234434553e+00, 1.2954914918594795e-13,
-	2.2204460492503131e-16, 1.8429702208777599e-14,
-	8.1490370007486490e-14}, /* L409 */
-{3.8695491046318975e+00, 1.7613688285678109e-13,
-	2.2204460492503131e-16, -1.5154544286133387e-13,
-	1.0480505352461478e-13}, /* L410 */
-{2.9185193223444195e+00, 1.3317125180378753e-13,
-	2.2204460492503131e-16, 2.1982415887578100e-14,
-	-2.3314683517128287e-14}, /* L411 */
-{3.2342541507519655e+00, 1.4793721803130211e-13,
-	2.2204460492503131e-16, -8.3155704544424225e-14,
-	8.6153306710912148e-14}, /* L412 */
-{3.4207348076949251e+00, 1.5684675780391899e-13,
-	2.2204460492503131e-16, -8.7707618945387367e-15,
-	2.3980817331903381e-14}, /* L413 */
-{2.8460416395875563e+00, 1.3081202787645907e-13,
-	2.2204460492503131e-16, -1.1868284133242923e-13,
-	-8.6708418223224726e-14}, /* L414 */
-{2.7798457925364786e+00, 1.2807810367831962e-13,
-	2.2204460492503131e-16, -3.2640556923979602e-14,
-	9.6367358537463588e-14}, /* L415 */
-{2.7470213946415964e+00, 1.2687073613903976e-13,
-	2.2204460492503131e-16, -6.2394533983933798e-14,
-	-2.5424107263916085e-14}, /* L416 */
-{2.6235262234220178e+00, 1.2145839889399213e-13,
-	2.2204460492503131e-16, -8.7818641247849882e-14,
-	-1.6586731987899839e-13}, /* L417 */
-{2.7458395881874389e+00, 1.2742584765135234e-13,
-	2.2204460492503131e-16, 3.7547742692822794e-13,
-	3.9968028886505635e-14}, /* L418 */
-{3.5477665371019338e+00, 1.6503465261052952e-13,
-	2.2204460492503131e-16, -2.0539125955565396e-14,
-	-2.5646151868841116e-14}, /* L419 */
-{4.1205750181967931e+00, 1.9213797219919115e-13,
-	2.2204460492503131e-16, 6.1728400169158704e-14,
-	4.0190073491430667e-14}, /* L420 */
-{3.4008637928984364e+00, 1.5895618155070679e-13,
-	2.2204460492503131e-16, -4.8294701571194310e-14,
-	-2.2981616609740740e-14}, /* L421 */
-{3.8163871133290233e+00, 1.7880141811588146e-13,
-	2.2204460492503131e-16, 9.3924867883288243e-14,
-	-7.7937656328685989e-14}, /* L422 */
-{3.4001506354855526e+00, 1.5967782651671314e-13,
-	2.2204460492503131e-16, -1.7641443861293737e-13,
-	4.4186876380081230e-14}, /* L423 */
-{3.1321053471373599e+00, 1.4743761767022079e-13,
-	2.2204460492503131e-16, -2.0161650127192843e-13,
-	-1.0125233984581428e-13}, /* L424 */
-{3.9518023999635195e+00, 1.8646195698579504e-13,
-	2.2204460492503131e-16, 2.8421709430404007e-14,
-	-1.1213252548714081e-14}, /* L425 */
-{3.3518512203012865e+00, 1.5852597012866454e-13,
-	2.2204460492503131e-16, -1.4876988529977098e-14,
-	-4.6074255521943996e-14}, /* L426 */
-{4.1159643184800112e+00, 1.9512169657787126e-13,
-	2.2204460492503131e-16, 3.5971225997855072e-14,
-	-8.3155704544424225e-14}, /* L427 */
-{3.7219981189256077e+00, 1.7685852782278744e-13,
-	2.2204460492503131e-16, 5.3290705182007514e-15,
-	-1.6397994073713562e-13}, /* L428 */
-{3.4720610900995896e+00, 1.6536771951791707e-13,
-	2.2204460492503131e-16, -1.0251799409388695e-12,
-	-1.5043521983670871e-13}, /* L429 */
-{2.9471211342319137e+00, 1.4069301279562296e-13,
-	2.2204460492503131e-16, -1.3877787807814457e-14,
-	7.5273121069585613e-14}, /* L430 */
-{2.8074513726880035e+00, 1.3433698597964394e-13,
-	2.2204460492503131e-16, 2.9909408283401717e-12,
-	2.9931612743894220e-12}, /* L431 */
-{3.4016528168757301e+00, 1.6314727346866675e-13,
-	2.2204460492503131e-16, 4.0190073491430667e-14,
-	-1.1435297153639112e-14}, /* L432 */
-{3.2355966824424964e+00, 1.5554224574998443e-13,
-	2.2204460492503131e-16, 4.2010839251815923e-13,
-	-2.5479618415147343e-13}, /* L433 */
-{3.3554467523147924e+00, 1.6167622796103842e-13,
-	2.2204460492503131e-16, -3.4083846855992306e-14,
-	-1.8318679906315083e-14}, /* L434 */
-{3.5448613987000157e+00, 1.7119639039719914e-13,
-	2.2204460492503131e-16, 7.7271522513910895e-14,
-	-6.8833827526759706e-14}, /* L435 */
-{3.7787057677774731e+00, 1.8290924330699454e-13,
-	2.2204460492503131e-16, -1.4244161405940758e-13,
-	-1.6431300764452317e-14}, /* L436 */
-{2.9176479671478339e+00, 1.4155343563970746e-13,
-	2.2204460492503131e-16, 4.5297099404706387e-14,
-	1.0436096431476471e-14}, /* L437 */
-{3.0650977294400357e+00, 1.4904744105592727e-13,
-	2.2204460492503131e-16, 2.6245672302138701e-13,
-	1.1257661469699087e-13}, /* L438 */
-{3.3363074496354850e+00, 1.6260603974416199e-13,
-	2.2204460492503131e-16, -1.8873791418627661e-14,
-	1.4432899320127035e-14}, /* L439 */
-{3.5079880062308026e+00, 1.7136292385089291e-13,
-	2.2204460492503131e-16, 3.4261482539932331e-13,
-	-6.2172489379008766e-15}, /* L440 */
-{4.0845060800503443e+00, 1.9997892231060632e-13,
-	2.2204460492503131e-16, -5.0515147620444623e-14,
-	9.9698027611339057e-14}, /* L441 */
-{3.3948287615052553e+00, 1.6658896484500474e-13,
-	2.2204460492503131e-16, -2.1982415887578100e-14,
-	2.2870594307278225e-14}, /* L442 */
-{3.2754262763595272e+00, 1.6109336087311021e-13,
-	2.2204460492503131e-16, -3.4416913763379853e-15,
-	-5.1958437552457326e-14}, /* L443 */
-{2.9069815569300879e+00, 1.4329509800958817e-13,
-	2.2204460492503131e-16, -3.6082248300317588e-14,
-	1.3788969965844444e-13}, /* L444 */
-{2.7831726145768565e+00, 1.3750112159982564e-13,
-	2.2204460492503131e-16, -6.0174087934683484e-14,
-	-6.1173288656846125e-14}, /* L445 */
-{4.1408746993324366e+00, 2.0503737596655469e-13,
-	2.2204460492503131e-16, -4.1633363423443370e-14,
-	-8.5043083686286991e-14}, /* L446 */
-{3.5342898637817606e+00, 1.7539442120906301e-13,
-	2.2204460492503131e-16, 3.2418512319054571e-13,
-	-3.8113956435381624e-13}, /* L447 */
-{3.0669935400880073e+00, 1.5254464358349651e-13,
-	2.2204460492503131e-16, -2.0095036745715333e-14,
-	2.5535129566378600e-14}, /* L448 */
-{3.4465807592355593e+00, 1.7180701306074297e-13,
-	2.2204460492503131e-16, 8.0158102377936302e-14,
-	1.1635137298071641e-13}, /* L449 */
-{3.7383689915903049e+00, 1.8676726831756696e-13,
-	2.2204460492503131e-16, 2.1316282072803006e-14,
-	5.5733195836182858e-14}, /* L450 */
-{2.5964770945342641e+00, 1.3000711618360583e-13,
-	2.2204460492503131e-16, -6.3504757008558954e-14,
-	1.0436096431476471e-14}, /* L451 */
-{3.2686982137223382e+00, 1.6402851299446297e-13,
-	2.2204460492503131e-16, -6.3171690101171407e-14,
-	7.3496764230185363e-14}, /* L452 */
-{3.1611780556178743e+00, 1.5898393712632242e-13,
-	2.2204460492503131e-16, 3.5527136788005009e-14,
-	-1.3988810110276972e-14}, /* L453 */
-{3.5870386200857056e+00, 1.8079981956020674e-13,
-	2.2204460492503131e-16, -1.1768364061026659e-14,
-	-5.5733195836182858e-14}, /* L454 */
-{4.3005904715297234e+00, 2.1724289034352751e-13,
-	2.2204460492503131e-16, 8.2156503822261584e-15,
-	-8.9594998087250133e-14}, /* L455 */
-{2.9528790430907952e+00, 1.4949153026577733e-13,
-	2.2204460492503131e-16, -7.2719608112947753e-14,
-	-5.9396931817445875e-14}, /* L456 */
-{3.6603193776794329e+00, 1.8571255644417306e-13,
-	2.2204460492503131e-16, -7.6605388699135801e-15,
-	3.4194869158454821e-14}, /* L457 */
-{4.7243900415343143e+00, 2.4022450695326825e-13,
-	2.2204460492503131e-16, -1.3855583347321954e-13,
-	-1.5176748746625890e-13}, /* L458 */
-{3.5926268606948866e+00, 1.8307577676068831e-13,
-	2.2204460492503131e-16, -2.7644553313166398e-14,
-	3.7969627442180354e-14}, /* L459 */
-{4.4978689896627992e+00, 2.2970514379494489e-13,
-	2.2204460492503131e-16, -3.0420110874729289e-13,
-	5.8086868648388190e-13}, /* L460 */
-{2.7896144611003399e+00, 1.4277468096679513e-13,
-	2.2204460492503131e-16, 6.4392935428259079e-14,
-	2.8199664825478976e-14}, /* L461 */
-{2.6002683090286216e+00, 1.3337247972700084e-13,
-	2.2204460492503131e-16, -5.7287508070658077e-14,
-	-2.5490720645393594e-13}, /* L462 */
-{4.2818982940877479e+00, 2.2010171463193728e-13,
-	2.2204460492503131e-16, 1.0658141036401503e-13,
-	4.6629367034256575e-15}, /* L463 */
-{2.6984362992440358e+00, 1.3900686157697351e-13,
-	2.2204460492503131e-16, -9.1393559387142886e-13,
-	-8.1934459217336553e-13}, /* L464 */
-{2.8634681732717886e+00, 1.4782619572883959e-13,
-	2.2204460492503131e-16, -2.4424906541753444e-15,
-	1.3322676295501878e-14}, /* L465 */
-{4.2065851886922889e+00, 2.1763146840214631e-13,
-	2.2204460492503131e-16, 5.8841820305133297e-14,
-	1.2656542480726785e-14}, /* L466 */
-{3.8931045860150277e+00, 2.0184548477075737e-13,
-	2.2204460492503131e-16, 7.0610184366159956e-14,
-	-5.3845816694320092e-14}, /* L467 */
-{4.0983296900140092e+00, 2.1294077612310502e-13,
-	2.2204460492503131e-16, -1.8496315590255108e-13,
-	1.6742163211347361e-13}, /* L468 */
-{2.7106655976936054e+00, 1.4114154723438022e-13,
-	2.2204460492503131e-16, 1.1612932837579137e-13,
-	2.9753977059954195e-14}, /* L469 */
-{2.8872615825615484e+00, 1.5065726444163374e-13,
-	2.2204460492503131e-16, -5.6954441163270531e-14,
-	1.2612133559741778e-13}, /* L470 */
-{4.3949463795672923e+00, 2.2981616609740740e-13,
-	2.2204460492503131e-16, 1.5809575870662229e-12,
-	-6.8556271770603416e-13}, /* L471 */
-{3.3652333703068122e+00, 1.7634504967389830e-13,
-	2.2204460492503131e-16, -2.0983215165415459e-14,
-	-9.9920072216264089e-16}, /* L472 */
-{3.1363935527024820e+00, 1.6470158570314197e-13,
-	2.2204460492503131e-16, -4.2832404290038539e-13,
-	2.5934809855243657e-13}, /* L473 */
-{3.5095271463458029e+00, 1.8468560014639479e-13,
-	2.2204460492503131e-16, 3.4194869158454821e-14,
-	3.3084646133829665e-14}, /* L474 */
-{3.1543064029916388e+00, 1.6634263411141603e-13,
-	2.2204460492503131e-16, -1.1335377081422848e-13,
-	-1.5565326805244695e-13}, /* L475 */
-{3.2379510530979623e+00, 1.7111312367035225e-13,
-	2.2204460492503131e-16, 7.8581585682968580e-13,
-	-1.4657164371101317e-12}, /* L476 */
-{3.4748759122362918e+00, 1.8401946633161970e-13,
-	2.2204460492503131e-16, 3.9745984281580604e-14,
-	5.0626169922907138e-14}, /* L477 */
-{3.3938608240648978e+00, 1.8010593016981602e-13,
-	2.2204460492503131e-16, -2.4757973449140991e-14,
-	-1.3988810110276972e-14}, /* L478 */
-{2.8485396967577867e+00, 1.5148299281619870e-13,
-	2.2204460492503131e-16, -7.2719608112947753e-14,
-	-4.6851411639181606e-14}, /* L479 */
-{3.2906563877714197e+00, 1.7535972673954348e-13,
-	2.2204460492503131e-16, -2.6090241078691179e-14,
-	4.2188474935755949e-14}, /* L480 */
-{4.2973382872557266e+00, 2.2948309919001986e-13,
-	2.2204460492503131e-16, 2.1738166822160565e-13,
-	-1.9984014443252818e-13}, /* L481 */
-{4.7407091194431139e+00, 2.5368596112684827e-13,
-	2.2204460492503131e-16, -1.7585932710062480e-13,
-	-2.2382096176443156e-13}, /* L482 */
-{3.9701465647087679e+00, 2.1289220386577767e-13,
-	2.2204460492503131e-16, -2.5535129566378600e-14,
-	-1.5099033134902129e-14}, /* L483 */
-{4.2218894438472043e+00, 2.2686019729434292e-13,
-	2.2204460492503131e-16, -9.9698027611339057e-14,
-	-6.6280314570121845e-14}, /* L484 */
-{4.2856078883776236e+00, 2.3075985566833879e-13,
-	2.2204460492503131e-16, 2.6645352591003757e-15,
-	5.2180482157382357e-14}, /* L485 */
-{5.0041629583105456e+00, 2.7000623958883807e-13,
-	2.2204460492503131e-16, -3.5638159090467525e-14,
-	1.1102230246251565e-15}, /* L486 */
-{3.9761672899342675e+00, 2.1498081093085375e-13,
-	2.2204460492503131e-16, 3.6415315207705135e-14,
-	1.3988810110276972e-14}, /* L487 */
-{3.5481895819436158e+00, 1.9223511671384585e-13,
-	2.2204460492503131e-16, 2.0228263508670352e-13,
-	-2.6578739209526248e-13}, /* L488 */
-{3.8568875044854569e+00, 2.0938806244430452e-13,
-	2.2204460492503131e-16, 1.7164047960704920e-13,
-	2.6689761511988763e-13}, /* L489 */
-{3.4296245500450815e+00, 1.8657297928825756e-13,
-	2.2204460492503131e-16, 3.0020430585864233e-13,
-	3.8746783559417963e-13}, /* L490 */
-{3.9857813990434323e+00, 2.1727064591914313e-13,
-	2.2204460492503131e-16, 9.9920072216264089e-15,
-	-4.0634162701280729e-14}, /* L491 */
-{3.5584689016346811e+00, 1.9437229603624928e-13,
-	2.2204460492503131e-16, 5.7531757136075612e-13,
-	-2.8688162956314045e-13}, /* L492 */
-{4.4315838526046063e+00, 2.4255597530498108e-13,
-	2.2204460492503131e-16, -3.0531133177191805e-14,
-	4.2188474935755949e-14}, /* L493 */
-{4.0223055730475217e+00, 2.2060131499301860e-13,
-	2.2204460492503131e-16, -1.9417800700693988e-13,
-	1.8274270985330077e-13}, /* L494 */
-{4.2937278242070258e+00, 2.3596402609626921e-13,
-	2.2204460492503131e-16, 4.1966430330830917e-14,
-	-5.9063864910058328e-14}, /* L495 */
-{3.7994314019880351e+00, 2.0922152899061075e-13,
-	2.2204460492503131e-16, 1.1990408665951691e-14,
-	3.5305092183079978e-14}, /* L496 */
-{3.9527540009447519e+00, 2.1810331318761200e-13,
-	2.2204460492503131e-16, -6.8833827526759706e-14,
-	2.2204460492503131e-16}, /* L497 */
-{3.7806585515930990e+00, 2.0902723996130135e-13,
-	2.2204460492503131e-16, -9.9809049913801573e-14,
-	-4.4408920985006262e-15}, /* L498 */
-{4.0491368188907284e+00, 2.2432056212551288e-13,
-	2.2204460492503131e-16, 4.1522341120980855e-14,
-	1.7097434579227411e-14}, /* L499 */
-{3.6490348061458717e+00, 2.0256019084285981e-13,
-	2.2204460492503131e-16, -1.2634338020234281e-13,
-	9.2814644858663087e-14}, /* L500 */
-{3.7470417290047706e+00, 2.0841661729775751e-13,
-	2.2204460492503131e-16, -1.8318679906315083e-13,
-	1.1390888232654106e-13}, /* L501 */
-{3.7627350938529784e+00, 2.0970725156388426e-13,
-	2.2204460492503131e-16, 5.3290705182007514e-14,
-	5.1114668053742207e-13}, /* L502 */
-{3.8201159608551989e+00, 2.1332935418172383e-13,
-	2.2204460492503131e-16, -4.3942627314663696e-13,
-	-1.6875389974302379e-14}, /* L503 */
-{3.1032042029420688e+00, 1.7363888105137448e-13,
-	2.2204460492503131e-16, 2.8865798640254070e-15,
-	1.9984014443252818e-14}, /* L504 */
-{3.4349337540531777e+00, 1.9258206140904122e-13,
-	2.2204460492503131e-16, 2.4646951146678475e-14,
-	7.4384942649885488e-14}, /* L505 */
-{4.4323545307677756e+00, 2.4899526884780698e-13,
-	2.2204460492503131e-16, -4.5885517607757720e-13,
-	-2.7644553313166398e-14}, /* L506 */
-{3.6381017630030588e+00, 2.0478063689211012e-13,
-	2.2204460492503131e-16, 7.0832228971084987e-13,
-	3.2152058793144533e-13}, /* L507 */
-{4.3248444019275958e+00, 2.4391599851014689e-13,
-	2.2204460492503131e-16, 1.1368683772161603e-13,
-	-4.7928327973068008e-13}, /* L508 */
-{3.7426683122308577e+00, 2.1149748619109232e-13,
-	2.2204460492503131e-16, 1.0769163338864018e-13,
-	-1.8007817459420039e-13}, /* L509 */
-{4.0175628311364857e+00, 2.2747775885179067e-13,
-	2.2204460492503131e-16, 2.7289281945286348e-13,
-	2.2204460492503131e-14}, /* L510 */
-{3.9584526303127823e+00, 2.2457036230605354e-13,
-	2.2204460492503131e-16, 1.5321077739827160e-14,
-	3.8191672047105385e-14}, /* L511 */
-{3.4482750787088032e+00, 1.9600987499757139e-13,
-	2.2204460492503131e-16, -1.0569323194431490e-13,
-	3.0486724256206799e-13}, /* L512 */
-{3.6130948921851922e+00, 2.0577983761427276e-13,
-	2.2204460492503131e-16, 4.8183679268731794e-14,
-	-7.0832228971084987e-14}, /* L513 */
-{4.5914834843654369e+00, 2.6201263381153694e-13,
-	2.2204460492503131e-16, 1.1102230246251565e-14,
-	-6.6613381477509392e-14}, /* L514 */
-{3.7922691820898811e+00, 2.1682655670929307e-13,
-	2.2204460492503131e-16, 2.4424906541753444e-14,
-	-1.8762769116165146e-14}, /* L515 */
-{4.7948616270350248e+00, 2.7468305408007154e-13,
-	2.2204460492503131e-16, -5.1958437552457326e-14,
-	-2.2204460492503131e-16}, /* L516 */
-{3.3007789020518277e+00, 1.8945955915228296e-13,
-	2.2204460492503131e-16, 5.1070259132757201e-15,
-	6.1950444774083735e-14}, /* L517 */
-{3.5608164287359032e+00, 2.0478063689211012e-13,
-	2.2204460492503131e-16, 2.2604140781368187e-13,
-	1.3322676295501878e-15}, /* L518 */
-{4.2230317108763122e+00, 2.4333313142221868e-13,
-	2.2204460492503131e-16, 4.6185277824406512e-14,
-	-2.9976021664879227e-15}, /* L519 */
-{4.2031316313108409e+00, 2.4265311981963578e-13,
-	2.2204460492503131e-16, 2.1094237467877974e-14,
-	1.0014211682118912e-13}, /* L520 */
-{4.0969354464748733e+00, 2.3697710460623966e-13,
-	2.2204460492503131e-16, -6.6946448384896939e-13,
-	2.5091040356528538e-13}, /* L521 */
-{3.2538365512224146e+00, 1.8857138073258284e-13,
-	2.2204460492503131e-16, -3.3395508580724709e-13,
-	-2.6123547769429933e-13}, /* L522 */
-{4.0798343526533376e+00, 2.3689383787939278e-13,
-	2.2204460492503131e-16, 2.2870594307278225e-13,
-	3.1419311596891930e-13}, /* L523 */
-{4.2576403050934264e+00, 2.4769075679387242e-13,
-	2.2204460492503131e-16, 2.5801583092288638e-13,
-	-1.1635137298071641e-13}, /* L524 */
-{3.6419105077699592e+00, 2.1227464230832993e-13,
-	2.2204460492503131e-16, -3.4761082901013651e-13,
-	-2.5857094243519896e-13}, /* L525 */
-{3.8193976608706248e+00, 2.2304380564719395e-13,
-	2.2204460492503131e-16, -8.4598994476436928e-14,
-	-1.2767564783189300e-14}, /* L526 */
-{3.7707602185948801e+00, 2.2062213167473033e-13,
-	2.2204460492503131e-16, -5.6010751592339147e-13,
-	-3.4594549447319878e-13}, /* L527 */
-{2.6875042400933435e+00, 1.5754064719430971e-13,
-	2.2204460492503131e-16, -1.3000711618360583e-13,
-	-1.3233858453531866e-13}, /* L528 */
-{3.4248636264941545e+00, 2.0114465648646274e-13,
-	2.2204460492503131e-16, 1.1990408665951691e-14,
-	1.6808776592824870e-13}, /* L529 */
-{4.7217055626738080e+00, 2.7783331191244542e-13,
-	2.2204460492503131e-16, 2.6112445539183682e-13,
-	4.9049653227939416e-13}, /* L530 */
-{3.9180852776255568e+00, 2.3098190027326382e-13,
-	2.2204460492503131e-16, 1.9537704787353505e-12,
-	1.4488410471358293e-12}, /* L531 */
-{4.4924882908376471e+00, 2.6534330288541241e-13,
-	2.2204460492503131e-16, 2.8865798640254070e-14,
-	-2.1316282072803006e-14}, /* L532 */
-{4.1414523595111215e+00, 2.4506958962167147e-13,
-	2.2204460492503131e-16, -5.2724491439448684e-13,
-	-1.3111733920823099e-13}, /* L533 */
-{4.1638642472613547e+00, 2.4685808952540356e-13,
-	2.2204460492503131e-16, 5.0404125317982107e-14,
-	-1.0758061108617767e-13}, /* L534 */
-{4.0196325100246018e+00, 2.3875346144563991e-13,
-	2.2204460492503131e-16, 3.1397107136399427e-13,
-	4.7517545453956700e-14}, /* L535 */
-{3.3936620706212892e+00, 2.0194956817931597e-13,
-	2.2204460492503131e-16, 5.3290705182007514e-15,
-	-2.0095036745715333e-14}, /* L536 */
-{5.1992633239527803e+00, 3.0997426847534371e-13,
-	2.2204460492503131e-16, -3.4372504842394846e-13,
-	4.6740389336719090e-13}, /* L537 */
-{4.0845789349757995e+00, 2.4397150966137815e-13,
-	2.2204460492503131e-16, 1.7985612998927536e-14,
-	-8.0602191587786365e-14}, /* L538 */
-{4.2013053297279059e+00, 2.5141000392636670e-13,
-	2.2204460492503131e-16, 1.9317880628477724e-14,
-	-2.8643754035329039e-14}, /* L539 */
-{2.8611156251133827e+00, 1.7152945730458669e-13,
-	2.2204460492503131e-16, 7.2164496600635175e-14,
-	2.8643754035329039e-14}, /* L540 */
-{3.7865124435089976e+00, 2.2742918659446332e-13,
-	2.2204460492503131e-16, 4.6629367034256575e-15,
-	5.9952043329758453e-15}, /* L541 */
-{3.8708548155620677e+00, 2.3292479056635784e-13,
-	2.2204460492503131e-16, -1.6209256159527285e-14,
-	-2.4980018054066022e-14}, /* L542 */
-{4.0577872491350524e+00, 2.4462376568834543e-13,
-	2.2204460492503131e-16, 8.3577589293781784e-13,
-	-8.9217522258877580e-13}, /* L543 */
-{4.6378749642641965e+00, 2.8010926911292700e-13,
-	2.2204460492503131e-16, 5.8997251528580819e-13,
-	-3.4339198151656092e-13}, /* L544 */
-{4.3266123307146982e+00, 2.6179058920661191e-13,
-	2.2204460492503131e-16, -1.3322676295501878e-14,
-	4.9960036108132044e-14}, /* L545 */
-{3.5796759773510858e+00, 2.1699309016298685e-13,
-	2.2204460492503131e-16, 4.3298697960381105e-14,
-	5.5733195836182858e-14}, /* L546 */
-{5.1325492311101639e+00, 3.1169511416351270e-13,
-	2.2204460492503131e-16, 4.2810199829546036e-13,
-	1.1435297153639112e-13}, /* L547 */
-{3.7408818144226443e+00, 2.2759572004815709e-13,
-	2.2204460492503131e-16, -1.2267964422107980e-13,
-	3.4283687000424834e-13}, /* L548 */
-{4.3528074139020729e+00, 2.6530860841589288e-13,
-	2.2204460492503131e-16, 1.7474910407599964e-13,
-	-2.0217161278424101e-13}, /* L549 */
-{4.9263714087347372e+00, 3.0081492852218616e-13,
-	2.2204460492503131e-16, 1.0147438445073931e-13,
-	1.1568523916594131e-13}, /* L550 */
-{3.6824014540338030e+00, 2.2526425169644426e-13,
-	2.2204460492503131e-16, -6.3504757008558954e-14,
-	7.6827433304060833e-14}, /* L551 */
-{4.2056225772699012e+00, 2.5773827516673009e-13,
-	2.2204460492503131e-16, -4.9849013805669529e-14,
-	5.9952043329758453e-14}, /* L552 */
-{3.5741466877700083e+00, 2.1943558081716219e-13,
-	2.2204460492503131e-16, -4.3376413572104866e-13,
-	-5.0648374383399641e-13}, /* L553 */
-{5.1525352050029385e+00, 3.1691316237925093e-13,
-	2.2204460492503131e-16, -5.5511151231257827e-16,
-	-6.6280314570121845e-14}, /* L554 */
-{3.6936995212701897e+00, 2.2759572004815709e-13,
-	2.2204460492503131e-16, -4.0301095793893182e-14,
-	3.3528735343679728e-14}, /* L555 */
-{4.3682622875204240e+00, 2.6964541710583489e-13,
-	2.2204460492503131e-16, 4.7073456244106637e-14,
-	-6.9722005946459831e-14}, /* L556 */
-{4.1059310740014645e+00, 2.5390800573177330e-13,
-	2.2204460492503131e-16, 3.6637359812630166e-13,
-	-4.4975134727565091e-13}, /* L557 */
-{4.7016203209999583e+00, 2.9126701051040982e-13,
-	2.2204460492503131e-16, 2.6534330288541241e-13,
-	-2.7255975254547593e-13}, /* L558 */
-{5.0485600671172648e+00, 3.1332055006050297e-13,
-	2.2204460492503131e-16, 8.1490370007486490e-14,
-	-4.2521541843143495e-14}, /* L559 */
-{3.5267912785288869e+00, 2.1926904736346842e-13,
-	2.2204460492503131e-16, -2.1027624086400465e-13,
-	-2.7866597918091429e-14}, /* L560 */
-{4.4986701991871820e+00, 2.8019253583977388e-13,
-	2.2204460492503131e-16, 1.1679546219056647e-13,
-	-1.6986412276764895e-13}, /* L561 */
-{3.5315892017067032e+00, 2.2035151481247794e-13,
-	2.2204460492503131e-16, -1.1635137298071641e-13,
-	1.9340085088970227e-13}, /* L562 */
-{4.0519602116335465e+00, 2.5326962749261384e-13,
-	2.2204460492503131e-16, 4.1300296516055823e-14,
-	-2.0428103653102880e-14}, /* L563 */
-{4.5077365001846319e+00, 2.8225859149966226e-13,
-	2.2204460492503131e-16, -1.2645440250480533e-13,
-	-1.5198953207118393e-13}, /* L564 */
-{4.5657151679584773e+00, 2.8639590698986694e-13,
-	2.2204460492503131e-16, -1.3622436512150671e-13,
-	-3.3761882178851010e-13}, /* L565 */
-{3.4682033516461410e+00, 2.1793677973391823e-13,
-	2.2204460492503131e-16, -1.9362289549462730e-13,
-	-6.3016258877723885e-13}, /* L566 */
-{3.6383434827446650e+00, 2.2903207108626589e-13,
-	2.2204460492503131e-16, 3.8857805861880479e-14,
-	2.6201263381153694e-14}, /* L567 */
-{3.3292306046620355e+00, 2.0994317395661710e-13,
-	2.2204460492503131e-16, 1.2767564783189300e-13,
-	1.7719159473017498e-13}, /* L568 */
-{4.2987765537377243e+00, 2.7156055182331329e-13,
-	2.2204460492503131e-16, -1.6486811915683575e-13,
-	8.9706020389712648e-14}, /* L569 */
-{3.9824624235088586e+00, 2.5202062658991053e-13,
-	2.2204460492503131e-16, -1.8862689188381410e-13,
-	-9.1038288019262836e-15}, /* L570 */
-{4.6795170151308154e+00, 2.9665159217984183e-13,
-	2.2204460492503131e-16, -1.6298074001497298e-13,
-	-1.6020518245341009e-13}, /* L571 */
-{4.3138179947530322e+00, 2.7394753132625738e-13,
-	2.2204460492503131e-16, 1.3322676295501878e-14,
-	5.2846615972157451e-14}, /* L572 */
-{4.7460807863420671e+00, 3.0192515154681132e-13,
-	2.2204460492503131e-16, 1.2829737272568309e-12,
-	2.4802382370125997e-13}, /* L573 */
-{3.8571489425866452e+00, 2.4580337765200966e-13,
-	2.2204460492503131e-16, -3.1641356201816961e-14,
-	-4.1466829969749597e-13}, /* L574 */
-{4.0264737439010414e+00, 2.5704091632938741e-13,
-	2.2204460492503131e-16, 6.9944050551384862e-14,
-	3.2196467714129540e-14}, /* L575 */
-{4.9314313914632564e+00, 3.1535885014477572e-13,
-	2.2204460492503131e-16, -2.9420910152566648e-14,
-	-6.5503158452884236e-15}, /* L576 */
-{3.8318951270626589e+00, 2.4547031074462211e-13,
-	2.2204460492503131e-16, -1.3611334281904419e-13,
-	-2.6900703886667543e-13}, /* L577 */
-{4.6911838718611856e+00, 3.0103697312711120e-13,
-	2.2204460492503131e-16, 2.5763835509451383e-12,
-	1.4515055823949297e-12}, /* L578 */
-{4.9956900924434926e+00, 3.2113200987282653e-13,
-	2.2204460492503131e-16, -5.8508753397745750e-14,
-	-7.5384143372048129e-14}, /* L579 */
-{3.4931089593791089e+00, 2.2493118478905672e-13,
-	2.2204460492503131e-16, 1.2168044349891716e-13,
-	-1.8984813721090177e-14}, /* L580 */
-{4.2082682573108157e+00, 2.7144952952085077e-13,
-	2.2204460492503131e-16, 2.7355895326763857e-13,
-	-3.6737279884846430e-13}, /* L581 */
-{4.7281002430629755e+00, 3.0550562080122745e-13,
-	2.2204460492503131e-16, -3.5527136788005009e-15,
-	9.5479180117763462e-15}, /* L582 */
-{4.1320819909077322e+00, 2.6745272663220021e-13,
-	2.2204460492503131e-16, -6.5503158452884236e-13,
-	-4.9871218266162032e-13}, /* L583 */
-{4.4422159126112470e+00, 2.8801960816338124e-13,
-	2.2204460492503131e-16, 7.9625195326116227e-13,
-	1.3131717935266352e-12}, /* L584 */
-{4.9991531863442376e+00, 3.2468472355162703e-13,
-	2.2204460492503131e-16, -4.0079051188968151e-14,
-	9.6811447747313650e-14}, /* L585 */
-{5.7367837949917355e+00, 3.7322922530336200e-13,
-	2.2204460492503131e-16, 1.8629542353210127e-13,
-	-1.7652546091539989e-14}, /* L586 */
-{4.6771794405476221e+00, 3.0481173141083673e-13,
-	2.2204460492503131e-16, 6.8833827526759706e-15,
-	5.2180482157382357e-14}, /* L587 */
-{4.8469464225722128e+00, 3.1641356201816961e-13,
-	2.2204460492503131e-16, 2.7755575615628914e-14,
-	2.4202861936828413e-14}, /* L588 */
-{3.7822640318199698e+00, 2.4732993431086925e-13,
-	2.2204460492503131e-16, 3.7081449022480228e-13,
-	-4.4630965589931293e-14}, /* L589 */
-{4.7262786431246555e+00, 3.0958569041672490e-13,
-	2.2204460492503131e-16, -5.7176485768195562e-14,
-	2.2426505097428162e-14}, /* L590 */
-{5.2368948951128393e+00, 3.4361402612148595e-13,
-	2.2204460492503131e-16, -3.9968028886505635e-15,
-	-2.6534330288541241e-14}, /* L591 */
-{5.3674071168447686e+00, 3.5277336607464349e-13,
-	2.2204460492503131e-16, 1.2878587085651816e-14,
-	5.5733195836182858e-14}, /* L592 */
-{3.8265237437090223e+00, 2.5192348207525583e-13,
-	2.2204460492503131e-16, -8.8151708155237429e-14,
-	7.3274719625260332e-14}, /* L593 */
-{4.3501752134710729e+00, 2.8688162956314045e-13,
-	2.2204460492503131e-16, -4.9626969200744497e-14,
-	-4.8849813083506888e-15}, /* L594 */
-{4.7840411612590721e+00, 3.1602498395955081e-13,
-	2.2204460492503131e-16, 1.8363088827300089e-13,
-	2.8155255904493970e-13}, /* L595 */
-{5.3028607153457576e+00, 3.5088598693278072e-13,
-	2.2204460492503131e-16, 3.6237679523765109e-13,
-	-6.1373128801278654e-13}, /* L596 */
-{4.3157522026187944e+00, 2.8604896229467158e-13,
-	2.2204460492503131e-16, 1.0604850331219495e-12,
-	4.8694381860059366e-13}, /* L597 */
-{4.9682352631687854e+00, 3.2984726061613401e-13,
-	2.2204460492503131e-16, -8.7041485130612273e-14,
-	1.7741363933510002e-13}, /* L598 */
-{3.8572681891448370e+00, 2.5651702983964242e-13,
-	2.2204460492503131e-16, 1.7985612998927536e-14,
-	1.8363088827300089e-13}, /* L599 */
-{4.7225074506925866e+00, 3.1458169402753811e-13,
-	2.2204460492503131e-16, 3.7112535267169733e-12,
-	4.2388315080188477e-13}, /* L600 */
-{6.0170644016469739e+00, 4.0148440128007223e-13,
-	2.2204460492503131e-16, -1.2723155862204294e-13,
-	3.3750779948604759e-14}, /* L601 */
-{4.7383795687956880e+00, 3.1669111777432590e-13,
-	2.2204460492503131e-16, 5.6177285046032921e-14,
-	-5.5966342671354141e-13}, /* L602 */
-{3.2073019091364419e+00, 2.1471713296250527e-13,
-	2.2204460492503131e-16, 3.5791369867865797e-12,
-	-8.1187279121763822e-12}, /* L603 */
-{3.9147412756285060e+00, 2.6251223417261826e-13,
-	2.2204460492503131e-16, 2.5721647034515627e-12,
-	-1.8585133432225120e-13}, /* L604 */
-{4.1876099126076411e+00, 2.8127500328878341e-13,
-	2.2204460492503131e-16, -1.4432899320127035e-14,
-	-6.4614980033184111e-14}, /* L605 */
-{4.1939010061472404e+00, 2.8216318170848353e-13,
-	2.2204460492503131e-16, -3.3536506904852104e-12,
-	2.5079938126282286e-12}, /* L606 */
-{3.9674691919587990e+00, 2.6736945990535332e-13,
-	2.2204460492503131e-16, 3.9301895071730542e-14,
-	1.9317880628477724e-14}, /* L607 */
-{4.1801052791859110e+00, 2.8216318170848353e-13,
-	2.2204460492503131e-16, 9.3258734068513149e-14,
-	-1.9706458687096529e-13}, /* L608 */
-{5.1695483859186648e+00, 3.4952596372761491e-13,
-	2.2204460492503131e-16, -2.4091839634365897e-14,
-	8.6153306710912148e-14}, /* L609 */
-{4.3811544531626838e+00, 2.9670710333107309e-13,
-	2.2204460492503131e-16, 7.1720407390785113e-14,
-	3.1530333899354446e-14}, /* L610 */
-{5.0167836924298115e+00, 3.4031111262322611e-13,
-	2.2204460492503131e-16, 2.2204460492503131e-14,
-	-9.7033492352238682e-14}, /* L611 */
-{3.3041310299420852e+00, 2.2450097336701447e-13,
-	2.2204460492503131e-16, -3.5094149808401198e-13,
-	-4.4964032497318840e-14}, /* L612 */
-{4.9983765645898623e+00, 3.4017233474514796e-13,
-	2.2204460492503131e-16, -1.8591794770372871e-12,
-	-1.6487922138708200e-12}, /* L613 */
-{5.8326639253624437e+00, 3.9759862069388419e-13,
-	2.2204460492503131e-16, -9.7477581562088744e-14,
-	8.2822637637036678e-14}, /* L614 */
-{8.5264362164440506e+00, 5.8217319853781646e-13,
-	2.2204460492503131e-16, 3.6814995496570191e-13,
-	-1.6675549829869851e-13}, /* L615 */
-{4.6903483090863878e+00, 3.2077118738982335e-13,
-	2.2204460492503131e-16, -1.9961809982760315e-13,
-	-1.4588330543574557e-13}, /* L616 */
-{5.5998872790648981e+00, 3.8359593279579940e-13,
-	2.2204460492503131e-16, 3.5571545708990016e-13,
-	9.1260332624187868e-14}, /* L617 */
-{4.4508565367102459e+00, 3.0538072071095712e-13,
-	2.2204460492503131e-16, 1.2878587085651816e-14,
-	-2.4091839634365897e-13}, /* L618 */
-{5.7932240026869808e+00, 3.9812597663058114e-13,
-	2.2204460492503131e-16, -2.3936408410918375e-13,
-	-2.9509727994536661e-13}, /* L619 */
-{4.2258131187057746e+00, 2.9087843245179101e-13,
-	2.2204460492503131e-16, 3.5638159090467525e-13,
-	5.8286708792820718e-13}, /* L620 */
-{4.2014080979914290e+00, 2.8966499338034524e-13,
-	2.2204460492503131e-16, 4.5674575233078940e-13,
-	4.3054448894963571e-13}, /* L621 */
-{4.2445806504467534e+00, 2.9311275628884914e-13,
-	2.2204460492503131e-16, 8.3488327362601922e-11,
-	-7.2851724652878147e-11}, /* L622 */
-{3.7664585908304860e+00, 2.6051383272829298e-13,
-	2.2204460492503131e-16, 1.7421619702417956e-12,
-	-9.0294438592763981e-13}, /* L623 */
-{5.1935178092343115e+00, 3.5979552670539761e-13,
-	2.2204460492503131e-16, -4.7961634663806763e-14,
-	-1.6853185513809876e-13}, /* L624 */
-{5.9548093949449319e+00, 4.1319725418986764e-13,
-	2.2204460492503131e-16, -8.9928064994637680e-15,
-	-6.3282712403633923e-14}, /* L625 */
-{5.1094329813164139e+00, 3.5510483442635632e-13,
-	2.2204460492503131e-16, -7.5384143372048129e-14,
-	2.1094237467877974e-14}, /* L626 */
-{4.4709001957007031e+00, 3.1122326937804701e-13,
-	2.2204460492503131e-16, 3.2374103398069565e-13,
-	-4.0412118096355698e-14}, /* L627 */
-{3.8051413537108512e+00, 2.6530166952198897e-13,
-	2.2204460492503131e-16, -2.6756374893466273e-14,
-	6.6791017161449417e-13}, /* L628 */
-{6.0685707826870976e+00, 4.2378600628723007e-13,
-	2.2204460492503131e-16, -2.2093438190040615e-14,
-	5.3290705182007514e-14}, /* L629 */
-{5.2039268610432954e+00, 3.6398314917640562e-13,
-	2.2204460492503131e-16, 1.1985967773853190e-12,
-	8.3244522386394237e-13}, /* L630 */
-{5.4496916408061979e+00, 3.8177794259297571e-13,
-	2.2204460492503131e-16, -3.4527936065842368e-14,
-	-7.8603790143461083e-14}, /* L631 */
-{5.2257796055009651e+00, 3.6667197056416967e-13,
-	2.2204460492503131e-16, -9.1382457156896635e-13,
-	7.5939254884360707e-14}, /* L632 */
-{4.9431357609062028e+00, 3.4738878440521148e-13,
-	2.2204460492503131e-16, -4.5186077102243871e-14,
-	8.8817841970012523e-16}, /* L633 */
-{5.2634152441824300e+00, 3.7048142331741474e-13,
-	2.2204460492503131e-16, 2.8221869285971479e-13,
-	2.2826185386293218e-13}, /* L634 */
-{4.6795349419897887e+00, 3.2990277176736527e-13,
-	2.2204460492503131e-16, 7.0832228971084987e-14,
-	-2.5746071941057380e-13}, /* L635 */
-{4.5522870563855422e+00, 3.2143732120459845e-13,
-	2.2204460492503131e-16, -3.0486724256206799e-13,
-	1.7519319328584970e-13}, /* L636 */
-{4.5659412696495645e+00, 3.2290836671222678e-13,
-	2.2204460492503131e-16, -2.2204460492503131e-16,
-	4.1322500976548326e-13}, /* L637 */
-{3.8017301359429263e+00, 2.6928459462283172e-13,
-	2.2204460492503131e-16, 2.5646151868841116e-13,
-	2.4225066397320916e-13}, /* L638 */
-{5.3943747079250342e+00, 3.8269387658829146e-13,
-	2.2204460492503131e-16, 5.3312909642500017e-13,
-	-2.1804780203638074e-13}, /* L639 */
-{5.5650478425127439e+00, 3.9541980800805732e-13,
-	2.2204460492503131e-16, -4.4264591991804991e-13,
-	-3.1874503036988244e-13}, /* L640 */
-{3.5881491867893223e+00, 2.5535129566378600e-13,
-	2.2204460492503131e-16, -4.7850612361344247e-14,
-	-1.7763568394002505e-14}, /* L641 */
-{4.8733527042976643e+00, 3.4735408993569195e-13,
-	2.2204460492503131e-16, 1.3833378886829450e-13,
-	-1.8218759834098819e-13}, /* L642 */
-{4.3335993721418626e+00, 3.0936364581179987e-13,
-	2.2204460492503131e-16, -1.2878587085651816e-13,
-	-5.8508753397745750e-14}, /* L643 */
-{4.8757840900745046e+00, 3.4861002973229915e-13,
-	2.2204460492503131e-16, 4.6629367034256575e-15,
-	-5.9396931817445875e-14}, /* L644 */
-{4.2325648172777619e+00, 3.0309088572266774e-13,
-	2.2204460492503131e-16, 6.3726801613483985e-14,
-	-1.2978507157868080e-13}, /* L645 */
-{5.5464483791548833e+00, 3.9779290972319359e-13,
-	2.2204460492503131e-16, 4.3520742565306136e-14,
-	-2.5868196473766147e-14}, /* L646 */
-{5.4237914010474704e+00, 3.8959807602267915e-13,
-	2.2204460492503131e-16, 1.9406698470447736e-13,
-	-2.2726265314076954e-13}, /* L647 */
-{5.4020146956345565e+00, 3.8863356977003605e-13,
-	2.2204460492503131e-16, -8.4932061383824475e-14,
-	1.0103029524088925e-13}, /* L648 */
-{7.5524002051446724e+00, 5.4417581552002048e-13,
-	2.2204460492503131e-16, 7.7426953737358417e-13,
-	4.0145664570445661e-13}, /* L649 */
-{4.2492374732833662e+00, 3.0664359940146824e-13,
-	2.2204460492503131e-16, -9.0372154204487742e-14,
-	-1.1879386363489175e-14}, /* L650 */
-{4.4527840029154957e+00, 3.2182676662495524e-13,
-	2.2204460492503131e-16, 8.0380146982861334e-14,
-	1.4721557306529576e-13}, /* L651 */
-{3.5874289727938069e+00, 2.5968116545982411e-13,
-	2.2204460492503131e-16, -6.1251004268569886e-13,
-	-9.8809849191638932e-14}, /* L652 */
-{5.3384464010648651e+00, 3.8702374638432957e-13,
-	2.2204460492503131e-16, 8.2156503822261584e-14,
-	-3.9857006584043120e-14}, /* L653 */
-{5.1307420397616967e+00, 3.7253533591297128e-13,
-	2.2204460492503131e-16, -7.5717210279435676e-14,
-	-6.2172489379008766e-14}, /* L654 */
-{4.9259619701975410e+00, 3.5821345889530676e-13,
-	2.2204460492503131e-16, 8.9261931179862586e-14,
-	3.4416913763379853e-14}, /* L655 */
-{4.7033229692459528e+00, 3.4254543646028424e-13,
-	2.2204460492503131e-16, 4.7961634663806763e-14,
-	1.7141843500212417e-13}, /* L656 */
-{4.8297260369403956e+00, 3.5228764350136998e-13,
-	2.2204460492503131e-16, 6.3504757008558954e-14,
-	7.2830630415410269e-14}, /* L657 */
-{4.6573021806852921e+00, 3.4022784589637922e-13,
-	2.2204460492503131e-16, -6.6502359175046877e-14,
-	1.2212453270876722e-14}, /* L658 */
-{4.3228444529591563e+00, 3.1627478414009147e-13,
-	2.2204460492503131e-16, -4.8294701571194310e-14,
-	-2.6090241078691179e-14}, /* L659 */
-{5.0192314037204078e+00, 3.6778219358879483e-13,
-	2.2204460492503131e-16, 6.4859229098601645e-13,
-	-2.9609648066752925e-13}, /* L660 */
-{4.7813993742079255e+00, 3.5088598693278072e-13,
-	2.2204460492503131e-16, -1.0325074129013956e-14,
-	-6.9166894434147252e-14}, /* L661 */
-{4.3923785310871120e+00, 3.2282509998537989e-13,
-	2.2204460492503131e-16, -7.7782225105238467e-13,
-	-2.6545432518787493e-13}, /* L662 */
-{5.7119245471869471e+00, 4.2044145942554678e-13,
-	2.2204460492503131e-16, 1.7896795156957523e-13,
-	1.3966605649784469e-13}, /* L663 */
-{4.2213922022854637e+00, 3.1119551380243138e-13,
-	2.2204460492503131e-16, -2.7755575615628914e-13,
-	-2.6789681584205027e-13}, /* L664 */
-{4.6131651729595946e+00, 3.4058866837938240e-13,
-	2.2204460492503131e-16, -6.3615779311021470e-14,
-	-7.4162898044960457e-14}, /* L665 */
-{4.8611187805292762e+00, 3.5943470422239443e-13,
-	2.2204460492503131e-16, 1.9984014443252818e-15,
-	4.8916426464984397e-13}, /* L666 */
-{5.3725721944840128e+00, 3.9784842087442485e-13,
-	2.2204460492503131e-16, 4.2854608750531042e-13,
-	2.2182256032010628e-13}, /* L667 */
-{5.2133315784024230e+00, 3.8663516832571077e-13,
-	2.2204460492503131e-16, -1.0602629885170245e-13,
-	4.7739590058881731e-14}, /* L668 */
-{5.6393960423081229e+00, 4.1885939161545593e-13,
-	2.2204460492503131e-16, -8.1712414612411521e-14,
-	8.6153306710912148e-14}, /* L669 */
-{5.6223969301958707e+00, 4.1822101337629647e-13,
-	2.2204460492503131e-16, 6.7945649107059580e-14,
-	-7.6605388699135801e-14}, /* L670 */
-{6.2108890834889703e+00, 4.6268544551253399e-13,
-	2.2204460492503131e-16, -3.9124259387790516e-13,
-	5.5047078006964512e-12}, /* L671 */
-{4.7715849091128026e+00, 3.5599301284605644e-13,
-	2.2204460492503131e-16, -2.6090241078691179e-13,
-	-2.8210767055725228e-13}, /* L672 */
-{4.2410913865939781e+00, 3.1688540680363531e-13,
-	2.2204460492503131e-16, 1.6653345369377348e-14,
-	2.8421709430404007e-14}, /* L673 */
-{6.1209295383359006e+00, 4.5802250880910833e-13,
-	2.2204460492503131e-16, -5.8952842607595812e-14,
-	5.1958437552457326e-14}, /* L674 */
-{5.4748234524831494e+00, 4.1028291875022660e-13,
-	2.2204460492503131e-16, 8.0158102377936302e-14,
-	2.5313084961453569e-14}, /* L675 */
-{4.7108062488399876e+00, 3.5355052219188110e-13,
-	2.2204460492503131e-16, -1.6875389974302379e-13,
-	1.0524914273446484e-13}, /* L676 */
-{4.8578363200777002e+00, 3.6512459722359836e-13,
-	2.2204460492503131e-16, -1.7319479184152442e-14,
-	-1.0647038806155251e-13}, /* L677 */
-{3.9719826677937946e+00, 2.9898306053155466e-13,
-	2.2204460492503131e-16, -9.1637808452560421e-13,
-	5.5244697705347789e-13}, /* L678 */
-{5.7054581915063958e+00, 4.3010039973978564e-13,
-	2.2204460492503131e-16, 6.0063065632220969e-13,
-	1.3078427230084344e-12}, /* L679 */
-{4.6167352249966322e+00, 3.4854064079326008e-13,
-	2.2204460492503131e-16, -1.4002132786572474e-12,
-	-7.6849637764553336e-13}, /* L680 */
-{5.6505228649430661e+00, 4.2721381987576024e-13,
-	2.2204460492503131e-16, 2.1027624086400465e-13,
-	9.6589403142388619e-14}, /* L681 */
-{4.1162088402135071e+00, 3.1166735858789707e-13,
-	2.2204460492503131e-16, 5.0404125317982107e-14,
-	7.0166095156309893e-14}, /* L682 */
-{4.5968227722062069e+00, 3.4856839636887571e-13,
-	2.2204460492503131e-16, -5.0404125317982107e-14,
-	5.1070259132757201e-15}, /* L683 */
-{4.0570239446551604e+00, 3.0808688933348094e-13,
-	2.2204460492503131e-16, -6.1506355564233672e-14,
-	-1.5221157667610896e-13}, /* L684 */
-{5.0416137936030383e+00, 3.8341552155429781e-13,
-	2.2204460492503131e-16, 3.5860203695392556e-13,
-	-2.0838886172214188e-13}, /* L685 */
-{3.8443938204289747e+00, 2.9279356716926941e-13,
-	2.2204460492503131e-16, -1.3844481117075702e-13,
-	1.6409096303959814e-13}, /* L686 */
-{6.6259202063039382e+00, 5.0537352080937126e-13,
-	2.2204460492503131e-16, -1.7319479184152442e-13,
-	-1.6875389974302379e-14}, /* L687 */
-{4.8343099527041407e+00, 3.6926017799032707e-13,
-	2.2204460492503131e-16, -1.0014211682118912e-13,
-	-4.4386716524513758e-13}, /* L688 */
-{4.5587880342320082e+00, 3.4872105203476167e-13,
-	2.2204460492503131e-16, 1.1213252548714081e-13,
-	-4.7517545453956700e-14}, /* L689 */
-{6.5869669140207634e+00, 5.0459636469213365e-13,
-	2.2204460492503131e-16, 2.3281376826389533e-12,
-	8.1978868138321559e-13}, /* L690 */
-{6.5066582395463364e+00, 4.9916668021232624e-13,
-	2.2204460492503131e-16, 5.8064664187895687e-13,
-	5.9507954119908391e-14}, /* L691 */
-{6.4544899520722341e+00, 4.9588111394882617e-13,
-	2.2204460492503131e-16, -3.3673064336880998e-13,
-	4.5363712786183896e-13}, /* L692 */
-{4.7359382078537360e+00, 3.6437519668197638e-13,
-	2.2204460492503131e-16, -3.5860203695392556e-14,
-	1.7541523789077473e-14}, /* L693 */
-{3.7175851159186775e+00, 2.8643754035329039e-13,
-	2.2204460492503131e-16, 9.3356433694680163e-12,
-	5.9161564536225342e-12}, /* L694 */
-{6.1838227058953752e+00, 4.7714610040827665e-13,
-	2.2204460492503131e-16, 2.1227464230832993e-13,
-	-3.8768988019910466e-13}, /* L695 */
-{5.1544621552201750e+00, 3.9829251008427491e-13,
-	2.2204460492503131e-16, 1.9850787680297799e-13,
-	1.0214051826551440e-14}, /* L696 */
-{5.2546711310781351e+00, 4.0661918276896358e-13,
-	2.2204460492503131e-16, -2.7644553313166398e-14,
-	6.8167693711984612e-14}, /* L697 */
-{5.1683462630156631e+00, 4.0051295613352522e-13,
-	2.2204460492503131e-16, -2.0594637106796654e-13,
-	-4.8949733155723152e-13}, /* L698 */
-{4.1867018843598354e+00, 3.2490676815655206e-13,
-	2.2204460492503131e-16, -5.4845017416482733e-14,
-	-4.5075054799781356e-14}, /* L699 */
-{4.7735789598809486e+00, 3.7098102367849606e-13,
-	2.2204460492503131e-16, -7.5384143372048129e-14,
-	6.4837024638109142e-14}, /* L700 */
-{5.0649152662736672e+00, 3.9418468489316183e-13,
-	2.2204460492503131e-16, -9.2592600253738055e-14,
-	4.9293902293356950e-14}, /* L701 */
-{4.7935438875946925e+00, 3.7359698668026908e-13,
-	2.2204460492503131e-16, 6.7501559897209518e-14,
-	1.4077627952246985e-13}, /* L702 */
-{5.6426120318247355e+00, 4.4039771829318397e-13,
-	2.2204460492503131e-16, 1.8518520050747611e-13,
-	-9.5368157815300947e-13}, /* L703 */
-{3.8313270674372735e+00, 2.9945490531702035e-13,
-	2.2204460492503131e-16, -3.3473224192448470e-13,
-	4.1144865292608301e-13}, /* L704 */
-{4.0787298392966198e+00, 3.1924463073096376e-13,
-	2.2204460492503131e-16, 4.5963233219481481e-14,
-	1.0991207943789050e-13}, /* L705 */
-{4.3813808502119818e+00, 3.4341973709217655e-13,
-	2.2204460492503131e-16, 9.9920072216264089e-15,
-	1.2878587085651816e-14}, /* L706 */
-{4.5339534050160450e+00, 3.5588199054359393e-13,
-	2.2204460492503131e-16, 3.5682568011452531e-13,
-	5.2891024893142458e-13}, /* L707 */
-{5.2118726295850646e+00, 4.0967229608668276e-13,
-	2.2204460492503131e-16, 2.9398705692074145e-13,
-	9.8809849191638932e-14}, /* L708 */
-{4.8180611981047941e+00, 3.7925218521195347e-13,
-	2.2204460492503131e-16, -1.9650947535865271e-14,
-	-5.1070259132757201e-15}, /* L709 */
-{5.3802901786618191e+00, 4.2410519540680980e-13,
-	2.2204460492503131e-16, 1.4543921622589551e-13,
-	2.7089441800853820e-13}, /* L710 */
-{5.5858034681761168e+00, 4.4092507422988092e-13,
-	2.2204460492503131e-16, -2.0838886172214188e-13,
-	-8.5598195198599569e-14}, /* L711 */
-{4.5674229363923331e+00, 3.6104452760810091e-13,
-	2.2204460492503131e-16, 4.5519144009631418e-14,
-	3.1086244689504383e-15}, /* L712 */
-{4.3099647241253880e+00, 3.4117153546731060e-13,
-	2.2204460492503131e-16, 5.4845017416482733e-14,
-	-3.0830893393840597e-13}, /* L713 */
-{5.5490283625570518e+00, 4.3987036235648702e-13,
-	2.2204460492503131e-16, 1.9406698470447736e-13,
-	-1.0960121699099545e-12}, /* L714 */
-{6.3098001648026454e+00, 5.0087711755963937e-13,
-	2.2204460492503131e-16, 1.1701750679549150e-13,
-	-2.8088642523016460e-14}, /* L715 */
-{5.4015448349052813e+00, 4.2937875477377929e-13,
-	2.2204460492503131e-16, 1.9761969838327786e-14,
-	-1.3244960683778118e-13}, /* L716 */
-{5.9492771686437464e+00, 4.7357950894166834e-13,
-	2.2204460492503131e-16, 4.8405723873656825e-14,
-	-1.4765966227514582e-14}, /* L717 */
-{4.0334325474155115e+00, 3.2152058793144533e-13,
-	2.2204460492503131e-16, -5.9874327718034692e-13,
-	3.4527936065842368e-13}, /* L718 */
-{6.2489667436003877e+00, 4.9882320496408283e-13,
-	2.2204460492503131e-16, -1.4876988529977098e-13,
-	4.6851411639181606e-14}, /* L719 */
-{4.7618130683010955e+00, 3.8063996399273492e-13,
-	2.2204460492503131e-16, -1.5765166949677223e-14,
-	1.8030021919912542e-13}, /* L720 */
-{4.8190089899344413e+00, 3.8574698990601064e-13,
-	2.2204460492503131e-16, 6.0573768223548541e-13,
-	5.7709392820015637e-13}, /* L721 */
-{5.4452994498122900e+00, 4.3648418213138029e-13,
-	2.2204460492503131e-16, -8.8706819667550008e-14,
-	2.6867397195928788e-14}, /* L722 */
-{4.9979331964771694e+00, 4.0117908994830032e-13,
-	2.2204460492503131e-16, -1.9317880628477724e-14,
-	-1.3022916078853086e-13}, /* L723 */
-{5.3266658624814962e+00, 4.2815750944669162e-13,
-	2.2204460492503131e-16, 1.2390088954816747e-13,
-	3.9079850466805510e-14}, /* L724 */
-{5.2551807049291215e+00, 4.2299497238218464e-13,
-	2.2204460492503131e-16, 5.7731597280508140e-14,
-	8.1712414612411521e-14}, /* L725 */
-{5.3311034522421563e+00, 4.2969794389335902e-13,
-	2.2204460492503131e-16, 1.1701750679549150e-13,
-	-3.5416114485542494e-14}, /* L726 */
-{6.4026923574185375e+00, 5.1678106238739474e-13,
-	2.2204460492503131e-16, -2.5424107263916085e-14,
-	3.1086244689504383e-14}, /* L727 */
-{5.4828383206431903e+00, 4.4314552027913123e-13,
-	2.2204460492503131e-16, 3.0198066269804258e-14,
-	-6.8722805224297190e-14}, /* L728 */
-{5.2227448654761517e+00, 4.2270353883822054e-13,
-	2.2204460492503131e-16, -1.1501910535116622e-13,
-	4.6629367034256575e-15}, /* L729 */
-{5.5294607786639238e+00, 4.4814152388994444e-13,
-	2.2204460492503131e-16, 5.4845017416482733e-14,
-	-7.5495165674510645e-15}, /* L730 */
-{3.6812643578872324e+00, 2.9876101592662963e-13,
-	2.2204460492503131e-16, -3.6703973194107675e-13,
-	2.7644553313166398e-13}, /* L731 */
-{5.0747230422844911e+00, 4.1241359285959511e-13,
-	2.2204460492503131e-16, 1.2723155862204294e-13,
-	7.4384942649885488e-14}, /* L732 */
-{4.9051919135809046e+00, 3.9918068850397503e-13,
-	2.2204460492503131e-16, 2.9309887850104133e-14,
-	-7.3940853440035426e-14}, /* L733 */
-{4.4186037015068136e+00, 3.6007308246155389e-13,
-	2.2204460492503131e-16, 2.4424906541753444e-14,
-	3.8902214782865485e-13}, /* L734 */
-{4.7938851143583223e+00, 3.9118708272667391e-13,
-	2.2204460492503131e-16, 3.7636560534792807e-13,
-	4.8228088189716800e-13}, /* L735 */
-{5.0954564086903238e+00, 4.1636138981004933e-13,
-	2.2204460492503131e-16, 7.3430150848707854e-13,
-	-3.8147263126120379e-13}, /* L736 */
-{6.5230767772173435e+00, 5.3373971908854401e-13,
-	2.2204460492503131e-16, -1.7069679003611782e-12,
-	1.9806378759312793e-13}, /* L737 */
-{7.4590226082607352e+00, 6.1115001948053305e-13,
-	2.2204460492503131e-16, 9.1038288019262836e-15,
-	2.9753977059954195e-13}, /* L738 */
-{5.9905371915005796e+00, 4.9149573300155680e-13,
-	2.2204460492503131e-16, -8.9594998087250133e-14,
-	-4.5519144009631418e-15}, /* L739 */
-{6.1905503074137398e+00, 5.0859316758078421e-13,
-	2.2204460492503131e-16, -1.1246559239452836e-13,
-	-2.0738966099997924e-13}, /* L740 */
-{6.0897531975904897e+00, 5.0098813986210189e-13,
-	2.2204460492503131e-16, -5.5622173533720343e-14,
-	5.4845017416482733e-14}, /* L741 */
-{5.0532424738830288e+00, 4.1627812308320244e-13,
-	2.2204460492503131e-16, -1.4299672557172016e-13,
-	1.8651746813702630e-14}, /* L742 */
-{4.7153506426472500e+00, 3.8896663667742359e-13,
-	2.2204460492503131e-16, 5.2047255394427339e-13,
-	-2.2862822746105849e-12}, /* L743 */
-{5.1660027740936192e+00, 4.2671421951467892e-13,
-	2.2204460492503131e-16, -5.1292303737682232e-14,
-	2.4558133304708463e-13}, /* L744 */
-{6.3798758373864874e+00, 5.2768900360433690e-13,
-	2.2204460492503131e-16, -6.7723604502134549e-14,
-	-2.1982415887578100e-13}, /* L745 */
-{6.1806397780477473e+00, 5.1189608107904405e-13,
-	2.2204460492503131e-16, 2.2426505097428162e-14,
-	3.2862601528904634e-14}, /* L746 */
-{4.9215271757058083e+00, 4.0815961721563099e-13,
-	2.2204460492503131e-16, 4.7961634663806763e-14,
-	1.4321877017664519e-13}, /* L747 */
-{6.4737735827010674e+00, 5.3761162188692424e-13,
-	2.2204460492503131e-16, 2.0827783941967937e-13,
-	1.7896795156957523e-13}, /* L748 */
-{5.8938677767679390e+00, 4.9010795422077535e-13,
-	2.2204460492503131e-16, -4.3631764867768652e-14,
-	5.5511151231257827e-15}, /* L749 */
-{5.6600089298247420e+00, 4.7128967395337895e-13,
-	2.2204460492503131e-16, 2.2204460492503131e-14,
-	6.0174087934683484e-13}, /* L750 */
-{5.0938828702085779e+00, 4.2471581807035363e-13,
-	2.2204460492503131e-16, 8.7707618945387367e-14,
-	-2.9309887850104133e-13}, /* L751 */
-{5.9521370503034259e+00, 4.9693582582222007e-13,
-	2.2204460492503131e-16, 2.0428103653102880e-14,
-	-1.7297274723659939e-13}, /* L752 */
-{5.0783612658165858e+00, 4.2454928461665986e-13,
-	2.2204460492503131e-16, -2.5102142586774789e-13,
-	6.1728400169158704e-14}, /* L753 */
-{5.1691062985628413e+00, 4.3270942384765476e-13,
-	2.2204460492503131e-16, -4.0822900615467006e-13,
-	-2.5301982731207318e-13}, /* L754 */
-{4.8622593268501086e+00, 4.0756287233989497e-13,
-	2.2204460492503131e-16, -4.3187675657918589e-14,
-	4.5963233219481481e-14}, /* L755 */
-{4.9604079583435956e+00, 4.1634057312833761e-13,
-	2.2204460492503131e-16, -2.2037927038809357e-13,
-	-1.3766765505351941e-14}, /* L756 */
-{5.0647371848585072e+00, 4.2565950764128502e-13,
-	2.2204460492503131e-16, 6.4170890823334048e-14,
-	-6.9610983643997315e-14}, /* L757 */
-{4.9386621453236152e+00, 4.1561198926842735e-13,
-	2.2204460492503131e-16, 1.4632739464559563e-13,
-	9.3036689463588118e-14}, /* L758 */
-{5.5849890486292120e+00, 4.7062354013860386e-13,
-	2.2204460492503131e-16, -6.3282712403633923e-15,
-	-2.4635848916432224e-13}, /* L759 */
-{6.0394832127454210e+00, 5.0959236830294685e-13,
-	2.2204460492503131e-16, 1.4410694859634532e-13,
-	7.9936057773011271e-15}, /* L760 */
-{6.4704438484036633e+00, 5.4667381732542708e-13,
-	2.2204460492503131e-16, 7.1054273576010019e-14,
-	-2.1083135237631723e-13}, /* L761 */
-{5.8162821422666831e+00, 4.9205084451386938e-13,
-	2.2204460492503131e-16, 3.5282887722587475e-13,
-	8.8817841970012523e-16}, /* L762 */
-{8.0249143647637453e+00, 6.7978955797798335e-13,
-	2.2204460492503131e-16, 3.3750779948604759e-14,
-	-6.9499961341534799e-14}, /* L763 */
-{6.7755342500098648e+00, 5.7470694869721228e-13,
-	2.2204460492503131e-16, 1.8252066524837574e-13,
-	-3.1241675912951905e-13}, /* L764 */
-{4.8758246860250267e+00, 4.1411318818518339e-13,
-	2.2204460492503131e-16, -5.2446935683292395e-13,
-	1.8687273950490635e-12}, /* L765 */
-{5.4402827346089841e+00, 4.6265768993691836e-13,
-	2.2204460492503131e-16, -2.2160051571518125e-13,
-	4.4408920985006262e-15}, /* L766 */
-{6.6494563839787721e+00, 5.6622762034663765e-13,
-	2.2204460492503131e-16, 6.0862426209951082e-13,
-	2.5934809855243657e-13}, /* L767 */
-{5.7496835504787178e+00, 4.9024673209885350e-13,
-	2.2204460492503131e-16, -9.6256336235001072e-14,
-	4.0811798385220754e-13}, /* L768 */
-{5.2392800475839456e+00, 4.4730885662147557e-13,
-	2.2204460492503131e-16, 8.8817841970012523e-15,
-	-1.6431300764452317e-13}, /* L769 */
-{5.4026059263202448e+00, 4.6185277824406512e-13,
-	2.2204460492503131e-16, -1.0125233984581428e-13,
-	-4.4464432136237519e-13}, /* L770 */
-{4.7307143378691014e+00, 4.0493997044421803e-13,
-	2.2204460492503131e-16, -1.3467005288703149e-13,
-	3.7747582837255322e-15}, /* L771 */
-{5.4776640825639777e+00, 4.6948556153836307e-13,
-	2.2204460492503131e-16, 1.1679546219056647e-13,
-	4.2410519540680980e-14}, /* L772 */
-{4.5417277347125538e+00, 3.8977154837027683e-13,
-	2.2204460492503131e-16, -1.1282086376240841e-12,
-	1.0476064460362977e-12}, /* L773 */
-{6.5058242177679810e+00, 5.5905280404999758e-13,
-	2.2204460492503131e-16, -1.4654943925052066e-14,
-	-5.2180482157382357e-14}, /* L774 */
-{5.4361376088906992e+00, 4.6773696027457845e-13,
-	2.2204460492503131e-16, -1.2689849171465539e-13,
-	-3.1863400806741993e-14}, /* L775 */
-{5.5992356380756574e+00, 4.8239190419963052e-13,
-	2.2204460492503131e-16, 3.1130653610489389e-13,
-	3.5282887722587475e-13}, /* L776 */
-{4.8360758409790794e+00, 4.1718017929071038e-13,
-	2.2204460492503131e-16, -8.4487972173974413e-14,
-	-9.9142916099026479e-14}, /* L777 */
-{4.7892106408032511e+00, 4.1366909897533333e-13,
-	2.2204460492503131e-16, -1.5076828674409626e-13,
-	-1.3766765505351941e-14}, /* L778 */
-{6.0006513157923154e+00, 5.1897375286102942e-13,
-	2.2204460492503131e-16, 1.5210055437364645e-13,
-	-1.8762769116165146e-14}, /* L779 */
-{4.2705195581422490e+00, 3.6981528950263964e-13,
-	2.2204460492503131e-16, -7.5051076464660582e-14,
-	6.8833827526759706e-14}, /* L780 */
-{5.5966797646122730e+00, 4.8527848406365592e-13,
-	2.2204460492503131e-16, -4.1222580904332062e-13,
-	-1.1654011089490268e-12}, /* L781 */
-{5.3714918506004858e+00, 4.6634918149379700e-13,
-	2.2204460492503131e-16, -2.4535928844215960e-14,
-	-2.4980018054066022e-14}, /* L782 */
-{5.0805875175942159e+00, 4.4165712753674313e-13,
-	2.2204460492503131e-16, -4.5519144009631418e-15,
-	-9.7699626167013776e-15}, /* L783 */
-{4.7464998355253565e+00, 4.1314174303863638e-13,
-	2.2204460492503131e-16, 6.2394533983933798e-14,
-	7.1720407390785113e-14}, /* L784 */
-{3.9261208439437265e+00, 3.4217073618947325e-13,
-	2.2204460492503131e-16, 5.0648374383399641e-13,
-	2.3536728122053319e-14}, /* L785 */
-{4.6774882957369188e+00, 4.0817349500343880e-13,
-	2.2204460492503131e-16, 1.1102230246251565e-14,
-	2.5091040356528538e-14}, /* L786 */
-{5.4371115006593902e+00, 4.7506443223710448e-13,
-	2.2204460492503131e-16, 5.1070259132757201e-14,
-	-4.1633363423443370e-14}, /* L787 */
-{5.5780544858105578e+00, 4.8799853047398756e-13,
-	2.2204460492503131e-16, -3.7614356074300304e-13,
-	5.6021853822585399e-13}, /* L788 */
-{4.8637592578527356e+00, 4.2604808569990382e-13,
-	2.2204460492503131e-16, -4.6040948831205242e-13,
-	2.9087843245179101e-14}, /* L789 */
-{4.9607673203088325e+00, 4.3509640335059885e-13,
-	2.2204460492503131e-16, 3.0198066269804258e-14,
-	2.1316282072803006e-14}, /* L790 */
-{5.5463997904164684e+00, 4.8707652494650588e-13,
-	2.2204460492503131e-16, 1.3722356584366935e-13,
-	7.3718808835110394e-14}, /* L791 */
-{7.4968552621604037e+00, 6.5919492087118670e-13,
-	2.2204460492503131e-16, 1.0678125050844756e-12,
-	-4.5585757391108928e-13}, /* L792 */
-{5.7465412227243586e+00, 5.0592863232168384e-13,
-	2.2204460492503131e-16, -9.4924068605450884e-14,
-	6.2394533983933798e-14}, /* L793 */
-{5.4773386164466649e+00, 4.8283599340948058e-13,
-	2.2204460492503131e-16, -2.5424107263916085e-14,
-	1.8607337892717624e-13}, /* L794 */
-{6.7452936609527079e+00, 5.9535709695524019e-13,
-	2.2204460492503131e-16, 1.1588507931037384e-12,
-	-1.0323963905989331e-12}, /* L795 */
-{5.6677225098294119e+00, 5.0087711755963937e-13,
-	2.2204460492503131e-16, -1.2045919817182948e-13,
-	3.2107649872159527e-13}, /* L796 */
-{5.7716919793125445e+00, 5.1070606077452396e-13,
-	2.2204460492503131e-16, -2.2648549702353193e-14,
-	1.1546319456101628e-14}, /* L797 */
-{7.7575310361044254e+00, 6.8728356339420316e-13,
-	2.2204460492503131e-16, -1.0436096431476471e-14,
-	-8.3710816056736803e-14}, /* L798 */
-{5.5982566421632196e+00, 4.9660275891483252e-13,
-	2.2204460492503131e-16, 8.9639407008235139e-13,
-	-1.3355982986240633e-13}, /* L799 */
-{5.1640706473886384e+00, 4.5866088704826780e-13,
-	2.2204460492503131e-16, 4.2010839251815923e-13,
-	-2.7089441800853820e-14}, /* L800 */
-{6.0293478396294509e+00, 5.3618220974271935e-13,
-	2.2204460492503131e-16, -3.7680969455777813e-13,
-	2.3270274596143281e-13}, /* L801 */
-{5.9975156967327594e+00, 5.3401727484470030e-13,
-	2.2204460492503131e-16, 8.2600593032111647e-14,
-	8.0158102377936302e-14}, /* L802 */
-{4.9206179749994252e+00, 4.3867687260501498e-13,
-	2.2204460492503131e-16, -6.1395333261771157e-14,
-	-1.1657341758564144e-13}, /* L803 */
-{5.0876945940554847e+00, 4.5413672822292028e-13,
-	2.2204460492503131e-16, 1.3988810110276972e-14,
-	-2.9420910152566648e-14}, /* L804 */
-{5.1867317856259181e+00, 4.6355280725052239e-13,
-	2.2204460492503131e-16, -2.4757973449140991e-14,
-	3.6637359812630166e-14}, /* L805 */
-{6.6606029402411666e+00, 5.9601629187611138e-13,
-	2.2204460492503131e-16, -2.2060131499301860e-13,
-	-5.6732396558345499e-14}, /* L806 */
-{5.3853864395590136e+00, 4.8250292650209303e-13,
-	2.2204460492503131e-16, 1.7186252421197423e-13,
-	1.2012613126444194e-13}, /* L807 */
-{5.3459242758868228e+00, 4.7956083548683637e-13,
-	2.2204460492503131e-16, -7.3052675020335300e-14,
-	4.8849813083506888e-15}, /* L808 */
-{6.3844352890848084e+00, 5.7343019221889335e-13,
-	2.2204460492503131e-16, -1.2412293415309250e-13,
-	-8.6930462828149757e-14}, /* L809 */
-{6.0456885506712004e+00, 5.4367621515893916e-13,
-	2.2204460492503131e-16, -3.7081449022480228e-14,
-	8.7485574340462335e-14}, /* L810 */
-{5.9192448505473703e+00, 5.3296256297130640e-13,
-	2.2204460492503131e-16, 5.7731597280508140e-15,
-	1.2212453270876722e-14}, /* L811 */
-{4.9039486236889385e+00, 4.4209080840573733e-13,
-	2.2204460492503131e-16, 5.7953641885433171e-14,
-	-2.8221869285971479e-13}, /* L812 */
-{5.8108947767463297e+00, 5.2449711240853958e-13,
-	2.2204460492503131e-16, 1.0280665208028950e-13,
-	-8.5487172896137054e-14}, /* L813 */
-{5.8472911663449612e+00, 5.2843146525205498e-13,
-	2.2204460492503131e-16, -7.1720407390785113e-14,
-	2.9531932455029164e-14}, /* L814 */
-{5.2760819437426676e+00, 4.7739590058881731e-13,
-	2.2204460492503131e-16, -6.4392935428259079e-15,
-	2.3536728122053319e-14}, /* L815 */
-{4.9963314121564366e+00, 4.5263792713967632e-13,
-	2.2204460492503131e-16, 2.8066438062523957e-13,
-	-9.9809049913801573e-14}, /* L816 */
-{9.8972004374043845e+00, 8.9772633771190158e-13,
-	2.2204460492503131e-16, 6.7057470687359455e-14,
-	1.0680345496894006e-13}, /* L817 */
-{6.0547161540341738e+00, 5.4986570852122441e-13,
-	2.2204460492503131e-16, 1.0258460747536446e-13,
-	-1.8762769116165146e-13}, /* L818 */
-{5.6835788693408089e+00, 5.1679147072825060e-13,
-	2.2204460492503131e-16, -2.0883295093199195e-13,
-	1.4788170688007085e-13}, /* L819 */
-{7.7658659107967294e+00, 7.0699002208129968e-13,
-	2.2204460492503131e-16, -1.6586731987899839e-13,
-	-2.8610447344590284e-13}, /* L820 */
-{7.6443482359374508e+00, 6.9677597025474824e-13,
-	2.2204460492503131e-16, -2.0738966099997924e-13,
-	-3.7303493627405260e-14}, /* L821 */
-{4.9203240645320649e+00, 4.4902970230964456e-13,
-	2.2204460492503131e-16, -9.9920072216264089e-15,
-	4.5985437679973984e-13}, /* L822 */
-{5.4878579899365851e+00, 5.0143222907195195e-13,
-	2.2204460492503131e-16, 9.5545793499240972e-13,
-	6.0151883474190981e-13}, /* L823 */
-{6.2803497143765901e+00, 5.7454041524351851e-13,
-	2.2204460492503131e-16, 1.0880185641326534e-14,
-	-8.9372953482325102e-14}, /* L824 */
-{8.0253156918978181e+00, 7.3506478681650833e-13,
-	2.2204460492503131e-16, -5.2069459854919842e-14,
-	4.8849813083506888e-14}, /* L825 */
-{4.3955880487509509e+00, 4.0309422466577871e-13,
-	2.2204460492503131e-16, 1.0436096431476471e-14,
-	2.7666757773658901e-13}, /* L826 */
-{4.9359207257683675e+00, 4.5319303865198890e-13,
-	2.2204460492503131e-16, 2.1538326677728037e-14,
-	1.4632739464559563e-13}, /* L827 */
-{6.7110613127196102e+00, 6.1692317920858386e-13,
-	2.2204460492503131e-16, 3.9479530755670567e-13,
-	2.1938006966593093e-13}, /* L828 */
-{4.5184027861190534e+00, 4.1586178944896801e-13,
-	2.2204460492503131e-16, 1.5285550603039155e-12,
-	-1.9910739723627557e-12}, /* L829 */
-{7.1277220888234192e+00, 6.5680794136824261e-13,
-	2.2204460492503131e-16, 2.3336887977620790e-13,
-	-1.4099832412739488e-14}, /* L830 */
-{4.5854464643221036e+00, 4.2305048353341590e-13,
-	2.2204460492503131e-16, 1.5254464358349651e-12,
-	9.8032693074401323e-13}, /* L831 */
-{5.6953590457039507e+00, 5.2608264966558238e-13,
-	2.2204460492503131e-16, 1.4166445794216997e-13,
-	8.8817841970012523e-14}, /* L832 */
-{5.1566708007782589e+00, 4.7689630022773599e-13,
-	2.2204460492503131e-16, -6.5569771834361745e-13,
-	-1.4122036873231991e-13}, /* L833 */
-{5.6810641189063018e+00, 5.2602366906739917e-13,
-	2.2204460492503131e-16, 1.1255441023649837e-12,
-	-2.2061241722326486e-12}, /* L834 */
-{7.5390837507531092e+00, 6.9889927178934386e-13,
-	2.2204460492503131e-16, -2.3314683517128287e-15,
-	-1.8030021919912542e-13}, /* L835 */
-{6.5557818742044169e+00, 6.0847160643362486e-13,
-	2.2204460492503131e-16, 4.0634162701280729e-14,
-	-4.9737991503207013e-14}, /* L836 */
-{4.5770681531677999e+00, 4.2532644073389747e-13,
-	2.2204460492503131e-16, -3.1452618287630685e-13,
-	-9.8920871494101448e-14}, /* L837 */
-{4.8242916208647806e+00, 4.4883541328033516e-13,
-	2.2204460492503131e-16, 6.9944050551384862e-14,
-	2.4202861936828413e-14}, /* L838 */
-{6.6103538439799037e+00, 6.1573836307449170e-13,
-	2.2204460492503131e-16, 1.4455103780619538e-13,
-	-5.7398530373120593e-14}, /* L839 */
-{4.9940554981994092e+00, 4.6573855883025317e-13,
-	2.2204460492503131e-16, 1.5321077739827160e-14,
-	-5.6066262743570405e-14}, /* L840 */
-{5.7401993060558745e+00, 5.3596016513779432e-13,
-	2.2204460492503131e-16, 1.3078427230084344e-13,
-	5.5289106626332796e-14}, /* L841 */
-{6.2256630289172081e+00, 5.8197890950850706e-13,
-	2.2204460492503131e-16, -1.8007817459420039e-13,
-	1.4677148385544569e-13}, /* L842 */
-{5.8446118307928137e+00, 5.4700688423281463e-13,
-	2.2204460492503131e-16, -1.6151524562246777e-12,
-	2.3188118092321020e-12}, /* L843 */
-{5.6466321314715486e+00, 5.2910453796073398e-13,
-	2.2204460492503131e-16, -8.4021678503631847e-13,
-	9.3547392054915690e-13}, /* L844 */
-{5.3997126611756201e+00, 5.0656701056084330e-13,
-	2.2204460492503131e-16, -7.7826634026223473e-14,
-	2.6689761511988763e-13}, /* L845 */
-{5.2452801431278946e+00, 4.9266146717741321e-13,
-	2.2204460492503131e-16, 5.7509552675583109e-14,
-	-5.9285909514983359e-14}, /* L846 */
-{5.7857234138907518e+00, 5.4406479321755796e-13,
-	2.2204460492503131e-16, 1.1901590823981678e-13,
-	1.9317880628477724e-14}, /* L847 */
-{5.3661641266103519e+00, 5.0520698735567748e-13,
-	2.2204460492503131e-16, -2.5424107263916085e-13,
-	-2.2359891715950653e-13}, /* L848 */
-{6.3798687228077453e+00, 6.0135230128821604e-13,
-	2.2204460492503131e-16, -6.2394533983933798e-14,
-	-1.2212453270876722e-15}, /* L849 */
-{6.7017752793213372e+00, 6.3243854597772042e-13,
-	2.2204460492503131e-16, -3.1308289294429414e-14,
-	2.2204460492503131e-16}, /* L850 */
-{5.7622740735211968e+00, 5.4441867680665723e-13,
-	2.2204460492503131e-16, -2.8941293805928581e-12,
-	1.8149926006572059e-12}, /* L851 */
-{5.9629825592457770e+00, 5.6404360349038285e-13,
-	2.2204460492503131e-16, -1.0946799022804043e-13,
-	-1.4777068457760834e-13}, /* L852 */
-{5.0861744957595070e+00, 4.8167025923362417e-13,
-	2.2204460492503131e-16, -1.2292389328649733e-12,
-	6.4215299744319054e-13}, /* L853 */
-{5.0556285851944835e+00, 4.7933879088191134e-13,
-	2.2204460492503131e-16, -5.7731597280508140e-15,
-	1.0635936575909000e-13}, /* L854 */
-{6.2374367413835543e+00, 5.9208193903259598e-13,
-	2.2204460492503131e-16, 4.6629367034256575e-13,
-	4.5146109073357366e-12}, /* L855 */
-{5.9497757421420419e+00, 5.6543658644159223e-13,
-	2.2204460492503131e-16, 1.2900791546144319e-13,
-	1.5099033134902129e-14}, /* L856 */
-{5.0644770684410663e+00, 4.8186454826293357e-13,
-	2.2204460492503131e-16, -1.0880185641326534e-13,
-	1.0436096431476471e-14}, /* L857 */
-{6.2309247489302457e+00, 5.9353910675241650e-13,
-	2.2204460492503131e-16, 1.9899637493381306e-12,
-	4.6647130602650577e-12}, /* L858 */
-{4.4090581785389666e+00, 4.2048309278897023e-13,
-	2.2204460492503131e-16, 7.4784622938750545e-13,
-	-1.0299538999447577e-12}, /* L859 */
-{6.9174527740754632e+00, 6.6047167734950563e-13,
-	2.2204460492503131e-16, -3.7346792325365641e-12,
-	-7.3641093223386633e-13}, /* L860 */
-{5.5769542111074966e+00, 5.3310134084938454e-13,
-	2.2204460492503131e-16, -4.6074255521943996e-14,
-	8.0824236192711396e-14}, /* L861 */
-{6.3616689695639250e+00, 6.0881855112882022e-13,
-	2.2204460492503131e-16, 4.6629367034256575e-15,
-	-7.5939254884360707e-14}, /* L862 */
-{4.7879565690563686e+00, 4.5874415377511468e-13,
-	2.2204460492503131e-16, -1.6431300764452317e-13,
-	1.5742962489184720e-13}, /* L863 */
-{6.5356729271103298e+00, 6.2692212532411418e-13,
-	2.2204460492503131e-16, -1.9484414082171497e-13,
-	-3.0264679651281767e-13}, /* L864 */
-{5.1370023243348175e+00, 4.9332760099218831e-13,
-	2.2204460492503131e-16, -1.8285373215576328e-13,
-	3.6703973194107675e-13}, /* L865 */
-{6.7863848408743417e+00, 6.5247807157220450e-13,
-	2.2204460492503131e-16, -1.8418599978531347e-13,
-	3.0975222387041867e-13}, /* L866 */
-{6.4708867950856597e+00, 6.2286287239032845e-13,
-	2.2204460492503131e-16, 5.3734794391857577e-14,
-	3.0486724256206799e-13}, /* L867 */
-{6.7753563116450861e+00, 6.5292216078205456e-13,
-	2.2204460492503131e-16, -2.4824586830618500e-13,
-	-1.2900791546144319e-13}, /* L868 */
-{5.1585236737345079e+00, 4.9768522636384205e-13,
-	2.2204460492503131e-16, -3.3750779948604759e-14,
-	-1.8984813721090177e-14}, /* L869 */
-{7.3713478367140581e+00, 7.1199296458601680e-13,
-	2.2204460492503131e-16, 2.9332092310596636e-13,
-	-2.4069635173873394e-13}, /* L870 */
-{7.3077038371027525e+00, 7.0665695517391214e-13,
-	2.2204460492503131e-16, -2.8721469647052800e-13,
-	-5.0881521218570924e-13}, /* L871 */
-{5.4753526751941850e+00, 5.3007598310728099e-13,
-	2.2204460492503131e-16, -3.5804692544161298e-13,
-	-1.1535217225855376e-13}, /* L872 */
-{5.1340287185483042e+00, 4.9760195963699516e-13,
-	2.2204460492503131e-16, -2.3170354523927017e-13,
-	-1.6509016376176078e-13}, /* L873 */
-{5.6175717919442070e+00, 5.4509174951533623e-13,
-	2.2204460492503131e-16, 1.7430501486614958e-13,
-	5.7953641885433171e-14}, /* L874 */
-{6.0377238114716985e+00, 5.8653082390947020e-13,
-	2.2204460492503131e-16, -3.1419311596891930e-14,
-	-8.3932860661661834e-14}, /* L875 */
-{6.1301466578670061e+00, 5.9618976422370906e-13,
-	2.2204460492503131e-16, 7.1409544943890069e-13,
-	1.9251267247000214e-12}, /* L876 */
-{6.2750954190688208e+00, 6.1098348602683927e-13,
-	2.2204460492503131e-16, -3.6359804056473877e-13,
-	1.4579448759377556e-12}, /* L877 */
-{6.1107727389561139e+00, 5.9566240828701211e-13,
-	2.2204460492503131e-16, 1.1990408665951691e-14,
-	2.6134649999676185e-13}, /* L878 */
-{6.6204598194266104e+00, 6.4608041139280203e-13,
-	2.2204460492503131e-16, 1.8363088827300089e-13,
-	4.3232084578903596e-13}, /* L879 */
-{6.5198966501069764e+00, 6.3699046037868357e-13,
-	2.2204460492503131e-16, -9.1993079820440471e-13,
-	-2.1993518117824351e-13}, /* L880 */
-{6.6342329413196772e+00, 6.4889760231778837e-13,
-	2.2204460492503131e-16, 2.7200464103316335e-13,
-	1.5276668818842154e-13}, /* L881 */
-{5.9053381150579725e+00, 5.7825966237601278e-13,
-	2.2204460492503131e-16, 1.3633538742396922e-13,
-	6.5702998597316764e-13}, /* L882 */
-{6.0271895770870376e+00, 5.9086069370550831e-13,
-	2.2204460492503131e-16, -6.5503158452884236e-14,
-	2.4469315462738450e-13}, /* L883 */
-{5.7030632964053680e+00, 5.5971893786477267e-13,
-	2.2204460492503131e-16, 8.8595797365087492e-14,
-	9.7699626167013776e-15}, /* L884 */
-{7.0096155788907950e+00, 6.8872685332621586e-13,
-	2.2204460492503131e-16, -3.8880010322372982e-13,
-	2.2115642650533118e-13}, /* L885 */
-{8.0350013901915709e+00, 7.9036777123064894e-13,
-	2.2204460492503131e-16, 7.9491968563161208e-14,
-	-2.5246471579976060e-13}, /* L886 */
-{6.3557033758012915e+00, 6.2588823013243200e-13,
-	2.2204460492503131e-16, -2.5313084961453569e-14,
-	-2.0383694732117874e-13}, /* L887 */
-{5.8378470482479052e+00, 5.7553961596568115e-13,
-	2.2204460492503131e-16, -1.6220358389773537e-13,
-	2.6578739209526248e-13}, /* L888 */
-{5.8582769591789754e+00, 5.7820415122478153e-13,
-	2.2204460492503131e-16, 1.5365486660812167e-13,
-	1.8207657603852567e-13}, /* L889 */
-{6.8000107284255273e+00, 6.7190697450314474e-13,
-	2.2204460492503131e-16, -7.2275518903097691e-14,
-	6.7279515292284486e-14}, /* L890 */
-{8.0757703169420463e+00, 7.9886097736903139e-13,
-	2.2204460492503131e-16, 2.3625545964023331e-13,
-	-8.7863050168834889e-13}, /* L891 */
-{5.7140995420799570e+00, 5.6587720620449034e-13,
-	2.2204460492503131e-16, -3.1863400806741993e-13,
-	9.3480778673438181e-14}, /* L892 */
-{7.0554422624398523e+00, 6.9949601666507988e-13,
-	2.2204460492503131e-16, -3.1752378504279477e-14,
-	-1.6653345369377348e-15}, /* L893 */
-{4.9636543636273327e+00, 4.9266146717741321e-13,
-	2.2204460492503131e-16, -1.6919798895287386e-13,
-	6.9522165802027303e-13}, /* L894 */
-{6.3481943731287842e+00, 6.3078708922859050e-13,
-	2.2204460492503131e-16, -7.0132788465571139e-13,
-	3.3772984409097262e-13}, /* L895 */
-{6.9894083486650374e+00, 6.9527716917150428e-13,
-	2.2204460492503131e-16, -3.1763480734525729e-13,
-	-1.7030821197749901e-13}, /* L896 */
-{6.6542224549305811e+00, 6.6267304144052019e-13,
-	2.2204460492503131e-16, -1.0014211682118912e-13,
-	-3.5593750169482519e-13}, /* L897 */
-{7.0843652973185325e+00, 7.0629613269090896e-13,
-	2.2204460492503131e-16, -1.5165646516379638e-13,
-	2.1693757901175559e-13}, /* L898 */
-{5.8309324475313371e+00, 5.8197890950850706e-13,
-	2.2204460492503131e-16, 1.0942358130705543e-12,
-	6.3282712403633923e-13}, /* L899 */
-{6.6433438145839370e+00, 6.6380234642338110e-13,
-	2.2204460492503131e-16, -4.0523140398818214e-14,
-	7.4384942649885488e-14}, /* L900 */
-{6.9370253729904032e+00, 6.9391714596633847e-13,
-	2.2204460492503131e-16, -7.4795725168996796e-13,
-	-8.1212814251330201e-13}, /* L901 */
-{6.4007861517729747e+00, 6.4098726326733413e-13,
-	2.2204460492503131e-16, 2.6134649999676185e-13,
-	-1.1302070390684094e-13}, /* L902 */
-{7.6472988869014422e+00, 7.6666450965490185e-13,
-	2.2204460492503131e-16, 1.9584334154387761e-13,
-	-8.0824236192711396e-14}, /* L903 */
-{6.6161608808319823e+00, 6.6402439102830613e-13,
-	2.2204460492503131e-16, 7.0898842352562497e-13,
-	2.3647750424515834e-13}, /* L904 */
-{7.4878571174627959e+00, 7.5234263263723733e-13,
-	2.2204460492503131e-16, 3.0724311983476582e-12,
-	4.3143266736933583e-13}, /* L905 */
-{8.0027720079277849e+00, 8.0496720400446975e-13,
-	2.2204460492503131e-16, -4.8738790781044372e-14,
-	6.4392935428259079e-14}, /* L906 */
-{6.3291169314673299e+00, 6.3732352728607111e-13,
-	2.2204460492503131e-16, 2.4646951146678475e-14,
-	2.4868995751603507e-14}, /* L907 */
-{5.9894092292604926e+00, 6.0378091415458357e-13,
-	2.2204460492503131e-16, 1.6608936448392342e-13,
-	-5.2413628992553640e-13}, /* L908 */
-{7.1226735037165598e+00, 7.1881389729355760e-13,
-	2.2204460492503131e-16, -4.6851411639181606e-14,
-	2.2204460492503131e-15}, /* L909 */
-{1.2004963995260768e+01, 1.2128631432517523e-12,
-	2.2204460492503131e-16, -1.1879386363489175e-14,
-	-7.1498362785860081e-14}, /* L910 */
-{5.2436965276595409e+00, 5.3035353886343728e-13,
-	2.2204460492503131e-16, 1.4608314558017810e-12,
-	9.5767838104166003e-13}, /* L911 */
-{5.4082330733706163e+00, 5.4759538917203976e-13,
-	2.2204460492503131e-16, 6.2074789752841752e-12,
-	2.5446311724408588e-13}, /* L912 */
-{5.1336335100961161e+00, 5.2036153164181087e-13,
-	2.2204460492503131e-16, 1.3966605649784469e-13,
-	9.4058094646243262e-13}, /* L913 */
-{6.1307536550257353e+00, 6.2211347184870647e-13,
-	2.2204460492503131e-16, 9.4368957093138306e-14,
-	2.1094237467877974e-14}, /* L914 */
-{6.5106660096199507e+00, 6.6138761134482138e-13,
-	2.2204460492503131e-16, 5.0759396685862157e-13,
-	-1.1102230246251565e-13}, /* L915 */
-{8.3286157600311341e+00, 8.4698914548653192e-13,
-	2.2204460492503131e-16, -1.0836886943366153e-12,
-	5.4738436006118718e-12}, /* L916 */
-{5.2467367401910279e+00, 5.3415605272277844e-13,
-	2.2204460492503131e-16, 2.6645352591003757e-15,
-	-4.6740389336719090e-14}, /* L917 */
-{7.6448922354710795e+00, 7.7915451868193486e-13,
-	2.2204460492503131e-16, 6.1779470428291461e-12,
-	1.6034951144661136e-11}, /* L918 */
-{5.4037081990071005e+00, 5.5133675402885274e-13,
-	2.2204460492503131e-16, -4.3998138465894954e-13,
-	-1.2402301408087624e-12}, /* L919 */
-{4.3652242783491957e+00, 4.4586556668946287e-13,
-	2.2204460492503131e-16, -3.4305891460917337e-14,
-	-6.0951244051921094e-14}, /* L920 */
-{6.3895323392144743e+00, 6.5333849441628900e-13,
-	2.2204460492503131e-16, 1.1612932837579137e-13,
-	-3.1674662892555716e-13}, /* L921 */
-{5.8123735953795981e+00, 5.9496851889662139e-13,
-	2.2204460492503131e-16, -5.8375526634790731e-13,
-	-9.4768637382003362e-13}, /* L922 */
-{6.5474101132018605e+00, 6.7093552935659773e-13,
-	2.2204460492503131e-16, -6.0607074914287296e-13,
-	-8.4632301167175683e-13}, /* L923 */
-{5.7401335151183037e+00, 5.8884841447337521e-13,
-	2.2204460492503131e-16, 5.9752203185325925e-13,
-	4.7628567756419216e-13}, /* L924 */
-{6.8264972566862019e+00, 7.0105032889955510e-13,
-	2.2204460492503131e-16, 1.4004353232621725e-12,
-	-5.8375526634790731e-13}, /* L925 */
-{6.4638330921997484e+00, 6.6452399138938745e-13,
-	2.2204460492503131e-16, -2.8677060726067793e-13,
-	-5.5944138210861638e-13}, /* L926 */
-{6.1794865563184924e+00, 6.3597738186871311e-13,
-	2.2204460492503131e-16, 4.0101255649460654e-13,
-	-1.5787371410169726e-13}, /* L927 */
-{8.3223124297326248e+00, 8.5743565025886426e-13,
-	2.2204460492503131e-16, -1.8762769116165146e-14,
-	-2.0916601783937949e-13}, /* L928 */
-{7.4370407969731209e+00, 7.6705308771352065e-13,
-	2.2204460492503131e-16, -9.6112007241799802e-13,
-	3.5260683262094972e-13}, /* L929 */
-{6.5539081896025664e+00, 6.7669481129684073e-13,
-	2.2204460492503131e-16, 1.1857181902996672e-13,
-	-9.2148511043887993e-15}, /* L930 */
-{8.1063500611954957e+00, 8.3788531668460564e-13,
-	2.2204460492503131e-16, 8.1490370007486490e-14,
-	7.0832228971084987e-14}, /* L931 */
-{5.0944286380281163e+00, 5.2713389209202433e-13,
-	2.2204460492503131e-16, 7.9602990865623724e-13,
-	-1.0729306332279975e-11}, /* L932 */
-{6.4677553810622532e+00, 6.6995367586919485e-13,
-	2.2204460492503131e-16, 4.0856207306205761e-13,
-	-2.1882495815361835e-13}, /* L933 */
-{5.1754631974800116e+00, 5.3666793231599286e-13,
-	2.2204460492503131e-16, 6.5281113847959205e-13,
-	1.9029222642075183e-13}, /* L934 */
-{5.5473349552734277e+00, 5.7584492729745307e-13,
-	2.2204460492503131e-16, -1.0713652187632761e-13,
-	-1.4399592629388280e-13}, /* L935 */
-{6.4204161123026866e+00, 6.6718852664848782e-13,
-	2.2204460492503131e-16, -1.6613377340490842e-12,
-	6.1659566341631944e-12}, /* L936 */
-{5.8863486679335608e+00, 6.1234350923200509e-13,
-	2.2204460492503131e-16, -1.5709655798445965e-13,
-	4.4408920985006262e-14}, /* L937 */
-{7.0773032767795323e+00, 7.3702155489741017e-13,
-	2.2204460492503131e-16, 4.1899816949353408e-13,
-	-5.4400928206632670e-14}, /* L938 */
-{7.1384564168047788e+00, 7.4418249340624243e-13,
-	2.2204460492503131e-16, 2.1316282072803006e-13,
-	8.6930462828149757e-13}, /* L939 */
-{7.2005432752390668e+00, 7.5145445421753720e-13,
-	2.2204460492503131e-16, 1.1635137298071641e-13,
-	-1.0236256287043943e-13}, /* L940 */
-{5.2109540236965906e+00, 5.4439786012494551e-13,
-	2.2204460492503131e-16, -1.0424994201230220e-13,
-	4.4408920985006262e-16}, /* L941 */
-{7.2018425725798965e+00, 7.5318917769351401e-13,
-	2.2204460492503131e-16, 6.1728400169158704e-13,
-	1.6231460620019789e-13}, /* L942 */
-{7.5646991034900575e+00, 7.9197759461635542e-13,
-	2.2204460492503131e-16, -4.1189274213593308e-14,
-	6.6391336872584361e-14}, /* L943 */
-{8.0042499164981002e+00, 8.3888451740676828e-13,
-	2.2204460492503131e-16, 9.6811447747313650e-14,
-	1.1080025785759062e-13}, /* L944 */
-{7.2097997347402023e+00, 7.5642270225273478e-13,
-	2.2204460492503131e-16, 3.7081449022480228e-14,
-	8.9483975784787617e-14}, /* L945 */
-{4.6287007350864569e+00, 4.8613890690774042e-13,
-	2.2204460492503131e-16, -9.7588603864551260e-14,
-	2.5313084961453569e-14}, /* L946 */
-{6.6119337702020271e+00, 6.9516614686904177e-13,
-	2.2204460492503131e-16, 1.8274270985330077e-13,
-	6.1461946643248666e-13}, /* L947 */
-{5.5200433228603947e+00, 5.8097970878634442e-13,
-	2.2204460492503131e-16, 1.6053824936079764e-13,
-	2.1138646388862981e-13}, /* L948 */
-{5.4968399016857976e+00, 5.7914784079571291e-13,
-	2.2204460492503131e-16, -9.5479180117763462e-15,
-	-1.3922196728799463e-13}, /* L949 */
-{5.8255275069440060e+00, 6.1442517740317726e-13,
-	2.2204460492503131e-16, -7.0555783437953323e-12,
-	1.0891287871572786e-11}, /* L950 */
-{6.8811791147795152e+00, 7.2652994731470244e-13,
-	2.2204460492503131e-16, -8.1379347705023974e-14,
-	-2.1538326677728037e-14}, /* L951 */
-{9.0120816747706520e+00, 9.5251584397715305e-13,
-	2.2204460492503131e-16, 2.0716761639505421e-13,
-	3.2818192607919627e-13}, /* L952 */
-{6.6128030311209933e+00, 6.9966255011877365e-13,
-	2.2204460492503131e-16, 1.1841638780651920e-12,
-	1.8962609260597674e-13}, /* L953 */
-{4.9091991170558229e+00, 5.1995907579538425e-13,
-	2.2204460492503131e-16, 2.1982415887578100e-14,
-	9.2126306583395490e-13}, /* L954 */
-{6.3900536626935871e+00, 6.7751360077750178e-13,
-	2.2204460492503131e-16, 1.2656542480726785e-13,
-	7.9691808707593736e-13}, /* L955 */
-{5.8969677330262291e+00, 6.2588823013243200e-13,
-	2.2204460492503131e-16, 1.5756285165480222e-12,
-	-6.2350125062948791e-13}, /* L956 */
-{7.6933140078650801e+00, 8.1740170188027150e-13,
-	2.2204460492503131e-16, -5.2735593669694936e-14,
-	-1.6120438317557273e-13}, /* L957 */
-{5.8556901326765569e+00, 6.2280736123909719e-13,
-	2.2204460492503131e-16, -1.0802470029602773e-13,
-	7.5406347832540632e-13}, /* L958 */
-{6.8952047467702009e+00, 7.3413497503338476e-13,
-	2.2204460492503131e-16, 2.0872192862952943e-13,
-	9.4035890185750759e-13}, /* L959 */
-{6.1161470839986061e+00, 6.5186744890866066e-13,
-	2.2204460492503131e-16, 6.1728400169158704e-14,
-	-6.3837823915946501e-14}, /* L960 */
-{6.1335860617206910e+00, 6.5440708407749071e-13,
-	2.2204460492503131e-16, -4.2188474935755949e-14,
-	-1.3622436512150671e-13}, /* L961 */
-{5.7419450410871500e+00, 6.1325944322732084e-13,
-	2.2204460492503131e-16, -4.3332004651119860e-13,
-	-2.2770674235061961e-13}, /* L962 */
-{6.4761176274904235e+00, 6.9239058930747888e-13,
-	2.2204460492503131e-16, 6.6613381477509392e-14,
-	5.0648374383399641e-13}, /* L963 */
-{5.2842334456957394e+00, 5.6554760874405474e-13,
-	2.2204460492503131e-16, -2.0439205883349132e-13,
-	-1.0547118733938987e-13}, /* L964 */
-{6.9018148828218333e+00, 7.3943628997596988e-13,
-	2.2204460492503131e-16, -1.1624035067825389e-13,
-	2.8044233602031454e-13}, /* L965 */
-{5.8033138160706299e+00, 6.2239102760486276e-13,
-	2.2204460492503131e-16, -6.7146288529329468e-13,
-	-2.7422508708241367e-14}, /* L966 */
-{7.3660821680963160e+00, 7.9081186044049900e-13,
-	2.2204460492503131e-16, 1.3300471835009375e-13,
-	2.1360690993788012e-13}, /* L967 */
-{6.4925116581854301e+00, 6.9774741540129526e-13,
-	2.2204460492503131e-16, -4.2765790908561030e-13,
-	1.6875389974302379e-13}, /* L968 */
-{5.7084634995950481e+00, 6.1411986607140534e-13,
-	2.2204460492503131e-16, -4.5641268542340185e-13,
-	-3.9779290972319359e-13}, /* L969 */
-{6.9384034806582662e+00, 7.4720785114834598e-13,
-	2.2204460492503131e-16, 1.8429702208777599e-14,
-	2.3026025530725747e-13}, /* L970 */
-{6.5687449065401884e+00, 7.0812800068154047e-13,
-	2.2204460492503131e-16, 3.3595348725157237e-13,
-	-9.3069996154326873e-13}, /* L971 */
-{5.8868324794816296e+00, 6.3526961469051457e-13,
-	2.2204460492503131e-16, 7.2875039336395275e-13,
-	-1.0487166690609229e-12}, /* L972 */
-{7.8915740700310826e+00, 8.5248474945842645e-13,
-	2.2204460492503131e-16, -2.3903101720179620e-13,
-	-1.8807178037150152e-13}, /* L973 */
-{5.2992823977846522e+00, 5.7304161416027455e-13,
-	2.2204460492503131e-16, -8.4809936851115708e-13,
-	-8.0846440653203899e-13}, /* L974 */
-{7.8897452030801762e+00, 8.5403906169290167e-13,
-	2.2204460492503131e-16, -4.7895021282329253e-13,
-	1.0214051826551440e-14}, /* L975 */
-{5.5701855652531194e+00, 6.0357274733746635e-13,
-	2.2204460492503131e-16, -1.5420997812043424e-13,
-	5.4400928206632670e-14}, /* L976 */
-{8.8536353826019187e+00, 9.6034291630076041e-13,
-	2.2204460492503131e-16, 7.2830630415410269e-14,
-	2.6645352591003757e-14}, /* L977 */
-{7.4910547015443365e+00, 8.1337714341600531e-13,
-	2.2204460492503131e-16, -1.8041124150158794e-13,
-	-1.5976109324356003e-13}, /* L978 */
-{6.9984692553917132e+00, 7.6066930532192600e-13,
-	2.2204460492503131e-16, 9.5701224722688494e-14,
-	9.5146113210375916e-13}, /* L979 */
-{5.6237256397473212e+00, 6.1187166444653940e-13,
-	2.2204460492503131e-16, -1.4513945600924671e-12,
-	1.7341683644644945e-12}, /* L980 */
-{6.8144764189416032e+00, 7.4218409196191715e-13,
-	2.2204460492503131e-16, 3.3084646133829665e-14,
-	7.1054273576010019e-14}, /* L981 */
-{6.8194387671740184e+00, 7.4348166512194780e-13,
-	2.2204460492503131e-16, 3.8768988019910466e-13,
-	1.0855760734784781e-12}, /* L982 */
-{6.1744671832417808e+00, 6.7384986479623876e-13,
-	2.2204460492503131e-16, -1.1679546219056647e-13,
-	1.3034018309099338e-13}, /* L983 */
-{6.6580298167526362e+00, 7.2736261458317131e-13,
-	2.2204460492503131e-16, -2.4358293160275934e-13,
-	-3.3195668436292181e-14}, /* L984 */
-{6.9218288265079506e+00, 7.5695005818943173e-13,
-	2.2204460492503131e-16, -5.2785553705803068e-12,
-	1.2372325386422744e-12}, /* L985 */
-{8.8133892261460289e+00, 9.6478380839926103e-13,
-	2.2204460492503131e-16, -2.9298785619857881e-13,
-	-9.4368957093138306e-14}, /* L986 */
-{7.7326510239734114e+00, 8.4733609018172729e-13,
-	2.2204460492503131e-16, -1.3389289676979388e-13,
-	1.5210055437364645e-13}, /* L987 */
-{6.5222685401886586e+00, 7.1542771706845087e-13,
-	2.2204460492503131e-16, 1.2811973704174306e-13,
-	3.2640556923979602e-14}, /* L988 */
-{9.8710839194041888e+00, 1.0838552277903091e-12,
-	2.2204460492503131e-16, -5.1725290717286043e-13,
-	5.0848214527832170e-13}, /* L989 */
-{6.3823245374172632e+00, 7.0149441810940516e-13,
-	2.2204460492503131e-16, 2.0516921495072893e-13,
-	3.2551739082009590e-13}, /* L990 */
-{6.0630688482802162e+00, 6.6707750434602531e-13,
-	2.2204460492503131e-16, -3.6415315207705135e-13,
-	5.9574567501385900e-13}, /* L991 */
-{6.6491949080503927e+00, 7.3230310704275325e-13,
-	2.2204460492503131e-16, 3.1996627569697011e-13,
-	1.2234657731369225e-13}, /* L992 */
-{7.4598454327789847e+00, 8.2241158327889252e-13,
-	2.2204460492503131e-16, 6.7812422344104561e-13,
-	4.6185277824406512e-14}, /* L993 */
-{8.9547302012872230e+00, 9.8820951421885184e-13,
-	2.2204460492503131e-16, -1.5176748746625890e-12,
-	2.4202861936828413e-14}, /* L994 */
-{6.8987451292889022e+00, 7.6208483967832308e-13,
-	2.2204460492503131e-16, -4.3742787170231168e-14,
-	3.8413716652030416e-14}, /* L995 */
-{5.9713867632325286e+00, 6.6030514389581185e-13,
-	2.2204460492503131e-16, -9.8809849191638932e-15,
-	1.8718360195180139e-13}, /* L996 */
-{5.5250763554684852e+00, 6.1156635311476748e-13,
-	2.2204460492503131e-16, -1.3222756223285614e-13,
-	1.8895995879120164e-13}, /* L997 */
-{6.2720453707206296e+00, 6.9494410226411674e-13,
-	2.2204460492503131e-16, -4.5630166312093934e-14,
-	-1.0880185641326534e-13}, /* L998 */
-{8.0370386804875285e+00, 8.9139806647153819e-13,
-	2.2204460492503131e-16, -3.5416114485542494e-14,
-	-4.7517545453956700e-14}, /* L999 */
-{7.2375014799653465e+00, 8.0352391407245705e-13,
-	2.2204460492503131e-16, -3.5860203695392556e-14,
-	-1.8474111129762605e-13}, /* L1000 */
-{1.0704751534462535e+01, 2.3769319845712289e-12,
-	2.2204460492503131e-16, -5.1324500205396362e-12,
-	2.5088819910479288e-12}, /* L1001 */
-{1.9969666668716467e+01, 6.6512351182268503e-12,
-	2.2204460492503131e-16, -7.0245698147175517e-11,
-	9.7082342165322189e-12}, /* L1002 */
-{2.5142056782565259e+01, 1.1209977390791437e-11,
-	2.2204460492503131e-16, 5.4001247917767614e-13,
-	-5.6191717945353048e-12}, /* L1003 */
-{2.8323200010548174e+01, 1.5722534385531617e-11,
-	2.2204460492503131e-16, -3.7680969455777813e-12,
-	-3.6082248300317588e-12}, /* L1004 */
-{3.2321791678561532e+01, 2.1530638383282508e-11,
-	2.2204460492503131e-16, 1.4333201292515696e-11,
-	6.5796257331385277e-12}, /* L1005 */
-{3.7391747446514401e+01, 2.9125646339167588e-11,
-	2.2204460492503131e-16, -2.7823965353945823e-11,
-	-1.8096635301390052e-11}, /* L1006 */
-{3.5997876224631987e+01, 3.2108420089382861e-11,
-	2.2204460492503131e-16, 1.3131717935266352e-11,
-	1.3136158827364852e-11}, /* L1007 */
-{4.6061583130257695e+01, 4.6024767330621330e-11,
-	2.2204460492503131e-16, -8.7482243671388460e-11,
-	9.2451313271624258e-10}, /* L1008 */
-{6.2174100014595624e+01, 6.9027117355346945e-11,
-	2.2204460492503131e-16, -4.0004777268620728e-11,
-	1.7784218542260533e-11}, /* L1009 */#else  /* }  { */
-
-/* Start of SP golden values */
-
-
-{, 0.0000000000000000e+00,
-	0.0000000000000000e+00, 0.0000000000000000e+00,
-	0.0000000000000000e+00, /* L1010 */
-{0.0000000000000000e+00, 0.0000000000000000e+00,
-	1.1920928955078125e-07, 0.0000000000000000e+00,
-	0.0000000000000000e+00}, /* L1011 */
-{0.0000000000000000e+00, 0.0000000000000000e+00,
-	1.1920928955078125e-07, 0.0000000000000000e+00,
-	0.0000000000000000e+00}, /* L1012 */
-{6.8018096685409546e-01, 1.1920928955078125e-07,
-	1.1920928955078125e-07, -5.9604644775390625e-08,
-	-1.1920928955078125e-07}, /* L1013 */
-{8.9273703098297119e-01, 2.0861625671386719e-07,
-	1.1920928955078125e-07, -1.1920928955078125e-07,
-	-2.3841857910156250e-07}, /* L1014 */
-{7.1418994665145874e-01, 2.0861625671386719e-07,
-	1.1920928955078125e-07, -5.9604644775390625e-08,
-	1.1920928955078125e-07}, /* L1015 */
-{3.6134567856788635e-01, 1.2665987014770508e-07,
-	1.1920928955078125e-07, 2.3841857910156250e-07,
-	7.1525573730468750e-07}, /* L1016 */
-{4.3648514151573181e-01, 1.7881393432617188e-07,
-	1.1920928955078125e-07, -5.9604644775390625e-08,
-	3.5762786865234375e-07}, /* L1017 */
-{4.7549185156822205e-01, 2.2351741790771484e-07,
-	1.1920928955078125e-07, 3.6954879760742188e-06,
-	-5.9604644775390625e-07}, /* L1018 */
-{4.2266038060188293e-01, 2.2351741790771484e-07,
-	1.1920928955078125e-07, 4.7683715820312500e-07,
-	8.3446502685546875e-07}, /* L1019 */
-{4.0575435757637024e-01, 2.3841857910156250e-07,
-	1.1920928955078125e-07, 3.5762786865234375e-07,
-	3.5762786865234375e-07}, /* L1020 */
-{3.2275927066802979e-01, 2.0861625671386719e-07,
-	1.1920928955078125e-07, -1.1920928955078125e-07,
-	1.1920928955078125e-07}, /* L1021 */
-{2.9586255550384521e-01, 2.0861625671386719e-07,
-	1.1920928955078125e-07, -1.1920928955078125e-07,
-	-2.3841857910156250e-07}, /* L1022 */
-{7.8410917520523071e-01, 6.0349702835083008e-07,
-	1.1920928955078125e-07, 7.1525573730468750e-07,
-	-7.1525573730468750e-07}, /* L1023 */
-{3.5955643653869629e-01, 2.9802322387695312e-07,
-	1.1920928955078125e-07, -3.5762786865234375e-07,
-	-3.5762786865234375e-07}, /* L1024 */
-{4.0270313620567322e-01, 3.5762786865234375e-07,
-	1.1920928955078125e-07, -2.3841857910156250e-07,
-	3.5762786865234375e-07}, /* L1025 */
-{2.9888099431991577e-01, 2.8312206268310547e-07,
-	1.1920928955078125e-07, -7.1525573730468750e-07,
-	-1.1920928955078125e-07}, /* L1026 */
-{5.8850812911987305e-01, 5.9232115745544434e-07,
-	1.1920928955078125e-07, -1.7285346984863281e-06,
-	3.5762786865234375e-07}, /* L1027 */
-{5.0337857007980347e-01, 5.3644180297851562e-07,
-	1.1920928955078125e-07, -4.7683715820312500e-07,
-	-4.7683715820312500e-07}, /* L1028 */
-{4.5867058634757996e-01, 5.1595270633697510e-07,
-	1.1920928955078125e-07, 7.1525573730468750e-07,
-	-1.2516975402832031e-06}, /* L1029 */
-{4.7820881009101868e-01, 5.6624412536621094e-07,
-	1.1920928955078125e-07, 0.0000000000000000e+00,
-	-1.0728836059570312e-06}, /* L1030 */
-{9.7883027791976929e-01, 1.2218952178955078e-06,
-	1.1920928955078125e-07, 8.3446502685546875e-07,
-	2.3841857910156250e-07}, /* L1031 */
-{4.2159116268157959e-01, 5.5134296417236328e-07,
-	1.1920928955078125e-07, -2.6822090148925781e-06,
-	-8.9406967163085938e-07}, /* L1032 */
-{5.0135254859924316e-01, 6.8545341491699219e-07,
-	1.1920928955078125e-07, 1.1920928955078125e-07,
-	-1.7881393432617188e-07}, /* L1033 */
-{1.0027021169662476e+00, 1.4305114746093750e-06,
-	1.1920928955078125e-07, -3.6954879760742188e-06,
-	-2.3841857910156250e-07}, /* L1034 */
-{7.2194659709930420e-01, 1.0728836059570312e-06,
-	1.1920928955078125e-07, -5.3644180297851562e-07,
-	4.7683715820312500e-07}, /* L1035 */
-{3.9529633522033691e-01, 6.1094760894775391e-07,
-	1.1920928955078125e-07, -1.6093254089355469e-06,
-	1.1920928955078125e-07}, /* L1036 */
-{5.9419322013854980e-01, 9.5367431640625000e-07,
-	1.1920928955078125e-07, 2.2649765014648438e-06,
-	0.0000000000000000e+00}, /* L1037 */
-{5.9087789058685303e-01, 9.8347663879394531e-07,
-	1.1920928955078125e-07, 2.2649765014648438e-06,
-	-2.9802322387695312e-06}, /* L1038 */
-{6.3101136684417725e-01, 1.0877847671508789e-06,
-	1.1920928955078125e-07, 2.3841857910156250e-07,
-	1.1920928955078125e-06}, /* L1039 */
-{1.1363973617553711e+00, 2.0265579223632812e-06,
-	1.1920928955078125e-07, -5.9604644775390625e-07,
-	2.3841857910156250e-07}, /* L1040 */
-{5.0943696498870850e-01, 9.3877315521240234e-07,
-	1.1920928955078125e-07, 2.8610229492187500e-06,
-	-3.1590461730957031e-06}, /* L1041 */
-{9.7332048416137695e-01, 1.8514692783355713e-06,
-	1.1920928955078125e-07, -5.9604644775390625e-07,
-	7.2717666625976562e-06}, /* L1042 */
-{8.8116312026977539e-01, 1.7285346984863281e-06,
-	1.1920928955078125e-07, 1.0728836059570312e-06,
-	-1.0132789611816406e-06}, /* L1043 */
-{1.0469392538070679e+00, 2.1159648895263672e-06,
-	1.1920928955078125e-07, 0.0000000000000000e+00,
-	-1.7285346984863281e-06}, /* L1044 */
-{6.3979321718215942e-01, 1.3336539268493652e-06,
-	1.1920928955078125e-07, -1.1920928955078125e-07,
-	1.4305114746093750e-06}, /* L1045 */
-{9.8686885833740234e-01, 2.1159648895263672e-06,
-	1.1920928955078125e-07, 2.7179718017578125e-05,
-	-2.1398067474365234e-05}, /* L1046 */
-{5.1392030715942383e-01, 1.1324882507324219e-06,
-	1.1920928955078125e-07, 3.0994415283203125e-06,
-	-1.0728836059570312e-06}, /* L1047 */
-{5.0039225816726685e-01, 1.1324882507324219e-06,
-	1.1920928955078125e-07, 4.2915344238281250e-06,
-	1.1920928955078125e-07}, /* L1048 */
-{8.0833417177200317e-01, 1.8775463104248047e-06,
-	1.1920928955078125e-07, 9.5367431640625000e-07,
-	-4.7683715820312500e-07}, /* L1049 */
-{6.4095199108123779e-01, 1.5273690223693848e-06,
-	1.1920928955078125e-07, -9.3042850494384766e-05,
-	2.2375583648681641e-04}, /* L1050 */
-{1.0251988172531128e+00, 2.5033950805664062e-06,
-	1.1920928955078125e-07, -2.5629997253417969e-06,
-	-2.5629997253417969e-06}, /* L1051 */
-{7.3866742849349976e-01, 1.8477439880371094e-06,
-	1.1920928955078125e-07, -3.5762786865234375e-07,
-	1.0728836059570312e-06}, /* L1052 */
-{1.1637136936187744e+00, 2.9802322387695312e-06,
-	1.1920928955078125e-07, 1.9073486328125000e-06,
-	-9.5367431640625000e-07}, /* L1053 */
-{6.5105575323104858e-01, 1.7061829566955566e-06,
-	1.1920928955078125e-07, -1.5676021575927734e-05,
-	1.1682510375976562e-05}, /* L1054 */
-{8.4511369466781616e-01, 2.2649765014648438e-06,
-	1.1920928955078125e-07, -4.7683715820312500e-07,
-	-6.1392784118652344e-06}, /* L1055 */
-{1.0660614967346191e+00, 2.9206275939941406e-06,
-	1.1920928955078125e-07, -5.5432319641113281e-06,
-	-1.7881393432617188e-06}, /* L1056 */
-{1.0486901998519897e+00, 2.9355287551879883e-06,
-	1.1920928955078125e-07, 1.1920928955078125e-07,
-	-6.5565109252929688e-07}, /* L1057 */
-{8.1313973665237427e-01, 2.3245811462402344e-06,
-	1.1920928955078125e-07, 2.2649765014648438e-06,
-	7.1525573730468750e-07}, /* L1058 */
-{1.0204066038131714e+00, 2.9802322387695312e-06,
-	1.1920928955078125e-07, 1.0013580322265625e-05,
-	-3.5762786865234375e-07}, /* L1059 */
-{8.1000715494155884e-01, 2.4139881134033203e-06,
-	1.1920928955078125e-07, -1.7881393432617188e-06,
-	-3.0398368835449219e-06}, /* L1060 */
-{9.7052782773971558e-01, 2.9504299163818359e-06,
-	1.1920928955078125e-07, 6.0796737670898438e-06,
-	-2.6702880859375000e-05}, /* L1061 */
-{6.6346895694732666e-01, 2.0563602447509766e-06,
-	1.1920928955078125e-07, -1.0728836059570312e-06,
-	-1.1324882507324219e-06}, /* L1062 */
-{8.2547765970230103e-01, 2.6077032089233398e-06,
-	1.1920928955078125e-07, 7.1525573730468750e-07,
-	7.1525573730468750e-07}, /* L1063 */
-{1.0555671453475952e+00, 3.3974647521972656e-06,
-	1.1920928955078125e-07, 3.5762786865234375e-07,
-	-7.1525573730468750e-07}, /* L1064 */
-{6.0000658035278320e-01, 1.9669532775878906e-06,
-	1.1920928955078125e-07, -1.0132789611816406e-06,
-	-5.9604644775390625e-08}, /* L1065 */
-{6.0714846849441528e-01, 2.0265579223632812e-06,
-	1.1920928955078125e-07, -5.8412551879882812e-06,
-	-1.4305114746093750e-06}, /* L1066 */
-{6.2719875574111938e-01, 2.1308660507202148e-06,
-	1.1920928955078125e-07, -3.4570693969726562e-06,
-	-8.3446502685546875e-07}, /* L1067 */
-{7.5642675161361694e-01, 2.6151537895202637e-06,
-	1.1920928955078125e-07, -3.0875205993652344e-05,
-	-1.6927719116210938e-05}, /* L1068 */
-{7.1186864376068115e-01, 2.5033950805664062e-06,
-	1.1920928955078125e-07, -4.4107437133789062e-06,
-	-4.2319297790527344e-06}, /* L1069 */
-{5.5729919672012329e-01, 1.9930303096771240e-06,
-	1.1920928955078125e-07, 5.9604644775390625e-07,
-	1.0728836059570312e-06}, /* L1070 */
-{9.2214035987854004e-01, 3.3527612686157227e-06,
-	1.1920928955078125e-07, -2.3841857910156250e-07,
-	2.3841857910156250e-06}, /* L1071 */
-{1.1209777593612671e+00, 4.1425228118896484e-06,
-	1.1920928955078125e-07, -8.3446502685546875e-07,
-	-3.3378601074218750e-06}, /* L1072 */
-{8.2143312692642212e-01, 3.0845403671264648e-06,
-	1.1920928955078125e-07, 2.0265579223632812e-06,
-	1.4305114746093750e-06}, /* L1073 */
-{9.1016262769699097e-01, 3.4719705581665039e-06,
-	1.1920928955078125e-07, 4.7683715820312500e-07,
-	-7.2121620178222656e-06}, /* L1074 */
-{8.4808546304702759e-01, 3.2857060432434082e-06,
-	1.1920928955078125e-07, 3.8146972656250000e-06,
-	-1.7285346984863281e-06}, /* L1075 */
-{7.8788590431213379e-01, 3.0994415283203125e-06,
-	1.1920928955078125e-07, -4.7087669372558594e-06,
-	2.0265579223632812e-06}, /* L1076 */
-{8.2463252544403076e-01, 3.2931566238403320e-06,
-	1.1920928955078125e-07, -2.3841857910156250e-07,
-	-1.9073486328125000e-06}, /* L1077 */
-{8.6029779911041260e-01, 3.4868717193603516e-06,
-	1.1920928955078125e-07, 1.5497207641601562e-06,
-	1.9073486328125000e-06}, /* L1078 */
-{8.8033676147460938e-01, 3.6209821701049805e-06,
-	1.1920928955078125e-07, -5.0604343414306641e-05,
-	-1.2701749801635742e-04}, /* L1079 */
-{1.2535502910614014e+00, 5.2303075790405273e-06,
-	1.1920928955078125e-07, 8.4638595581054688e-06,
-	1.1920928955078125e-06}, /* L1080 */
-{9.0141552686691284e-01, 3.8146972656250000e-06,
-	1.1920928955078125e-07, 2.2649765014648438e-06,
-	3.3378601074218750e-06}, /* L1081 */
-{7.7777242660522461e-01, 3.3378601074218750e-06,
-	1.1920928955078125e-07, -9.0599060058593750e-06,
-	-1.4185905456542969e-05}, /* L1082 */
-{1.0034232139587402e+00, 4.3660402297973633e-06,
-	1.1920928955078125e-07, -1.0013580322265625e-05,
-	2.9802322387695312e-06}, /* L1083 */
-{8.9863836765289307e-01, 3.9637088775634766e-06,
-	1.1920928955078125e-07, -7.4505805969238281e-06,
-	-6.9737434387207031e-06}, /* L1084 */
-{1.0266774892807007e+00, 4.5895576477050781e-06,
-	1.1920928955078125e-07, 1.6689300537109375e-06,
-	-7.7486038208007812e-07}, /* L1085 */
-{6.6445106267929077e-01, 3.0100345611572266e-06,
-	1.1920928955078125e-07, -2.8014183044433594e-05,
-	-2.6226043701171875e-05}, /* L1086 */
-{1.2500019073486328e+00, 5.7369470596313477e-06,
-	1.1920928955078125e-07, 1.0728836059570312e-06,
-	-2.9802322387695312e-07}, /* L1087 */
-{1.0576709508895874e+00, 4.9173831939697266e-06,
-	1.1920928955078125e-07, 4.7683715820312500e-07,
-	1.9669532775878906e-05}, /* L1088 */
-{8.0380576848983765e-01, 3.7848949432373047e-06,
-	1.1920928955078125e-07, -2.9802322387695312e-07,
-	1.3113021850585938e-06}, /* L1089 */
-{6.3124734163284302e-01, 3.0100345611572266e-06,
-	1.1920928955078125e-07, -7.3313713073730469e-06,
-	-4.0531158447265625e-06}, /* L1090 */
-{1.2044825553894043e+00, 5.8151781558990479e-06,
-	1.1920928955078125e-07, 2.8610229492187500e-06,
-	-4.4107437133789062e-06}, /* L1091 */
-{8.1098091602325439e-01, 3.9637088775634766e-06,
-	1.1920928955078125e-07, 2.6226043701171875e-06,
-	-5.0067901611328125e-06}, /* L1092 */
-{1.2168718576431274e+00, 6.0200691223144531e-06,
-	1.1920928955078125e-07, 1.4305114746093750e-06,
-	-1.4901161193847656e-06}, /* L1093 */
-{5.6548178195953369e-01, 2.8312206268310547e-06,
-	1.1920928955078125e-07, 5.1259994506835938e-06,
-	-1.6689300537109375e-06}, /* L1094 */
-{1.3882204294204712e+00, 7.0333480834960938e-06,
-	1.1920928955078125e-07, 2.8610229492187500e-06,
-	1.5497207641601562e-06}, /* L1095 */
-{1.7107630968093872e+00, 8.7693333625793457e-06,
-	1.1920928955078125e-07, 6.7949295043945312e-06,
-	3.0994415283203125e-06}, /* L1096 */
-{8.1896400451660156e-01, 4.2468309402465820e-06,
-	1.1920928955078125e-07, 5.2452087402343750e-06,
-	5.4836273193359375e-06}, /* L1097 */
-{7.6276636123657227e-01, 4.0009617805480957e-06,
-	1.1920928955078125e-07, 1.5497207641601562e-06,
-	2.9802322387695312e-06}, /* L1098 */
-{8.0899810791015625e-01, 4.2915344238281250e-06,
-	1.1920928955078125e-07, -2.2053718566894531e-06,
-	1.1920928955078125e-07}, /* L1099 */
-{8.7223005294799805e-01, 4.6789646148681641e-06,
-	1.1920928955078125e-07, -2.2649765014648438e-06,
-	-1.1920928955078125e-06}, /* L1100 */
-{8.2417380809783936e-01, 4.4703483581542969e-06,
-	1.1920928955078125e-07, 8.5830688476562500e-06,
-	1.2516975402832031e-05}, /* L1101 */
-{7.5204324722290039e-01, 4.1238963603973389e-06,
-	1.1920928955078125e-07, 1.3113021850585938e-06,
-	-5.0663948059082031e-06}, /* L1102 */
-{1.4193508625030518e+00, 7.8678131103515625e-06,
-	1.1920928955078125e-07, 9.6559524536132812e-06,
-	0.0000000000000000e+00}, /* L1103 */
-{9.6275132894515991e-01, 5.3942203521728516e-06,
-	1.1920928955078125e-07, -6.2584877014160156e-06,
-	-3.3974647521972656e-06}, /* L1104 */
-{9.3683904409408569e-01, 5.3048133850097656e-06,
-	1.1920928955078125e-07, -5.9008598327636719e-06,
-	5.3644180297851562e-06}, /* L1105 */
-{1.0781044960021973e+00, 6.1690807342529297e-06,
-	1.1920928955078125e-07, 7.1525573730468750e-06,
-	1.6689300537109375e-06}, /* L1106 */
-{1.0644396543502808e+00, 6.1541795730590820e-06,
-	1.1920928955078125e-07, -1.3113021850585938e-06,
-	3.4570693969726562e-06}, /* L1107 */
-{9.8469865322113037e-01, 5.7518482208251953e-06,
-	1.1920928955078125e-07, 2.2649765014648438e-06,
-	-5.4240226745605469e-06}, /* L1108 */
-{1.1337554454803467e+00, 6.6906213760375977e-06,
-	1.1920928955078125e-07, -6.7949295043945312e-06,
-	9.0599060058593750e-06}, /* L1109 */
-{9.7000402212142944e-01, 5.7816505432128906e-06,
-	1.1920928955078125e-07, -2.0265579223632812e-06,
-	1.0728836059570312e-06}, /* L1110 */
-{9.5541024208068848e-01, 5.7518482208251953e-06,
-	1.1920928955078125e-07, -3.1709671020507812e-05,
-	-8.5830688476562500e-06}, /* L1111 */
-{8.3822196722030640e-01, 5.0961971282958984e-06,
-	1.1920928955078125e-07, -6.6757202148437500e-06,
-	1.7881393432617188e-06}, /* L1112 */
-{1.9174509048461914e+00, 1.1771917343139648e-05,
-	1.1920928955078125e-07, -5.0663948059082031e-06,
-	-2.3245811462402344e-06}, /* L1113 */
-{1.0769299268722534e+00, 6.6757202148437500e-06,
-	1.1920928955078125e-07, -2.4437904357910156e-06,
-	2.8610229492187500e-06}, /* L1114 */
-{1.1833299398422241e+00, 7.4058771133422852e-06,
-	1.1920928955078125e-07, -8.3446502685546875e-06,
-	-1.7285346984863281e-06}, /* L1115 */
-{8.6897367238998413e-01, 5.4910778999328613e-06,
-	1.1920928955078125e-07, 2.3961067199707031e-05,
-	-4.7624111175537109e-05}, /* L1116 */
-{1.0105159282684326e+00, 6.4447522163391113e-06,
-	1.1920928955078125e-07, -5.5432319641113281e-06,
-	-1.4901161193847656e-06}, /* L1117 */
-{1.2222226858139038e+00, 7.8678131103515625e-06,
-	1.1920928955078125e-07, -9.9539756774902344e-06,
-	-1.0073184967041016e-05}, /* L1118 */
-{9.9771076440811157e-01, 6.4820051193237305e-06,
-	1.1920928955078125e-07, 6.6757202148437500e-06,
-	3.8146972656250000e-06}, /* L1119 */
-{8.5909843444824219e-01, 5.6326389312744141e-06,
-	1.1920928955078125e-07, 1.7881393432617188e-06,
-	-1.6689300537109375e-06}, /* L1120 */
-{1.0945979356765747e+00, 7.2419643402099609e-06,
-	1.1920928955078125e-07, 1.7881393432617188e-06,
-	4.7683715820312500e-06}, /* L1121 */
-{9.4642227888107300e-01, 6.3180923461914062e-06,
-	1.1920928955078125e-07, -9.1791152954101562e-06,
-	7.2717666625976562e-06}, /* L1122 */
-{9.4248169660568237e-01, 6.3478946685791016e-06,
-	1.1920928955078125e-07, -1.5497207641601562e-06,
-	-7.8678131103515625e-06}, /* L1123 */
-{1.0350898504257202e+00, 7.0333480834960938e-06,
-	1.1920928955078125e-07, 1.4305114746093750e-06,
-	-6.0200691223144531e-06}, /* L1124 */
-{1.2651975154876709e+00, 8.6724758148193359e-06,
-	1.1920928955078125e-07, -1.4424324035644531e-05,
-	1.0013580322265625e-05}, /* L1125 */
-{9.2753994464874268e-01, 6.4130872488021851e-06,
-	1.1920928955078125e-07, -2.0265579223632812e-06,
-	-4.7683715820312500e-06}, /* L1126 */
-{1.3073544502258301e+00, 9.1195106506347656e-06,
-	1.1920928955078125e-07, 7.1644783020019531e-05,
-	6.3896179199218750e-05}, /* L1127 */
-{9.6987730264663696e-01, 6.8247318267822266e-06,
-	1.1920928955078125e-07, 3.6954879760742188e-06,
-	-5.2165985107421875e-04}, /* L1128 */
-{9.7899848222732544e-01, 6.9439411163330078e-06,
-	1.1920928955078125e-07, 2.0265579223632812e-06,
-	-5.4836273193359375e-06}, /* L1129 */
-{8.6979395151138306e-01, 6.2212347984313965e-06,
-	1.1920928955078125e-07, 1.4305114746093750e-06,
-	-1.5497207641601562e-06}, /* L1130 */
-{9.7924292087554932e-01, 7.0631504058837891e-06,
-	1.1920928955078125e-07, -4.1127204895019531e-05,
-	1.7762184143066406e-05}, /* L1131 */
-{9.7541624307632446e-01, 7.0929527282714844e-06,
-	1.1920928955078125e-07, -7.6293945312500000e-06,
-	-1.0728836059570312e-06}, /* L1132 */
-{1.6664739847183228e+00, 1.2218952178955078e-05,
-	1.1920928955078125e-07, -1.9609928131103516e-05,
-	-1.3291835784912109e-05}, /* L1133 */
-{8.2053667306900024e-01, 6.0647726058959961e-06,
-	1.1920928955078125e-07, -1.8298625946044922e-05,
-	-2.4974346160888672e-05}, /* L1134 */
-{1.2599431276321411e+00, 9.3877315521240234e-06,
-	1.1920928955078125e-07, 1.0609626770019531e-05,
-	3.5762786865234375e-07}, /* L1135 */
-{1.3730195760726929e+00, 1.0311603546142578e-05,
-	1.1920928955078125e-07, -1.5497207641601562e-06,
-	-1.9669532775878906e-06}, /* L1136 */
-{1.4950799942016602e+00, 1.1317431926727295e-05,
-	1.1920928955078125e-07, -1.1920928955078125e-07,
-	-2.9802322387695312e-06}, /* L1137 */
-{8.7696063518524170e-01, 6.6906213760375977e-06,
-	1.1920928955078125e-07, 3.9339065551757812e-06,
-	0.0000000000000000e+00}, /* L1138 */
-{9.5106983184814453e-01, 7.3127448558807373e-06,
-	1.1920928955078125e-07, -5.5432319641113281e-06,
-	-6.6161155700683594e-06}, /* L1139 */
-{9.4996523857116699e-01, 7.3611736297607422e-06,
-	1.1920928955078125e-07, 9.1791152954101562e-06,
-	-3.5166740417480469e-06}, /* L1140 */
-{1.2995917797088623e+00, 1.0147690773010254e-05,
-	1.1920928955078125e-07, 1.2397766113281250e-05,
-	-2.5868415832519531e-05}, /* L1141 */
-{7.4620795249938965e-01, 5.8710575103759766e-06,
-	1.1920928955078125e-07, 9.5367431640625000e-07,
-	-2.0861625671386719e-06}, /* L1142 */
-{1.1202967166900635e+00, 8.8810920715332031e-06,
-	1.1920928955078125e-07, -2.9802322387695312e-07,
-	-8.5234642028808594e-06}, /* L1143 */
-{1.3694064617156982e+00, 1.0937452316284180e-05,
-	1.1920928955078125e-07, 5.0067901611328125e-06,
-	-6.6161155700683594e-06}, /* L1144 */
-{1.0537055730819702e+00, 8.4787607192993164e-06,
-	1.1920928955078125e-07, -2.8610229492187500e-06,
-	-4.7087669372558594e-06}, /* L1145 */
-{1.2646913528442383e+00, 1.0251998901367188e-05,
-	1.1920928955078125e-07, -1.2874603271484375e-05,
-	-3.1590461730957031e-06}, /* L1146 */
-{1.2353997230529785e+00, 1.0088086128234863e-05,
-	1.1920928955078125e-07, 2.9802322387695312e-06,
-	0.0000000000000000e+00}, /* L1147 */
-{1.0905735492706299e+00, 8.9704990386962891e-06,
-	1.1920928955078125e-07, -1.7642974853515625e-05,
-	-1.9550323486328125e-05}, /* L1148 */
-{1.2841809988021851e+00, 1.0639429092407227e-05,
-	1.1920928955078125e-07, -2.2053718566894531e-06,
-	-3.3378601074218750e-06}, /* L1149 */
-{1.1500061750411987e+00, 9.5963478088378906e-06,
-	1.1920928955078125e-07, 5.1259994506835938e-06,
-	-4.1723251342773438e-07}, /* L1150 */
-{1.3510324954986572e+00, 1.1354684829711914e-05,
-	1.1920928955078125e-07, 1.2159347534179688e-05,
-	1.5377998352050781e-05}, /* L1151 */
-{9.4499003887176514e-01, 7.9981982707977295e-06,
-	1.1920928955078125e-07, -8.1062316894531250e-06,
-	-1.0132789611816406e-06}, /* L1152 */
-{1.3810083866119385e+00, 1.1771917343139648e-05,
-	1.1920928955078125e-07, 2.1457672119140625e-06,
-	4.3511390686035156e-05}, /* L1153 */
-{1.1562519073486328e+00, 9.9241733551025391e-06,
-	1.1920928955078125e-07, 2.3841857910156250e-07,
-	9.2983245849609375e-06}, /* L1154 */
-{1.0793009996414185e+00, 9.3281269073486328e-06,
-	1.1920928955078125e-07, -1.0728836059570312e-05,
-	-1.5497207641601562e-06}, /* L1155 */
-{1.6061439514160156e+00, 1.3977289199829102e-05,
-	1.1920928955078125e-07, 8.8214874267578125e-06,
-	2.2649765014648438e-06}, /* L1156 */
-{1.0843659639358521e+00, 9.5013529062271118e-06,
-	1.1920928955078125e-07, -4.5716762542724609e-05,
-	-7.1525573730468750e-06}, /* L1157 */
-{1.2195807695388794e+00, 1.0758638381958008e-05,
-	1.1920928955078125e-07, 1.1086463928222656e-05,
-	-5.5432319641113281e-06}, /* L1158 */
-{1.0805189609527588e+00, 9.5963478088378906e-06,
-	1.1920928955078125e-07, -5.7816505432128906e-06,
-	-5.5432319641113281e-06}, /* L1159 */
-{1.2214741706848145e+00, 1.0922551155090332e-05,
-	1.1920928955078125e-07, 4.6491622924804688e-06,
-	3.4809112548828125e-05}, /* L1160 */
-{9.9667584896087646e-01, 8.9704990386962891e-06,
-	1.1920928955078125e-07, -2.3365020751953125e-05,
-	-1.6868114471435547e-05}, /* L1161 */
-{1.1175954341888428e+00, 1.0125339031219482e-05,
-	1.1920928955078125e-07, 1.0728836059570312e-06,
-	-2.3841857910156250e-06}, /* L1162 */
-{1.5759546756744385e+00, 1.4372169971466064e-05,
-	1.1920928955078125e-07, -7.0333480834960938e-06,
-	-1.6748905181884766e-05}, /* L1163 */
-{1.2970726490020752e+00, 1.1906027793884277e-05,
-	1.1920928955078125e-07, 8.2254409790039062e-06,
-	1.3113021850585938e-06}, /* L1164 */
-{1.3951190710067749e+00, 1.2889504432678223e-05,
-	1.1920928955078125e-07, 2.3841857910156250e-07,
-	3.2186508178710938e-05}, /* L1165 */
-{1.2964704036712646e+00, 1.2055039405822754e-05,
-	1.1920928955078125e-07, 1.5139579772949219e-05,
-	-1.1920928955078125e-06}, /* L1166 */
-{1.0063484907150269e+00, 9.4175338745117188e-06,
-	1.1920928955078125e-07, -6.7949295043945312e-06,
-	-2.3782253265380859e-05}, /* L1167 */
-{9.6187907457351685e-01, 9.0599060058593750e-06,
-	1.1920928955078125e-07, -7.9274177551269531e-06,
-	-2.8252601623535156e-05}, /* L1168 */
-{1.5304667949676514e+00, 1.4506280422210693e-05,
-	1.1920928955078125e-07, 6.9260597229003906e-05,
-	-3.3318996429443359e-05}, /* L1169 */
-{1.2531182765960693e+00, 1.1950731277465820e-05,
-	1.1920928955078125e-07, -4.2319297790527344e-06,
-	-8.0466270446777344e-06}, /* L1170 */
-{1.0869301557540894e+00, 1.0430812835693359e-05,
-	1.1920928955078125e-07, -4.5299530029296875e-06,
-	1.6331672668457031e-05}, /* L1171 */
-{9.2123973369598389e-01, 8.8959932327270508e-06,
-	1.1920928955078125e-07, 2.6345252990722656e-05,
-	1.5497207641601562e-06}, /* L1172 */
-{1.2883348464965820e+00, 1.2516975402832031e-05,
-	1.1920928955078125e-07, -1.9252300262451172e-05,
-	-8.9406967163085938e-07}, /* L1173 */
-{7.4848139286041260e-01, 7.3164701461791992e-06,
-	1.1920928955078125e-07, -2.7418136596679688e-06,
-	2.3841857910156250e-07}, /* L1174 */
-{1.0303035974502563e+00, 1.0132789611816406e-05,
-	1.1920928955078125e-07, -3.9339065551757812e-06,
-	2.0265579223632812e-06}, /* L1175 */
-{1.1414912939071655e+00, 1.1295080184936523e-05,
-	1.1920928955078125e-07, 7.2717666625976562e-06,
-	8.0943107604980469e-05}, /* L1176 */
-{1.5194602012634277e+00, 1.5124678611755371e-05,
-	1.1920928955078125e-07, 2.6226043701171875e-06,
-	-7.7486038208007812e-06}, /* L1177 */
-{1.0238080024719238e+00, 1.0251998901367188e-05,
-	1.1920928955078125e-07, 2.7418136596679688e-06,
-	-3.1590461730957031e-06}, /* L1178 */
-{1.1346142292022705e+00, 1.1429190635681152e-05,
-	1.1920928955078125e-07, -7.5101852416992188e-06,
-	1.6331672668457031e-05}, /* L1179 */
-{1.1793857812881470e+00, 1.1950731277465820e-05,
-	1.1920928955078125e-07, -1.6629695892333984e-05,
-	-1.3232231140136719e-05}, /* L1180 */
-{1.6403435468673706e+00, 1.6719102859497070e-05,
-	1.1920928955078125e-07, 3.6954879760742188e-06,
-	-3.3974647521972656e-06}, /* L1181 */
-{1.7790050506591797e+00, 1.8239021301269531e-05,
-	1.1920928955078125e-07, -3.5166740417480469e-06,
-	-7.7486038208007812e-07}, /* L1182 */
-{1.4508632421493530e+00, 1.4960765838623047e-05,
-	1.1920928955078125e-07, -7.3909759521484375e-06,
-	-4.1723251342773438e-06}, /* L1183 */
-{1.5513389110565186e+00, 1.6093254089355469e-05,
-	1.1920928955078125e-07, -6.1690807342529297e-05,
-	6.1869621276855469e-05}, /* L1184 */
-{1.2285547256469727e+00, 1.2814998626708984e-05,
-	1.1920928955078125e-07, -1.9431114196777344e-05,
-	2.0623207092285156e-05}, /* L1185 */
-{1.1248027086257935e+00, 1.1801719665527344e-05,
-	1.1920928955078125e-07, 4.4107437133789062e-05,
-	-1.8775463104248047e-05}, /* L1186 */
-{1.0338598489761353e+00, 1.0907649993896484e-05,
-	1.1920928955078125e-07, -2.4080276489257812e-05,
-	2.3841857910156250e-07}, /* L1187 */
-{8.8742196559906006e-01, 9.4175338745117188e-06,
-	1.1920928955078125e-07, -4.1007995605468750e-05,
-	-4.6312808990478516e-05}, /* L1188 */
-{1.2569568157196045e+00, 1.3411045074462891e-05,
-	1.1920928955078125e-07, -8.0466270446777344e-06,
-	1.7642974853515625e-05}, /* L1189 */
-{1.0193126201629639e+00, 1.0937452316284180e-05,
-	1.1920928955078125e-07, -3.6358833312988281e-06,
-	5.1140785217285156e-05}, /* L1190 */
-{1.2982742786407471e+00, 1.4007091522216797e-05,
-	1.1920928955078125e-07, -1.6629695892333984e-05,
-	-8.1062316894531250e-06}, /* L1191 */
-{1.0288227796554565e+00, 1.1160969734191895e-05,
-	1.1920928955078125e-07, 7.0333480834960938e-06,
-	1.4305114746093750e-06}, /* L1192 */
-{1.3306066989898682e+00, 1.4513731002807617e-05,
-	1.1920928955078125e-07, 8.9406967163085938e-06,
-	9.5367431640625000e-07}, /* L1193 */
-{1.0203016996383667e+00, 1.1190772056579590e-05,
-	1.1920928955078125e-07, -1.9669532775878906e-06,
-	2.0265579223632812e-05}, /* L1194 */
-{1.1182178258895874e+00, 1.2330710887908936e-05,
-	1.1920928955078125e-07, -7.9274177551269531e-06,
-	-3.2186508178710938e-06}, /* L1195 */
-{1.2682054042816162e+00, 1.4066696166992188e-05,
-	1.1920928955078125e-07, 1.9752979278564453e-04,
-	1.2481212615966797e-04}, /* L1196 */
-{1.1684124469757080e+00, 1.3023614883422852e-05,
-	1.1920928955078125e-07, -3.2961368560791016e-05,
-	-7.0333480834960938e-06}, /* L1197 */
-{1.3009834289550781e+00, 1.4580786228179932e-05,
-	1.1920928955078125e-07, -3.2722949981689453e-05,
-	-5.5491924285888672e-05}, /* L1198 */
-{1.6348913908004761e+00, 1.8417835235595703e-05,
-	1.1920928955078125e-07, -3.5762786865234375e-06,
-	2.9802322387695312e-06}, /* L1199 */
-{1.6420391798019409e+00, 1.8596649169921875e-05,
-	1.1920928955078125e-07, -2.4318695068359375e-05,
-	2.7537345886230469e-05}, /* L1200 */
-{9.4108945131301880e-01, 1.0713934898376465e-05,
-	1.1920928955078125e-07, 1.5974044799804688e-05,
-	1.3232231140136719e-05}, /* L1201 */
-{9.9413573741912842e-01, 1.1377036571502686e-05,
-	1.1920928955078125e-07, 5.6028366088867188e-06,
-	1.9073486328125000e-06}, /* L1202 */
-{1.2357484102249146e+00, 1.4215707778930664e-05,
-	1.1920928955078125e-07, 6.6757202148437500e-06,
-	-2.3841857910156250e-07}, /* L1203 */
-{1.6301261186599731e+00, 1.8849968910217285e-05,
-	1.1920928955078125e-07, 1.4662742614746094e-05,
-	2.6226043701171875e-06}, /* L1204 */
-{1.0974243879318237e+00, 1.2755393981933594e-05,
-	1.1920928955078125e-07, 4.2915344238281250e-06,
-	2.3961067199707031e-05}, /* L1205 */
-{1.0510134696960449e+00, 1.2278556823730469e-05,
-	1.1920928955078125e-07, 5.4836273193359375e-06,
-	2.3841857910156250e-06}, /* L1206 */
-{1.4908643960952759e+00, 1.7508864402770996e-05,
-	1.1920928955078125e-07, 7.8082084655761719e-05,
-	-3.7074089050292969e-05}, /* L1207 */
-{1.0176256895065308e+00, 1.2010335922241211e-05,
-	1.1920928955078125e-07, 4.4465065002441406e-05,
-	-1.7285346984863281e-05}, /* L1208 */
-{1.5929344892501831e+00, 1.8894672393798828e-05,
-	1.1920928955078125e-07, -3.8385391235351562e-05,
-	7.7486038208007812e-06}, /* L1209 */
-{1.7058891057968140e+00, 2.0340085029602051e-05,
-	1.1920928955078125e-07, 6.0558319091796875e-05,
-	2.7537345886230469e-05}, /* L1210 */
-{1.1977496147155762e+00, 1.4349818229675293e-05,
-	1.1920928955078125e-07, -5.0663948059082031e-06,
-	-7.9274177551269531e-06}, /* L1211 */
-{1.0519545078277588e+00, 1.2665987014770508e-05,
-	1.1920928955078125e-07, -9.4175338745117188e-06,
-	-2.5033950805664062e-05}, /* L1212 */
-{1.8053981065750122e+00, 2.1845102310180664e-05,
-	1.1920928955078125e-07, 5.8412551879882812e-06,
-	4.7683715820312500e-07}, /* L1213 */
-{1.2401795387268066e+00, 1.5079975128173828e-05,
-	1.1920928955078125e-07, 9.1791152954101562e-06,
-	-6.3180923461914062e-06}, /* L1214 */
-{1.1975620985031128e+00, 1.4707446098327637e-05,
-	1.1920928955078125e-07, 3.4335851669311523e-03,
-	-5.1164627075195312e-04}, /* L1215 */
-{1.5048525333404541e+00, 1.8477439880371094e-05,
-	1.1920928955078125e-07, 3.6954879760742188e-06,
-	-7.8082084655761719e-06}, /* L1216 */
-{1.1292189359664917e+00, 1.3932585716247559e-05,
-	1.1920928955078125e-07, 1.3113021850585938e-06,
-	1.0848045349121094e-05}, /* L1217 */
-{1.1700141429901123e+00, 1.4506280422210693e-05,
-	1.1920928955078125e-07, 1.8239021301269531e-05,
-	-1.8358230590820312e-05}, /* L1218 */
-{1.1943764686584473e+00, 1.4878809452056885e-05,
-	1.1920928955078125e-07, 4.7683715820312500e-06,
-	-9.2387199401855469e-06}, /* L1219 */
-{1.7291518449783325e+00, 2.1643936634063721e-05,
-	1.1920928955078125e-07, -2.0265579223632812e-06,
-	-1.9729137420654297e-05}, /* L1220 */
-{1.6042573451995850e+00, 2.0176172256469727e-05,
-	1.1920928955078125e-07, 5.0067901611328125e-06,
-	1.6689300537109375e-06}, /* L1221 */
-{1.4740267992019653e+00, 1.8626451492309570e-05,
-	1.1920928955078125e-07, 8.3446502685546875e-07,
-	-3.9339065551757812e-06}, /* L1222 */
-{1.4295392036437988e+00, 1.8149614334106445e-05,
-	1.1920928955078125e-07, -2.3841857910156250e-07,
-	5.7220458984375000e-06}, /* L1223 */
-{1.4392251968383789e+00, 1.8358230590820312e-05,
-	1.1920928955078125e-07, -1.6987323760986328e-05,
-	-2.1576881408691406e-05}, /* L1224 */
-{2.1736485958099365e+00, 2.7865171432495117e-05,
-	1.1920928955078125e-07, -5.3107738494873047e-05,
-	-4.2319297790527344e-05}, /* L1225 */
-{1.1919932365417480e+00, 1.5348196029663086e-05,
-	1.1920928955078125e-07, -7.0035457611083984e-05,
-	8.1062316894531250e-06}, /* L1226 */
-{1.6522569656372070e+00, 2.1398067474365234e-05,
-	1.1920928955078125e-07, -7.0112943649291992e-04,
-	2.2172927856445312e-04}, /* L1227 */
-{1.6680214405059814e+00, 2.1681189537048340e-05,
-	1.1920928955078125e-07, -8.1539154052734375e-05,
-	-7.9333782196044922e-05}, /* L1228 */
-{2.1757786273956299e+00, 2.8401613235473633e-05,
-	1.1920928955078125e-07, 8.4638595581054688e-06,
-	1.0490417480468750e-05}, /* L1229 */
-{1.3124855756759644e+00, 1.7210841178894043e-05,
-	1.1920928955078125e-07, 7.9870223999023438e-06,
-	-1.4483928680419922e-05}, /* L1230 */
-{1.5203121900558472e+00, 2.0027160644531250e-05,
-	1.1920928955078125e-07, -1.9431114196777344e-05,
-	3.5762786865234375e-07}, /* L1231 */
-{1.4143544435501099e+00, 1.8715858459472656e-05,
-	1.1920928955078125e-07, -2.3245811462402344e-06,
-	-9.0003013610839844e-06}, /* L1232 */
-{1.4371609687805176e+00, 1.9103288650512695e-05,
-	1.1920928955078125e-07, 6.3180923461914062e-06,
-	-3.1292438507080078e-05}, /* L1233 */
-{1.6026908159255981e+00, 2.1427869796752930e-05,
-	1.1920928955078125e-07, -3.3575296401977539e-04,
-	-6.3514709472656250e-04}, /* L1234 */
-{1.6288132667541504e+00, 2.1845102310180664e-05,
-	1.1920928955078125e-07, -4.0888786315917969e-05,
-	9.1791152954101562e-06}, /* L1235 */
-{1.0187907218933105e+00, 1.3723969459533691e-05,
-	1.1920928955078125e-07, 1.3470649719238281e-05,
-	2.3841857910156250e-06}, /* L1236 */
-{1.2462819814682007e+00, 1.6862526535987854e-05,
-	1.1920928955078125e-07, 3.8146972656250000e-06,
-	1.1920928955078125e-06}, /* L1237 */
-{1.4384590387344360e+00, 1.9550323486328125e-05,
-	1.1920928955078125e-07, -3.6537647247314453e-05,
-	-3.3259391784667969e-05}, /* L1238 */
-{1.3267810344696045e+00, 1.8194317817687988e-05,
-	1.1920928955078125e-07, -1.6243457794189453e-03,
-	5.1963329315185547e-04}, /* L1239 */
-{1.2517757415771484e+00, 1.7166137695312500e-05,
-	1.1920928955078125e-07, -3.6954879760742188e-05,
-	-4.6491622924804688e-05}, /* L1240 */
-{1.6038647890090942e+00, 2.2083520889282227e-05,
-	1.1920928955078125e-07, -6.8545341491699219e-06,
-	2.6226043701171875e-06}, /* L1241 */
-{1.1713200807571411e+00, 1.6197562217712402e-05,
-	1.1920928955078125e-07, -4.7683715820312500e-06,
-	-5.6028366088867188e-06}, /* L1242 */
-{1.8583130836486816e+00, 2.5808811187744141e-05,
-	1.1920928955078125e-07, -1.2278556823730469e-05,
-	-1.6689300537109375e-05}, /* L1243 */
-{1.2964105606079102e+00, 1.8082559108734131e-05,
-	1.1920928955078125e-07, -4.8756599426269531e-05,
-	-3.9100646972656250e-05}, /* L1244 */
-{1.4914346933364868e+00, 2.0891427993774414e-05,
-	1.1920928955078125e-07, -2.7477741241455078e-05,
-	-1.9073486328125000e-06}, /* L1245 */
-{1.2626861333847046e+00, 1.7762184143066406e-05,
-	1.1920928955078125e-07, -1.7881393432617188e-07,
-	1.1920928955078125e-07}, /* L1246 */
-{1.3563674688339233e+00, 1.9162893295288086e-05,
-	1.1920928955078125e-07, 2.0980834960937500e-05,
-	2.7418136596679688e-05}, /* L1247 */
-{1.5367653369903564e+00, 2.1800398826599121e-05,
-	1.1920928955078125e-07, 4.0531158447265625e-06,
-	-1.1324882507324219e-06}, /* L1248 */
-{1.2470778226852417e+00, 1.7765909433364868e-05,
-	1.1920928955078125e-07, 3.4332275390625000e-05,
-	2.9921531677246094e-05}, /* L1249 */
-{1.0934772491455078e+00, 1.5646219253540039e-05,
-	1.1920928955078125e-07, 2.8252601623535156e-05,
-	3.8146972656250000e-05}, /* L1250 */
-{1.9852321147918701e+00, 2.8520822525024414e-05,
-	1.1920928955078125e-07, -2.0563602447509766e-05,
-	1.2874603271484375e-05}, /* L1251 */
-{1.2313609123229980e+00, 1.7762184143066406e-05,
-	1.1920928955078125e-07, 7.0333480834960938e-06,
-	-8.5234642028808594e-06}, /* L1252 */
-{1.2252029180526733e+00, 1.7762184143066406e-05,
-	1.1920928955078125e-07, -6.1577558517456055e-04,
-	-2.3275613784790039e-04}, /* L1253 */
-{1.0384093523025513e+00, 1.5102326869964600e-05,
-	1.1920928955078125e-07, -4.2915344238281250e-06,
-	-7.1525573730468750e-07}, /* L1254 */
-{1.4937413930892944e+00, 2.1815299987792969e-05,
-	1.1920928955078125e-07, 4.0650367736816406e-05,
-	-1.2755393981933594e-05}, /* L1255 */
-{1.2570779323577881e+00, 1.8432736396789551e-05,
-	1.1920928955078125e-07, 2.6345252990722656e-05,
-	-5.1259994506835938e-06}, /* L1256 */
-{1.8190509080886841e+00, 2.6784837245941162e-05,
-	1.1920928955078125e-07, -9.2089176177978516e-05,
-	-7.8439712524414062e-05}, /* L1257 */
-{1.0523401498794556e+00, 1.5556812286376953e-05,
-	1.1920928955078125e-07, 4.8518180847167969e-05,
-	7.2598457336425781e-05}, /* L1258 */
-{1.8098148107528687e+00, 2.6866793632507324e-05,
-	1.1920928955078125e-07, -2.8133392333984375e-05,
-	-1.0192394256591797e-05}, /* L1259 */
-{1.5516481399536133e+00, 2.3126602172851562e-05,
-	1.1920928955078125e-07, -1.1730194091796875e-04,
-	-5.0246715545654297e-05}, /* L1260 */
-{1.7170596122741699e+00, 2.5689601898193359e-05,
-	1.1920928955078125e-07, 8.1062316894531250e-06,
-	1.6212463378906250e-05}, /* L1261 */
-{1.6130100488662720e+00, 2.4229288101196289e-05,
-	1.1920928955078125e-07, 2.0265579223632812e-05,
-	1.2755393981933594e-05}, /* L1262 */
-{1.5766159296035767e+00, 2.3778527975082397e-05,
-	1.1920928955078125e-07, -2.6404857635498047e-05,
-	-6.1452388763427734e-05}, /* L1263 */
-{1.3089818954467773e+00, 1.9818544387817383e-05,
-	1.1920928955078125e-07, 6.5565109252929688e-06,
-	3.5405158996582031e-05}, /* L1264 */
-{2.3881494998931885e+00, 3.6299228668212891e-05,
-	1.1920928955078125e-07, 5.2452087402343750e-06,
-	-2.7954578399658203e-05}, /* L1265 */
-{1.3607747554779053e+00, 2.0766630768775940e-05,
-	1.1920928955078125e-07, -2.3841857910156250e-06,
-	1.5258789062500000e-05}, /* L1266 */
-{1.0377191305160522e+00, 1.5914440155029297e-05,
-	1.1920928955078125e-07, -3.7550926208496094e-06,
-	-1.6212463378906250e-04}, /* L1267 */
-{9.7865903377532959e-01, 1.5050172805786133e-05,
-	1.1920928955078125e-07, 1.8000602722167969e-05,
-	-1.6272068023681641e-05}, /* L1268 */
-{1.3841279745101929e+00, 2.1368265151977539e-05,
-	1.1920928955078125e-07, -1.3709068298339844e-06,
-	-2.2470951080322266e-05}, /* L1269 */
-{8.3651173114776611e-01, 1.2964010238647461e-05,
-	1.1920928955078125e-07, 1.1682510375976562e-05,
-	-2.2053718566894531e-06}, /* L1270 */
-{1.2979427576065063e+00, 2.0192470401525497e-05,
-	1.1920928955078125e-07, 6.4373016357421875e-06,
-	6.3180923461914062e-06}, /* L1271 */
-{1.2060588598251343e+00, 1.8835067749023438e-05,
-	1.1920928955078125e-07, 4.1604042053222656e-05,
-	1.4305114746093750e-06}, /* L1272 */
-{1.0417672395706177e+00, 1.6331672668457031e-05,
-	1.1920928955078125e-07, -4.5776367187500000e-05,
-	5.2809715270996094e-05}, /* L1273 */
-{1.1557486057281494e+00, 1.8186867237091064e-05,
-	1.1920928955078125e-07, -1.0728836059570312e-06,
-	1.9907951354980469e-05}, /* L1274 */
-{1.1678060293197632e+00, 1.8447637557983398e-05,
-	1.1920928955078125e-07, -4.3451786041259766e-05,
-	-3.6835670471191406e-05}, /* L1275 */
-{1.0798661708831787e+00, 1.7121434211730957e-05,
-	1.1920928955078125e-07, 7.5101852416992188e-06,
-	1.3113021850585938e-05}, /* L1276 */
-{1.6089533567428589e+00, 2.5607645511627197e-05,
-	1.1920928955078125e-07, 4.4941902160644531e-05,
-	2.3841857910156250e-06}, /* L1277 */
-{9.2531841993331909e-01, 1.4781951904296875e-05,
-	1.1920928955078125e-07, -4.5180320739746094e-05,
-	2.0861625671386719e-05}, /* L1278 */
-{1.0825912952423096e+00, 1.7359852790832520e-05,
-	1.1920928955078125e-07, -4.7683715820312500e-06,
-	1.0967254638671875e-05}, /* L1279 */
-{1.1458694934844971e+00, 1.8447637557983398e-05,
-	1.1920928955078125e-07, 1.3041496276855469e-04,
-	5.2809715270996094e-05}, /* L1280 */
-{1.2772612571716309e+00, 2.0634382963180542e-05,
-	1.1920928955078125e-07, -5.6743621826171875e-05,
-	-4.6730041503906250e-05}, /* L1281 */
-{9.4301450252532959e-01, 1.5288591384887695e-05,
-	1.1920928955078125e-07, -2.3245811462402344e-06,
-	2.5033950805664062e-06}, /* L1282 */
-{1.3827694654464722e+00, 2.2500753402709961e-05,
-	1.1920928955078125e-07, -1.3172626495361328e-05,
-	2.1457672119140625e-06}, /* L1283 */
-{9.4524723291397095e-01, 1.5437602996826172e-05,
-	1.1920928955078125e-07, -4.1723251342773438e-07,
-	2.3841857910156250e-07}, /* L1284 */
-{1.4381570816040039e+00, 2.3573637008666992e-05,
-	1.1920928955078125e-07, 1.8000602722167969e-05,
-	1.4305114746093750e-06}, /* L1285 */
-{9.2118191719055176e-01, 1.5154480934143066e-05,
-	1.1920928955078125e-07, -7.0929527282714844e-06,
-	-7.2121620178222656e-06}, /* L1286 */
-{1.1705466508865356e+00, 1.9326806068420410e-05,
-	1.1920928955078125e-07, 1.7881393432617188e-06,
-	-6.7353248596191406e-06}, /* L1287 */
-{1.0789124965667725e+00, 1.7881393432617188e-05,
-	1.1920928955078125e-07, -3.2961368560791016e-05,
-	9.3221664428710938e-05}, /* L1288 */
-{1.6003317832946777e+00, 2.6613473892211914e-05,
-	1.1920928955078125e-07, 5.8412551879882812e-06,
-	-9.7155570983886719e-06}, /* L1289 */
-{1.8595010042190552e+00, 3.1039118766784668e-05,
-	1.1920928955078125e-07, -1.0073184967041016e-05,
-	7.3909759521484375e-06}, /* L1290 */
-{9.3055397272109985e-01, 1.5586614608764648e-05,
-	1.1920928955078125e-07, 2.1219253540039062e-05,
-	-1.3828277587890625e-05}, /* L1291 */
-{1.5620447397232056e+00, 2.6255846023559570e-05,
-	1.1920928955078125e-07, -7.0333480834960938e-06,
-	8.2254409790039062e-06}, /* L1292 */
-{1.6129204034805298e+00, 2.7209520339965820e-05,
-	1.1920928955078125e-07, 9.7751617431640625e-06,
-	-1.7225742340087891e-05}, /* L1293 */
-{1.5218948125839233e+00, 2.5764107704162598e-05,
-	1.1920928955078125e-07, -2.7179718017578125e-05,
-	-7.5697898864746094e-06}, /* L1294 */
-{1.9754331111907959e+00, 3.3557415008544922e-05,
-	1.1920928955078125e-07, -1.9669532775878906e-06,
-	2.6226043701171875e-06}, /* L1295 */
-{1.2727109193801880e+00, 2.1696090698242188e-05,
-	1.1920928955078125e-07, -1.1682510375976562e-05,
-	-3.6358833312988281e-06}, /* L1296 */
-{1.7381219863891602e+00, 2.9733870178461075e-05,
-	1.1920928955078125e-07, 8.9406967163085938e-06,
-	-2.3245811462402344e-06}, /* L1297 */
-{9.6112900972366333e-01, 1.6510486602783203e-05,
-	1.1920928955078125e-07, -1.1205673217773438e-05,
-	-1.2153387069702148e-04}, /* L1298 */
-{1.1695462465286255e+00, 2.0146369934082031e-05,
-	1.1920928955078125e-07, 4.0531158447265625e-06,
-	3.4570693969726562e-06}, /* L1299 */
-{1.1542683839797974e+00, 1.9952654838562012e-05,
-	1.1920928955078125e-07, -2.8014183044433594e-06,
-	-1.2993812561035156e-05}, /* L1300 */
-{1.8624702692031860e+00, 3.2305717468261719e-05,
-	1.1920928955078125e-07, 7.5101852416992188e-06,
-	7.0333480834960938e-06}, /* L1301 */
-{8.9964288473129272e-01, 1.5661120414733887e-05,
-	1.1920928955078125e-07, 4.3392181396484375e-05,
-	-1.3691186904907227e-04}, /* L1302 */
-{1.2183562517166138e+00, 2.1278858184814453e-05,
-	1.1920928955078125e-07, -3.4034252166748047e-05,
-	4.7683715820312500e-07}, /* L1303 */
-{8.7741857767105103e-01, 1.5377998352050781e-05,
-	1.1920928955078125e-07, 2.3484230041503906e-05,
-	-1.2856721878051758e-04}, /* L1304 */
-{2.1357288360595703e+00, 3.7610530853271484e-05,
-	1.1920928955078125e-07, 1.3327598571777344e-04,
-	4.8029422760009766e-04}, /* L1305 */
-{1.2161464691162109e+00, 2.1457672119140625e-05,
-	1.1920928955078125e-07, -1.2576580047607422e-05,
-	6.6161155700683594e-05}, /* L1306 */
-{1.2137373685836792e+00, 2.1487474441528320e-05,
-	1.1920928955078125e-07, -6.9141387939453125e-06,
-	2.0265579223632812e-06}, /* L1307 */
-{1.1658335924148560e+00, 2.0712614059448242e-05,
-	1.1920928955078125e-07, -2.8371810913085938e-05,
-	-1.1879205703735352e-04}, /* L1308 */
-{1.5931706428527832e+00, 2.8394162654876709e-05,
-	1.1920928955078125e-07, 2.2649765014648438e-05,
-	-2.1696090698242188e-05}, /* L1309 */
-{1.0907585620880127e+00, 1.9505620002746582e-05,
-	1.1920928955078125e-07, 3.1471252441406250e-05,
-	-4.2617321014404297e-05}, /* L1310 */
-{1.7374719381332397e+00, 3.1173229217529297e-05,
-	1.1920928955078125e-07, 2.9087066650390625e-05,
-	1.1086463928222656e-05}, /* L1311 */
-{1.3886525630950928e+00, 2.5004148483276367e-05,
-	1.1920928955078125e-07, 5.1259994506835938e-05,
-	-6.4969062805175781e-05}, /* L1312 */
-{1.2540564537048340e+00, 2.2649765014648438e-05,
-	1.1920928955078125e-07, 2.1815299987792969e-05,
-	-2.0980834960937500e-05}, /* L1313 */
-{9.9175816774368286e-01, 1.7970800399780273e-05,
-	1.1920928955078125e-07, -7.5101852416992188e-06,
-	4.8875808715820312e-06}, /* L1314 */
-{1.6540836095809937e+00, 3.0070543289184570e-05,
-	1.1920928955078125e-07, -9.4175338745117188e-06,
-	5.2452087402343750e-06}, /* L1315 */
-{1.1118304729461670e+00, 2.0295381546020508e-05,
-	1.1920928955078125e-07, 2.0480155944824219e-04,
-	3.4022331237792969e-04}, /* L1316 */
-{1.3232371807098389e+00, 2.4214386940002441e-05,
-	1.1920928955078125e-07, -6.5565109252929688e-06,
-	2.3841857910156250e-07}, /* L1317 */
-{1.0291864871978760e+00, 1.8894672393798828e-05,
-	1.1920928955078125e-07, 1.3351440429687500e-05,
-	-2.4378299713134766e-05}, /* L1318 */
-{1.3769135475158691e+00, 2.5361776351928711e-05,
-	1.1920928955078125e-07, -3.3974647521972656e-05,
-	4.1365623474121094e-05}, /* L1319 */
-{9.7899967432022095e-01, 1.8090009689331055e-05,
-	1.1920928955078125e-07, -1.9192695617675781e-05,
-	-9.4771385192871094e-06}, /* L1320 */
-{1.4660800695419312e+00, 2.7179718017578125e-05,
-	1.1920928955078125e-07, 4.3511390686035156e-05,
-	2.3245811462402344e-05}, /* L1321 */
-{9.0497338771820068e-01, 1.6830861568450928e-05,
-	1.1920928955078125e-07, 4.5299530029296875e-05,
-	-4.8875808715820312e-06}, /* L1322 */
-{1.5557006597518921e+00, 2.9027462005615234e-05,
-	1.1920928955078125e-07, -1.0615587234497070e-04,
-	-3.7848949432373047e-05}, /* L1323 */
-{1.4645508527755737e+00, 2.7418136596679688e-05,
-	1.1920928955078125e-07, -1.2248754501342773e-04,
-	-8.8274478912353516e-05}, /* L1324 */
-{1.8489490747451782e+00, 3.4719705581665039e-05,
-	1.1920928955078125e-07, 5.4359436035156250e-05,
-	6.0319900512695312e-05}, /* L1325 */
-{1.7372847795486450e+00, 3.2722949981689453e-05,
-	1.1920928955078125e-07, -3.4034252166748047e-05,
-	9.8943710327148438e-06}, /* L1326 */
-{1.8800387382507324e+00, 3.5524368286132812e-05,
-	1.1920928955078125e-07, -2.5987625122070312e-05,
-	9.5367431640625000e-07}, /* L1327 */
-{1.3620268106460571e+00, 2.5816261768341064e-05,
-	1.1920928955078125e-07, -5.9008598327636719e-06,
-	8.4638595581054688e-06}, /* L1328 */
-{1.4184815883636475e+00, 2.6971101760864258e-05,
-	1.1920928955078125e-07, -1.2934207916259766e-05,
-	8.2254409790039062e-06}, /* L1329 */
-{1.2609255313873291e+00, 2.4050474166870117e-05,
-	1.1920928955078125e-07, 2.0265579223632812e-06,
-	7.8678131103515625e-06}, /* L1330 */
-{1.2538588047027588e+00, 2.3990869522094727e-05,
-	1.1920928955078125e-07, 4.1723251342773438e-05,
-	-2.0742416381835938e-05}, /* L1331 */
-{1.2079840898513794e+00, 2.3186206817626953e-05,
-	1.1920928955078125e-07, -3.0159950256347656e-05,
-	-2.9742717742919922e-05}, /* L1332 */
-{1.6592340469360352e+00, 3.1948089599609375e-05,
-	1.1920928955078125e-07, 1.2278556823730469e-05,
-	4.2915344238281250e-06}, /* L1333 */
-{1.2129570245742798e+00, 2.3424625396728516e-05,
-	1.1920928955078125e-07, 1.4901161193847656e-05,
-	7.8678131103515625e-06}, /* L1334 */
-{1.3397462368011475e+00, 2.5957822799682617e-05,
-	1.1920928955078125e-07, -2.9981136322021484e-05,
-	-2.6106834411621094e-05}, /* L1335 */
-{1.3335621356964111e+00, 2.5913119316101074e-05,
-	1.1920928955078125e-07, 4.0531158447265625e-06,
-	-6.5565109252929688e-07}, /* L1336 */
-{1.8132857084274292e+00, 3.5345554351806641e-05,
-	1.1920928955078125e-07, 5.1259994506835938e-06,
-	8.7022781372070312e-06}, /* L1337 */
-{1.0045012235641479e+00, 1.9639730453491211e-05,
-	1.1920928955078125e-07, -2.8669834136962891e-05,
-	-7.5697898864746094e-05}, /* L1338 */
-{1.1465537548065186e+00, 2.2485852241516113e-05,
-	1.1920928955078125e-07, -7.8082084655761719e-06,
-	7.8678131103515625e-06}, /* L1339 */
-{1.3559750318527222e+00, 2.6673078536987305e-05,
-	1.1920928955078125e-07, -4.9650669097900391e-05,
-	-2.2232532501220703e-05}, /* L1340 */
-{1.6374152898788452e+00, 3.2305717468261719e-05,
-	1.1920928955078125e-07, -9.5367431640625000e-07,
-	-1.4901161193847656e-06}, /* L1341 */
-{8.7349468469619751e-01, 1.7285346984863281e-05,
-	1.1920928955078125e-07, -7.6293945312500000e-06,
-	4.0531158447265625e-06}, /* L1342 */
-{1.3870619535446167e+00, 2.7537345886230469e-05,
-	1.1920928955078125e-07, -5.0723552703857422e-05,
-	-1.3619661331176758e-04}, /* L1343 */
-{1.3697391748428345e+00, 2.7269124984741211e-05,
-	1.1920928955078125e-07, -1.1205673217773438e-05,
-	5.3644180297851562e-06}, /* L1344 */
-{1.2577501535415649e+00, 2.5123357772827148e-05,
-	1.1920928955078125e-07, 1.1873245239257812e-04,
-	4.7564506530761719e-05}, /* L1345 */
-{8.5861575603485107e-01, 1.7195940017700195e-05,
-	1.1920928955078125e-07, -1.9669532775878906e-06,
-	-4.4107437133789062e-06}, /* L1346 */
-{1.3351397514343262e+00, 2.6836991310119629e-05,
-	1.1920928955078125e-07, 1.3399124145507812e-04,
-	-2.2524595260620117e-04}, /* L1347 */
-{1.2263201475143433e+00, 2.4706125259399414e-05,
-	1.1920928955078125e-07, -8.2850456237792969e-06,
-	-1.7881393432617188e-07}, /* L1348 */
-{1.4231839179992676e+00, 2.8759241104125977e-05,
-	1.1920928955078125e-07, 1.0848045349121094e-05,
-	6.0796737670898438e-06}, /* L1349 */
-{1.2554723024368286e+00, 2.5451183319091797e-05,
-	1.1920928955078125e-07, 5.8650970458984375e-05,
-	1.0848045349121094e-04}, /* L1350 */
-{1.6113200187683105e+00, 3.2752752304077148e-05,
-	1.1920928955078125e-07, -2.0503997802734375e-05,
-	-2.0384788513183594e-05}, /* L1351 */
-{1.6944191455841064e+00, 3.4540891647338867e-05,
-	1.1920928955078125e-07, 2.2888183593750000e-05,
-	1.5258789062500000e-05}, /* L1352 */
-{1.7725239992141724e+00, 3.6239624023437500e-05,
-	1.1920928955078125e-07, -8.8214874267578125e-06,
-	-1.6987323760986328e-05}, /* L1353 */
-{1.3036923408508301e+00, 2.6732683181762695e-05,
-	1.1920928955078125e-07, -3.6478042602539062e-05,
-	1.8358230590820312e-05}, /* L1354 */
-{2.0716965198516846e+00, 4.2602419853210449e-05,
-	1.1920928955078125e-07, 1.3113021850585938e-06,
-	9.6559524536132812e-06}, /* L1355 */
-{1.7556488513946533e+00, 3.6209821701049805e-05,
-	1.1920928955078125e-07, 2.3722648620605469e-05,
-	3.1232833862304688e-05}, /* L1356 */
-{1.4149175882339478e+00, 2.9265880584716797e-05,
-	1.1920928955078125e-07, 1.0251998901367188e-05,
-	4.9829483032226562e-05}, /* L1357 */
-{1.2239744663238525e+00, 2.5391578674316406e-05,
-	1.1920928955078125e-07, -2.2232532501220703e-05,
-	4.9352645874023438e-05}, /* L1358 */
-{1.8379373550415039e+00, 3.8236379623413086e-05,
-	1.1920928955078125e-07, -1.0788440704345703e-05,
-	4.6849250793457031e-05}, /* L1359 */
-{1.2392036914825439e+00, 2.5853514671325684e-05,
-	1.1920928955078125e-07, -9.1791152954101562e-06,
-	-1.1205673217773438e-05}, /* L1360 */
-{2.0640878677368164e+00, 4.3183565139770508e-05,
-	1.1920928955078125e-07, 1.3828277587890625e-05,
-	-3.8146972656250000e-06}, /* L1361 */
-{1.1540567874908447e+00, 2.4214386940002441e-05,
-	1.1920928955078125e-07, -3.8743019104003906e-06,
-	3.1232833862304688e-05}, /* L1362 */
-{1.4506357908248901e+00, 3.0525028705596924e-05,
-	1.1920928955078125e-07, 4.7802925109863281e-05,
-	5.4121017456054688e-05}, /* L1363 */
-{1.2244940996170044e+00, 2.5838613510131836e-05,
-	1.1920928955078125e-07, -1.0192394256591797e-05,
-	-7.2121620178222656e-05}, /* L1364 */
-{1.7947084903717041e+00, 3.7983059883117676e-05,
-	1.1920928955078125e-07, 4.1365623474121094e-05,
-	2.0873546600341797e-04}, /* L1365 */
-{1.0404492616653442e+00, 2.2083520889282227e-05,
-	1.1920928955078125e-07, -1.0049343109130859e-04,
-	-1.7166137695312500e-05}, /* L1366 */
-{1.6932382583618164e+00, 3.6031007766723633e-05,
-	1.1920928955078125e-07, 2.6226043701171875e-06,
-	3.8504600524902344e-05}, /* L1367 */
-{1.0041375160217285e+00, 2.1427869796752930e-05,
-	1.1920928955078125e-07, -1.4364719390869141e-05,
-	8.8214874267578125e-06}, /* L1368 */
-{1.1350351572036743e+00, 2.4288892745971680e-05,
-	1.1920928955078125e-07, -2.1457672119140625e-05,
-	-1.6570091247558594e-05}, /* L1369 */
-{1.4458054304122925e+00, 3.1024217605590820e-05,
-	1.1920928955078125e-07, 7.0333480834960938e-06,
-	-6.3776969909667969e-06}, /* L1370 */
-{1.7375079393386841e+00, 3.7387013435363770e-05,
-	1.1920928955078125e-07, -7.9870223999023438e-06,
-	1.2874603271484375e-05}, /* L1371 */
-{1.5731759071350098e+00, 3.3944845199584961e-05,
-	1.1920928955078125e-07, 1.9073486328125000e-06,
-	4.1723251342773438e-06}, /* L1372 */
-{1.6914273500442505e+00, 3.6597251892089844e-05,
-	1.1920928955078125e-07, -1.3411045074462891e-05,
-	-1.8477439880371094e-06}, /* L1373 */
-{1.3100943565368652e+00, 2.8431415557861328e-05,
-	1.1920928955078125e-07, -3.6180019378662109e-05,
-	5.9962272644042969e-05}, /* L1374 */
-{1.7335295677185059e+00, 3.7714838981628418e-05,
-	1.1920928955078125e-07, -1.4305114746093750e-06,
-	-1.6272068023681641e-05}, /* L1375 */
-{2.4289181232452393e+00, 5.2988529205322266e-05,
-	1.1920928955078125e-07, -1.0311603546142578e-05,
-	-8.0466270446777344e-06}, /* L1376 */
-{2.0093674659729004e+00, 4.3958425521850586e-05,
-	1.1920928955078125e-07, -2.3722648620605469e-05,
-	1.5974044799804688e-05}, /* L1377 */
-{1.0772960186004639e+00, 2.3633241653442383e-05,
-	1.1920928955078125e-07, 1.3828277587890625e-05,
-	1.1920928955078125e-07}, /* L1378 */
-{1.4037636518478394e+00, 3.0875205993652344e-05,
-	1.1920928955078125e-07, -1.6927719116210938e-05,
-	-1.4841556549072266e-05}, /* L1379 */
-{1.2685499191284180e+00, 2.7976930141448975e-05,
-	1.1920928955078125e-07, 1.3351440429687500e-05,
-	1.4185905456542969e-05}, /* L1380 */
-{1.5781387090682983e+00, 3.4898519515991211e-05,
-	1.1920928955078125e-07, -3.5464763641357422e-05,
-	7.1525573730468750e-07}, /* L1381 */
-{1.2983435392379761e+00, 2.8789043426513672e-05,
-	1.1920928955078125e-07, -2.9802322387695312e-06,
-	-2.2351741790771484e-05}, /* L1382 */
-{1.6043317317962646e+00, 3.5673379898071289e-05,
-	1.1920928955078125e-07, -2.7775764465332031e-05,
-	-5.3167343139648438e-05}, /* L1383 */
-{1.3502142429351807e+00, 3.0130147933959961e-05,
-	1.1920928955078125e-07, -5.1420927047729492e-04,
-	-5.3250789642333984e-04}, /* L1384 */
-{1.6409204006195068e+00, 3.6686658859252930e-05,
-	1.1920928955078125e-07, -1.8000602722167969e-05,
-	1.1622905731201172e-04}, /* L1385 */
-{1.0525113344192505e+00, 2.3588538169860840e-05,
-	1.1920928955078125e-07, -1.0013580322265625e-05,
-	1.0609626770019531e-05}, /* L1386 */
-{1.2797068357467651e+00, 2.8759241104125977e-05,
-	1.1920928955078125e-07, 2.0265579223632812e-05,
-	1.4901161193847656e-05}, /* L1387 */
-{1.6454463005065918e+00, 3.7074089050292969e-05,
-	1.1920928955078125e-07, 5.4836273193359375e-06,
-	1.4305114746093750e-06}, /* L1388 */
-{1.8370115756988525e+00, 4.1499733924865723e-05,
-	1.1920928955078125e-07, 4.7683715820312500e-07,
-	2.0265579223632812e-06}, /* L1389 */
-{1.2052081823348999e+00, 2.7298927307128906e-05,
-	1.1920928955078125e-07, 1.0371208190917969e-05,
-	-4.7683715820312500e-06}, /* L1390 */
-{1.7833750247955322e+00, 4.0501356124877930e-05,
-	1.1920928955078125e-07, 1.4781951904296875e-05,
-	-1.3470649719238281e-05}, /* L1391 */
-{1.2067022323608398e+00, 2.7477741241455078e-05,
-	1.1920928955078125e-07, -1.1444091796875000e-05,
-	-1.1801719665527344e-05}, /* L1392 */
-{1.0259829759597778e+00, 2.3424625396728516e-05,
-	1.1920928955078125e-07, 1.9192695617675781e-05,
-	1.4305114746093750e-06}, /* L1393 */
-{1.1892608404159546e+00, 2.7224421501159668e-05,
-	1.1920928955078125e-07, -8.7261199951171875e-05,
-	-1.5497207641601562e-06}, /* L1394 */
-{1.6310317516326904e+00, 3.7431716918945312e-05,
-	1.1920928955078125e-07, -4.2319297790527344e-06,
-	-2.7894973754882812e-05}, /* L1395 */
-{1.1712638139724731e+00, 2.6956200599670410e-05,
-	1.1920928955078125e-07, 8.2492828369140625e-05,
-	1.4388561248779297e-04}, /* L1396 */
-{1.3191109895706177e+00, 3.0428171157836914e-05,
-	1.1920928955078125e-07, -1.4424324035644531e-05,
-	-5.8412551879882812e-06}, /* L1397 */
-{1.1687425374984741e+00, 2.7030706405639648e-05,
-	1.1920928955078125e-07, -1.4185905456542969e-05,
-	2.9802322387695312e-05}, /* L1398 */
-{1.5179406404495239e+00, 3.5196542739868164e-05,
-	1.1920928955078125e-07, 3.5762786865234375e-07,
-	-1.4960765838623047e-05}, /* L1399 */
-{1.1524952650070190e+00, 2.6792287826538086e-05,
-	1.1920928955078125e-07, 1.4662742614746094e-05,
-	-2.1994113922119141e-05}, /* L1400 */
-{1.6869832277297974e+00, 3.9316713809967041e-05,
-	1.1920928955078125e-07, -3.8743019104003906e-06,
-	-5.0663948059082031e-06}, /* L1401 */
-{1.1122173070907593e+00, 2.5987625122070312e-05,
-	1.1920928955078125e-07, -7.2717666625976562e-06,
-	2.2411346435546875e-05}, /* L1402 */
-{2.0101656913757324e+00, 4.7087669372558594e-05,
-	1.1920928955078125e-07, -4.5299530029296875e-06,
-	-2.1457672119140625e-06}, /* L1403 */
-{1.1953006982803345e+00, 2.8073787689208984e-05,
-	1.1920928955078125e-07, -3.3438205718994141e-05,
-	2.3722648620605469e-05}, /* L1404 */
-{1.9925403594970703e+00, 4.6916306018829346e-05,
-	1.1920928955078125e-07, 3.3855438232421875e-05,
-	-8.9406967163085938e-06}, /* L1405 */
-{1.2078046798706055e+00, 2.8520822525024414e-05,
-	1.1920928955078125e-07, -1.5026330947875977e-04,
-	1.0275840759277344e-04}, /* L1406 */
-{1.7974610328674316e+00, 4.2535364627838135e-05,
-	1.1920928955078125e-07, -7.9870223999023438e-06,
-	-2.5153160095214844e-05}, /* L1407 */
-{1.2951791286468506e+00, 3.0726194381713867e-05,
-	1.1920928955078125e-07, 6.7949295043945312e-06,
-	-3.8146972656250000e-06}, /* L1408 */
-{1.7307336330413818e+00, 4.1201710700988770e-05,
-	1.1920928955078125e-07, 4.6491622924804688e-05,
-	9.8228454589843750e-05}, /* L1409 */
-{1.1131089925765991e+00, 2.6538968086242676e-05,
-	1.1920928955078125e-07, -1.7881393432617188e-07,
-	6.3180923461914062e-06}, /* L1410 */
-{1.2630264759063721e+00, 3.0189752578735352e-05,
-	1.1920928955078125e-07, 4.4584274291992188e-05,
-	-3.6537647247314453e-05}, /* L1411 */
-{2.2866775989532471e+00, 5.4791569709777832e-05,
-	1.1920928955078125e-07, -5.9604644775390625e-06,
-	-7.0333480834960938e-06}, /* L1412 */
-{1.9254223108291626e+00, 4.6253204345703125e-05,
-	1.1920928955078125e-07, 2.0861625671386719e-05,
-	2.3841857910156250e-06}, /* L1413 */
-{1.2598603963851929e+00, 3.0338764190673828e-05,
-	1.1920928955078125e-07, -1.7583370208740234e-05,
-	1.1920928955078125e-05}, /* L1414 */
-{2.0592036247253418e+00, 4.9710273742675781e-05,
-	1.1920928955078125e-07, -1.4901161193847656e-06,
-	3.5762786865234375e-06}, /* L1415 */
-{1.3841522932052612e+00, 3.3497810363769531e-05,
-	1.1920928955078125e-07, -3.2186508178710938e-06,
-	-2.5570392608642578e-05}, /* L1416 */
-{1.2210686206817627e+00, 2.9623508453369141e-05,
-	1.1920928955078125e-07, -3.8444995880126953e-05,
-	-1.9669532775878906e-05}, /* L1417 */
-{1.3291358947753906e+00, 3.2335519790649414e-05,
-	1.1920928955078125e-07, 1.2874603271484375e-05,
-	8.9764595031738281e-05}, /* L1418 */
-{1.6585131883621216e+00, 4.0441751480102539e-05,
-	1.1920928955078125e-07, 6.4969062805175781e-05,
-	6.7114830017089844e-05}, /* L1419 */
-{2.3393919467926025e+00, 5.7190656661987305e-05,
-	1.1920928955078125e-07, -6.0796737670898438e-05,
-	-2.4616718292236328e-05}, /* L1420 */
-{1.9875842332839966e+00, 4.8696994781494141e-05,
-	1.1920928955078125e-07, -1.2636184692382812e-05,
-	2.1696090698242188e-05}, /* L1421 */
-{1.2387638092041016e+00, 3.0420720577239990e-05,
-	1.1920928955078125e-07, -1.8477439880371094e-06,
-	2.2649765014648438e-06}, /* L1422 */
-{1.3376426696777344e+00, 3.2931566238403320e-05,
-	1.1920928955078125e-07, -4.5418739318847656e-05,
-	3.3497810363769531e-05}, /* L1423 */
-{1.5897701978683472e+00, 3.9234757423400879e-05,
-	1.1920928955078125e-07, -4.0054321289062500e-05,
-	3.0994415283203125e-06}, /* L1424 */
-{1.9498820304870605e+00, 4.8235058784484863e-05,
-	1.1920928955078125e-07, -1.3053417205810547e-05,
-	1.9550323486328125e-05}, /* L1425 */
-{1.1309252977371216e+00, 2.8043985366821289e-05,
-	1.1920928955078125e-07, 3.8504600524902344e-05,
-	-4.1723251342773438e-07}, /* L1426 */
-{1.7441880702972412e+00, 4.3362379074096680e-05,
-	1.1920928955078125e-07, -8.7559223175048828e-05,
-	1.6105175018310547e-04}, /* L1427 */
-{1.1221930980682373e+00, 2.7962028980255127e-05,
-	1.1920928955078125e-07, -2.7894973754882812e-05,
-	-5.0067901611328125e-06}, /* L1428 */
-{1.8358938694000244e+00, 4.5850872993469238e-05,
-	1.1920928955078125e-07, -1.2040138244628906e-05,
-	4.2915344238281250e-06}, /* L1429 */
-{1.4915813207626343e+00, 3.7342309951782227e-05,
-	1.1920928955078125e-07, 1.2159347534179688e-05,
-	-3.9339065551757812e-06}, /* L1430 */
-{1.3514995574951172e+00, 3.3915042877197266e-05,
-	1.1920928955078125e-07, -1.9609928131103516e-05,
-	5.0067901611328125e-06}, /* L1431 */
-{1.9424787759780884e+00, 4.8860907554626465e-05,
-	1.1920928955078125e-07, -1.4305114746093750e-06,
-	1.0132789611816406e-05}, /* L1432 */
-{2.2824485301971436e+00, 5.7548284530639648e-05,
-	1.1920928955078125e-07, 1.6808509826660156e-05,
-	1.0967254638671875e-05}, /* L1433 */
-{1.4196853637695312e+00, 3.5881996154785156e-05,
-	1.1920928955078125e-07, 8.3565711975097656e-05,
-	2.6822090148925781e-05}, /* L1434 */
-{2.0587852001190186e+00, 5.2154064178466797e-05,
-	1.1920928955078125e-07, -2.0265579223632812e-05,
-	1.1086463928222656e-05}, /* L1435 */
-{1.5611630678176880e+00, 3.9644539356231689e-05,
-	1.1920928955078125e-07, 3.7789344787597656e-05,
-	6.9737434387207031e-05}, /* L1436 */
-{2.0004017353057861e+00, 5.0917267799377441e-05,
-	1.1920928955078125e-07, -1.9073486328125000e-05,
-	3.4332275390625000e-05}, /* L1437 */
-{1.6173666715621948e+00, 4.1261315345764160e-05,
-	1.1920928955078125e-07, -1.1444091796875000e-05,
-	1.4901161193847656e-05}, /* L1438 */
-{1.7316709756851196e+00, 4.4301152229309082e-05,
-	1.1920928955078125e-07, -7.6353549957275391e-05,
-	-3.4749507904052734e-05}, /* L1439 */
-{1.2825214862823486e+00, 3.2871961593627930e-05,
-	1.1920928955078125e-07, 1.1682510375976562e-05,
-	-1.0311603546142578e-05}, /* L1440 */
-{1.3583186864852905e+00, 3.4898519515991211e-05,
-	1.1920928955078125e-07, 4.6014785766601562e-05,
-	5.9366226196289062e-05}, /* L1441 */
-{1.0954340696334839e+00, 2.8207898139953613e-05,
-	1.1920928955078125e-07, -8.7022781372070312e-06,
-	6.6757202148437500e-06}, /* L1442 */
-{1.8105490207672119e+00, 4.6759843826293945e-05,
-	1.1920928955078125e-07, -1.4382600784301758e-04,
-	8.7976455688476562e-05}, /* L1443 */
-{1.7050383090972900e+00, 4.4107437133789062e-05,
-	1.1920928955078125e-07, -1.1205673217773438e-05,
-	-9.2983245849609375e-06}, /* L1444 */
-{1.9364947080612183e+00, 5.0216913223266602e-05,
-	1.1920928955078125e-07, 3.5166740417480469e-05,
-	2.8252601623535156e-05}, /* L1445 */
-{1.2488127946853638e+00, 3.2454729080200195e-05,
-	1.1920928955078125e-07, -1.1682510375976562e-05,
-	3.0994415283203125e-06}, /* L1446 */
-{1.4114278554916382e+00, 3.6776065826416016e-05,
-	1.1920928955078125e-07, 7.9035758972167969e-05,
-	-1.0204315185546875e-04}, /* L1447 */
-{1.2499012947082520e+00, 3.2633543014526367e-05,
-	1.1920928955078125e-07, -3.6060810089111328e-05,
-	6.3180923461914062e-06}, /* L1448 */
-{1.5762051343917847e+00, 4.1246414184570312e-05,
-	1.1920928955078125e-07, -2.9206275939941406e-06,
-	4.1007995605468750e-05}, /* L1449 */
-{1.2615462541580200e+00, 3.3088028430938721e-05,
-	1.1920928955078125e-07, -2.5629997253417969e-05,
-	-1.4305114746093750e-06}, /* L1450 */
-{1.7548559904098511e+00, 4.6133995056152344e-05,
-	1.1920928955078125e-07, 1.1801719665527344e-05,
-	6.3061714172363281e-05}, /* L1451 */
-{1.3512141704559326e+00, 3.5598874092102051e-05,
-	1.1920928955078125e-07, -2.8610229492187500e-06,
-	-1.2516975402832031e-06}, /* L1452 */
-{1.9481852054595947e+00, 5.1444396376609802e-05,
-	1.1920928955078125e-07, -1.4483928680419922e-05,
-	-2.7835369110107422e-05}, /* L1453 */
-{1.3838692903518677e+00, 3.6627054214477539e-05,
-	1.1920928955078125e-07, -1.9133090972900391e-05,
-	2.9802322387695312e-06}, /* L1454 */
-{1.4002081155776978e+00, 3.7141144275665283e-05,
-	1.1920928955078125e-07, 2.9802322387695312e-06,
-	-1.8239021301269531e-05}, /* L1455 */
-{1.3880631923675537e+00, 3.6900863051414490e-05,
-	1.1920928955078125e-07, 4.1723251342773438e-06,
-	-9.4175338745117188e-06}, /* L1456 */
-{2.1057124137878418e+00, 5.6110322475433350e-05,
-	1.1920928955078125e-07, -1.0114908218383789e-04,
-	9.7036361694335938e-05}, /* L1457 */
-{1.0557851791381836e+00, 2.8192996978759766e-05,
-	1.1920928955078125e-07, -2.8610229492187500e-06,
-	-3.3378601074218750e-06}, /* L1458 */
-{1.4353449344635010e+00, 3.8415193557739258e-05,
-	1.1920928955078125e-07, 4.5418739318847656e-05,
-	2.6464462280273438e-05}, /* L1459 */
-{1.9754149913787842e+00, 5.2988529205322266e-05,
-	1.1920928955078125e-07, -1.7285346984863281e-05,
-	-3.3855438232421875e-05}, /* L1460 */
-{1.6584044694900513e+00, 4.4584274291992188e-05,
-	1.1920928955078125e-07, -1.9073486328125000e-06,
-	-3.1471252441406250e-05}, /* L1461 */
-{1.1271488666534424e+00, 3.0368566513061523e-05,
-	1.1920928955078125e-07, -2.9087066650390625e-05,
-	2.1696090698242188e-05}, /* L1462 */
-{1.5054625272750854e+00, 4.0650367736816406e-05,
-	1.1920928955078125e-07, -1.5974044799804688e-05,
-	-4.7087669372558594e-06}, /* L1463 */
-{1.2962318658828735e+00, 3.5077333450317383e-05,
-	1.1920928955078125e-07, 1.5497207641601562e-05,
-	2.3841857910156250e-07}, /* L1464 */
-{1.5944050550460815e+00, 4.3243169784545898e-05,
-	1.1920928955078125e-07, 5.9604644775390625e-06,
-	3.1828880310058594e-05}, /* L1465 */
-{1.1379826068878174e+00, 3.0934810638427734e-05,
-	1.1920928955078125e-07, -2.9325485229492188e-05,
-	-3.5881996154785156e-05}, /* L1466 */
-{1.4034835100173950e+00, 3.8236379623413086e-05,
-	1.1920928955078125e-07, -2.2113323211669922e-05,
-	9.2029571533203125e-05}, /* L1467 */
-{1.2783238887786865e+00, 3.4898519515991211e-05,
-	1.1920928955078125e-07, 1.4066696166992188e-05,
-	-1.3351440429687500e-05}, /* L1468 */
-{1.8538811206817627e+00, 5.0723552703857422e-05,
-	1.1920928955078125e-07, -2.9742717742919922e-05,
-	-5.3167343139648438e-05}, /* L1469 */
-{1.2802045345306396e+00, 3.5107135772705078e-05,
-	1.1920928955078125e-07, 8.9049339294433594e-05,
-	-8.8810920715332031e-06}, /* L1470 */
-{1.7689334154129028e+00, 4.8622488975524902e-05,
-	1.1920928955078125e-07, -2.5033950805664062e-05,
-	2.8729438781738281e-05}, /* L1471 */
-{1.2634744644165039e+00, 3.4809112548828125e-05,
-	1.1920928955078125e-07, 4.8279762268066406e-05,
-	1.1134147644042969e-04}, /* L1472 */
-{1.8021466732025146e+00, 4.9740076065063477e-05,
-	1.1920928955078125e-07, -1.3172626495361328e-05,
-	1.3113021850585938e-06}, /* L1473 */
-{1.3816223144531250e+00, 3.8225203752517700e-05,
-	1.1920928955078125e-07, 1.0883808135986328e-04,
-	1.0025501251220703e-04}, /* L1474 */
-{1.6515465974807739e+00, 4.5776367187500000e-05,
-	1.1920928955078125e-07, -4.2915344238281250e-06,
-	-1.3113021850585938e-05}, /* L1475 */
-{1.6826131343841553e+00, 4.6737492084503174e-05,
-	1.1920928955078125e-07, -7.3313713073730469e-06,
-	-9.0003013610839844e-06}, /* L1476 */
-{2.1497521400451660e+00, 5.9850513935089111e-05,
-	1.1920928955078125e-07, -1.0550022125244141e-04,
-	7.2121620178222656e-05}, /* L1477 */
-{1.4881008863449097e+00, 4.1529536247253418e-05,
-	1.1920928955078125e-07, -7.3134899139404297e-05,
-	1.6868114471435547e-04}, /* L1478 */
-{1.5448435544967651e+00, 4.3187290430068970e-05,
-	1.1920928955078125e-07, -2.5331974029541016e-05,
-	-7.7486038208007812e-07}, /* L1479 */
-{1.4849699735641479e+00, 4.1604042053222656e-05,
-	1.1920928955078125e-07, -2.9683113098144531e-05,
-	1.8715858459472656e-05}, /* L1480 */
-{2.2235758304595947e+00, 6.2428414821624756e-05,
-	1.1920928955078125e-07, 4.5776367187500000e-05,
-	-1.0371208190917969e-05}, /* L1481 */
-{1.5330740213394165e+00, 4.3131411075592041e-05,
-	1.1920928955078125e-07, -2.3245811462402344e-06,
-	8.2254409790039062e-06}, /* L1482 */
-{1.6582512855529785e+00, 4.6759843826293945e-05,
-	1.1920928955078125e-07, 6.7472457885742188e-05,
-	-2.4318695068359375e-05}, /* L1483 */
-{1.5347341299057007e+00, 4.3362379074096680e-05,
-	1.1920928955078125e-07, -2.5570392608642578e-05,
-	-4.9471855163574219e-06}, /* L1484 */
-{1.9177533388137817e+00, 5.4359436035156250e-05,
-	1.1920928955078125e-07, 3.9815902709960938e-05,
-	-1.4597177505493164e-04}, /* L1485 */
-{1.6128203868865967e+00, 4.5783817768096924e-05,
-	1.1920928955078125e-07, 1.1062622070312500e-04,
-	-1.9127130508422852e-04}, /* L1486 */
-{1.5746463537216187e+00, 4.4770538806915283e-05,
-	1.1920928955078125e-07, -4.1723251342773438e-06,
-	1.4305114746093750e-06}, /* L1487 */
-{1.2361463308334351e+00, 3.5226345062255859e-05,
-	1.1920928955078125e-07, 5.7697296142578125e-05,
-	-5.0783157348632812e-05}, /* L1488 */
-{1.2776293754577637e+00, 3.6478042602539062e-05,
-	1.1920928955078125e-07, 1.1920928955078125e-06,
-	5.0067901611328125e-06}, /* L1489 */
-{1.0395350456237793e+00, 2.9742717742919922e-05,
-	1.1920928955078125e-07, -4.7445297241210938e-05,
-	4.5895576477050781e-05}, /* L1490 */
-{2.0484542846679688e+00, 5.8740377426147461e-05,
-	1.1920928955078125e-07, 1.4066696166992188e-04,
-	-1.4621019363403320e-04}, /* L1491 */
-{1.4003931283950806e+00, 4.0233135223388672e-05,
-	1.1920928955078125e-07, -8.4042549133300781e-06,
-	4.1723251342773438e-06}, /* L1492 */
-{1.9649422168731689e+00, 5.6572258472442627e-05,
-	1.1920928955078125e-07, 1.3113021850585938e-06,
-	-6.3776969909667969e-06}, /* L1493 */
-{1.1796791553497314e+00, 3.4034252166748047e-05,
-	1.1920928955078125e-07, -5.1259994506835938e-06,
-	-1.0490417480468750e-05}, /* L1494 */
-{1.8512749671936035e+00, 5.3524971008300781e-05,
-	1.1920928955078125e-07, 5.6028366088867188e-06,
-	1.4185905456542969e-05}, /* L1495 */
-{1.9978289604187012e+00, 5.7876110076904297e-05,
-	1.1920928955078125e-07, -1.6629695892333984e-05,
-	6.1988830566406250e-06}, /* L1496 */
-{1.6106010675430298e+00, 4.6759843826293945e-05,
-	1.1920928955078125e-07, 4.8637390136718750e-05,
-	-3.3199787139892578e-05}, /* L1497 */
-{1.1299568414688110e+00, 3.2871961593627930e-05,
-	1.1920928955078125e-07, 1.0883808135986328e-04,
-	-7.4744224548339844e-05}, /* L1498 */
-{1.9313563108444214e+00, 5.6296586990356445e-05,
-	1.1920928955078125e-07, -3.9637088775634766e-05,
-	-3.9339065551757812e-05}, /* L1499 */
-{1.3632235527038574e+00, 3.9815902709960938e-05,
-	1.1920928955078125e-07, 9.6559524536132812e-06,
-	-2.0623207092285156e-05}, /* L1500 */
-{1.6506551504135132e+00, 4.8309564590454102e-05,
-	1.1920928955078125e-07, -1.0490417480468750e-05,
-	2.0980834960937500e-05}, /* L1501 */
-{1.5693887472152710e+00, 4.6029686927795410e-05,
-	1.1920928955078125e-07, -8.8930130004882812e-05,
-	2.0623207092285156e-05}, /* L1502 */
-{1.7611865997314453e+00, 5.1754526793956757e-05,
-	1.1920928955078125e-07, 2.1457672119140625e-06,
-	-1.9907951354980469e-05}, /* L1503 */
-{1.9873125553131104e+00, 5.8531761169433594e-05,
-	1.1920928955078125e-07, 5.8889389038085938e-05,
-	-8.2612037658691406e-05}, /* L1504 */
-{1.8383181095123291e+00, 5.4240226745605469e-05,
-	1.1920928955078125e-07, 1.2636184692382812e-05,
-	1.0371208190917969e-05}, /* L1505 */
-{1.1027753353118896e+00, 3.2603740692138672e-05,
-	1.1920928955078125e-07, -5.2452087402343750e-06,
-	1.0728836059570312e-06}, /* L1506 */
-{1.7803213596343994e+00, 5.2742660045623779e-05,
-	1.1920928955078125e-07, 1.7881393432617188e-06,
-	1.5258789062500000e-05}, /* L1507 */
-{1.4907630681991577e+00, 4.4256448745727539e-05,
-	1.1920928955078125e-07, -4.9173831939697266e-05,
-	-9.0599060058593750e-05}, /* L1508 */
-{2.0239846706390381e+00, 6.0200691223144531e-05,
-	1.1920928955078125e-07, -1.8477439880371094e-05,
-	1.8119812011718750e-05}, /* L1509 */
-{1.1144508123397827e+00, 3.3214688301086426e-05,
-	1.1920928955078125e-07, 6.9141387939453125e-06,
-	-1.4901161193847656e-05}, /* L1510 */
-{1.9620109796524048e+00, 5.8606266975402832e-05,
-	1.1920928955078125e-07, -1.1438131332397461e-04,
-	1.2576580047607422e-04}, /* L1511 */
-{1.5394760370254517e+00, 4.6074390411376953e-05,
-	1.1920928955078125e-07, -1.8656253814697266e-05,
-	-5.3524971008300781e-05}, /* L1512 */
-{1.6924753189086914e+00, 5.0827860832214355e-05,
-	1.1920928955078125e-07, 9.6690654754638672e-04,
-	8.7499618530273438e-05}, /* L1513 */
-{1.1616461277008057e+00, 3.4898519515991211e-05,
-	1.1920928955078125e-07, 1.0728836059570312e-06,
-	4.6491622924804688e-06}, /* L1514 */
-{2.3611564636230469e+00, 7.1078538894653320e-05,
-	1.1920928955078125e-07, 2.3365020751953125e-05,
-	5.2690505981445312e-05}, /* L1515 */
-{1.7132921218872070e+00, 5.1677227020263672e-05,
-	1.1920928955078125e-07, -6.0558319091796875e-05,
-	1.4305114746093750e-06}, /* L1516 */
-{1.9700919389724731e+00, 5.9545040130615234e-05,
-	1.1920928955078125e-07, 1.2826919555664062e-04,
-	5.2452087402343750e-05}, /* L1517 */
-{1.4536706209182739e+00, 4.4047832489013672e-05,
-	1.1920928955078125e-07, 1.8703937530517578e-04,
-	-3.3789873123168945e-04}, /* L1518 */
-{2.0969827175140381e+00, 6.3627958297729492e-05,
-	1.1920928955078125e-07, -4.3094158172607422e-05,
-	2.2411346435546875e-05}, /* L1519 */
-{1.4146339893341064e+00, 4.3004751205444336e-05,
-	1.1920928955078125e-07, 3.0159950256347656e-05,
-	-5.8412551879882812e-06}, /* L1520 */
-{2.1186771392822266e+00, 6.4536929130554199e-05,
-	1.1920928955078125e-07, 5.9962272644042969e-05,
-	4.8875808715820312e-06}, /* L1521 */
-{1.7401461601257324e+00, 5.3107738494873047e-05,
-	1.1920928955078125e-07, -1.7881393432617188e-06,
-	-5.2869319915771484e-05}, /* L1522 */
-{1.5861666202545166e+00, 4.8510730266571045e-05,
-	1.1920928955078125e-07, -6.2406063079833984e-05,
-	1.7404556274414062e-05}, /* L1523 */
-{1.9230616092681885e+00, 5.8919191360473633e-05,
-	1.1920928955078125e-07, -5.6028366088867188e-06,
-	-1.4722347259521484e-05}, /* L1524 */
-{1.7132749557495117e+00, 5.2593648433685303e-05,
-	1.1920928955078125e-07, 2.5510787963867188e-05,
-	-1.8477439880371094e-05}, /* L1525 */
-{1.1891524791717529e+00, 3.6582350730895996e-05,
-	1.1920928955078125e-07, -2.5570392608642578e-05,
-	6.9737434387207031e-05}, /* L1526 */
-{1.7972261905670166e+00, 5.5409967899322510e-05,
-	1.1920928955078125e-07, -5.0067901611328125e-06,
-	-5.6266784667968750e-05}, /* L1527 */
-{1.8937269449234009e+00, 5.8472156524658203e-05,
-	1.1920928955078125e-07, 1.6570091247558594e-05,
-	-1.3291835784912109e-05}, /* L1528 */
-{1.9247720241546631e+00, 5.9559941291809082e-05,
-	1.1920928955078125e-07, -2.3424625396728516e-05,
-	4.8160552978515625e-05}, /* L1529 */
-{1.2874305248260498e+00, 3.9905309677124023e-05,
-	1.1920928955078125e-07, -2.1457672119140625e-06,
-	2.6226043701171875e-05}, /* L1530 */
-{2.1404082775115967e+00, 6.6488981246948242e-05,
-	1.1920928955078125e-07, -4.4941902160644531e-05,
-	4.6849250793457031e-05}, /* L1531 */
-{1.6732366085052490e+00, 5.2064657211303711e-05,
-	1.1920928955078125e-07, 4.3392181396484375e-05,
-	-8.8810920715332031e-06}, /* L1532 */
-{2.1306273937225342e+00, 6.6429376602172852e-05,
-	1.1920928955078125e-07, -1.2165307998657227e-04,
-	-1.2755393981933594e-04}, /* L1533 */
-{1.5713833570480347e+00, 4.9084424972534180e-05,
-	1.1920928955078125e-07, -3.7610530853271484e-05,
-	2.7894973754882812e-05}, /* L1534 */
-{2.1737983226776123e+00, 6.8031251430511475e-05,
-	1.1920928955078125e-07, -4.6491622924804688e-06,
-	-1.7523765563964844e-05}, /* L1535 */
-{1.7201981544494629e+00, 5.3938478231430054e-05,
-	1.1920928955078125e-07, 7.6293945312500000e-06,
-	-4.4107437133789062e-06}, /* L1536 */
-{1.5260287523269653e+00, 4.7951936721801758e-05,
-	1.1920928955078125e-07, -8.6069107055664062e-05,
-	-5.7756900787353516e-05}, /* L1537 */
-{1.3840992450714111e+00, 4.3570995330810547e-05,
-	1.1920928955078125e-07, -7.3254108428955078e-05,
-	-1.1271238327026367e-04}, /* L1538 */
-{1.5215897560119629e+00, 4.7981739044189453e-05,
-	1.1920928955078125e-07, 3.2782554626464844e-05,
-	-6.2108039855957031e-05}, /* L1539 */
-{1.6385518312454224e+00, 5.1766633987426758e-05,
-	1.1920928955078125e-07, -3.0159950256347656e-05,
-	-4.3332576751708984e-05}, /* L1540 */
-{2.6145944595336914e+00, 8.2880258560180664e-05,
-	1.1920928955078125e-07, 8.7380409240722656e-04,
-	6.5803527832031250e-04}, /* L1541 */
-{1.4643225669860840e+00, 4.6461820602416992e-05,
-	1.1920928955078125e-07, -6.2167644500732422e-05,
-	7.0214271545410156e-05}, /* L1542 */
-{1.5510369539260864e+00, 4.9471855163574219e-05,
-	1.1920928955078125e-07, 2.1610260009765625e-03,
-	6.7126750946044922e-04}, /* L1543 */
-{1.6978869438171387e+00, 5.4046511650085449e-05,
-	1.1920928955078125e-07, -8.3446502685546875e-06,
-	4.9710273742675781e-05}, /* L1544 */
-{2.9040098190307617e+00, 9.2715024948120117e-05,
-	1.1920928955078125e-07, -3.6090612411499023e-04,
-	2.8729438781738281e-05}, /* L1545 */
-{1.4747371673583984e+00, 4.7117471694946289e-05,
-	1.1920928955078125e-07, 1.6689300537109375e-06,
-	1.5497207641601562e-05}, /* L1546 */
-{2.5894241333007812e+00, 8.2999467849731445e-05,
-	1.1920928955078125e-07, -2.7740001678466797e-04,
-	3.2389163970947266e-04}, /* L1547 */
-{1.4263014793395996e+00, 4.5739114284515381e-05,
-	1.1920928955078125e-07, -2.9802322387695312e-07,
-	-7.9274177551269531e-06}, /* L1548 */
-{2.3825769424438477e+00, 7.6547265052795410e-05,
-	1.1920928955078125e-07, -6.4373016357421875e-06,
-	8.4638595581054688e-06}, /* L1549 */
-{1.0481963157653809e+00, 3.3739954233169556e-05,
-	1.1920928955078125e-07, 1.0490417480468750e-05,
-	1.7642974853515625e-05}, /* L1550 */
-{1.7919580936431885e+00, 5.7786703109741211e-05,
-	1.1920928955078125e-07, 2.8610229492187500e-06,
-	-1.8477439880371094e-06}, /* L1551 */
-{1.4354053735733032e+00, 4.6379864215850830e-05,
-	1.1920928955078125e-07, 4.2319297790527344e-05,
-	-8.8214874267578125e-06}, /* L1552 */
-{2.2453553676605225e+00, 7.3224306106567383e-05,
-	1.1920928955078125e-07, -2.3877620697021484e-03,
-	2.1587610244750977e-03}, /* L1553 */
-{1.5011637210845947e+00, 4.8726797103881836e-05,
-	1.1920928955078125e-07, -5.8555603027343750e-04,
-	2.6702880859375000e-04}, /* L1554 */
-{1.6169064044952393e+00, 5.2530318498611450e-05,
-	1.1920928955078125e-07, 7.9870223999023438e-06,
-	1.0597705841064453e-04}, /* L1555 */
-{1.5450292825698853e+00, 5.0283968448638916e-05,
-	1.1920928955078125e-07, 1.7762184143066406e-05,
-	-8.7022781372070312e-06}, /* L1556 */
-{2.0099329948425293e+00, 6.5542757511138916e-05,
-	1.1920928955078125e-07, -4.9233436584472656e-05,
-	-4.2319297790527344e-05}, /* L1557 */
-{1.2560998201370239e+00, 4.1037797927856445e-05,
-	1.1920928955078125e-07, -1.8179416656494141e-05,
-	5.8293342590332031e-05}, /* L1558 */
-{1.7137652635574341e+00, 5.6087970733642578e-05,
-	1.1920928955078125e-07, 4.6014785766601562e-05,
-	-6.8128108978271484e-05}, /* L1559 */
-{1.6471037864685059e+00, 5.4001808166503906e-05,
-	1.1920928955078125e-07, -6.6041946411132812e-05,
-	3.2544136047363281e-05}, /* L1560 */
-{2.0242938995361328e+00, 6.6488981246948242e-05,
-	1.1920928955078125e-07, -7.0929527282714844e-06,
-	-6.1333179473876953e-05}, /* L1561 */
-{1.3907424211502075e+00, 4.5776367187500000e-05,
-	1.1920928955078125e-07, -1.0359287261962891e-04,
-	2.0051002502441406e-04}, /* L1562 */
-{1.7893331050872803e+00, 5.9008598327636719e-05,
-	1.1920928955078125e-07, 5.8770179748535156e-05,
-	4.8637390136718750e-05}, /* L1563 */
-{1.4569642543792725e+00, 4.8115849494934082e-05,
-	1.1920928955078125e-07, -1.8179416656494141e-05,
-	-1.7285346984863281e-06}, /* L1564 */
-{1.7615898847579956e+00, 5.8293342590332031e-05,
-	1.1920928955078125e-07, -1.2439489364624023e-04,
-	-2.0325183868408203e-04}, /* L1565 */
-{1.4934916496276855e+00, 4.9497932195663452e-05,
-	1.1920928955078125e-07, -1.6391277313232422e-05,
-	1.8239021301269531e-05}, /* L1566 */
-{1.6852548122406006e+00, 5.5953860282897949e-05,
-	1.1920928955078125e-07, -1.6689300537109375e-05,
-	-2.6106834411621094e-05}, /* L1567 */
-{1.9645620584487915e+00, 6.5356492996215820e-05,
-	1.1920928955078125e-07, 4.7922134399414062e-05,
-	-5.2571296691894531e-05}, /* L1568 */
-{2.5756866931915283e+00, 8.5830688476562500e-05,
-	1.1920928955078125e-07, -6.6757202148437500e-06,
-	-6.2286853790283203e-05}, /* L1569 */
-{1.2981446981430054e+00, 4.3332576751708984e-05,
-	1.1920928955078125e-07, -1.5437602996826172e-05,
-	9.6559524536132812e-06}, /* L1570 */
-{1.6806840896606445e+00, 5.6207180023193359e-05,
-	1.1920928955078125e-07, -2.0265579223632812e-06,
-	-1.2218952178955078e-05}, /* L1571 */
-{1.3308761119842529e+00, 4.4584274291992188e-05,
-	1.1920928955078125e-07, -3.0398368835449219e-06,
-	2.4318695068359375e-05}, /* L1572 */
-{2.1907477378845215e+00, 7.3522329330444336e-05,
-	1.1920928955078125e-07, -2.8610229492187500e-06,
-	1.1682510375976562e-05}, /* L1573 */
-{1.2211368083953857e+00, 4.1067600250244141e-05,
-	1.1920928955078125e-07, 6.9379806518554688e-05,
-	1.7130374908447266e-04}, /* L1574 */
-{1.9338735342025757e+00, 6.5132975578308105e-05,
-	1.1920928955078125e-07, -9.0003013610839844e-06,
-	-5.5611133575439453e-05}, /* L1575 */
-{1.5046993494033813e+00, 5.0768256187438965e-05,
-	1.1920928955078125e-07, -1.1861324310302734e-05,
-	-2.9683113098144531e-05}, /* L1576 */
-{2.0874316692352295e+00, 7.0601701736450195e-05,
-	1.1920928955078125e-07, -1.6301870346069336e-04,
-	9.2267990112304688e-05}, /* L1577 */
-{1.3573189973831177e+00, 4.5955181121826172e-05,
-	1.1920928955078125e-07, -2.6822090148925781e-06,
-	-3.5762786865234375e-06}, /* L1578 */
-{2.6554052829742432e+00, 9.0062618255615234e-05,
-	1.1920928955078125e-07, 3.5762786865234375e-06,
-	2.2649765014648438e-06}, /* L1579 */
-{1.5302015542984009e+00, 5.1990151405334473e-05,
-	1.1920928955078125e-07, -1.6152858734130859e-05,
-	9.4175338745117188e-06}, /* L1580 */
-{2.1459891796112061e+00, 7.3045492172241211e-05,
-	1.1920928955078125e-07, 2.6106834411621094e-05,
-	1.4066696166992188e-05}, /* L1581 */
-{1.6581412553787231e+00, 5.6535005569458008e-05,
-	1.1920928955078125e-07, 1.1444091796875000e-05,
-	5.8412551879882812e-06}, /* L1582 */
-{1.6590129137039185e+00, 5.6669116020202637e-05,
-	1.1920928955078125e-07, -6.9975852966308594e-05,
-	-1.0192394256591797e-05}, /* L1583 */
-{2.0739428997039795e+00, 7.0989131927490234e-05,
-	1.1920928955078125e-07, -5.2452087402343750e-05,
-	-8.0108642578125000e-05}, /* L1584 */
-{2.2205832004547119e+00, 7.6107680797576904e-05,
-	1.1920928955078125e-07, -1.0907649993896484e-05,
-	6.4373016357421875e-06}, /* L1585 */
-{1.2821903228759766e+00, 4.4047832489013672e-05,
-	1.1920928955078125e-07, -4.5537948608398438e-05,
-	-6.0796737670898438e-06}, /* L1586 */
-{2.3135478496551514e+00, 7.9602003097534180e-05,
-	1.1920928955078125e-07, -1.2749433517456055e-04,
-	-1.6570091247558594e-04}, /* L1587 */
-{1.6386511325836182e+00, 5.6475400924682617e-05,
-	1.1920928955078125e-07, -9.7990036010742188e-05,
-	-4.5359134674072266e-05}, /* L1588 */
-{1.7943061590194702e+00, 6.1929225921630859e-05,
-	1.1920928955078125e-07, -6.3478946685791016e-05,
-	-2.4855136871337891e-05}, /* L1589 */
-{1.3809245824813843e+00, 4.7743320465087891e-05,
-	1.1920928955078125e-07, -1.2099742889404297e-05,
-	-3.4332275390625000e-05}, /* L1590 */
-{2.4040441513061523e+00, 8.3267688751220703e-05,
-	1.1920928955078125e-07, -1.2350082397460938e-04,
-	8.3804130554199219e-05}, /* L1591 */
-{1.8293954133987427e+00, 6.3464045524597168e-05,
-	1.1920928955078125e-07, -1.0907649993896484e-05,
-	5.0067901611328125e-06}, /* L1592 */
-{2.0455167293548584e+00, 7.1084126830101013e-05,
-	1.1920928955078125e-07, 9.8943710327148438e-06,
-	-4.8279762268066406e-06}, /* L1593 */
-{1.6171967983245850e+00, 5.6326389312744141e-05,
-	1.1920928955078125e-07, 1.4758110046386719e-04,
-	2.2685527801513672e-04}, /* L1594 */
-{2.0097320079803467e+00, 7.0080161094665527e-05,
-	1.1920928955078125e-07, 3.6716461181640625e-05,
-	-1.9192695617675781e-05}, /* L1595 */
-{1.5680779218673706e+00, 5.4776668548583984e-05,
-	1.1920928955078125e-07, 5.2213668823242188e-05,
-	-2.2053718566894531e-05}, /* L1596 */
-{2.9544463157653809e+00, 1.0338425636291504e-04,
-	1.1920928955078125e-07, 3.8862228393554688e-05,
-	-4.4286251068115234e-05}, /* L1597 */
-{1.8332197666168213e+00, 6.4253807067871094e-05,
-	1.1920928955078125e-07, 1.3828277587890625e-05,
-	2.0265579223632812e-05}, /* L1598 */
-{1.9086176156997681e+00, 6.7010521888732910e-05,
-	1.1920928955078125e-07, 3.7908554077148438e-05,
-	-3.4511089324951172e-05}, /* L1599 */
-{1.5753525495529175e+00, 5.5402517318725586e-05,
-	1.1920928955078125e-07, -4.1723251342773438e-06,
-	-2.5808811187744141e-05}, /* L1600 */
-{1.9220883846282959e+00, 6.7710876464843750e-05,
-	1.1920928955078125e-07, 7.3909759521484375e-06,
-	1.3828277587890625e-05}, /* L1601 */
-{1.3358314037322998e+00, 4.7139823436737061e-05,
-	1.1920928955078125e-07, -2.8252601623535156e-05,
-	1.9669532775878906e-05}, /* L1602 */
-{2.1455285549163818e+00, 7.5843185186386108e-05,
-	1.1920928955078125e-07, 2.7179718017578125e-05,
-	-1.8298625946044922e-05}, /* L1603 */
-{1.4477404356002808e+00, 5.1259994506835938e-05,
-	1.1920928955078125e-07, -3.1590461730957031e-05,
-	-1.1920928955078125e-05}, /* L1604 */
-{2.4598176479339600e+00, 8.7320804595947266e-05,
-	1.1920928955078125e-07, -4.3809413909912109e-04,
-	-4.8255920410156250e-04}, /* L1605 */
-{1.4193363189697266e+00, 5.0425529479980469e-05,
-	1.1920928955078125e-07, 5.9604644775390625e-07,
-	3.6239624023437500e-05}, /* L1606 */
-{1.6554319858551025e+00, 5.8919191360473633e-05,
-	1.1920928955078125e-07, -1.8656253814697266e-05,
-	-5.9962272644042969e-05}, /* L1607 */
-{1.6987222433090210e+00, 6.0550868511199951e-05,
-	1.1920928955078125e-07, -1.0550022125244141e-05,
-	1.0728836059570312e-06}, /* L1608 */
-{2.6107833385467529e+00, 9.3219801783561707e-05,
-	1.1920928955078125e-07, -1.0728836059570312e-06,
-	-3.1828880310058594e-05}, /* L1609 */
-{1.4334782361984253e+00, 5.1409006118774414e-05,
-	1.1920928955078125e-07, -1.0981559753417969e-03,
-	-1.0913610458374023e-04}, /* L1610 */
-{2.5392487049102783e+00, 9.0986490249633789e-05,
-	1.1920928955078125e-07, 6.1750411987304688e-05,
-	1.6331672668457031e-05}, /* L1611 */
-{1.4882453680038452e+00, 5.3405761718750000e-05,
-	1.1920928955078125e-07, 4.7683715820312500e-07,
-	-4.7862529754638672e-05}, /* L1612 */
-{1.7979615926742554e+00, 6.4939260482788086e-05,
-	1.1920928955078125e-07, 4.2915344238281250e-04,
-	-9.5635652542114258e-04}, /* L1613 */
-{1.7160894870758057e+00, 6.1810016632080078e-05,
-	1.1920928955078125e-07, 1.8751621246337891e-04,
-	-1.7344951629638672e-05}, /* L1614 */
-{2.0119936466217041e+00, 7.2568655014038086e-05,
-	1.1920928955078125e-07, -2.7894973754882812e-05,
-	5.8650970458984375e-05}, /* L1615 */
-{1.6964043378829956e+00, 6.1303377151489258e-05,
-	1.1920928955078125e-07, 1.7869472503662109e-04,
-	-1.1575222015380859e-04}, /* L1616 */
-{2.3658163547515869e+00, 8.5614621639251709e-05,
-	1.1920928955078125e-07, 8.9406967163085938e-06,
-	4.0650367736816406e-05}, /* L1617 */
-{1.9094018936157227e+00, 6.9200992584228516e-05,
-	1.1920928955078125e-07, -1.5377998352050781e-05,
-	7.9870223999023438e-06}, /* L1618 */
-{2.4481444358825684e+00, 8.8870525360107422e-05,
-	1.1920928955078125e-07, 5.0425529479980469e-05,
-	7.0333480834960938e-06}, /* L1619 */
-{1.8851681947708130e+00, 6.8545341491699219e-05,
-	1.1920928955078125e-07, -2.0265579223632812e-06,
-	4.0531158447265625e-06}, /* L1620 */
-{2.6643478870391846e+00, 9.7036361694335938e-05,
-	1.1920928955078125e-07, -7.8678131103515625e-06,
-	2.9563903808593750e-05}, /* L1621 */
-{2.1620888710021973e+00, 7.8931450843811035e-05,
-	1.1920928955078125e-07, -1.8262863159179688e-04,
-	-8.1658363342285156e-06}, /* L1622 */
-{2.5466248989105225e+00, 9.3065202236175537e-05,
-	1.1920928955078125e-07, 1.0585784912109375e-04,
-	7.0333480834960938e-06}, /* L1623 */
-{1.8539042472839355e+00, 6.7859888076782227e-05,
-	1.1920928955078125e-07, -3.1411647796630859e-05,
-	-1.5497207641601562e-06}, /* L1624 */
-{1.9892973899841309e+00, 7.2926282882690430e-05,
-	1.1920928955078125e-07, -3.9339065551757812e-06,
-	-1.2695789337158203e-05}, /* L1625 */
-{1.2623553276062012e+00, 4.6372413635253906e-05,
-	1.1920928955078125e-07, -2.1350383758544922e-04,
-	-2.0825862884521484e-04}, /* L1626 */
-{1.4568940401077271e+00, 5.3584575653076172e-05,
-	1.1920928955078125e-07, 2.8133392333984375e-05,
-	1.6689300537109375e-06}, /* L1627 */
-{1.7426048517227173e+00, 6.4194202423095703e-05,
-	1.1920928955078125e-07, -5.3644180297851562e-06,
-	-4.3392181396484375e-05}, /* L1628 */
-{2.1693186759948730e+00, 8.0078840255737305e-05,
-	1.1920928955078125e-07, 1.6331672668457031e-05,
-	7.0452690124511719e-05}, /* L1629 */
-{1.7258934974670410e+00, 6.3784420490264893e-05,
-	1.1920928955078125e-07, -2.5808811187744141e-05,
-	-2.8431415557861328e-05}, /* L1630 */
-{2.1555266380310059e+00, 7.9799443483352661e-05,
-	1.1920928955078125e-07, -5.4597854614257812e-05,
-	-4.8995018005371094e-05}, /* L1631 */
-{1.6544167995452881e+00, 6.2882900238037109e-05,
-	1.1920928955078125e-07, -6.6698789596557617e-03,
-	5.8200359344482422e-03}, /* L1632 */
-{2.3437118530273438e+00, 8.7037682533264160e-05,
-	1.1920928955078125e-07, -7.3909759521484375e-06,
-	3.3378601074218750e-06}, /* L1633 */
-{1.5294830799102783e+00, 5.6892633438110352e-05,
-	1.1920928955078125e-07, 6.5565109252929688e-06,
-	3.5643577575683594e-05}, /* L1634 */
-{1.7582176923751831e+00, 6.5505504608154297e-05,
-	1.1920928955078125e-07, -1.3053417205810547e-05,
-	4.1007995605468750e-05}, /* L1635 */
-{1.7990097999572754e+00, 6.7129731178283691e-05,
-	1.1920928955078125e-07, 2.6106834411621094e-05,
-	-7.0333480834960938e-06}, /* L1636 */
-{2.2227990627288818e+00, 8.3133578300476074e-05,
-	1.1920928955078125e-07, -5.3405761718750000e-05,
-	1.1205673217773438e-05}, /* L1637 */
-{1.7688533067703247e+00, 6.6220760345458984e-05,
-	1.1920928955078125e-07, 1.9073486328125000e-06,
-	-4.5478343963623047e-05}, /* L1638 */
-{1.8815815448760986e+00, 7.0706009864807129e-05,
-	1.1920928955078125e-07, -1.2922286987304688e-04,
-	-4.6312808990478516e-05}, /* L1639 */
-{1.6056692600250244e+00, 6.0424208641052246e-05,
-	1.1920928955078125e-07, -5.6302547454833984e-04,
-	-3.9988756179809570e-04}, /* L1640 */
-{2.4445848464965820e+00, 9.1969966888427734e-05,
-	1.1920928955078125e-07, -1.5676021575927734e-04,
-	-3.7372112274169922e-05}, /* L1641 */
-{1.3839454650878906e+00, 5.2139163017272949e-05,
-	1.1920928955078125e-07, -6.7174434661865234e-05,
-	5.0067901611328125e-06}, /* L1642 */
-{2.0602412223815918e+00, 7.7739357948303223e-05,
-	1.1920928955078125e-07, 6.9141387939453125e-06,
-	8.4638595581054688e-06}, /* L1643 */
-{1.8682886362075806e+00, 7.0616602897644043e-05,
-	1.1920928955078125e-07, 2.3245811462402344e-05,
-	2.0384788513183594e-05}, /* L1644 */
-{3.0392105579376221e+00, 1.1503696441650391e-04,
-	1.1920928955078125e-07, 1.7881393432617188e-06,
-	3.0517578125000000e-05}, /* L1645 */
-{1.5671128034591675e+00, 5.9410929679870605e-05,
-	1.1920928955078125e-07, -2.5212764739990234e-05,
-	-8.1658363342285156e-06}, /* L1646 */
-{2.5605208873748779e+00, 9.7230076789855957e-05,
-	1.1920928955078125e-07, -4.9471855163574219e-06,
-	-4.5120716094970703e-05}, /* L1647 */
-{1.5962239503860474e+00, 6.0707330703735352e-05,
-	1.1920928955078125e-07, -7.3969364166259766e-05,
-	-5.0246715545654297e-05}, /* L1648 */
-{2.5346782207489014e+00, 9.6559524536132812e-05,
-	1.1920928955078125e-07, -1.8376111984252930e-04,
-	5.5193901062011719e-05}, /* L1649 */
-{1.4176317453384399e+00, 5.4091215133666992e-05,
-	1.1920928955078125e-07, -6.7174434661865234e-05,
-	-1.0311603546142578e-05}, /* L1650 */
-{2.1029851436614990e+00, 8.0352649092674255e-05,
-	1.1920928955078125e-07, -4.8875808715820312e-06,
-	2.2292137145996094e-05}, /* L1651 */
-{1.9991426467895508e+00, 7.6502561569213867e-05,
-	1.1920928955078125e-07, 3.5762786865234375e-07,
-	1.5497207641601562e-06}, /* L1652 */
-{1.7428052425384521e+00, 6.6801905632019043e-05,
-	1.1920928955078125e-07, 1.8119812011718750e-05,
-	6.0439109802246094e-05}, /* L1653 */
-{1.7064628601074219e+00, 6.5505504608154297e-05,
-	1.1920928955078125e-07, -6.5565109252929688e-07,
-	2.2649765014648438e-06}, /* L1654 */
-{2.1256141662597656e+00, 8.1729143857955933e-05,
-	1.1920928955078125e-07, -3.9041042327880859e-05,
-	2.1934509277343750e-05}, /* L1655 */
-{1.6816952228546143e+00, 6.4760446548461914e-05,
-	1.1920928955078125e-07, -2.7298927307128906e-05,
-	-1.9848346710205078e-05}, /* L1656 */
-{2.0869371891021729e+00, 8.0496072769165039e-05,
-	1.1920928955078125e-07, -4.7445297241210938e-05,
-	5.9485435485839844e-05}, /* L1657 */
-{1.5306817293167114e+00, 5.9127807617187500e-05,
-	1.1920928955078125e-07, 2.1219253540039062e-05,
-	-7.3015689849853516e-05}, /* L1658 */
-{2.3187510967254639e+00, 8.9704990386962891e-05,
-	1.1920928955078125e-07, -6.8902969360351562e-05,
-	-4.3213367462158203e-05}, /* L1659 */
-{1.7622005939483643e+00, 6.8277120590209961e-05,
-	1.1920928955078125e-07, 3.1948089599609375e-05,
-	9.7751617431640625e-06}, /* L1660 */
-{1.9776018857955933e+00, 7.6770782470703125e-05,
-	1.1920928955078125e-07, -8.1002712249755859e-05,
-	2.0635128021240234e-04}, /* L1661 */
-{1.4050763845443726e+00, 5.4612755775451660e-05,
-	1.1920928955078125e-07, -7.3790550231933594e-05,
-	-2.4676322937011719e-05}, /* L1662 */
-{2.3198952674865723e+00, 9.0301036834716797e-05,
-	1.1920928955078125e-07, 2.3841857910156250e-07,
-	2.6226043701171875e-06}, /* L1663 */
-{1.1947917938232422e+00, 4.6581029891967773e-05,
-	1.1920928955078125e-07, -3.3915042877197266e-05,
-	-3.9041042327880859e-05}, /* L1664 */
-{2.1869087219238281e+00, 8.5383653640747070e-05,
-	1.1920928955078125e-07, 7.9870223999023438e-06,
-	5.0067901611328125e-06}, /* L1665 */
-{1.8649330139160156e+00, 7.2926282882690430e-05,
-	1.1920928955078125e-07, 2.6702880859375000e-05,
-	1.0132789611816406e-05}, /* L1666 */
-{2.2221548557281494e+00, 8.7022781372070312e-05,
-	1.1920928955078125e-07, 5.4836273193359375e-06,
-	-1.6689300537109375e-06}, /* L1667 */
-{1.5864865779876709e+00, 6.2227249145507812e-05,
-	1.1920928955078125e-07, -2.9146671295166016e-05,
-	-1.2278556823730469e-05}, /* L1668 */
-{2.3221783638000488e+00, 9.1221183538436890e-05,
-	1.1920928955078125e-07, -2.0861625671386719e-05,
-	-2.8610229492187500e-06}, /* L1669 */
-{1.7372859716415405e+00, 6.8373978137969971e-05,
-	1.1920928955078125e-07, -2.1171569824218750e-04,
-	1.2695789337158203e-04}, /* L1670 */
-{2.5208034515380859e+00, 9.9360942840576172e-05,
-	1.1920928955078125e-07, -2.5212764739990234e-05,
-	1.1920928955078125e-06}, /* L1671 */
-{1.6139509677886963e+00, 6.3687562942504883e-05,
-	1.1920928955078125e-07, 2.5391578674316406e-05,
-	1.8477439880371094e-05}, /* L1672 */
-{2.0792121887207031e+00, 8.2179903984069824e-05,
-	1.1920928955078125e-07, -5.9783458709716797e-05,
-	-3.7074089050292969e-05}, /* L1673 */
-{1.6847186088562012e+00, 6.6684558987617493e-05,
-	1.1920928955078125e-07, -2.7477741241455078e-05,
-	-4.2378902435302734e-05}, /* L1674 */
-{1.8724658489227295e+00, 7.4222683906555176e-05,
-	1.1920928955078125e-07, -1.9252300262451172e-05,
-	-4.8875808715820312e-06}, /* L1675 */
-{1.4882587194442749e+00, 5.9083104133605957e-05,
-	1.1920928955078125e-07, -2.0802021026611328e-05,
-	-1.9371509552001953e-05}, /* L1676 */
-{2.2740080356597900e+00, 9.0420246124267578e-05,
-	1.1920928955078125e-07, -8.6903572082519531e-05,
-	-4.6372413635253906e-05}, /* L1677 */
-{1.8998298645019531e+00, 7.5817108154296875e-05,
-	1.1920928955078125e-07, -1.6093254089355469e-06,
-	-6.2245130538940430e-04}, /* L1678 */
-{2.1470892429351807e+00, 8.5622072219848633e-05,
-	1.1920928955078125e-07, -3.1411647796630859e-05,
-	1.0609626770019531e-05}, /* L1679 */
-{2.1589746475219727e+00, 8.6233019828796387e-05,
-	1.1920928955078125e-07, -1.7940998077392578e-05,
-	-7.7486038208007812e-05}, /* L1680 */
-{2.6408479213714600e+00, 1.0585784912109375e-04,
-	1.1920928955078125e-07, -1.2010335922241211e-04,
-	5.7911872863769531e-04}, /* L1681 */
-{2.2424156665802002e+00, 8.9854001998901367e-05,
-	1.1920928955078125e-07, -1.0979175567626953e-04,
-	-8.6069107055664062e-05}, /* L1682 */
-{2.6493763923645020e+00, 1.0631978511810303e-04,
-	1.1920928955078125e-07, 2.0098686218261719e-04,
-	-6.5386295318603516e-05}, /* L1683 */
-{1.9800323247909546e+00, 7.9557299613952637e-05,
-	1.1920928955078125e-07, 8.5592269897460938e-05,
-	-1.5676021575927734e-05}, /* L1684 */
-{2.6626889705657959e+00, 1.0713934898376465e-04,
-	1.1920928955078125e-07, -7.1525573730468750e-07,
-	2.2411346435546875e-05}, /* L1685 */
-{1.7357704639434814e+00, 6.9946050643920898e-05,
-	1.1920928955078125e-07, 2.1457672119140625e-05,
-	-2.8610229492187500e-06}, /* L1686 */
-{1.8876268863677979e+00, 7.6174736022949219e-05,
-	1.1920928955078125e-07, 4.7683715820312500e-07,
-	-2.4318695068359375e-05}, /* L1687 */
-{1.7651349306106567e+00, 7.1346759796142578e-05,
-	1.1920928955078125e-07, -2.9444694519042969e-05,
-	6.4253807067871094e-05}, /* L1688 */
-{2.3339831829071045e+00, 9.4525516033172607e-05,
-	1.1920928955078125e-07, -1.0180473327636719e-04,
-	-2.0563602447509766e-04}, /* L1689 */
-{2.0596404075622559e+00, 8.3655118942260742e-05,
-	1.1920928955078125e-07, 2.8145313262939453e-04,
-	1.8250942230224609e-04}, /* L1690 */
-{2.4040806293487549e+00, 9.7632408142089844e-05,
-	1.1920928955078125e-07, -3.1763315200805664e-04,
-	1.4066696166992188e-05}, /* L1691 */
-{1.6582144498825073e+00, 6.7412853240966797e-05,
-	1.1920928955078125e-07, 1.1563301086425781e-05,
-	3.6954879760742188e-05}, /* L1692 */
-{2.1082248687744141e+00, 8.5830688476562500e-05,
-	1.1920928955078125e-07, -1.3113021850585938e-06,
-	-6.7353248596191406e-06}, /* L1693 */
-{1.4668284654617310e+00, 5.9828162193298340e-05,
-	1.1920928955078125e-07, 3.5762786865234375e-06,
-	-1.4495849609375000e-04}, /* L1694 */
-{2.2771246433258057e+00, 9.2990696430206299e-05,
-	1.1920928955078125e-07, -7.5519084930419922e-05,
-	4.1842460632324219e-05}, /* L1695 */
-{2.1812453269958496e+00, 8.9198350906372070e-05,
-	1.1920928955078125e-07, -1.7046928405761719e-05,
-	3.8623809814453125e-05}, /* L1696 */
-{1.8539848327636719e+00, 7.5936317443847656e-05,
-	1.1920928955078125e-07, -9.1195106506347656e-05,
-	5.6028366088867188e-06}, /* L1697 */
-{1.6613483428955078e+00, 6.8135559558868408e-05,
-	1.1920928955078125e-07, 1.2993812561035156e-05,
-	-2.0563602447509766e-05}, /* L1698 */
-{2.2887988090515137e+00, 9.4026327133178711e-05,
-	1.1920928955078125e-07, 1.0752677917480469e-04,
-	2.4557113647460938e-05}, /* L1699 */
-{2.0444700717926025e+00, 8.4146857261657715e-05,
-	1.1920928955078125e-07, -4.5561790466308594e-04,
-	-1.3476610183715820e-04}, /* L1700 */
-{3.1926982402801514e+00, 1.3151764869689941e-04,
-	1.1920928955078125e-07, -1.0341405868530273e-04,
-	-4.1961669921875000e-05}, /* L1701 */
-{1.7540787458419800e+00, 7.2360038757324219e-05,
-	1.1920928955078125e-07, -1.4305114746093750e-05,
-	-3.6776065826416016e-05}, /* L1702 */
-{1.9683402776718140e+00, 8.1311911344528198e-05,
-	1.1920928955078125e-07, -2.1815299987792969e-05,
-	-1.0132789611816406e-05}, /* L1703 */
-{1.5366808176040649e+00, 6.3728541135787964e-05,
-	1.1920928955078125e-07, 1.4095306396484375e-03,
-	8.8453292846679688e-04}, /* L1704 */
-{2.3481090068817139e+00, 9.7325071692466736e-05,
-	1.1920928955078125e-07, -1.1062622070312500e-04,
-	2.0515918731689453e-04}, /* L1705 */
-{1.2620661258697510e+00, 5.2362680435180664e-05,
-	1.1920928955078125e-07, 1.1765956878662109e-04,
-	-1.0788440704345703e-05}, /* L1706 */
-{1.8564250469207764e+00, 7.7128410339355469e-05,
-	1.1920928955078125e-07, -2.3066997528076172e-05,
-	-1.0609626770019531e-05}, /* L1707 */
-{1.9809130430221558e+00, 8.2433223724365234e-05,
-	1.1920928955078125e-07, 1.2719631195068359e-04,
-	1.4805793762207031e-04}, /* L1708 */
-{2.1545314788818359e+00, 8.9779496192932129e-05,
-	1.1920928955078125e-07, 6.8545341491699219e-05,
-	-1.4424324035644531e-05}, /* L1709 */
-{1.9002609252929688e+00, 7.9289078712463379e-05,
-	1.1920928955078125e-07, -1.6629695892333984e-05,
-	-2.0861625671386719e-05}, /* L1710 */
-{2.1194939613342285e+00, 8.8572502136230469e-05,
-	1.1920928955078125e-07, -6.1452388763427734e-05,
-	1.3589859008789062e-05}, /* L1711 */
-{1.7199875116348267e+00, 7.1972608566284180e-05,
-	1.1920928955078125e-07, -9.8943710327148438e-06,
-	-4.2438507080078125e-05}, /* L1712 */
-{2.3216865062713623e+00, 9.7289681434631348e-05,
-	1.1920928955078125e-07, -1.4841556549072266e-05,
-	-8.7618827819824219e-06}, /* L1713 */
-{1.7669166326522827e+00, 7.4148178100585938e-05,
-	1.1920928955078125e-07, 6.7949295043945312e-06,
-	-2.2649765014648438e-05}, /* L1714 */
-{1.6694194078445435e+00, 7.0154666900634766e-05,
-	1.1920928955078125e-07, 2.0265579223632812e-05,
-	0.0000000000000000e+00}, /* L1715 */
-{1.6188361644744873e+00, 6.8128108978271484e-05,
-	1.1920928955078125e-07, -1.1086463928222656e-05,
-	1.1444091796875000e-05}, /* L1716 */
-{2.3602023124694824e+00, 9.9480152130126953e-05,
-	1.1920928955078125e-07, -4.8875808715820312e-06,
-	-1.1706352233886719e-04}, /* L1717 */
-{1.4274255037307739e+00, 6.0252845287322998e-05,
-	1.1920928955078125e-07, 1.2528896331787109e-04,
-	-1.0192394256591797e-05}, /* L1718 */
-{2.2988367080688477e+00, 9.7155570983886719e-05,
-	1.1920928955078125e-07, 2.7298927307128906e-05,
-	2.9206275939941406e-05}, /* L1719 */
-{1.5461632013320923e+00, 6.5445899963378906e-05,
-	1.1920928955078125e-07, 3.9935111999511719e-05,
-	6.6280364990234375e-05}, /* L1720 */
-{1.9090785980224609e+00, 8.0959871411323547e-05,
-	1.1920928955078125e-07, 1.1324882507324219e-04,
-	-3.7992000579833984e-04}, /* L1721 */
-{1.5375938415527344e+00, 6.5263360738754272e-05,
-	1.1920928955078125e-07, 5.7220458984375000e-06,
-	-9.2983245849609375e-06}, /* L1722 */
-{2.0910115242004395e+00, 8.8870525360107422e-05,
-	1.1920928955078125e-07, -4.2915344238281250e-06,
-	6.5207481384277344e-05}, /* L1723 */
-{1.7595071792602539e+00, 7.4893236160278320e-05,
-	1.1920928955078125e-07, -1.2814998626708984e-05,
-	7.4505805969238281e-05}, /* L1724 */
-{2.1591715812683105e+00, 9.2029571533203125e-05,
-	1.1920928955078125e-07, 1.1086463928222656e-05,
-	-1.8179416656494141e-05}, /* L1725 */
-{1.6088076829910278e+00, 6.8664550781250000e-05,
-	1.1920928955078125e-07, 2.8610229492187500e-06,
-	-3.0219554901123047e-05}, /* L1726 */
-{2.5671923160552979e+00, 1.0973215103149414e-04,
-	1.1920928955078125e-07, 5.8293342590332031e-05,
-	-6.3776969909667969e-06}, /* L1727 */
-{1.9288637638092041e+00, 8.2552433013916016e-05,
-	1.1920928955078125e-07, 1.1920928955078125e-06,
-	-1.1801719665527344e-05}, /* L1728 */
-{3.1062536239624023e+00, 1.3312697410583496e-04,
-	1.1920928955078125e-07, 1.2636184692382812e-05,
-	9.5367431640625000e-06}, /* L1729 */
-{1.7863671779632568e+00, 7.6666474342346191e-05,
-	1.1920928955078125e-07, 2.2649765014648438e-06,
-	-1.2338161468505859e-05}, /* L1730 */
-{2.3592751026153564e+00, 1.0144710540771484e-04,
-	1.1920928955078125e-07, 1.3911724090576172e-04,
-	1.4853477478027344e-04}, /* L1731 */
-{2.2422988414764404e+00, 9.6499919891357422e-05,
-	1.1920928955078125e-07, 4.0531158447265625e-06,
-	1.0132789611816406e-05}, /* L1732 */
-{2.1561350822448730e+00, 9.2923641204833984e-05,
-	1.1920928955078125e-07, -7.0333480834960938e-06,
-	-9.0003013610839844e-06}, /* L1733 */
-{1.4140819311141968e+00, 6.1035156250000000e-05,
-	1.1920928955078125e-07, -9.4473361968994141e-05,
-	3.5405158996582031e-05}, /* L1734 */
-{2.0418946743011475e+00, 8.8244676589965820e-05,
-	1.1920928955078125e-07, 2.3722648620605469e-05,
-	1.0251998901367188e-05}, /* L1735 */
-{1.7496078014373779e+00, 7.5727701187133789e-05,
-	1.1920928955078125e-07, -4.5716762542724609e-05,
-	8.7022781372070312e-06}, /* L1736 */
-{2.6250491142272949e+00, 1.1377036571502686e-04,
-	1.1920928955078125e-07, -2.0861625671386719e-05,
-	5.3882598876953125e-05}, /* L1737 */
-{1.9813417196273804e+00, 8.5987150669097900e-05,
-	1.1920928955078125e-07, 1.1444091796875000e-05,
-	4.3392181396484375e-05}, /* L1738 */
-{1.9966820478439331e+00, 8.6769461631774902e-05,
-	1.1920928955078125e-07, 4.7683715820312500e-06,
-	-1.8954277038574219e-05}, /* L1739 */
-{2.2731249332427979e+00, 9.8913908004760742e-05,
-	1.1920928955078125e-07, 3.5762786865234375e-07,
-	-3.2544136047363281e-05}, /* L1740 */
-{2.2289917469024658e+00, 9.7140669822692871e-05,
-	1.1920928955078125e-07, 1.3172626495361328e-04,
-	-9.3936920166015625e-05}, /* L1741 */
-{1.7321634292602539e+00, 7.5578689575195312e-05,
-	1.1920928955078125e-07, -1.1980533599853516e-05,
-	6.4373016357421875e-06}, /* L1742 */
-{2.0246231555938721e+00, 8.8483095169067383e-05,
-	1.1920928955078125e-07, -4.3988227844238281e-05,
-	1.7797946929931641e-04}, /* L1743 */
-{1.6644182205200195e+00, 7.2836875915527344e-05,
-	1.1920928955078125e-07, 7.3909759521484375e-06,
-	-1.5354156494140625e-04}, /* L1744 */
-{2.4302031993865967e+00, 1.0648369789123535e-04,
-	1.1920928955078125e-07, -3.1471252441406250e-05,
-	-3.3199787139892578e-05}, /* L1745 */
-{1.4454622268676758e+00, 6.3419342041015625e-05,
-	1.1920928955078125e-07, 8.2254409790039062e-06,
-	1.2040138244628906e-05}, /* L1746 */
-{2.6828982830047607e+00, 1.1789239943027496e-04,
-	1.1920928955078125e-07, -8.8095664978027344e-05,
-	-4.1723251342773438e-06}, /* L1747 */
-{2.0662176609039307e+00, 9.0897083282470703e-05,
-	1.1920928955078125e-07, -5.0067901611328125e-06,
-	2.8967857360839844e-05}, /* L1748 */
-{2.2055304050445557e+00, 9.7155570983886719e-05,
-	1.1920928955078125e-07, 3.3378601074218750e-06,
-	1.0013580322265625e-05}, /* L1749 */
-{1.7370011806488037e+00, 7.6621770858764648e-05,
-	1.1920928955078125e-07, -9.0599060058593750e-06,
-	1.3113021850585938e-06}, /* L1750 */
-{2.3647711277008057e+00, 1.0445713996887207e-04,
-	1.1920928955078125e-07, 5.1259994506835938e-06,
-	-2.0325183868408203e-05}, /* L1751 */
-{1.8752216100692749e+00, 8.2969665527343750e-05,
-	1.1920928955078125e-07, -2.1624565124511719e-04,
-	-2.8014183044433594e-05}, /* L1752 */
-{2.6947195529937744e+00, 1.1956691741943359e-04,
-	1.1920928955078125e-07, -1.6885995864868164e-04,
-	6.8485736846923828e-04}, /* L1753 */
-{1.5535091161727905e+00, 6.8902969360351562e-05,
-	1.1920928955078125e-07, 1.0728836059570312e-06,
-	6.6161155700683594e-05}, /* L1754 */
-{2.1915209293365479e+00, 9.7334384918212891e-05,
-	1.1920928955078125e-07, -4.5061111450195312e-05,
-	-5.9604644775390625e-06}, /* L1755 */
-{1.7833107709884644e+00, 7.9303979873657227e-05,
-	1.1920928955078125e-07, -1.1324882507324219e-06,
-	2.4080276489257812e-05}, /* L1756 */
-{2.2707669734954834e+00, 1.0111927986145020e-04,
-	1.1920928955078125e-07, 3.3378601074218750e-05,
-	2.6941299438476562e-05}, /* L1757 */
-{1.7618168592453003e+00, 7.8558921813964844e-05,
-	1.1920928955078125e-07, -1.5437602996826172e-05,
-	4.1484832763671875e-05}, /* L1758 */
-{2.4681625366210938e+00, 1.1019408702850342e-04,
-	1.1920928955078125e-07, 3.4093856811523438e-05,
-	2.2172927856445312e-05}, /* L1759 */
-{2.0890531539916992e+00, 9.3489885330200195e-05,
-	1.1920928955078125e-07, 5.6982040405273438e-05,
-	2.6929378509521484e-04}, /* L1760 */
-{2.3426351547241211e+00, 1.0506063699722290e-04,
-	1.1920928955078125e-07, 1.4781951904296875e-04,
-	-7.5107812881469727e-04}, /* L1761 */
-{2.2498238086700439e+00, 1.0085105895996094e-04,
-	1.1920928955078125e-07, 9.4175338745117188e-06,
-	-2.9623508453369141e-05}, /* L1762 */
-{2.3314814567565918e+00, 1.0466575622558594e-04,
-	1.1920928955078125e-07, -6.3478946685791016e-05,
-	1.8239021301269531e-05}, /* L1763 */
-{1.9313265085220337e+00, 8.6814165115356445e-05,
-	1.1920928955078125e-07, -7.4088573455810547e-05,
-	-1.2397766113281250e-05}, /* L1764 */
-{2.4335935115814209e+00, 1.0952353477478027e-04,
-	1.1920928955078125e-07, -3.3378601074218750e-06,
-	2.9683113098144531e-05}, /* L1765 */
-{1.9520809650421143e+00, 8.8006258010864258e-05,
-	1.1920928955078125e-07, 2.1100044250488281e-05,
-	-2.3126602172851562e-04}, /* L1766 */
-{2.6704120635986328e+00, 1.2052059173583984e-04,
-	1.1920928955078125e-07, 1.0371208190917969e-05,
-	-2.0444393157958984e-05}, /* L1767 */
-{2.2689750194549561e+00, 1.0254979133605957e-04,
-	1.1920928955078125e-07, 6.0796737670898438e-05,
-	6.0081481933593750e-05}, /* L1768 */
-{2.1498427391052246e+00, 9.7543001174926758e-05,
-	1.1920928955078125e-07, 1.1360645294189453e-04,
-	-7.7557563781738281e-04}, /* L1769 */
-{1.6386512517929077e+00, 7.4237585067749023e-05,
-	1.1920928955078125e-07, 1.3709068298339844e-05,
-	-1.9431114196777344e-05}, /* L1770 */
-{2.2027707099914551e+00, 1.0001659393310547e-04,
-	1.1920928955078125e-07, 7.8558921813964844e-05,
-	-1.3780593872070312e-04}, /* L1771 */
-{1.6518601179122925e+00, 7.5042247772216797e-05,
-	1.1920928955078125e-07, -9.8109245300292969e-05,
-	-4.5895576477050781e-06}, /* L1772 */
-{2.7681057453155518e+00, 1.2591481208801270e-04,
-	1.1920928955078125e-07, 2.3126602172851562e-05,
-	-1.4662742614746094e-05}, /* L1773 */
-{1.5092557668685913e+00, 6.8739056587219238e-05,
-	1.1920928955078125e-07, -2.4676322937011719e-05,
-	9.1314315795898438e-05}, /* L1774 */
-{2.9111638069152832e+00, 1.3326480984687805e-04,
-	1.1920928955078125e-07, 1.3482570648193359e-04,
-	-4.5239925384521484e-04}, /* L1775 */
-{1.8229529857635498e+00, 8.3237886428833008e-05,
-	1.1920928955078125e-07, 3.3617019653320312e-05,
-	-1.5854835510253906e-05}, /* L1776 */
-{2.8705987930297852e+00, 1.3126060366630554e-04,
-	1.1920928955078125e-07, -5.2928924560546875e-05,
-	-4.9710273742675781e-05}, /* L1777 */
-{1.7384099960327148e+00, 7.9587101936340332e-05,
-	1.1920928955078125e-07, 3.2186508178710938e-06,
-	-3.5226345062255859e-05}, /* L1778 */
-{3.0848710536956787e+00, 1.4144182205200195e-04,
-	1.1920928955078125e-07, -1.3554096221923828e-04,
-	2.1183490753173828e-04}, /* L1779 */
-{1.8776628971099854e+00, 8.6203217506408691e-05,
-	1.1920928955078125e-07, 5.5551528930664062e-05,
-	1.5830993652343750e-04}, /* L1780 */
-{2.5466752052307129e+00, 1.1704862117767334e-04,
-	1.1920928955078125e-07, 1.2755393981933594e-05,
-	-6.7055225372314453e-05}, /* L1781 */
-{1.6701420545578003e+00, 7.6856464147567749e-05,
-	1.1920928955078125e-07, 1.9192695617675781e-05,
-	9.5367431640625000e-06}, /* L1782 */
-{1.9069079160690308e+00, 8.7916851043701172e-05,
-	1.1920928955078125e-07, 1.9538402557373047e-04,
-	-2.2816658020019531e-04}, /* L1783 */
-{1.6976265907287598e+00, 7.8350305557250977e-05,
-	1.1920928955078125e-07, 2.2172927856445312e-05,
-	-6.0200691223144531e-06}, /* L1784 */
-{2.4320957660675049e+00, 1.1235475540161133e-04,
-	1.1920928955078125e-07, 3.4332275390625000e-05,
-	1.2159347534179688e-05}, /* L1785 */
-{1.7184666395187378e+00, 7.9512596130371094e-05,
-	1.1920928955078125e-07, 1.5294551849365234e-04,
-	1.7213821411132812e-04}, /* L1786 */
-{2.2211933135986328e+00, 1.0287761688232422e-04,
-	1.1920928955078125e-07, -6.5565109252929688e-07,
-	-3.8146972656250000e-06}, /* L1787 */
-{1.9474271535873413e+00, 9.0315937995910645e-05,
-	1.1920928955078125e-07, -3.8444995880126953e-05,
-	1.5377998352050781e-05}, /* L1788 */
-{3.1050331592559814e+00, 1.4419946819543839e-04,
-	1.1920928955078125e-07, 5.5551528930664062e-05,
-	-4.5359134674072266e-05}, /* L1789 */
-{1.9431529045104980e+00, 9.0345740318298340e-05,
-	1.1920928955078125e-07, 1.4901161193847656e-05,
-	1.0132789611816406e-05}, /* L1790 */
-{2.2056438922882080e+00, 1.0269880294799805e-04,
-	1.1920928955078125e-07, 6.1392784118652344e-05,
-	-7.2658061981201172e-05}, /* L1791 */
-{2.1218938827514648e+00, 9.8913908004760742e-05,
-	1.1920928955078125e-07, -1.6689300537109375e-05,
-	4.7922134399414062e-05}, /* L1792 */
-{2.9662759304046631e+00, 1.3846158981323242e-04,
-	1.1920928955078125e-07, 8.4280967712402344e-05,
-	-1.3887882232666016e-05}, /* L1793 */
-{1.7498950958251953e+00, 8.1777572631835938e-05,
-	1.1920928955078125e-07, -1.4185905456542969e-05,
-	-1.8239021301269531e-05}, /* L1794 */
-{2.3507330417633057e+00, 1.1000037193298340e-04,
-	1.1920928955078125e-07, -1.4960765838623047e-05,
-	3.3140182495117188e-05}, /* L1795 */
-{1.7486015558242798e+00, 8.1926584243774414e-05,
-	1.1920928955078125e-07, 9.1791152954101562e-06,
-	-4.5299530029296875e-06}, /* L1796 */
-{2.3049988746643066e+00, 1.0815262794494629e-04,
-	1.1920928955078125e-07, -2.1219253540039062e-05,
-	7.3909759521484375e-06}, /* L1797 */
-{1.8053104877471924e+00, 8.4817409515380859e-05,
-	1.1920928955078125e-07, 8.4877014160156250e-05,
-	-1.0639429092407227e-04}, /* L1798 */
-{2.3539047241210938e+00, 1.1071562767028809e-04,
-	1.1920928955078125e-07, -3.9219856262207031e-05,
-	3.0875205993652344e-05}, /* L1799 */
-{1.6418801546096802e+00, 7.7322125434875488e-05,
-	1.1920928955078125e-07, 6.4134597778320312e-05,
-	-1.6093254089355469e-05}, /* L1800 */
-{2.2988612651824951e+00, 1.0839104652404785e-04,
-	1.1920928955078125e-07, 1.3232231140136719e-05,
-	3.5881996154785156e-05}, /* L1801 */
-{2.3134348392486572e+00, 1.0941177606582642e-04,
-	1.1920928955078125e-07, -4.9430131912231445e-04,
-	2.1958351135253906e-04}, /* L1802 */
-{2.1120645999908447e+00, 9.9837779998779297e-05,
-	1.1920928955078125e-07, 1.3470649719238281e-05,
-	-9.8943710327148438e-06}, /* L1803 */
-{2.1017658710479736e+00, 9.9480777862481773e-05,
-	1.1920928955078125e-07, 1.5616416931152344e-05,
-	-1.9729137420654297e-05}, /* L1804 */
-{2.8653111457824707e+00, 1.3579800724983215e-04,
-	1.1920928955078125e-07, 9.3102455139160156e-05,
-	-7.1227550506591797e-05}, /* L1805 */
-{1.8221752643585205e+00, 8.6486339569091797e-05,
-	1.1920928955078125e-07, -3.4570693969726562e-05,
-	5.8770179748535156e-05}, /* L1806 */
-{2.8210661411285400e+00, 1.3402104377746582e-04,
-	1.1920928955078125e-07, -6.4969062805175781e-06,
-	1.4424324035644531e-05}, /* L1807 */
-{2.3456311225891113e+00, 1.1157989501953125e-04,
-	1.1920928955078125e-07, 1.0728836059570312e-06,
-	-2.2053718566894531e-06}, /* L1808 */
-{2.7881257534027100e+00, 1.3284385204315186e-04,
-	1.1920928955078125e-07, -2.9605627059936523e-04,
-	-5.5432319641113281e-05}, /* L1809 */
-{1.8128116130828857e+00, 8.6463987827301025e-05,
-	1.1920928955078125e-07, 1.3208389282226562e-04,
-	-6.4373016357421875e-05}, /* L1810 */
-{2.1947944164276123e+00, 1.0484457015991211e-04,
-	1.1920928955078125e-07, -1.1676549911499023e-04,
-	9.1195106506347656e-05}, /* L1811 */
-{2.0533421039581299e+00, 9.8168849945068359e-05,
-	1.1920928955078125e-07, 8.7022781372070312e-06,
-	-5.0902366638183594e-05}, /* L1812 */
-{1.9979074001312256e+00, 9.5635652542114258e-05,
-	1.1920928955078125e-07, -1.0967254638671875e-05,
-	-5.1677227020263672e-05}, /* L1813 */
-{2.0360455513000488e+00, 9.7587704658508301e-05,
-	1.1920928955078125e-07, 3.5285949707031250e-05,
-	2.7179718017578125e-05}, /* L1814 */
-{1.9578819274902344e+00, 9.3963928520679474e-05,
-	1.1920928955078125e-07, 2.1934509277343750e-05,
-	6.6757202148437500e-06}, /* L1815 */
-{2.2573385238647461e+00, 1.0845065116882324e-04,
-	1.1920928955078125e-07, 2.4795532226562500e-05,
-	2.0265579223632812e-06}, /* L1816 */
-{2.5022745132446289e+00, 1.2037158012390137e-04,
-	1.1920928955078125e-07, 3.0279159545898438e-05,
-	-1.5020370483398438e-05}, /* L1817 */
-{1.6966168880462646e+00, 8.1717967987060547e-05,
-	1.1920928955078125e-07, -2.5331974029541016e-05,
-	4.3392181396484375e-05}, /* L1818 */
-{2.3328707218170166e+00, 1.1250376701354980e-04,
-	1.1920928955078125e-07, -5.4657459259033203e-05,
-	-4.7385692596435547e-05}, /* L1819 */
-{3.4232356548309326e+00, 1.6528367996215820e-04,
-	1.1920928955078125e-07, -1.7762184143066406e-05,
-	2.3722648620605469e-05}, /* L1820 */
-{2.4594986438751221e+00, 1.1903047561645508e-04,
-	1.1920928955078125e-07, -1.2093782424926758e-04,
-	-1.2809038162231445e-04}, /* L1821 */
-{2.0857689380645752e+00, 1.0097026824951172e-04,
-	1.1920928955078125e-07, -4.5776367187500000e-05,
-	1.1920928955078125e-05}, /* L1822 */
-{2.0649635791778564e+00, 1.0007619857788086e-04,
-	1.1920928955078125e-07, -1.0907649993896484e-05,
-	-1.5556812286376953e-05}, /* L1823 */
-{2.1299760341644287e+00, 1.0335445404052734e-04,
-	1.1920928955078125e-07, 1.0204315185546875e-04,
-	-1.8000602722167969e-05}, /* L1824 */
-{2.5681340694427490e+00, 1.2478232383728027e-04,
-	1.1920928955078125e-07, -3.0994415283203125e-06,
-	1.1384487152099609e-04}, /* L1825 */
-{1.8315933942794800e+00, 8.9108943939208984e-05,
-	1.1920928955078125e-07, 1.4650821685791016e-04,
-	-9.8943710327148438e-05}, /* L1826 */
-{2.3002212047576904e+00, 1.1202692985534668e-04,
-	1.1920928955078125e-07, 1.5497207641601562e-05,
-	2.1934509277343750e-05}, /* L1827 */
-{2.1280312538146973e+00, 1.0377913713455200e-04,
-	1.1920928955078125e-07, 9.8943710327148438e-05,
-	1.8239021301269531e-05}, /* L1828 */
-{2.4616782665252686e+00, 1.2018531560897827e-04,
-	1.1920928955078125e-07, -3.8444995880126953e-05,
-	1.0848045349121094e-05}, /* L1829 */
-{2.0719974040985107e+00, 1.0128319263458252e-04,
-	1.1920928955078125e-07, 7.9035758972167969e-05,
-	8.3446502685546875e-07}, /* L1830 */
-{2.0984549522399902e+00, 1.0269880294799805e-04,
-	1.1920928955078125e-07, -8.1062316894531250e-06,
-	-3.5762786865234375e-06}, /* L1831 */
-{2.0673472881317139e+00, 1.0129809379577637e-04,
-	1.1920928955078125e-07, 4.2915344238281250e-06,
-	-4.0709972381591797e-05}, /* L1832 */
-{2.0363466739654541e+00, 9.9942088127136230e-05,
-	1.1920928955078125e-07, 1.0824203491210938e-04,
-	1.8596649169921875e-04}, /* L1833 */
-{2.1924707889556885e+00, 1.0769069194793701e-04,
-	1.1920928955078125e-07, -1.4305114746093750e-05,
-	2.8133392333984375e-05}, /* L1834 */
-{2.5006375312805176e+00, 1.2305378913879395e-04,
-	1.1920928955078125e-07, 4.5537948608398438e-05,
-	3.9339065551757812e-05}, /* L1835 */
-{1.8640559911727905e+00, 9.1791152954101562e-05,
-	1.1920928955078125e-07, -1.6212463378906250e-05,
-	-9.2744827270507812e-05}, /* L1836 */
-{2.5396268367767334e+00, 1.2522935867309570e-04,
-	1.1920928955078125e-07, 4.4941902160644531e-05,
-	1.0871887207031250e-04}, /* L1837 */
-{1.9220930337905884e+00, 9.5002353191375732e-05,
-	1.1920928955078125e-07, -2.2161006927490234e-04,
-	-1.8966197967529297e-04}, /* L1838 */
-{2.1667468547821045e+00, 1.0711699724197388e-04,
-	1.1920928955078125e-07, -2.0056962966918945e-04,
-	2.6929378509521484e-04}, /* L1839 */
-{2.7691848278045654e+00, 1.3703107833862305e-04,
-	1.1920928955078125e-07, -1.7881393432617188e-06,
-	-6.0796737670898438e-06}, /* L1840 */
-{2.3119692802429199e+00, 1.1458992958068848e-04,
-	1.1920928955078125e-07, -2.3329257965087891e-04,
-	-1.9490718841552734e-04}, /* L1841 */
-{1.4835515022277832e+00, 7.3593109846115112e-05,
-	1.1920928955078125e-07, 6.4849853515625000e-05,
-	1.3387203216552734e-04}, /* L1842 */
-{2.1553435325622559e+00, 1.0703504085540771e-04,
-	1.1920928955078125e-07, 8.3804130554199219e-05,
-	-2.7060508728027344e-05}, /* L1843 */
-{2.2853090763092041e+00, 1.1369585990905762e-04,
-	1.1920928955078125e-07, -1.7964839935302734e-04,
-	4.3475627899169922e-04}, /* L1844 */
-{2.8922224044799805e+00, 1.4400482177734375e-04,
-	1.1920928955078125e-07, -2.4354457855224609e-04,
-	1.1134147644042969e-04}, /* L1845 */
-{1.6120048761367798e+00, 8.0332159996032715e-05,
-	1.1920928955078125e-07, 9.5367431640625000e-07,
-	-5.7220458984375000e-06}, /* L1846 */
-{1.8666315078735352e+00, 9.3132257461547852e-05,
-	1.1920928955078125e-07, 2.8371810913085938e-05,
-	-8.2254409790039062e-06}, /* L1847 */
-{2.4853396415710449e+00, 1.2415647506713867e-04,
-	1.1920928955078125e-07, 2.3007392883300781e-05,
-	-2.0742416381835938e-05}, /* L1848 */
-{2.4352109432220459e+00, 1.2187659740447998e-04,
-	1.1920928955078125e-07, -7.4505805969238281e-05,
-	1.6856193542480469e-04}, /* L1849 */
-{1.7282103300094604e+00, 8.6545944213867188e-05,
-	1.1920928955078125e-07, -1.9967555999755859e-05,
-	2.8014183044433594e-05}, /* L1850 */
-{2.6603484153747559e+00, 1.3339519500732422e-04,
-	1.1920928955078125e-07, -1.8048286437988281e-04,
-	1.0716915130615234e-04}, /* L1851 */
-{1.6997557878494263e+00, 8.5324048995971680e-05,
-	1.1920928955078125e-07, 4.4584274291992188e-05,
-	1.6570091247558594e-05}, /* L1852 */
-{2.8429338932037354e+00, 1.4299154281616211e-04,
-	1.1920928955078125e-07, 4.3642520904541016e-04,
-	-5.4985284805297852e-04}, /* L1853 */
-{1.6515436172485352e+00, 8.3103775978088379e-05,
-	1.1920928955078125e-07, 8.7261199951171875e-05,
-	-8.0823898315429688e-05}, /* L1854 */
-{2.4816195964813232e+00, 1.2502074241638184e-04,
-	1.1920928955078125e-07, 1.4424324035644531e-05,
-	-1.3703107833862305e-04}, /* L1855 */
-{1.7384079694747925e+00, 8.7663531303405762e-05,
-	1.1920928955078125e-07, -1.7166137695312500e-05,
-	-2.5212764739990234e-05}, /* L1856 */
-{2.6873564720153809e+00, 1.3568997383117676e-04,
-	1.1920928955078125e-07, 1.3232231140136719e-05,
-	-8.1658363342285156e-06}, /* L1857 */
-{1.4985584020614624e+00, 7.5755640864372253e-05,
-	1.1920928955078125e-07, 6.7830085754394531e-05,
-	2.9563903808593750e-05}, /* L1858 */
-{2.7007632255554199e+00, 1.3668090105056763e-04,
-	1.1920928955078125e-07, -2.7596950531005859e-05,
-	-2.2888183593750000e-05}, /* L1859 */
-{1.8015152215957642e+00, 9.1284513473510742e-05,
-	1.1920928955078125e-07, 5.6028366088867188e-06,
-	3.4570693969726562e-06}, /* L1860 */
-{2.7948830127716064e+00, 1.4185905456542969e-04,
-	1.1920928955078125e-07, 3.4213066101074219e-04,
-	-1.6695261001586914e-04}, /* L1861 */
-{1.6055277585983276e+00, 8.1539154052734375e-05,
-	1.1920928955078125e-07, 1.5974044799804688e-05,
-	7.9870223999023438e-06}, /* L1862 */
-{2.0925402641296387e+00, 1.0641291737556458e-04,
-	1.1920928955078125e-07, -1.0961294174194336e-04,
-	5.2690505981445312e-05}, /* L1863 */
-{1.7606729269027710e+00, 8.9645385742187500e-05,
-	1.1920928955078125e-07, -1.7881393432617188e-06,
-	1.4185905456542969e-05}, /* L1864 */
-{2.4618394374847412e+00, 1.2559443712234497e-04,
-	1.1920928955078125e-07, -8.3386898040771484e-05,
-	-5.7774782180786133e-04}, /* L1865 */
-{1.4373915195465088e+00, 7.3343515396118164e-05,
-	1.1920928955078125e-07, 8.1062316894531250e-06,
-	-1.3828277587890625e-05}, /* L1866 */
-{2.2235951423645020e+00, 1.1359155178070068e-04,
-	1.1920928955078125e-07, 6.6757202148437500e-06,
-	-1.7762184143066406e-05}, /* L1867 */
-{1.8781640529632568e+00, 9.6112489700317383e-05,
-	1.1920928955078125e-07, -1.3083219528198242e-04,
-	-3.3730268478393555e-04}, /* L1868 */
-{2.2864773273468018e+00, 1.1712312698364258e-04,
-	1.1920928955078125e-07, 5.9366226196289062e-05,
-	-1.1742115020751953e-04}, /* L1869 */
-{2.1287276744842529e+00, 1.0952353477478027e-04,
-	1.1920928955078125e-07, -8.8697671890258789e-04,
-	-1.9913911819458008e-04}, /* L1870 */
-{2.4328908920288086e+00, 1.2487173080444336e-04,
-	1.1920928955078125e-07, -2.9146671295166016e-05,
-	-1.3232231140136719e-05}, /* L1871 */
-{2.4926898479461670e+00, 1.2809038162231445e-04,
-	1.1920928955078125e-07, -3.0219554901123047e-05,
-	-5.2571296691894531e-05}, /* L1872 */
-{2.2158510684967041e+00, 1.1399388313293457e-04,
-	1.1920928955078125e-07, -2.5570392608642578e-05,
-	-7.7486038208007812e-06}, /* L1873 */
-{1.9853980541229248e+00, 1.0225176811218262e-04,
-	1.1920928955078125e-07, -3.9935111999511719e-06,
-	1.8239021301269531e-05}, /* L1874 */
-{2.8388967514038086e+00, 1.4643371105194092e-04,
-	1.1920928955078125e-07, 2.5629997253417969e-05,
-	7.2717666625976562e-06}, /* L1875 */
-{2.8566086292266846e+00, 1.4749169349670410e-04,
-	1.1920928955078125e-07, 7.2360038757324219e-05,
-	-7.2836875915527344e-05}, /* L1876 */
-{2.5184569358825684e+00, 1.3017654418945312e-04,
-	1.1920928955078125e-07, 6.4015388488769531e-05,
-	7.3075294494628906e-05}, /* L1877 */
-{1.9263958930969238e+00, 9.9688768386840820e-05,
-	1.1920928955078125e-07, -4.3511390686035156e-05,
-	4.7206878662109375e-05}, /* L1878 */
-{2.7452421188354492e+00, 1.4221668243408203e-04,
-	1.1920928955078125e-07, -1.4662742614746094e-05,
-	-1.7523765563964844e-05}, /* L1879 */
-{2.5641698837280273e+00, 1.3311207294464111e-04,
-	1.1920928955078125e-07, -1.4489889144897461e-04,
-	1.7321109771728516e-04}, /* L1880 */
-{3.2108201980590820e+00, 1.6671419143676758e-04,
-	1.1920928955078125e-07, 6.9499015808105469e-05,
-	5.6385993957519531e-05}, /* L1881 */
-{1.6079204082489014e+00, 8.3580613136291504e-05,
-	1.1920928955078125e-07, 2.1338462829589844e-05,
-	-6.5565109252929688e-07}, /* L1882 */
-{2.5309545993804932e+00, 1.3172626495361328e-04,
-	1.1920928955078125e-07, 5.1140785217285156e-05,
-	2.4795532226562500e-05}, /* L1883 */
-{2.4556424617767334e+00, 1.2794137001037598e-04,
-	1.1920928955078125e-07, 3.9935111999511719e-05,
-	4.5180320739746094e-05}, /* L1884 */
-{3.3386497497558594e+00, 1.7437338829040527e-04,
-	1.1920928955078125e-07, 2.8991699218750000e-04,
-	2.4509429931640625e-04}, /* L1885 */
-{1.6634821891784668e+00, 8.6873769760131836e-05,
-	1.1920928955078125e-07, 2.9802322387695312e-05,
-	1.2159347534179688e-04}, /* L1886 */
-{2.3434493541717529e+00, 1.2252479791641235e-04,
-	1.1920928955078125e-07, -6.9260597229003906e-05,
-	1.6069412231445312e-04}, /* L1887 */
-{2.0525343418121338e+00, 1.0743364691734314e-04,
-	1.1920928955078125e-07, -4.4703483581542969e-05,
-	-8.9704990386962891e-05}, /* L1888 */
-{2.4524402618408203e+00, 1.2850761413574219e-04,
-	1.1920928955078125e-07, 1.2397766113281250e-05,
-	-1.2993812561035156e-05}, /* L1889 */
-{1.4443668127059937e+00, 7.5876712799072266e-05,
-	1.1920928955078125e-07, -5.4794549942016602e-04,
-	-1.8507242202758789e-04}, /* L1890 */
-{2.2905726432800293e+00, 1.2062489986419678e-04,
-	1.1920928955078125e-07, 3.5476684570312500e-04,
-	6.0319900512695312e-05}, /* L1891 */
-{1.7725929021835327e+00, 9.3251466751098633e-05,
-	1.1920928955078125e-07, 2.3245811462402344e-05,
-	1.3601779937744141e-04}, /* L1892 */
-{2.2941467761993408e+00, 1.2078881263732910e-04,
-	1.1920928955078125e-07, -3.1471252441406250e-05,
-	1.6784667968750000e-04}, /* L1893 */
-{1.7702763080596924e+00, 9.3281269073486328e-05,
-	1.1920928955078125e-07, -3.5762786865234375e-07,
-	7.1525573730468750e-06}, /* L1894 */
-{3.2860200405120850e+00, 1.7338991165161133e-04,
-	1.1920928955078125e-07, 7.8082084655761719e-05,
-	1.5020370483398438e-05}, /* L1895 */
-{2.0420827865600586e+00, 1.0788440704345703e-04,
-	1.1920928955078125e-07, 2.7298927307128906e-05,
-	4.7802925109863281e-05}, /* L1896 */
-{3.2731742858886719e+00, 1.7306208610534668e-04,
-	1.1920928955078125e-07, 1.1444091796875000e-05,
-	3.5762786865234375e-06}, /* L1897 */
-{1.7687418460845947e+00, 9.3623995780944824e-05,
-	1.1920928955078125e-07, -9.0599060058593750e-06,
-	-2.0384788513183594e-05}, /* L1898 */
-{3.4269099235534668e+00, 1.8161535263061523e-04,
-	1.1920928955078125e-07, -3.2961368560791016e-05,
-	3.2305717468261719e-05}, /* L1899 */
-{1.8056877851486206e+00, 9.5814466476440430e-05,
-	1.1920928955078125e-07, -5.0246715545654297e-05,
-	5.2571296691894531e-05}, /* L1900 */
-{3.3191819190979004e+00, 1.7637014389038086e-04,
-	1.1920928955078125e-07, -5.1081180572509766e-05,
-	1.8763542175292969e-04}, /* L1901 */
-{1.8332746028900146e+00, 9.7483396530151367e-05,
-	1.1920928955078125e-07, 5.1259994506835938e-06,
-	4.2915344238281250e-06}, /* L1902 */
-{2.8806416988372803e+00, 1.5336275100708008e-04,
-	1.1920928955078125e-07, -1.3530254364013672e-05,
-	-5.7041645050048828e-05}, /* L1903 */
-{1.8356271982192993e+00, 9.7870826721191406e-05,
-	1.1920928955078125e-07, -6.8008899688720703e-05,
-	3.0159950256347656e-04}, /* L1904 */
-{3.9514160156250000e+00, 2.1086633205413818e-04,
-	1.1920928955078125e-07, 2.4271011352539062e-04,
-	-1.0418891906738281e-04}, /* L1905 */
-{1.8275932073593140e+00, 9.7610056400299072e-05,
-	1.1920928955078125e-07, 2.5629997253417969e-05,
-	1.5854835510253906e-05}, /* L1906 */
-{2.8603291511535645e+00, 1.5297532081604004e-04,
-	1.1920928955078125e-07, 4.1723251342773438e-05,
-	1.3470649719238281e-04}, /* L1907 */
-{1.7409679889678955e+00, 9.3191862106323242e-05,
-	1.1920928955078125e-07, 1.0013580322265625e-05,
-	-2.5689601898193359e-05}, /* L1908 */
-{2.8995096683502197e+00, 1.5538558363914490e-04,
-	1.1920928955078125e-07, -4.3570995330810547e-05,
-	-6.4253807067871094e-05}, /* L1909 */
-{2.8324661254882812e+00, 1.5196204185485840e-04,
-	1.1920928955078125e-07, 2.2292137145996094e-05,
-	-3.4868717193603516e-05}, /* L1910 */
-{2.8509500026702881e+00, 1.5318393707275391e-04,
-	1.1920928955078125e-07, 1.5032291412353516e-04,
-	1.3399124145507812e-04}, /* L1911 */
-{2.2605297565460205e+00, 1.2156367301940918e-04,
-	1.1920928955078125e-07, 5.0067901611328125e-06,
-	-4.2378902435302734e-05}, /* L1912 */
-{2.9011981487274170e+00, 1.5616416931152344e-04,
-	1.1920928955078125e-07, -2.0563602447509766e-05,
-	1.3589859008789062e-05}, /* L1913 */
-{2.5663242340087891e+00, 1.3829022645950317e-04,
-	1.1920928955078125e-07, 1.5139579772949219e-05,
-	1.3113021850585938e-05}, /* L1914 */
-{2.0113093852996826e+00, 1.0858476161956787e-04,
-	1.1920928955078125e-07, -4.3809413909912109e-04,
-	-5.3048133850097656e-05}, /* L1915 */
-{2.0161223411560059e+00, 1.0888278484344482e-04,
-	1.1920928955078125e-07, -8.8810920715332031e-06,
-	-1.1563301086425781e-05}, /* L1916 */
-{2.6440193653106689e+00, 1.4299154281616211e-04,
-	1.1920928955078125e-07, 7.0095062255859375e-05,
-	2.8491020202636719e-04}, /* L1917 */
-{1.9061421155929565e+00, 1.0319054126739502e-04,
-	1.1920928955078125e-07, 4.1961669921875000e-05,
-	-4.8875808715820312e-05}, /* L1918 */
-{2.4617960453033447e+00, 1.3339519500732422e-04,
-	1.1920928955078125e-07, -5.1856040954589844e-06,
-	-3.5047531127929688e-05}, /* L1919 */
-{1.9810401201248169e+00, 1.0752677917480469e-04,
-	1.1920928955078125e-07, 1.4865398406982422e-04,
-	1.0263919830322266e-04}, /* L1920 */
-{3.1827111244201660e+00, 1.7300248146057129e-04,
-	1.1920928955078125e-07, 3.3664703369140625e-04,
-	2.4199485778808594e-04}, /* L1921 */
-{2.2300319671630859e+00, 1.2132152915000916e-04,
-	1.1920928955078125e-07, 3.6871433258056641e-04,
-	3.3855438232421875e-05}, /* L1922 */
-{2.5846183300018311e+00, 1.4070421457290649e-04,
-	1.1920928955078125e-07, -4.1723251342773438e-06,
-	2.0492076873779297e-04}, /* L1923 */
-{1.9145039319992065e+00, 1.0430812835693359e-04,
-	1.1920928955078125e-07, -7.1525573730468750e-06,
-	-1.8239021301269531e-05}, /* L1924 */
-{2.9107191562652588e+00, 1.5877932310104370e-04,
-	1.1920928955078125e-07, -8.4042549133300781e-05,
-	-1.3709068298339844e-05}, /* L1925 */
-{1.8062936067581177e+00, 9.9033117294311523e-05,
-	1.1920928955078125e-07, -1.8262863159179688e-04,
-	1.1172294616699219e-03}, /* L1926 */
-{2.5536561012268066e+00, 1.3959407806396484e-04,
-	1.1920928955078125e-07, -3.8385391235351562e-05,
-	4.6849250793457031e-05}, /* L1927 */
-{1.8466471433639526e+00, 1.0144710540771484e-04,
-	1.1920928955078125e-07, -8.3380937576293945e-04,
-	-2.2706985473632812e-03}, /* L1928 */
-{3.5425333976745605e+00, 1.9410252571105957e-04,
-	1.1920928955078125e-07, 2.7298927307128906e-05,
-	-7.5578689575195312e-05}, /* L1929 */
-{2.3763818740844727e+00, 1.3034790754318237e-04,
-	1.1920928955078125e-07, 5.1259994506835938e-05,
-	1.0454654693603516e-04}, /* L1930 */
-{2.4987885951995850e+00, 1.3723969459533691e-04,
-	1.1920928955078125e-07, 7.9989433288574219e-05,
-	-1.3691186904907227e-04}, /* L1931 */
-{2.6794495582580566e+00, 1.4726817607879639e-04,
-	1.1920928955078125e-07, 4.9114227294921875e-05,
-	4.7087669372558594e-05}, /* L1932 */
-{3.0614643096923828e+00, 1.6847252845764160e-04,
-	1.1920928955078125e-07, 6.6876411437988281e-05,
-	1.3005733489990234e-04}, /* L1933 */
-{1.6402275562286377e+00, 9.0479850769042969e-05,
-	1.1920928955078125e-07, -6.8700313568115234e-04,
-	-7.1400403976440430e-04}, /* L1934 */
-{2.5690569877624512e+00, 1.4166533946990967e-04,
-	1.1920928955078125e-07, -4.3630599975585938e-05,
-	-2.5928020477294922e-05}, /* L1935 */
-{2.4554016590118408e+00, 1.3554748147726059e-04,
-	1.1920928955078125e-07, -4.5895576477050781e-05,
-	-7.5817108154296875e-05}, /* L1936 */
-{3.0257985591888428e+00, 1.6725063323974609e-04,
-	1.1920928955078125e-07, -8.1956386566162109e-05,
-	-1.1086463928222656e-05}, /* L1937 */
-{1.9632952213287354e+00, 1.0865926742553711e-04,
-	1.1920928955078125e-07, -1.8268823623657227e-04,
-	1.3363361358642578e-04}, /* L1938 */
-{3.0890502929687500e+00, 1.7106533050537109e-04,
-	1.1920928955078125e-07, -1.0490417480468750e-05,
-	-5.2452087402343750e-06}, /* L1939 */
-{2.1422698497772217e+00, 1.1889636516571045e-04,
-	1.1920928955078125e-07, 3.7908554077148438e-05,
-	-2.7596950531005859e-05}, /* L1940 */
-{2.5277142524719238e+00, 1.4027953147888184e-04,
-	1.1920928955078125e-07, 3.3497810363769531e-05,
-	1.5497207641601562e-05}, /* L1941 */
-{2.0290853977203369e+00, 1.1365115642547607e-04,
-	1.1920928955078125e-07, 8.6903572082519531e-05,
-	-1.2836456298828125e-03}, /* L1942 */
-{2.8987660408020020e+00, 1.6123056411743164e-04,
-	1.1920928955078125e-07, -2.4557113647460938e-05,
-	-2.8192996978759766e-05}, /* L1943 */
-{2.0777528285980225e+00, 1.1569261550903320e-04,
-	1.1920928955078125e-07, -6.7949295043945312e-05,
-	8.2969665527343750e-05}, /* L1944 */
-{3.0584731101989746e+00, 1.7046928405761719e-04,
-	1.1920928955078125e-07, -1.7464160919189453e-05,
-	2.1815299987792969e-05}, /* L1945 */
-{2.4689078330993652e+00, 1.3846158981323242e-04,
-	1.1920928955078125e-07, -5.6564807891845703e-05,
-	1.3842582702636719e-03}, /* L1946 */
-{2.8085601329803467e+00, 1.5702843666076660e-04,
-	1.1920928955078125e-07, 7.7486038208007812e-05,
-	2.4795532226562500e-05}, /* L1947 */
-{2.0344049930572510e+00, 1.1381506919860840e-04,
-	1.1920928955078125e-07, 1.6880035400390625e-04,
-	-2.5749206542968750e-05}, /* L1948 */
-{3.2024304866790771e+00, 1.7935037612915039e-04,
-	1.1920928955078125e-07, 1.2314319610595703e-04,
-	4.3618679046630859e-04}, /* L1949 */
-{2.3651342391967773e+00, 1.3273954391479492e-04,
-	1.1920928955078125e-07, -3.7831068038940430e-04,
-	-3.2556056976318359e-04}, /* L1950 */
-{2.8672444820404053e+00, 1.6085803508758545e-04,
-	1.1920928955078125e-07, -1.7046928405761719e-04,
-	-2.2709369659423828e-05}, /* L1951 */
-{2.1778659820556641e+00, 1.2230873107910156e-04,
-	1.1920928955078125e-07, -1.1670589447021484e-04,
-	-4.8816204071044922e-05}, /* L1952 */
-{3.4397442340850830e+00, 1.9359588623046875e-04,
-	1.1920928955078125e-07, 1.4424324035644531e-04,
-	2.7120113372802734e-04}, /* L1953 */
-{2.8241491317749023e+00, 1.5892460942268372e-04,
-	1.1920928955078125e-07, 1.3351440429687500e-05,
-	-4.4703483581542969e-06}, /* L1954 */
-{2.5162622928619385e+00, 1.4173984527587891e-04,
-	1.1920928955078125e-07, -1.1503696441650391e-05,
-	1.8715858459472656e-05}, /* L1955 */
-{2.1169745922088623e+00, 1.1938810348510742e-04,
-	1.1920928955078125e-07, -2.1398067474365234e-05,
-	1.4305114746093750e-05}, /* L1956 */
-{2.7241365909576416e+00, 1.5377998352050781e-04,
-	1.1920928955078125e-07, 6.0796737670898438e-05,
-	-1.6331672668457031e-05}, /* L1957 */
-{1.7056642770767212e+00, 9.6410512924194336e-05,
-	1.1920928955078125e-07, 8.0347061157226562e-05,
-	6.6399574279785156e-05}, /* L1958 */
-{3.1809294223785400e+00, 1.7994642257690430e-04,
-	1.1920928955078125e-07, -3.5762786865234375e-06,
-	-4.8279762268066406e-06}, /* L1959 */
-{2.2413270473480225e+00, 1.2692809104919434e-04,
-	1.1920928955078125e-07, 7.9154968261718750e-05,
-	-1.1438131332397461e-04}, /* L1960 */
-{2.8122732639312744e+00, 1.5943124890327454e-04,
-	1.1920928955078125e-07, 6.9141387939453125e-06,
-	-4.6074390411376953e-05}, /* L1961 */
-{2.1340303421020508e+00, 1.2111663818359375e-04,
-	1.1920928955078125e-07, 6.0319900512695312e-05,
-	7.6651573181152344e-05}, /* L1962 */
-{2.8176293373107910e+00, 1.6009807586669922e-04,
-	1.1920928955078125e-07, -7.7486038208007812e-06,
-	1.0097026824951172e-04}, /* L1963 */
-{1.9855377674102783e+00, 1.1295080184936523e-04,
-	1.1920928955078125e-07, 3.9935111999511719e-05,
-	-1.1801719665527344e-04}, /* L1964 */
-{2.6457307338714600e+00, 1.5062093734741211e-04,
-	1.1920928955078125e-07, 2.6226043701171875e-06,
-	1.1563301086425781e-04}, /* L1965 */
-{1.8793472051620483e+00, 1.0713934898376465e-04,
-	1.1920928955078125e-07, -2.2655725479125977e-04,
-	9.6440315246582031e-05}, /* L1966 */
-{3.2956936359405518e+00, 1.8802285194396973e-04,
-	1.1920928955078125e-07, 3.4451484680175781e-05,
-	7.5101852416992188e-06}, /* L1967 */
-{2.8477327823638916e+00, 1.6269087791442871e-04,
-	1.1920928955078125e-07, -1.2516975402832031e-05,
-	-1.8274784088134766e-04}, /* L1968 */
-{3.2187063694000244e+00, 1.8413364887237549e-04,
-	1.1920928955078125e-07, -1.2969970703125000e-04,
-	-3.2395124435424805e-04}, /* L1969 */
-{2.1435589790344238e+00, 1.2266635894775391e-04,
-	1.1920928955078125e-07, -2.9802322387695312e-07,
-	1.5735626220703125e-05}, /* L1970 */
-{2.9644253253936768e+00, 1.6984343528747559e-04,
-	1.1920928955078125e-07, -6.0856342315673828e-05,
-	-2.7418136596679688e-05}, /* L1971 */
-{2.0189805030822754e+00, 1.1578202247619629e-04,
-	1.1920928955078125e-07, 4.8637390136718750e-05,
-	3.1709671020507812e-05}, /* L1972 */
-{3.2408525943756104e+00, 1.8605589866638184e-04,
-	1.1920928955078125e-07, 3.2901763916015625e-05,
-	2.5033950805664062e-05}, /* L1973 */
-{2.0035963058471680e+00, 1.1513382196426392e-04,
-	1.1920928955078125e-07, 6.1988830566406250e-06,
-	7.2717666625976562e-06}, /* L1974 */
-{2.5991616249084473e+00, 1.4951080083847046e-04,
-	1.1920928955078125e-07, -2.2470951080322266e-05,
-	3.5166740417480469e-05}, /* L1975 */
-{2.3958036899566650e+00, 1.3831257820129395e-04,
-	1.1920928955078125e-07, 3.6430358886718750e-04,
-	-1.8298625946044922e-05}, /* L1976 */
-{2.4136555194854736e+00, 1.3914704322814941e-04,
-	1.1920928955078125e-07, -9.2267990112304688e-05,
-	-5.2571296691894531e-05}, /* L1977 */
-{1.7428263425827026e+00, 1.0064337402582169e-04,
-	1.1920928955078125e-07, -2.9265880584716797e-05,
-	-5.3644180297851562e-06}, /* L1978 */
-{2.9059805870056152e+00, 1.6786158084869385e-04,
-	1.1920928955078125e-07, 3.3378601074218750e-05,
-	-1.9073486328125000e-05}, /* L1979 */
-{2.4391889572143555e+00, 1.4105439186096191e-04,
-	1.1920928955078125e-07, -2.0980834960937500e-05,
-	-5.3048133850097656e-05}, /* L1980 */
-{2.7203071117401123e+00, 1.5753507614135742e-04,
-	1.1920928955078125e-07, 1.8715858459472656e-05,
-	-2.5969743728637695e-04}, /* L1981 */
-{2.3946189880371094e+00, 1.3878196477890015e-04,
-	1.1920928955078125e-07, 7.3790550231933594e-05,
-	-1.0365247726440430e-04}, /* L1982 */
-{2.7591810226440430e+00, 1.6010552644729614e-04,
-	1.1920928955078125e-07, 2.5033950805664062e-06,
-	-6.5505504608154297e-05}, /* L1983 */
-{1.9628891944885254e+00, 1.1396408081054688e-04,
-	1.1920928955078125e-07, -5.1259994506835938e-06,
-	2.6583671569824219e-05}, /* L1984 */
-{2.9665896892547607e+00, 1.7242133617401123e-04,
-	1.1920928955078125e-07, 3.1590461730957031e-05,
-	-1.5020370483398438e-05}, /* L1985 */
-{2.2222132682800293e+00, 1.2928247451782227e-04,
-	1.1920928955078125e-07, -2.9802322387695312e-07,
-	8.1062316894531250e-06}, /* L1986 */
-{3.0559027194976807e+00, 1.7797946929931641e-04,
-	1.1920928955078125e-07, -5.0067901611328125e-06,
-	5.0902366638183594e-05}, /* L1987 */
-{2.2775073051452637e+00, 1.3278424739837646e-04,
-	1.1920928955078125e-07, -5.6326389312744141e-05,
-	-2.2768974304199219e-05}, /* L1988 */
-{3.2548406124114990e+00, 1.8998980522155762e-04,
-	1.1920928955078125e-07, -9.1791152954101562e-06,
-	2.3043155670166016e-04}, /* L1989 */
-{2.2917304039001465e+00, 1.3398379087448120e-04,
-	1.1920928955078125e-07, -3.1322240829467773e-04,
-	3.6585330963134766e-04}, /* L1990 */
-{3.1600151062011719e+00, 1.8480420112609863e-04,
-	1.1920928955078125e-07, -1.0609626770019531e-05,
-	3.3617019653320312e-05}, /* L1991 */
-{2.4353582859039307e+00, 1.4257431030273438e-04,
-	1.1920928955078125e-07, 2.9563903808593750e-05,
-	-2.1994113922119141e-05}, /* L1992 */
-{2.9273936748504639e+00, 1.7154216766357422e-04,
-	1.1920928955078125e-07, -6.2525272369384766e-05,
-	1.2946128845214844e-04}, /* L1993 */
-{1.8083318471908569e+00, 1.0606646537780762e-04,
-	1.1920928955078125e-07, -1.6152858734130859e-05,
-	5.7220458984375000e-06}, /* L1994 */
-{3.1197268962860107e+00, 1.8335878849029541e-04,
-	1.1920928955078125e-07, -4.8440694808959961e-04,
-	1.3887882232666016e-04}, /* L1995 */
-{2.1046981811523438e+00, 1.2370944023132324e-04,
-	1.1920928955078125e-07, -7.1525573730468750e-06,
-	-1.9729137420654297e-05}, /* L1996 */
-{2.5268464088439941e+00, 1.4868378639221191e-04,
-	1.1920928955078125e-07, -4.7683715820312500e-06,
-	4.7683715820312500e-07}, /* L1997 */
-{2.1645905971527100e+00, 1.2749433517456055e-04,
-	1.1920928955078125e-07, 1.1086463928222656e-05,
-	4.1127204895019531e-05}, /* L1998 */
-{2.8154706954956055e+00, 1.6599893569946289e-04,
-	1.1920928955078125e-07, -5.4836273193359375e-05,
-	9.7393989562988281e-05}, /* L1999 */
-{2.4877271652221680e+00, 1.4683604240417480e-04,
-	1.1920928955078125e-07, 4.1484832763671875e-05,
-	7.0452690124511719e-05}, /* L2000 */
-{2.8615453243255615e+00, 1.6911327838897705e-04,
-	1.1920928955078125e-07, -7.2240829467773438e-05,
-	1.5532970428466797e-04}, /* L2001 */
-{2.2114782333374023e+00, 1.3077259063720703e-04,
-	1.1920928955078125e-07, -9.8943710327148438e-06,
-	2.6226043701171875e-06}, /* L2002 */
-{2.9739820957183838e+00, 1.7631053924560547e-04,
-	1.1920928955078125e-07, -8.5550546646118164e-04,
-	1.8191337585449219e-04}, /* L2003 */
-{2.7283720970153809e+00, 1.6182661056518555e-04,
-	1.1920928955078125e-07, 2.6714801788330078e-04,
-	-1.5407800674438477e-04}, /* L2004 */
-{3.0635843276977539e+00, 1.8173456192016602e-04,
-	1.1920928955078125e-07, -7.9572200775146484e-05,
-	-2.6226043701171875e-05}, /* L2005 */
-{1.9393781423568726e+00, 1.1515617370605469e-04,
-	1.1920928955078125e-07, -1.3172626495361328e-05,
-	1.8358230590820312e-05}, /* L2006 */
-{2.5894029140472412e+00, 1.5389174222946167e-04,
-	1.1920928955078125e-07, 2.5153160095214844e-05,
-	3.6954879760742188e-05}, /* L2007 */
-{2.0099897384643555e+00, 1.1957064270973206e-04,
-	1.1920928955078125e-07, 2.3841857910156250e-05,
-	5.7220458984375000e-06}, /* L2008 */
-{2.7748332023620605e+00, 1.6534328460693359e-04,
-	1.1920928955078125e-07, -3.9339065551757812e-06,
-	4.6014785766601562e-05}, /* L2009 */
-{2.0054776668548584e+00, 1.1956691741943359e-04,
-	1.1920928955078125e-07, 6.5326690673828125e-05,
-	-1.2040138244628906e-05}, /* L2010 */
-{3.6920042037963867e+00, 4.4040381908416748e-04,
-	1.1920928955078125e-07, 2.8407573699951172e-04,
-	-8.6128711700439453e-05}, /* L2011 */
-{4.4301600456237793e+00, 7.9256296157836914e-04,
-	1.1920928955078125e-07, 1.4102458953857422e-04,
-	-7.6711177825927734e-05}, /* L2012 */
-{6.0660715103149414e+00, 1.4528632164001465e-03,
-	1.1920928955078125e-07, -8.8810920715332031e-06,
-	-3.0279159545898438e-05}, /* L2013 */
-{7.6663098335266113e+00, 2.2868216037750244e-03,
-	1.1920928955078125e-07, -8.6307525634765625e-05,
-	-1.0907649993896484e-05}, /* L2014 */
-{9.7100963592529297e+00, 3.4745782613754272e-03,
-	1.1920928955078125e-07, -9.0360641479492188e-05,
-	1.2743473052978516e-04}, /* L2015 */
-{1.1466410636901855e+01, 4.8325955867767334e-03,
-	1.1920928955078125e-07, -6.0528516769409180e-04,
-	-1.0817050933837891e-03}, /* L2016 */
-{1.1994355201721191e+01, 5.7648420333862305e-03,
-	1.1920928955078125e-07, -1.5127658843994141e-04,
-	1.9207000732421875e-03}, /* L2017 */
-{1.2910548210144043e+01, 7.8035499900579453e-03,
-	1.1920928955078125e-07, -1.2465119361877441e-03,
-	2.3229956626892090e-02}, /* L2018 */
-{1.4922426223754883e+01, 8.9192017912864685e-03,
-	1.1920928955078125e-07, -1.7597675323486328e-03,
-	7.2169303894042969e-04}, /* L2019 */
-#endif	/* } */
-
-/* Always the last one. Common to both DP and SP */
-
-{, 0.0000000000000000e+00,
-	0.0000000000000000e+00, 0.0000000000000000e+00,
-	0.0000000000000000e+00, /* L2020 */
-};
-
-#endif	/* LAPACK_V9A_SS13 */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/usr/src/cmd/fps/fptest/singdoub64v9b_ss12u1.h	Mon Aug 10 10:43:48 2009 -0400
@@ -0,0 +1,6115 @@
+/*
+ * CDDL HEADER START
+ *
+ * The contents of this file are subject to the terms of the
+ * Common Development and Distribution License (the "License").
+ * You may not use this file except in compliance with the License.
+ *
+ * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+ * or http://www.opensolaris.org/os/licensing.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL HEADER in each
+ * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+ * If applicable, add the following below this CDDL HEADER, with the
+ * fields enclosed by brackets "[]" replaced with your own identifying
+ * information: Portions Copyright [yyyy] [name of copyright owner]
+ *
+ * CDDL HEADER END
+ */
+
+/*
+ * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
+ * Use is subject to license terms.
+ */
+
+#ifndef	LAPACK_V9B_SS13
+#define	LAPACK_V9B_SS13
+
+/* 64-bit golden values for V9B/SS13 Lapack */
+
+
+static struct LinpVals LinpValsA[] = {
+
+#ifdef DP  /* { */
+
+/* Start of DP golden values */
+
+
+{0.0000000000000000e+00, 0.0000000000000000e+00,
+	0.0000000000000000e+00, 0.0000000000000000e+00,
+	0.0000000000000000e+00}, /* L0 */
+{0.0000000000000000e+00, 0.0000000000000000e+00,
+	2.2204460492503131e-16, 0.0000000000000000e+00,
+	0.0000000000000000e+00}, /* L1 */
+{0.0000000000000000e+00, 0.0000000000000000e+00,
+	2.2204460492503131e-16, 0.0000000000000000e+00,
+	0.0000000000000000e+00}, /* L2 */
+{0.0000000000000000e+00, 0.0000000000000000e+00,
+	2.2204460492503131e-16, 0.0000000000000000e+00,
+	0.0000000000000000e+00}, /* L3 */
+{3.8260177822204688e-01, 1.6653345369377348e-16,
+	2.2204460492503131e-16, 2.2204460492503131e-16,
+	2.2204460492503131e-16}, /* L4 */
+{4.0810856343684981e-01, 2.2204460492503131e-16,
+	2.2204460492503131e-16, -3.3306690738754696e-16,
+	0.0000000000000000e+00}, /* L5 */
+{3.4009046953070693e-01, 2.2204460492503131e-16,
+	2.2204460492503131e-16, 8.8817841970012523e-16,
+	2.6645352591003757e-15}, /* L6 */
+{3.6373773558278227e-01, 2.7755575615628914e-16,
+	2.2204460492503131e-16, -3.3306690738754696e-16,
+	8.8817841970012523e-16}, /* L7 */
+{3.2492063115128750e-01, 2.8449465006019636e-16,
+	2.2204460492503131e-16, -1.7763568394002505e-15,
+	-1.1102230246251565e-16}, /* L8 */
+{4.5083838251885799e-01, 4.4408920985006262e-16,
+	2.2204460492503131e-16, -1.5543122344752192e-15,
+	-4.5519144009631418e-15}, /* L9 */
+{4.0575454426697483e-01, 4.4408920985006262e-16,
+	2.2204460492503131e-16, -1.1102230246251565e-16,
+	-2.2204460492503131e-16}, /* L10 */
+{5.9941012221257661e-01, 7.2164496600635175e-16,
+	2.2204460492503131e-16, 2.2204460492503131e-16,
+	2.2204460492503131e-16}, /* L11 */
+{2.9586268852800246e-01, 3.8857805861880479e-16,
+	2.2204460492503131e-16, -5.5511151231257827e-16,
+	0.0000000000000000e+00}, /* L12 */
+{6.2922387221750764e-01, 9.0205620750793969e-16,
+	2.2204460492503131e-16, -1.6653345369377348e-15,
+	-2.2204460492503131e-16}, /* L13 */
+{5.3933474761500677e-01, 8.3266726846886741e-16,
+	2.2204460492503131e-16, -4.4408920985006262e-16,
+	0.0000000000000000e+00}, /* L14 */
+{6.7117213036534140e-01, 1.1102230246251565e-15,
+	2.2204460492503131e-16, -6.6613381477509392e-16,
+	-1.1102230246251565e-16}, /* L15 */
+{7.8652984027188344e-01, 1.3877787807814457e-15,
+	2.2204460492503131e-16, -6.6613381477509392e-16,
+	0.0000000000000000e+00}, /* L16 */
+{6.3662650600829918e-01, 1.1934897514720433e-15,
+	2.2204460492503131e-16, -1.1102230246251565e-15,
+	-1.3322676295501878e-15}, /* L17 */
+{2.9363780703483666e-01, 5.8286708792820718e-16,
+	2.2204460492503131e-16, 4.4408920985006262e-16,
+	4.4408920985006262e-16}, /* L18 */
+{8.0143251092966705e-01, 1.6792123247455493e-15,
+	2.2204460492503131e-16, -5.5511151231257827e-16,
+	8.8817841970012523e-16}, /* L19 */
+{5.9147043988445613e-01, 1.3045120539345589e-15,
+	2.2204460492503131e-16, -6.6613381477509392e-16,
+	-2.2204460492503131e-16}, /* L20 */
+{5.9684867319455459e-01, 1.3877787807814457e-15,
+	2.2204460492503131e-16, 2.2204460492503131e-15,
+	-1.4432899320127035e-15}, /* L21 */
+{4.7856411796145321e-01, 1.1657341758564144e-15,
+	2.2204460492503131e-16, -5.5511151231257827e-16,
+	-2.3314683517128287e-15}, /* L22 */
+{4.5775698239791013e-01, 1.1657341758564144e-15,
+	2.2204460492503131e-16, 2.4424906541753444e-15,
+	-2.9976021664879227e-15}, /* L23 */
+{6.7891536575880340e-01, 1.8041124150158794e-15,
+	2.2204460492503131e-16, -1.1546319456101628e-14,
+	-2.2204460492503131e-15}, /* L24 */
+{5.8156934716077235e-01, 1.6098233857064770e-15,
+	2.2204460492503131e-16, 1.5543122344752192e-15,
+	3.3306690738754696e-15}, /* L25 */
+{6.1704970521036173e-01, 1.7763568394002505e-15,
+	2.2204460492503131e-16, -2.9976021664879227e-15,
+	-4.2188474935755949e-15}, /* L26 */
+{8.9129401863720303e-01, 2.6645352591003757e-15,
+	2.2204460492503131e-16, -4.4408920985006262e-16,
+	2.4424906541753444e-15}, /* L27 */
+{8.9527300979183411e-01, 2.7755575615628914e-15,
+	2.2204460492503131e-16, 1.5543122344752192e-15,
+	-1.3322676295501878e-15}, /* L28 */
+{8.1253743509383025e-01, 2.6090241078691179e-15,
+	2.2204460492503131e-16, 0.0000000000000000e+00,
+	6.6613381477509392e-16}, /* L29 */
+{8.6065578674654963e-01, 2.8588242884097781e-15,
+	2.2204460492503131e-16, 8.8817841970012523e-16,
+	8.8817841970012523e-16}, /* L30 */
+{9.0566972861522066e-01, 3.1086244689504383e-15,
+	2.2204460492503131e-16, 1.7763568394002505e-15,
+	-1.6653345369377348e-15}, /* L31 */
+{7.3636205055376436e-01, 2.6090241078691179e-15,
+	2.2204460492503131e-16, -9.9920072216264089e-16,
+	2.1760371282653068e-14}, /* L32 */
+{8.4318439831303504e-01, 3.0808688933348094e-15,
+	2.2204460492503131e-16, 6.6613381477509392e-16,
+	1.1102230246251565e-15}, /* L33 */
+{9.7321442476194397e-01, 3.6637359812630166e-15,
+	2.2204460492503131e-16, -2.6645352591003757e-15,
+	2.2204460492503131e-16}, /* L34 */
+{1.4583044708110673e+00, 5.6621374255882984e-15,
+	2.2204460492503131e-16, -3.9968028886505635e-15,
+	-4.4408920985006262e-16}, /* L35 */
+{7.3322293824479434e-01, 2.9282132274488504e-15,
+	2.2204460492503131e-16, -1.7652546091539989e-14,
+	1.4654943925052066e-14}, /* L36 */
+{8.4526789345500786e-01, 3.4694469519536142e-15,
+	2.2204460492503131e-16, -1.9984014443252818e-15,
+	-7.7715611723760958e-16}, /* L37 */
+{3.8846732871836481e-01, 1.6375789613221059e-15,
+	2.2204460492503131e-16, 1.0658141036401503e-14,
+	1.9984014443252818e-15}, /* L38 */
+{9.3664352009106877e-01, 4.0523140398818214e-15,
+	2.2204460492503131e-16, 2.8865798640254070e-15,
+	1.7763568394002505e-15}, /* L39 */
+{5.5043845221636245e-01, 2.4424906541753444e-15,
+	2.2204460492503131e-16, -9.0261131902025227e-13,
+	2.2069013283498862e-12}, /* L40 */
+{8.0551968617249903e-01, 3.6637359812630166e-15,
+	2.2204460492503131e-16, -2.6312285683616210e-14,
+	-2.6645352591003757e-14}, /* L41 */
+{1.0454756316476288e+00, 4.8711035205428743e-15,
+	2.2204460492503131e-16, 4.6629367034256575e-15,
+	-5.2180482157382357e-15}, /* L42 */
+{9.7752283269141105e-01, 4.6629367034256575e-15,
+	2.2204460492503131e-16, -5.5511151231257827e-16,
+	-2.6645352591003757e-15}, /* L43 */
+{8.6148166850218699e-01, 4.2049697057677804e-15,
+	2.2204460492503131e-16, -3.4416913763379853e-15,
+	1.1102230246251565e-15}, /* L44 */
+{1.0563970295090952e+00, 5.2735593669694936e-15,
+	2.2204460492503131e-16, -2.8865798640254070e-15,
+	-1.2101430968414206e-14}, /* L45 */
+{1.0211938676275674e+00, 5.2111093218343285e-15,
+	2.2204460492503131e-16, -8.7707618945387367e-15,
+	-4.1078251911130792e-15}, /* L46 */
+{9.6885685013140577e-01, 5.0515147620444623e-15,
+	2.2204460492503131e-16, -3.8191672047105385e-14,
+	4.4408920985006262e-15}, /* L47 */
+{1.1825826121868439e+00, 6.2970462177958098e-15,
+	2.2204460492503131e-16, 2.6645352591003757e-15,
+	6.6613381477509392e-15}, /* L48 */
+{1.5740038790865019e+00, 8.5625950774215198e-15,
+	2.2204460492503131e-16, -1.8984813721090177e-14,
+	-8.1046280797636427e-15}, /* L49 */
+{9.0001388742580246e-01, 4.9960036108132044e-15,
+	2.2204460492503131e-16, 8.8817841970012523e-16,
+	-3.2196467714129540e-15}, /* L50 */
+{8.5295433775635876e-01, 4.8294701571194310e-15,
+	2.2204460492503131e-16, -1.2212453270876722e-15,
+	3.7969627442180354e-14}, /* L51 */
+{1.3605979174225624e+00, 7.8548278992229825e-15,
+	2.2204460492503131e-16, 3.5527136788005009e-15,
+	3.7747582837255322e-15}, /* L52 */
+{8.8680613645728601e-01, 5.2180482157382357e-15,
+	2.2204460492503131e-16, -2.4424906541753444e-15,
+	-3.8857805861880479e-15}, /* L53 */
+{9.6529267247058115e-01, 5.7870375158586285e-15,
+	2.2204460492503131e-16, 1.7763568394002505e-15,
+	-2.3314683517128287e-15}, /* L54 */
+{8.9092283805786343e-01, 5.4400928206632670e-15,
+	2.2204460492503131e-16, 2.8865798640254070e-15,
+	4.4408920985006262e-15}, /* L55 */
+{9.1965704766721101e-01, 5.7176485768195562e-15,
+	2.2204460492503131e-16, 1.6209256159527285e-14,
+	-1.8873791418627661e-15}, /* L56 */
+{1.0000154304731188e+00, 6.3282712403633923e-15,
+	2.2204460492503131e-16, -2.3314683517128287e-15,
+	7.9936057773011271e-15}, /* L57 */
+{1.2586401107668486e+00, 8.1046280797636427e-15,
+	2.2204460492503131e-16, 3.8968828164342995e-13,
+	2.3470114740575809e-13}, /* L58 */
+{8.8242887032215045e-01, 5.7800986219547212e-15,
+	2.2204460492503131e-16, -4.5519144009631418e-15,
+	-2.3314683517128287e-15}, /* L59 */
+{9.7501504471128808e-01, 6.4948046940571658e-15,
+	2.2204460492503131e-16, -1.5543122344752192e-15,
+	8.8817841970012523e-16}, /* L60 */
+{1.3688735810572958e+00, 9.2703622556200571e-15,
+	2.2204460492503131e-16, -7.4606987254810520e-14,
+	-1.2134737659152961e-13}, /* L61 */
+{1.0902385968313253e+00, 7.5044137570756675e-15,
+	2.2204460492503131e-16, 4.4408920985006262e-16,
+	3.7747582837255322e-15}, /* L62 */
+{7.2620168165310051e-01, 5.0792703376600912e-15,
+	2.2204460492503131e-16, -4.8849813083506888e-15,
+	4.4408920985006262e-16}, /* L63 */
+{1.0722821705659045e+00, 7.6189055064901368e-15,
+	2.2204460492503131e-16, -1.5543122344752192e-15,
+	2.2204460492503131e-16}, /* L64 */
+{1.1692488110146999e+00, 8.4376949871511897e-15,
+	2.2204460492503131e-16, -8.8817841970012523e-16,
+	-2.7755575615628914e-15}, /* L65 */
+{1.0378948028395030e+00, 7.6050277186823223e-15,
+	2.2204460492503131e-16, -2.0206059048177849e-14,
+	7.3274719625260332e-15}, /* L66 */
+{1.3750212169004810e+00, 1.0227929614359255e-14,
+	2.2204460492503131e-16, -9.7699626167013776e-15,
+	6.6613381477509392e-15}, /* L67 */
+{7.9780642798774548e-01, 6.0229599085914742e-15,
+	2.2204460492503131e-16, -9.7699626167013776e-15,
+	-3.8857805861880479e-15}, /* L68 */
+{1.2445844216208166e+00, 9.5340402239685318e-15,
+	2.2204460492503131e-16, 1.8141044222375058e-13,
+	3.5194069880617462e-13}, /* L69 */
+{1.0643021367178127e+00, 8.2711615334574162e-15,
+	2.2204460492503131e-16, -3.2196467714129540e-15,
+	-1.5543122344752192e-15}, /* L70 */
+{1.1760744851338045e+00, 9.2703622556200571e-15,
+	2.2204460492503131e-16, -3.2751579226442118e-14,
+	-2.0539125955565396e-14}, /* L71 */
+{1.3402984588979951e+00, 1.0713652187632761e-14,
+	2.2204460492503131e-16, -1.9984014443252818e-15,
+	-1.9984014443252818e-15}, /* L72 */
+{1.0993320314446988e+00, 8.9095397726168812e-15,
+	2.2204460492503131e-16, -2.3869795029440866e-14,
+	7.3274719625260332e-15}, /* L73 */
+{1.4020486609673712e+00, 1.1518563880485999e-14,
+	2.2204460492503131e-16, 5.1070259132757201e-15,
+	-5.8841820305133297e-15}, /* L74 */
+{1.7035809741547945e+00, 1.4184942283279600e-14,
+	2.2204460492503131e-16, -9.9920072216264089e-16,
+	-5.2180482157382357e-15}, /* L75 */
+{1.1513335548210102e+00, 9.7144514654701197e-15,
+	2.2204460492503131e-16, -4.5519144009631418e-15,
+	-3.2196467714129540e-15}, /* L76 */
+{1.1802130161590194e+00, 1.0089151736281110e-14,
+	2.2204460492503131e-16, 6.8833827526759706e-15,
+	-1.7763568394002505e-15}, /* L77 */
+{1.0448879177378469e+00, 9.0483176506950258e-15,
+	2.2204460492503131e-16, 8.8817841970012523e-16,
+	5.4178883601707639e-14}, /* L78 */
+{1.7785084554616846e+00, 1.5598633495983449e-14,
+	2.2204460492503131e-16, 1.7763568394002505e-15,
+	8.8817841970012523e-16}, /* L79 */
+{1.5640866342229285e+00, 1.3891665595622271e-14,
+	2.2204460492503131e-16, 4.4830805734363821e-13,
+	1.3677947663381929e-13}, /* L80 */
+{1.2407598859573825e+00, 1.1157741397482823e-14,
+	2.2204460492503131e-16, -4.5519144009631418e-15,
+	1.1102230246251565e-15}, /* L81 */
+{2.3414995445223701e+00, 2.1316282072803006e-14,
+	2.2204460492503131e-16, -5.1070259132757201e-15,
+	-3.0087043967341742e-14}, /* L82 */
+{1.4909868616993309e+00, 1.3739009929736312e-14,
+	2.2204460492503131e-16, 2.5091040356528538e-14,
+	-6.5503158452884236e-15}, /* L83 */
+{1.1250173592822328e+00, 1.0491607582707729e-14,
+	2.2204460492503131e-16, -4.1744385725905886e-14,
+	-3.4416913763379853e-15}, /* L84 */
+{1.9217208290746031e+00, 1.8134799217861541e-14,
+	2.2204460492503131e-16, -3.2196467714129540e-15,
+	-2.4424906541753444e-15}, /* L85 */
+{1.6860725281232691e+00, 1.6098233857064770e-14,
+	2.2204460492503131e-16, 8.2156503822261584e-15,
+	-6.6613381477509392e-16}, /* L86 */
+{1.0862236572379966e+00, 1.0491607582707729e-14,
+	2.2204460492503131e-16, -2.9087843245179101e-14,
+	-1.2212453270876722e-14}, /* L87 */
+{1.6988898506332140e+00, 1.6597834218146090e-14,
+	2.2204460492503131e-16, 6.2172489379008766e-15,
+	-1.0436096431476471e-14}, /* L88 */
+{1.4101341182513836e+00, 1.3933298959045715e-14,
+	2.2204460492503131e-16, 1.1324274851176597e-14,
+	-2.8865798640254070e-15}, /* L89 */
+{9.4445901766904683e-01, 9.4368957093138306e-15,
+	2.2204460492503131e-16, -1.4432899320127035e-15,
+	4.2188474935755949e-15}, /* L90 */
+{8.8462903464924114e-01, 8.9372953482325102e-15,
+	2.2204460492503131e-16, 2.7311486405778851e-14,
+	4.3076653355456074e-14}, /* L91 */
+{1.4293698816001337e+00, 1.4599432773820809e-14,
+	2.2204460492503131e-16, -9.7699626167013776e-15,
+	6.8833827526759706e-15}, /* L92 */
+{1.4381942346857988e+00, 1.4849232954361469e-14,
+	2.2204460492503131e-16, -1.0547118733938987e-14,
+	2.8865798640254070e-15}, /* L93 */
+{1.4095962184859603e+00, 1.4710455076283324e-14,
+	2.2204460492503131e-16, -1.4765966227514582e-14,
+	-7.9936057773011271e-15}, /* L94 */
+{2.8039906346555035e+00, 2.9573565818452607e-14,
+	2.2204460492503131e-16, -1.6431300764452317e-14,
+	5.5511151231257827e-15}, /* L95 */
+{1.6041914197172078e+00, 1.7097434579227411e-14,
+	2.2204460492503131e-16, -1.5987211554602254e-14,
+	-2.6645352591003757e-15}, /* L96 */
+{1.8170383466070419e+00, 1.9567680809018384e-14,
+	2.2204460492503131e-16, -1.5321077739827160e-14,
+	5.3290705182007514e-15}, /* L97 */
+{1.3439301759339604e+00, 1.4621984179008507e-14,
+	2.2204460492503131e-16, 7.3274719625260332e-15,
+	-1.3322676295501878e-15}, /* L98 */
+{1.9242721162132923e+00, 2.1149748619109232e-14,
+	2.2204460492503131e-16, 6.2172489379008766e-15,
+	8.8817841970012523e-16}, /* L99 */
+{2.9625457127765391e+00, 3.2890357104520263e-14,
+	2.2204460492503131e-16, -3.5527136788005009e-15,
+	5.5511151231257827e-15}, /* L100 */
+{1.2852921095869991e+00, 1.4412082638415313e-14,
+	2.2204460492503131e-16, -2.4535928844215960e-14,
+	-1.0103029524088925e-14}, /* L101 */
+{1.3970803808080099e+00, 1.5820678100908481e-14,
+	2.2204460492503131e-16, -7.7715611723760958e-15,
+	6.2172489379008766e-15}, /* L102 */
+{1.6844920115250395e+00, 1.9262369477246466e-14,
+	2.2204460492503131e-16, -2.6756374893466273e-14,
+	-6.8833827526759706e-15}, /* L103 */
+{1.3750212169004725e+00, 1.5876189252139739e-14,
+	2.2204460492503131e-16, -1.0547118733938987e-14,
+	1.5765166949677223e-14}, /* L104 */
+{1.3047820378553872e+00, 1.5210055437364645e-14,
+	2.2204460492503131e-16, -7.5495165674510645e-15,
+	9.5479180117763462e-15}, /* L105 */
+{1.1226588323233835e+00, 1.3211653993039363e-14,
+	2.2204460492503131e-16, 2.3758772726978350e-14,
+	-5.9063864910058328e-14}, /* L106 */
+{1.4112367289854100e+00, 1.6764367671839864e-14,
+	2.2204460492503131e-16, 1.7319479184152442e-14,
+	1.2656542480726785e-14}, /* L107 */
+{2.4329079107111644e+00, 2.9171109972025988e-14,
+	2.2204460492503131e-16, 1.3322676295501878e-15,
+	-5.9952043329758453e-15}, /* L108 */
+{1.3486446631150799e+00, 1.6320278461989801e-14,
+	2.2204460492503131e-16, 3.3084646133829665e-14,
+	3.1974423109204508e-14}, /* L109 */
+{1.6272978368607867e+00, 1.9872992140790302e-14,
+	2.2204460492503131e-16, -8.9928064994637680e-15,
+	2.2204460492503131e-16}, /* L110 */
+{1.9583635513431428e+00, 2.4133472997789340e-14,
+	2.2204460492503131e-16, -3.5527136788005009e-15,
+	-2.7755575615628914e-15}, /* L111 */
+{1.4910944365089831e+00, 1.8540724511240114e-14,
+	2.2204460492503131e-16, 1.5543122344752192e-14,
+	-3.1863400806741993e-14}, /* L112 */
+{1.6593176390593474e+00, 2.0816681711721685e-14,
+	2.2204460492503131e-16, 7.3274719625260332e-15,
+	1.0436096431476471e-14}, /* L113 */
+{1.4802859990555859e+00, 1.8735013540549517e-14,
+	2.2204460492503131e-16, 8.8817841970012523e-16,
+	-1.5543122344752192e-15}, /* L114 */
+{2.1060107571102940e+00, 2.6888213877640510e-14,
+	2.2204460492503131e-16, 3.3528735343679728e-14,
+	-1.0325074129013956e-14}, /* L115 */
+{1.2823473731281858e+00, 1.6514567491299204e-14,
+	2.2204460492503131e-16, -9.4368957093138306e-15,
+	-2.2537527399890678e-14}, /* L116 */
+{1.6709659543366842e+00, 2.1704860131421810e-14,
+	2.2204460492503131e-16, -1.0558220964185239e-13,
+	-1.3256062914024369e-13}, /* L117 */
+{2.0731252091441892e+00, 2.7158830739892892e-14,
+	2.2204460492503131e-16, 2.6645352591003757e-15,
+	-2.0341506257182118e-12}, /* L118 */
+{1.1575808869552118e+00, 1.5293322164211531e-14,
+	2.2204460492503131e-16, -4.4408920985006262e-16,
+	-8.4376949871511897e-15}, /* L119 */
+{2.4625379975399899e+00, 3.2807090377673376e-14,
+	2.2204460492503131e-16, -3.2196467714129540e-14,
+	-8.4376949871511897e-15}, /* L120 */
+{1.7438285605758650e+00, 2.3425705819590803e-14,
+	2.2204460492503131e-16, 1.2456702336294256e-13,
+	-5.9396931817445875e-14}, /* L121 */
+{2.5451212390319462e+00, 3.4472424914611111e-14,
+	2.2204460492503131e-16, -1.6653345369377348e-15,
+	4.4408920985006262e-15}, /* L122 */
+{1.1016430148704714e+00, 1.5043521983670871e-14,
+	2.2204460492503131e-16, -2.9198865547641617e-14,
+	-2.6867397195928788e-14}, /* L123 */
+{1.4506272222286285e+00, 1.9970136655445003e-14,
+	2.2204460492503131e-16, 1.9984014443252818e-15,
+	1.2434497875801753e-14}, /* L124 */
+{1.5360237012065137e+00, 2.1316282072803006e-14,
+	2.2204460492503131e-16, -6.4726002335646626e-14,
+	3.2862601528904634e-14}, /* L125 */
+{1.6746290145223433e+00, 2.3425705819590803e-14,
+	2.2204460492503131e-16, 5.9952043329758453e-15,
+	7.7715611723760958e-15}, /* L126 */
+{1.3090753174492020e+00, 1.8457457784393227e-14,
+	2.2204460492503131e-16, -2.3980817331903381e-14,
+	-2.6179058920661191e-13}, /* L127 */
+{1.9687803787438483e+00, 2.7977620220553945e-14,
+	2.2204460492503131e-16, -2.7755575615628914e-15,
+	-9.9920072216264089e-16}, /* L128 */
+{1.9070061697393341e+00, 2.7311486405778851e-14,
+	2.2204460492503131e-16, 1.7319479184152442e-14,
+	3.4638958368304884e-14}, /* L129 */
+{2.1846490942642083e+00, 3.1530333899354446e-14,
+	2.2204460492503131e-16, -1.4876988529977098e-14,
+	7.9936057773011271e-15}, /* L130 */
+{2.0649173583425950e+00, 3.0031532816110484e-14,
+	2.2204460492503131e-16, -7.0499162063697440e-14,
+	1.4876988529977098e-14}, /* L131 */
+{1.3409297817707460e+00, 1.9650947535865271e-14,
+	2.2204460492503131e-16, 1.7541523789077473e-14,
+	-5.8841820305133297e-15}, /* L132 */
+{1.5413771672704086e+00, 2.2759572004815709e-14,
+	2.2204460492503131e-16, -9.1038288019262836e-15,
+	6.8389738316909643e-14}, /* L133 */
+{1.8946187866518844e+00, 2.8185787037671162e-14,
+	2.2204460492503131e-16, 5.7731597280508140e-15,
+	-6.6613381477509392e-15}, /* L134 */
+{1.6203953734517988e+00, 2.4286128663675299e-14,
+	2.2204460492503131e-16, -4.4408920985006262e-16,
+	3.7747582837255322e-15}, /* L135 */
+{1.5919363286574972e+00, 2.4036328483134639e-14,
+	2.2204460492503131e-16, -1.2878587085651816e-14,
+	1.0436096431476471e-14}, /* L136 */
+{1.9452854906648289e+00, 2.9587443606260422e-14,
+	2.2204460492503131e-16, -5.6621374255882984e-15,
+	-1.0325074129013956e-14}, /* L137 */
+{2.2323714025370274e+00, 3.4201808052358729e-14,
+	2.2204460492503131e-16, -5.9063864910058328e-14,
+	-3.9634961979118088e-14}, /* L138 */
+{1.8075818482472423e+00, 2.7894353493707058e-14,
+	2.2204460492503131e-16, 7.3274719625260332e-15,
+	-9.4368957093138306e-15}, /* L139 */
+{1.5321664988307440e+00, 2.3814283878209608e-14,
+	2.2204460492503131e-16, -2.9942714974140472e-13,
+	-3.4139358007223564e-13}, /* L140 */
+{2.6347924285160054e+00, 4.1244785364824565e-14,
+	2.2204460492503131e-16, 6.6613381477509392e-16,
+	-8.4376949871511897e-15}, /* L141 */
+{1.8521412550311385e+00, 2.9198865547641617e-14,
+	2.2204460492503131e-16, 1.7763568394002505e-15,
+	1.0658141036401503e-14}, /* L142 */
+{1.8496788906302410e+00, 2.9365399001335390e-14,
+	2.2204460492503131e-16, -1.6653345369377348e-15,
+	-3.2862601528904634e-14}, /* L143 */
+{1.3906464580015256e+00, 2.2232216068118760e-14,
+	2.2204460492503131e-16, -1.1213252548714081e-14,
+	3.4416913763379853e-14}, /* L144 */
+{1.4827815003566338e+00, 2.3869795029440866e-14,
+	2.2204460492503131e-16, 4.3964831775156199e-14,
+	9.9920072216264089e-15}, /* L145 */
+{1.9366737189468126e+00, 3.1391556021276301e-14,
+	2.2204460492503131e-16, -2.8532731732866523e-14,
+	2.9976021664879227e-14}, /* L146 */
+{1.6802980362370283e+00, 2.7422508708241367e-14,
+	2.2204460492503131e-16, 7.7493567118835927e-14,
+	2.2204460492503131e-16}, /* L147 */
+{1.7094858372276440e+00, 2.8088642523016460e-14,
+	2.2204460492503131e-16, 2.4424906541753444e-15,
+	-1.1324274851176597e-14}, /* L148 */
+{3.3616290519342669e+00, 5.5608295745912528e-14,
+	2.2204460492503131e-16, 1.5987211554602254e-14,
+	1.9761969838327786e-14}, /* L149 */
+{2.9133782874447340e+00, 4.8516746176119341e-14,
+	2.2204460492503131e-16, -1.6320278461989801e-14,
+	1.0658141036401503e-14}, /* L150 */
+{1.9205594360078899e+00, 3.2196467714129540e-14,
+	2.2204460492503131e-16, 4.5075054799781356e-14,
+	2.9976021664879227e-14}, /* L151 */
+{1.5723926834412174e+00, 2.6534330288541241e-14,
+	2.2204460492503131e-16, -2.1649348980190553e-14,
+	1.7763568394002505e-14}, /* L152 */
+{2.2484007064231508e+00, 3.8191672047105385e-14,
+	2.2204460492503131e-16, -1.1990408665951691e-14,
+	-8.4376949871511897e-15}, /* L153 */
+{2.2159432834345298e+00, 3.7886360715333467e-14,
+	2.2204460492503131e-16, -2.1094237467877974e-15,
+	5.7731597280508140e-14}, /* L154 */
+{2.4839092950460229e+00, 4.2743586448068527e-14,
+	2.2204460492503131e-16, 1.7763568394002505e-15,
+	-3.3639757646142243e-14}, /* L155 */
+{2.8429925859922287e+00, 4.9238391142125693e-14,
+	2.2204460492503131e-16, 9.3702823278363212e-14,
+	-4.3298697960381105e-15}, /* L156 */
+{1.7985946317186561e+00, 3.1349922657852858e-14,
+	2.2204460492503131e-16, 3.9079850466805510e-14,
+	-4.3187675657918589e-14}, /* L157 */
+{2.2500347185644372e+00, 3.9468428525424315e-14,
+	2.2204460492503131e-16, -6.8833827526759706e-15,
+	9.3258734068513149e-15}, /* L158 */
+{2.5189067918509283e+00, 4.4464432136237519e-14,
+	2.2204460492503131e-16, 2.3048229991218250e-13,
+	-1.4599432773820809e-13}, /* L159 */
+{2.9300256797347366e+00, 5.2046908449732143e-14,
+	2.2204460492503131e-16, -1.3766765505351941e-14,
+	9.1038288019262836e-15}, /* L160 */
+{2.2018973298304485e+00, 3.9357406222961799e-14,
+	2.2204460492503131e-16, 2.1538326677728037e-14,
+	-2.4535928844215960e-14}, /* L161 */
+{2.4784333045366185e+00, 4.4575454438700035e-14,
+	2.2204460492503131e-16, -2.8088642523016460e-14,
+	2.2204460492503131e-16}, /* L162 */
+{2.4478905322621287e+00, 4.4297898682543746e-14,
+	2.2204460492503131e-16, 6.3060667798708891e-14,
+	8.2156503822261584e-15}, /* L163 */
+{1.9390543103075617e+00, 3.5305092183079978e-14,
+	2.2204460492503131e-16, -1.0214051826551440e-14,
+	2.9753977059954195e-14}, /* L164 */
+{2.3926979047394039e+00, 4.3830390705767996e-14,
+	2.2204460492503131e-16, -2.9753977059954195e-14,
+	3.3306690738754696e-15}, /* L165 */
+{1.8870773108172394e+00, 3.4777736246383029e-14,
+	2.2204460492503131e-16, -3.0642155479654321e-14,
+	-7.2830630415410269e-14}, /* L166 */
+{3.0988502111965350e+00, 5.7454041524351851e-14,
+	2.2204460492503131e-16, 1.9984014443252818e-15,
+	-1.1768364061026659e-14}, /* L167 */
+{2.0774130073509189e+00, 3.8746783559417963e-14,
+	2.2204460492503131e-16, 1.7963408538435033e-13,
+	-9.8254737679326354e-14}, /* L168 */
+{1.7840511969681965e+00, 3.3473224192448470e-14,
+	2.2204460492503131e-16, 1.2656542480726785e-14,
+	2.0428103653102880e-14}, /* L169 */
+{1.6103189652471119e+00, 3.0392355299113660e-14,
+	2.2204460492503131e-16, -6.4392935428259079e-15,
+	3.3306690738754696e-15}, /* L170 */
+{1.4590868415381790e+00, 2.7700064464397656e-14,
+	2.2204460492503131e-16, -3.4861002973229915e-14,
+	1.7541523789077473e-14}, /* L171 */
+{2.0625318253507161e+00, 3.9385161798577428e-14,
+	2.2204460492503131e-16, 4.4408920985006262e-15,
+	5.7731597280508140e-15}, /* L172 */
+{2.4509048700612515e+00, 4.7073456244106637e-14,
+	2.2204460492503131e-16, 6.8833827526759706e-15,
+	-4.3298697960381105e-15}, /* L173 */
+{2.7672840791527755e+00, 5.3457238635701287e-14,
+	2.2204460492503131e-16, 9.6811447747313650e-14,
+	-1.2778667013435552e-13}, /* L174 */
+{2.0886036562166272e+00, 4.0578651550049472e-14,
+	2.2204460492503131e-16, -2.6867397195928788e-14,
+	-9.6589403142388619e-15}, /* L175 */
+{2.3238994946785558e+00, 4.5408121707168903e-14,
+	2.2204460492503131e-16, 4.7295500849031669e-14,
+	-2.7200464103316335e-14}, /* L176 */
+{2.8051280295473875e+00, 5.5122573172639022e-14,
+	2.2204460492503131e-16, -7.3274719625260332e-15,
+	1.1546319456101628e-14}, /* L177 */
+{1.9901992485659987e+00, 3.9329650647346170e-14,
+	2.2204460492503131e-16, -2.2848389846785722e-13,
+	-1.6198153929281034e-13}, /* L178 */
+{2.7221090418883036e+00, 5.4095616874860752e-14,
+	2.2204460492503131e-16, -5.9952043329758453e-15,
+	2.7311486405778851e-14}, /* L179 */
+{1.7104430592043798e+00, 3.4180991370647007e-14,
+	2.2204460492503131e-16, -7.4384942649885488e-15,
+	-1.2945200467129325e-13}, /* L180 */
+{1.6882166573145112e+00, 3.3924252296202440e-14,
+	2.2204460492503131e-16, -9.8809849191638932e-15,
+	-7.3274719625260332e-15}, /* L181 */
+{3.0563658417612878e+00, 6.1756155744774333e-14,
+	2.2204460492503131e-16, -2.2315482794965646e-14,
+	1.5543122344752192e-14}, /* L182 */
+{2.9494990633760696e+00, 5.9924287754142824e-14,
+	2.2204460492503131e-16, -3.7858605139717838e-14,
+	5.5067062021407764e-14}, /* L183 */
+{1.8668766324320636e+00, 3.8136160895874127e-14,
+	2.2204460492503131e-16, 4.4408920985006262e-15,
+	2.2204460492503131e-14}, /* L184 */
+{3.3041050371670369e+00, 6.7862382380212694e-14,
+	2.2204460492503131e-16, -6.6435745793569367e-13,
+	3.2640556923979602e-13}, /* L185 */
+{2.2150879427681005e+00, 4.5741188614556449e-14,
+	2.2204460492503131e-16, 1.3256062914024369e-13,
+	1.8207657603852567e-14}, /* L186 */
+{2.5762429605903074e+00, 5.3484994211316916e-14,
+	2.2204460492503131e-16, 3.6859404417555197e-14,
+	-1.3100631690576847e-14}, /* L187 */
+{2.6542962755625545e+00, 5.5400128928795311e-14,
+	2.2204460492503131e-16, -1.7685852782278744e-13,
+	-1.5509815654013437e-13}, /* L188 */
+{2.4524187937789370e+00, 5.1458837191376006e-14,
+	2.2204460492503131e-16, -4.8960835385969403e-14,
+	-7.4384942649885488e-15}, /* L189 */
+{2.1552964146248783e+00, 4.5463632858400160e-14,
+	2.2204460492503131e-16, -2.9087843245179101e-14,
+	2.4646951146678475e-14}, /* L190 */
+{2.2729408311734809e+00, 4.8197557056539608e-14,
+	2.2204460492503131e-16, -1.2434497875801753e-14,
+	-1.1102230246251565e-16}, /* L191 */
+{2.7057709173477096e+00, 5.7676086129276882e-14,
+	2.2204460492503131e-16, -2.1205259770340490e-14,
+	2.5313084961453569e-14}, /* L192 */
+{2.8238777699887536e+00, 6.0507154842071031e-14,
+	2.2204460492503131e-16, 1.1768364061026659e-14,
+	-5.2180482157382357e-15}, /* L193 */
+{2.7062273247337711e+00, 5.8286708792820718e-14,
+	2.2204460492503131e-16, 3.2418512319054571e-14,
+	1.7319479184152442e-14}, /* L194 */
+{1.5974605466275047e+00, 3.4583447217073626e-14,
+	2.2204460492503131e-16, -1.5543122344752192e-14,
+	3.7969627442180354e-14}, /* L195 */
+{3.3776031376180593e+00, 7.3496764230185363e-14,
+	2.2204460492503131e-16, 3.1752378504279477e-14,
+	3.5749181392930041e-14}, /* L196 */
+{2.8191266216130195e+00, 6.1657276506643655e-14,
+	2.2204460492503131e-16, 1.6919798895287386e-13,
+	-3.7081449022480228e-14}, /* L197 */
+{2.3611475441724723e+00, 5.1902926401226068e-14,
+	2.2204460492503131e-16, 3.9745984281580604e-14,
+	-3.2529534621517087e-14}, /* L198 */
+{2.1935011829220654e+00, 4.8461235024888083e-14,
+	2.2204460492503131e-16, 5.9507954119908391e-14,
+	-1.7208456881689926e-14}, /* L199 */
+{2.5250389619438347e+00, 5.6066262743570405e-14,
+	2.2204460492503131e-16, -1.3200551762793111e-13,
+	-4.2410519540680980e-14}, /* L200 */
+{2.3084933320371150e+00, 5.1514348342607263e-14,
+	2.2204460492503131e-16, 2.1760371282653068e-14,
+	4.8849813083506888e-15}, /* L201 */
+{2.1584491469616061e+00, 4.8405723873656825e-14,
+	2.2204460492503131e-16, -8.5709217501062085e-14,
+	5.5511151231257827e-15}, /* L202 */
+{3.3719732126048272e+00, 7.5994766035591965e-14,
+	2.2204460492503131e-16, 3.9968028886505635e-15,
+	2.4202861936828413e-14}, /* L203 */
+{2.5711181043290647e+00, 5.8231197641589461e-14,
+	2.2204460492503131e-16, 7.5495165674510645e-15,
+	1.4654943925052066e-14}, /* L204 */
+{2.2414980014670256e+00, 5.1014747981525943e-14,
+	2.2204460492503131e-16, -2.7233770794055090e-12,
+	4.0367709175370692e-13}, /* L205 */
+{2.6747985543232389e+00, 6.1173288656846125e-14,
+	2.2204460492503131e-16, -4.1855408028368402e-14,
+	1.9184653865522705e-13}, /* L206 */
+{2.4275736899163927e+00, 5.5788706987414116e-14,
+	2.2204460492503131e-16, 4.5741188614556449e-14,
+	4.7295500849031669e-14}, /* L207 */
+{3.4207258595269141e+00, 7.8992368202079888e-14,
+	2.2204460492503131e-16, 4.8849813083506888e-15,
+	1.0214051826551440e-14}, /* L208 */
+{1.9928537167083293e+00, 4.6240788975637770e-14,
+	2.2204460492503131e-16, -6.2172489379008766e-15,
+	6.8833827526759706e-15}, /* L209 */
+{3.3228191290223670e+00, 7.7469280990172251e-14,
+	2.2204460492503131e-16, 3.9968028886505635e-14,
+	1.1213252548714081e-13}, /* L210 */
+{2.3815533356051382e+00, 5.5788706987414116e-14,
+	2.2204460492503131e-16, -1.1213252548714081e-14,
+	-1.6653345369377348e-15}, /* L211 */
+{3.7193970138113874e+00, 8.7541085491693593e-14,
+	2.2204460492503131e-16, 3.6193270602780103e-14,
+	1.3544720900426910e-14}, /* L212 */
+{2.9190591262752417e+00, 6.9028116556069108e-14,
+	2.2204460492503131e-16, -2.6645352591003757e-15,
+	7.1054273576010019e-15}, /* L213 */
+{2.7885944305365191e+00, 6.6252558994506217e-14,
+	2.2204460492503131e-16, 6.2172489379008766e-15,
+	-8.9928064994637680e-15}, /* L214 */
+{3.2233055503148913e+00, 7.6938455606523348e-14,
+	2.2204460492503131e-16, 7.1276318180935050e-14,
+	8.2156503822261584e-15}, /* L215 */
+{2.0960971580864860e+00, 5.0265347439903962e-14,
+	2.2204460492503131e-16, -4.8405723873656825e-14,
+	1.3100631690576847e-14}, /* L216 */
+{3.6682593670737966e+00, 8.8373752760162461e-14,
+	2.2204460492503131e-16, -1.0820233597996776e-12,
+	3.2818192607919627e-13}, /* L217 */
+{2.3555409337051239e+00, 5.7009952314501788e-14,
+	2.2204460492503131e-16, -9.0483176506950258e-14,
+	-1.0935696792557792e-13}, /* L218 */
+{2.7580334246836968e+00, 6.7057470687359455e-14,
+	2.2204460492503131e-16, -8.4376949871511897e-15,
+	-4.2188474935755949e-15}, /* L219 */
+{2.5875399263489585e+00, 6.3199445676787036e-14,
+	2.2204460492503131e-16, 4.4408920985006262e-15,
+	-9.7699626167013776e-15}, /* L220 */
+{2.6776431266172818e+00, 6.5697447482193638e-14,
+	2.2204460492503131e-16, -4.1078251911130792e-15,
+	-3.0975222387041867e-14}, /* L221 */
+{2.9465544750369372e+00, 7.2622463598293052e-14,
+	2.2204460492503131e-16, 2.6645352591003757e-15,
+	1.8873791418627661e-14}, /* L222 */
+{2.9103588088650989e+00, 7.2053474298172659e-14,
+	2.2204460492503131e-16, 8.0380146982861334e-14,
+	-1.0491607582707729e-13}, /* L223 */
+{2.1942302860490086e+00, 5.4567461660326444e-14,
+	2.2204460492503131e-16, -1.2543299732215019e-12,
+	-2.3796520309815605e-12}, /* L224 */
+{2.9328230319262962e+00, 7.3260841837452517e-14,
+	2.2204460492503131e-16, 5.5733195836182858e-14,
+	3.3306690738754696e-15}, /* L225 */
+{2.4845516115510300e+00, 6.2339022832702540e-14,
+	2.2204460492503131e-16, -1.7541523789077473e-14,
+	-2.4313884239290928e-14}, /* L226 */
+{2.8414535359253952e+00, 7.1609385088322597e-14,
+	2.2204460492503131e-16, 4.5297099404706387e-14,
+	-9.8365759981788869e-14}, /* L227 */
+{2.1601210504727981e+00, 5.4678483962788960e-14,
+	2.2204460492503131e-16, 3.8413716652030416e-14,
+	2.5757174171303632e-14}, /* L228 */
+{3.1812717951789433e+00, 8.0879747343942654e-14,
+	2.2204460492503131e-16, -1.7047474543119279e-12,
+	6.3793414994961495e-13}, /* L229 */
+{3.1060261875834261e+00, 7.9311557321659620e-14,
+	2.2204460492503131e-16, 3.7303493627405260e-14,
+	5.1070259132757201e-14}, /* L230 */
+{2.8831613709740678e+00, 7.3940853440035426e-14,
+	2.2204460492503131e-16, -2.7533531010703882e-14,
+	-1.0769163338864018e-14}, /* L231 */
+{2.5205130300389698e+00, 6.4920291364956029e-14,
+	2.2204460492503131e-16, 6.3948846218409017e-14,
+	2.5757174171303632e-14}, /* L232 */
+{4.5757143811716361e+00, 1.1836365221284950e-13,
+	2.2204460492503131e-16, -1.8651746813702630e-14,
+	1.3766765505351941e-14}, /* L233 */
+{2.3782418250352051e+00, 6.1783911320389961e-14,
+	2.2204460492503131e-16, 6.4837024638109142e-14,
+	-8.7707618945387367e-15}, /* L234 */
+{2.6340831977140020e+00, 6.8722805224297190e-14,
+	2.2204460492503131e-16, -5.1736392947532295e-14,
+	-1.9428902930940239e-14}, /* L235 */
+{2.4438936420564654e+00, 6.4032112945255903e-14,
+	2.2204460492503131e-16, -4.3298697960381105e-15,
+	-1.0769163338864018e-14}, /* L236 */
+{3.6435161359218013e+00, 9.5867758176382267e-14,
+	2.2204460492503131e-16, 8.8817841970012523e-15,
+	2.6645352591003757e-14}, /* L237 */
+{3.0378620009741142e+00, 8.0269124680398818e-14,
+	2.2204460492503131e-16, 1.9317880628477724e-14,
+	-1.4466206010865790e-13}, /* L238 */
+{3.6726508121238957e+00, 9.7449825986473115e-14,
+	2.2204460492503131e-16, -1.4332979247910771e-13,
+	2.7533531010703882e-14}, /* L239 */
+{1.8989876351583057e+00, 5.0598414347291509e-14,
+	2.2204460492503131e-16, 4.6629367034256575e-15,
+	7.3052675020335300e-14}, /* L240 */
+{3.4689331945027613e+00, 9.2814644858663087e-14,
+	2.2204460492503131e-16, 8.8373752760162461e-14,
+	-7.7937656328685989e-14}, /* L241 */
+{3.7774343197562574e+00, 1.0148826223854712e-13,
+	2.2204460492503131e-16, -1.3256062914024369e-13,
+	-2.0405899192610377e-13}, /* L242 */
+{2.6003487659619116e+00, 7.0152217368502079e-14,
+	2.2204460492503131e-16, -1.6106005418237146e-12,
+	-5.1847415249994810e-13}, /* L243 */
+{2.8709459387145744e+00, 7.7771122874992216e-14,
+	2.2204460492503131e-16, -1.3655743202889425e-14,
+	1.1324274851176597e-14}, /* L244 */
+{3.5551568977225330e+00, 9.6700425444851135e-14,
+	2.2204460492503131e-16, -4.0634162701280729e-14,
+	1.0658141036401503e-14}, /* L245 */
+{4.1484379951128876e+00, 1.1329825966299722e-13,
+	2.2204460492503131e-16, -8.7707618945387367e-15,
+	-5.9952043329758453e-15}, /* L246 */
+{3.4089594836366168e+00, 9.3480778673438181e-14,
+	2.2204460492503131e-16, 7.2830630415410269e-14,
+	6.8611782921834674e-14}, /* L247 */
+{2.5645557007292012e+00, 7.0610184366159956e-14,
+	2.2204460492503131e-16, -4.0634162701280729e-14,
+	-7.2053474298172659e-14}, /* L248 */
+{3.0582801217071753e+00, 8.4543483325205671e-14,
+	2.2204460492503131e-16, -1.6764367671839864e-14,
+	-3.0864200084579352e-14}, /* L249 */
+{2.9685458053592919e+00, 8.2392426214994430e-14,
+	2.2204460492503131e-16, -3.2196467714129540e-14,
+	-1.9650947535865271e-14}, /* L250 */
+{3.6434825146120655e+00, 1.0152989560197057e-13,
+	2.2204460492503131e-16, 1.7097434579227411e-14,
+	1.5543122344752192e-14}, /* L251 */
+{3.0139353946202108e+00, 8.4321438720280639e-14,
+	2.2204460492503131e-16, -2.0539125955565396e-14,
+	-1.5543122344752192e-15}, /* L252 */
+{2.8508345028798892e+00, 8.0074835651089415e-14,
+	2.2204460492503131e-16, 3.7747582837255322e-15,
+	1.1168843627729075e-13}, /* L253 */
+{3.5039910752784365e+00, 9.8809849191638932e-14,
+	2.2204460492503131e-16, 7.1276318180935050e-14,
+	2.0805579481475434e-13}, /* L254 */
+{3.7103513692402537e+00, 1.0504097591734762e-13,
+	2.2204460492503131e-16, -7.5495165674510645e-15,
+	-3.1530333899354446e-14}, /* L255 */
+{2.7695739851769900e+00, 7.8714812445923599e-14,
+	2.2204460492503131e-16, 5.1070259132757201e-15,
+	2.5091040356528538e-14}, /* L256 */
+{2.7724163198841438e+00, 7.9103390504542404e-14,
+	2.2204460492503131e-16, 3.5305092183079978e-14,
+	4.8472337255134335e-13}, /* L257 */
+{3.7132355906710761e+00, 1.0635936575909000e-13,
+	2.2204460492503131e-16, 5.7287508070658077e-14,
+	-7.7049477908985864e-14}, /* L258 */
+{3.0791980919006119e+00, 8.8540286213856234e-14,
+	2.2204460492503131e-16, 1.7985612998927536e-14,
+	-9.6589403142388619e-15}, /* L259 */
+{2.0783974547759732e+00, 5.9993676693181897e-14,
+	2.2204460492503131e-16, 2.9531932455029164e-14,
+	-4.1078251911130792e-15}, /* L260 */
+{3.8851174195338651e+00, 1.1257661469699087e-13,
+	2.2204460492503131e-16, 1.6875389974302379e-13,
+	2.6711965972481266e-13}, /* L261 */
+{4.3186496530423506e+00, 1.2561826578938451e-13,
+	2.2204460492503131e-16, -5.1136872514234710e-13,
+	5.1736392947532295e-14}, /* L262 */
+{3.7909330197018480e+00, 1.1068923555512811e-13,
+	2.2204460492503131e-16, -7.8492767840998567e-14,
+	6.5503158452884236e-14}, /* L263 */
+{3.9299848830139119e+00, 1.1518563880485999e-13,
+	2.2204460492503131e-16, -5.8841820305133297e-15,
+	-1.4155343563970746e-13}, /* L264 */
+{4.1774229491837191e+00, 1.2290168882600483e-13,
+	2.2204460492503131e-16, -1.5987211554602254e-14,
+	4.0412118096355698e-14}, /* L265 */
+{2.7744789010868378e+00, 8.1934459217336553e-14,
+	2.2204460492503131e-16, 3.9968028886505635e-15,
+	6.4392935428259079e-15}, /* L266 */
+{3.7355445317129057e+00, 1.1073086891855155e-13,
+	2.2204460492503131e-16, -3.0464519795714295e-13,
+	-9.8920871494101448e-14}, /* L267 */
+{2.3022743306039679e+00, 6.8500760619372159e-14,
+	2.2204460492503131e-16, -6.5614180755346752e-14,
+	2.1094237467877974e-14}, /* L268 */
+{2.5474370770692856e+00, 7.6078032762438852e-14,
+	2.2204460492503131e-16, -9.7699626167013776e-15,
+	2.1094237467877974e-14}, /* L269 */
+{2.9259710743468554e+00, 8.7707618945387367e-14,
+	2.2204460492503131e-16, -9.2925667161125602e-14,
+	-1.9428902930940239e-14}, /* L270 */
+{4.1684222533137527e+00, 1.2541356841921925e-13,
+	2.2204460492503131e-16, 8.5043083686286991e-14,
+	3.7525538232330291e-14}, /* L271 */
+{3.7500578642739915e+00, 1.1324274851176597e-13,
+	2.2204460492503131e-16, -5.9729998724833422e-14,
+	-7.8825834748386114e-15}, /* L272 */
+{2.7784311502337311e+00, 8.4210416417818124e-14,
+	2.2204460492503131e-16, -1.0880185641326534e-14,
+	1.4876988529977098e-14}, /* L273 */
+{4.3778047768327930e+00, 1.3317125180378753e-13,
+	2.2204460492503131e-16, -6.0063065632220969e-14,
+	-5.9952043329758453e-14}, /* L274 */
+{2.9973189766086441e+00, 9.1510132804728528e-14,
+	2.2204460492503131e-16, -1.7985612998927536e-14,
+	-1.6431300764452317e-14}, /* L275 */
+{4.1993401591234125e+00, 1.2867484855405564e-13,
+	2.2204460492503131e-16, -6.5392136150421720e-14,
+	-3.1086244689504383e-15}, /* L276 */
+{2.8780058252709164e+00, 8.8506459106074686e-14,
+	2.2204460492503131e-16, 3.7059244561987725e-13,
+	-3.6881608878047700e-13}, /* L277 */
+{3.5000540066536838e+00, 1.0802470029602773e-13,
+	2.2204460492503131e-16, -8.5043083686286991e-14,
+	2.6556534749033744e-13}, /* L278 */
+{2.8208320565674430e+00, 8.7374552037999820e-14,
+	2.2204460492503131e-16, -1.4210854715202004e-14,
+	1.3322676295501878e-15}, /* L279 */
+{4.0357765586935717e+00, 1.2545520178264269e-13,
+	2.2204460492503131e-16, 1.3322676295501878e-14,
+	3.7969627442180354e-14}, /* L280 */
+{4.5320984010938821e+00, 1.4138690218601369e-13,
+	2.2204460492503131e-16, -6.4392935428259079e-15,
+	-5.5511151231257827e-16}, /* L281 */
+{2.7855039738885403e+00, 8.7208018584306046e-14,
+	2.2204460492503131e-16, -8.9928064994637680e-15,
+	2.0206059048177849e-14}, /* L282 */
+{4.0201592051375776e+00, 1.2630868573282328e-13,
+	2.2204460492503131e-16, 1.8429702208777599e-14,
+	2.8954616482224083e-13}, /* L283 */
+{3.5405475892265676e+00, 1.1163292512605949e-13,
+	2.2204460492503131e-16, -1.2068124277675452e-13,
+	-1.0058620603103918e-13}, /* L284 */
+{3.1482941929541530e+00, 9.9614760884492171e-14,
+	2.2204460492503131e-16, 3.3306690738754696e-14,
+	-2.2648549702353193e-14}, /* L285 */
+{3.7041655477529858e+00, 1.1761425167122752e-13,
+	2.2204460492503131e-16, 2.5535129566378600e-14,
+	-9.8365759981788869e-14}, /* L286 */
+{4.0584249917889874e+00, 1.2931322679321511e-13,
+	2.2204460492503131e-16, -3.3750779948604759e-14,
+	-1.7541523789077473e-14}, /* L287 */
+{4.7561497773972219e+00, 1.5207279879803082e-13,
+	2.2204460492503131e-16, 2.6645352591003757e-14,
+	9.9920072216264089e-15}, /* L288 */
+{3.6280836638441429e+00, 1.1640688413194766e-13,
+	2.2204460492503131e-16, -4.1633363423443370e-14,
+	-5.1847415249994810e-14}, /* L289 */
+{3.9892856935458521e+00, 1.2843892616132280e-13,
+	2.2204460492503131e-16, -7.3718808835110394e-14,
+	-9.9253938401488995e-14}, /* L290 */
+{2.6392159814544351e+00, 8.5265128291212022e-14,
+	2.2204460492503131e-16, 9.2814644858663087e-14,
+	1.2034817586936697e-13}, /* L291 */
+{3.6918377878422501e+00, 1.1968204205459188e-13,
+	2.2204460492503131e-16, -1.0547118733938987e-14,
+	-4.8294701571194310e-14}, /* L292 */
+{3.4659237871852957e+00, 1.1274314815068465e-13,
+	2.2204460492503131e-16, -3.3750779948604759e-14,
+	-1.6653345369377348e-14}, /* L293 */
+{3.9949596023480041e+00, 1.3039569424222464e-13,
+	2.2204460492503131e-16, 7.5273121069585613e-14,
+	-1.9073631563060189e-13}, /* L294 */
+{4.0949784407116701e+00, 1.3411494137471891e-13,
+	2.2204460492503131e-16, -1.3822276656583199e-13,
+	-3.7403413699621524e-13}, /* L295 */
+{3.5878931998724704e+00, 1.1790568521519162e-13,
+	2.2204460492503131e-16, 2.2870594307278225e-14,
+	-5.0626169922907138e-14}, /* L296 */
+{2.8889334658101604e+00, 9.5257135512838431e-14,
+	2.2204460492503131e-16, 8.0158102377936302e-14,
+	4.9515946898281982e-14}, /* L297 */
+{2.8020566592086511e+00, 9.2703622556200571e-14,
+	2.2204460492503131e-16, 9.7255536957163713e-14,
+	5.1403326040144748e-13}, /* L298 */
+{3.2726257482199399e+00, 1.0863532295957157e-13,
+	2.2204460492503131e-16, 8.4376949871511897e-15,
+	-6.0174087934683484e-14}, /* L299 */
+{3.3617185387731494e+00, 1.1196599203344704e-13,
+	2.2204460492503131e-16, 1.1501910535116622e-13,
+	-1.1157741397482823e-13}, /* L300 */
+{3.8219028266783948e+00, 1.2771728119531645e-13,
+	2.2204460492503131e-16, 9.0594198809412774e-14,
+	3.4194869158454821e-14}, /* L301 */
+{3.8543641095037744e+00, 1.2922996006636822e-13,
+	2.2204460492503131e-16, 7.5495165674510645e-14,
+	-1.4221956945448255e-13}, /* L302 */
+{3.3602003635324427e+00, 1.1303458169464875e-13,
+	2.2204460492503131e-16, 4.3742787170231168e-14,
+	-9.4368957093138306e-15}, /* L303 */
+{3.6595959421092354e+00, 1.2351231148954867e-13,
+	2.2204460492503131e-16, -5.3179682879544998e-14,
+	5.1514348342607263e-14}, /* L304 */
+{3.1943115840600873e+00, 1.0816347817410588e-13,
+	2.2204460492503131e-16, -5.7509552675583109e-14,
+	-1.5543122344752192e-14}, /* L305 */
+{4.4710657216009277e+00, 1.5189238755652923e-13,
+	2.2204460492503131e-16, 1.1262102361797588e-12,
+	1.9320101074526974e-12}, /* L306 */
+{4.0896396513316224e+00, 1.3938850074168840e-13,
+	2.2204460492503131e-16, -1.5210055437364645e-14,
+	-7.9269923958236177e-14}, /* L307 */
+{5.9612324052940657e+00, 2.0384041676813069e-13,
+	2.2204460492503131e-16, -6.3282712403633923e-14,
+	6.0396132539608516e-14}, /* L308 */
+{3.6327421382070098e+00, 1.2462253451417382e-13,
+	2.2204460492503131e-16, 1.1102230246251565e-15,
+	-1.8873791418627661e-14}, /* L309 */
+{4.3702287239778652e+00, 1.5040746426109308e-13,
+	2.2204460492503131e-16, 2.6423307986078726e-14,
+	2.2204460492503131e-16}, /* L310 */
+{2.6972884043591026e+00, 9.3130364531290866e-14,
+	2.2204460492503131e-16, -9.2148511043887993e-14,
+	-1.6875389974302379e-14}, /* L311 */
+{3.8542261382814735e+00, 1.3350431871117507e-13,
+	2.2204460492503131e-16, 7.7493567118835927e-14,
+	-1.4432899320127035e-14}, /* L312 */
+{3.3275273828674061e+00, 1.1562972801471005e-13,
+	2.2204460492503131e-16, -8.3266726846886741e-14,
+	-3.7081449022480228e-14}, /* L313 */
+{4.9347895207576640e+00, 1.7202905766566801e-13,
+	2.2204460492503131e-16, -3.5749181392930041e-14,
+	2.3980817331903381e-14}, /* L314 */
+{4.1857788732647982e+00, 1.4638290579682689e-13,
+	2.2204460492503131e-16, -7.4051875742497941e-14,
+	1.0813572259849025e-13}, /* L315 */
+{4.4225365952081974e+00, 1.5515366769136563e-13,
+	2.2204460492503131e-16, 2.1316282072803006e-14,
+	-1.4188650254709501e-13}, /* L316 */
+{4.0276646714714666e+00, 1.4174772466901686e-13,
+	2.2204460492503131e-16, -2.0761170560490427e-14,
+	1.1990408665951691e-14}, /* L317 */
+{4.0723898819578377e+00, 1.4377388168895777e-13,
+	2.2204460492503131e-16, 5.9952043329758453e-15,
+	1.0436096431476471e-14}, /* L318 */
+{3.4828123613023654e+00, 1.2334577803585489e-13,
+	2.2204460492503131e-16, 4.4408920985006262e-15,
+	1.0524914273446484e-13}, /* L319 */
+{4.0625626862965687e+00, 1.4432899320127035e-13,
+	2.2204460492503131e-16, 1.3544720900426910e-14,
+	-6.6946448384896939e-14}, /* L320 */
+{3.4922657244865749e+00, 1.2445600106048005e-13,
+	2.2204460492503131e-16, 1.2634338020234281e-13,
+	-6.0951244051921094e-14}, /* L321 */
+{4.3649741848750399e+00, 1.5604184611106575e-13,
+	2.2204460492503131e-16, 9.5479180117763462e-15,
+	8.8151708155237429e-14}, /* L322 */
+{3.6169288750767836e+00, 1.2970180485183391e-13,
+	2.2204460492503131e-16, -7.7715611723760958e-16,
+	-1.7097434579227411e-14}, /* L323 */
+{4.6875723303391226e+00, 1.6861512186494565e-13,
+	2.2204460492503131e-16, -1.5620837956475953e-13,
+	-2.1538326677728037e-14}, /* L324 */
+{3.7169804308043264e+00, 1.3411494137471891e-13,
+	2.2204460492503131e-16, 4.4408920985006262e-16,
+	1.7985612998927536e-14}, /* L325 */
+{4.1664753326374369e+00, 1.5079604231971189e-13,
+	2.2204460492503131e-16, 6.1506355564233672e-14,
+	-5.0293103015519591e-14}, /* L326 */
+{4.0153524777097829e+00, 1.4577228313328305e-13,
+	2.2204460492503131e-16, 6.8389738316909643e-14,
+	-2.2426505097428162e-14}, /* L327 */
+{3.8826818619100782e+00, 1.4138690218601369e-13,
+	2.2204460492503131e-16, -3.0353497493251780e-13,
+	-9.7710728397260027e-13}, /* L328 */
+{4.2158705229913114e+00, 1.5398793351550921e-13,
+	2.2204460492503131e-16, -1.5054624213917123e-13,
+	1.6342482922482304e-13}, /* L329 */
+{4.9803798787347473e+00, 1.8246515409714448e-13,
+	2.2204460492503131e-16, -3.5527136788005009e-15,
+	-3.7747582837255322e-15}, /* L330 */
+{3.8622197158024405e+00, 1.4192813591051845e-13,
+	2.2204460492503131e-16, -2.5313084961453569e-14,
+	-6.9499961341534799e-14}, /* L331 */
+{2.6434895848459301e+00, 9.7435948198665301e-14,
+	2.2204460492503131e-16, 1.1746159600534156e-13,
+	2.1094237467877974e-14}, /* L332 */
+{3.5977469555222945e+00, 1.3300818779704571e-13,
+	2.2204460492503131e-16, -5.4289905904170155e-14,
+	-3.2196467714129540e-14}, /* L333 */
+{3.8743112785364828e+00, 1.4366285938649526e-13,
+	2.2204460492503131e-16, 2.7311486405778851e-13,
+	5.0404125317982107e-14}, /* L334 */
+{4.4806661526545577e+00, 1.6664447599623600e-13,
+	2.2204460492503131e-16, -2.6212365611399946e-13,
+	-1.4832579608992091e-13}, /* L335 */
+{4.1518497783032586e+00, 1.5487611193520934e-13,
+	2.2204460492503131e-16, -1.2101430968414206e-14,
+	-1.3544720900426910e-14}, /* L336 */
+{2.8116160841917153e+00, 1.0519363158323358e-13,
+	2.2204460492503131e-16, 1.0591527654923993e-13,
+	-2.5746071941057380e-13}, /* L337 */
+{4.6420834627579532e+00, 1.7419399256368706e-13,
+	2.2204460492503131e-16, 2.2204460492503131e-16,
+	3.0642155479654321e-14}, /* L338 */
+{3.0693688950053040e+00, 1.1551870571224754e-13,
+	2.2204460492503131e-16, -3.1419311596891930e-14,
+	-1.1979306435705439e-13}, /* L339 */
+{5.8192074387900297e+00, 2.1965762542208722e-13,
+	2.2204460492503131e-16, 2.6290081223123707e-13,
+	3.9501735216163070e-13}, /* L340 */
+{4.9590208003801601e+00, 1.8773871346411397e-13,
+	2.2204460492503131e-16, 4.8627768478581856e-14,
+	9.1926466438962962e-14}, /* L341 */
+{4.1871991123897319e+00, 1.5898393712632242e-13,
+	2.2204460492503131e-16, 8.0380146982861334e-14,
+	9.1482377229112899e-14}, /* L342 */
+{2.9242433724901558e+00, 1.1135536936990320e-13,
+	2.2204460492503131e-16, -1.3455903058456897e-13,
+	-5.2846615972157451e-14}, /* L343 */
+{3.0750837864740705e+00, 1.1744077932362984e-13,
+	2.2204460492503131e-16, -6.0840221749458578e-14,
+	6.3948846218409017e-14}, /* L344 */
+{3.3029495160113536e+00, 1.2650991365603659e-13,
+	2.2204460492503131e-16, 1.2878587085651816e-14,
+	-1.6653345369377348e-14}, /* L345 */
+{3.6113273999264486e+00, 1.3872236692691331e-13,
+	2.2204460492503131e-16, -3.1874503036988244e-13,
+	-1.4965806371947110e-13}, /* L346 */
+{4.6801874901676896e+00, 1.8030021919912542e-13,
+	2.2204460492503131e-16, 1.4432899320127035e-14,
+	-5.6621374255882984e-15}, /* L347 */
+{3.8678757741819410e+00, 1.4943601911454607e-13,
+	2.2204460492503131e-16, -6.6835426082434424e-14,
+	4.1167069753100805e-13}, /* L348 */
+{4.1304362264359300e+00, 1.6003864899971632e-13,
+	2.2204460492503131e-16, 1.0969003483296547e-13,
+	-2.3714363805993344e-13}, /* L349 */
+{5.2586525708158405e+00, 2.0433654768226006e-13,
+	2.2204460492503131e-16, -4.0634162701280729e-14,
+	2.8643754035329039e-14}, /* L350 */
+{3.5620207747832455e+00, 1.3880563365376020e-13,
+	2.2204460492503131e-16, 2.2204460492503131e-16,
+	-3.5971225997855072e-14}, /* L351 */
+{4.3773757825724546e+00, 1.7106455141302490e-13,
+	2.2204460492503131e-16, 1.3389289676979388e-13,
+	1.0613732115416497e-13}, /* L352 */
+{2.7580099788377992e+00, 1.0808715034116290e-13,
+	2.2204460492503131e-16, 1.3367085216486885e-13,
+	1.7541523789077473e-14}, /* L353 */
+{4.2133418490128216e+00, 1.6558976412284210e-13,
+	2.2204460492503131e-16, -1.5210055437364645e-14,
+	3.3972824553529790e-14}, /* L354 */
+{3.5732945733826411e+00, 1.4083179067370111e-13,
+	2.2204460492503131e-16, 4.3876013933186186e-13,
+	3.2955860262973147e-12}, /* L355 */
+{3.2921856306561907e+00, 1.3011813848606835e-13,
+	2.2204460492503131e-16, 2.9753977059954195e-13,
+	5.5733195836182858e-14}, /* L356 */
+{5.3040034106458469e+00, 2.1022072971277339e-13,
+	2.2204460492503131e-16, 1.1546319456101628e-14,
+	1.7985612998927536e-14}, /* L357 */
+{3.5915358651695191e+00, 1.4274692539117950e-13,
+	2.2204460492503131e-16, 1.4210854715202004e-14,
+	1.3766765505351941e-14}, /* L358 */
+{3.5947629889288719e+00, 1.4327428132787645e-13,
+	2.2204460492503131e-16, -7.4718009557273035e-14,
+	4.2188474935755949e-14}, /* L359 */
+{5.9612030938742242e+00, 2.3825386108455859e-13,
+	2.2204460492503131e-16, -6.5614180755346752e-14,
+	5.5067062021407764e-14}, /* L360 */
+{4.4187835568296707e+00, 1.7709791966247224e-13,
+	2.2204460492503131e-16, 6.2172489379008766e-14,
+	2.7089441800853820e-14}, /* L361 */
+{3.6879022090647569e+00, 1.4821477378745840e-13,
+	2.2204460492503131e-16, -2.0539125955565396e-14,
+	3.9745984281580604e-14}, /* L362 */
+{3.6047388175569290e+00, 1.4527268277220173e-13,
+	2.2204460492503131e-16, -1.2290168882600483e-13,
+	-2.1049828546892968e-13}, /* L363 */
+{5.5007716913857783e+00, 2.2229440510557197e-13,
+	2.2204460492503131e-16, -5.0293103015519591e-14,
+	4.5519144009631418e-14}, /* L364 */
+{4.6014408643245703e+00, 1.8646195698579504e-13,
+	2.2204460492503131e-16, -9.8143715376863838e-14,
+	2.1427304375265521e-13}, /* L365 */
+{3.8129003640029775e+00, 1.5493162308644060e-13,
+	2.2204460492503131e-16, 9.0372154204487742e-14,
+	5.9952043329758453e-14}, /* L366 */
+{3.7275779533709077e+00, 1.5187850976872141e-13,
+	2.2204460492503131e-16, -2.9976021664879227e-15,
+	3.1308289294429414e-14}, /* L367 */
+{3.9334846076349184e+00, 1.6070478281449141e-13,
+	2.2204460492503131e-16, 2.4646951146678475e-14,
+	-2.7644553313166398e-14}, /* L368 */
+{4.5000694371284702e+00, 1.8435253323900724e-13,
+	2.2204460492503131e-16, -5.9174887212520844e-14,
+	-1.1779466291272911e-13}, /* L369 */
+{4.5852058859376799e+00, 1.8834933612765781e-13,
+	2.2204460492503131e-16, -5.4067861299245124e-14,
+	-1.1990408665951691e-14}, /* L370 */
+{3.9731071280783361e+00, 1.6364687382974807e-13,
+	2.2204460492503131e-16, 5.7953641885433171e-14,
+	-5.6732396558345499e-14}, /* L371 */
+{6.1761705685796437e+00, 2.5507373990762972e-13,
+	2.2204460492503131e-16, -1.4432899320127035e-15,
+	6.0396132539608516e-14}, /* L372 */
+{4.7078474421172833e+00, 1.9495516312417749e-13,
+	2.2204460492503131e-16, -8.7707618945387367e-14,
+	-1.4865886299730846e-13}, /* L373 */
+{4.6130390947152637e+00, 1.9154122732345513e-13,
+	2.2204460492503131e-16, -1.1246559239452836e-13,
+	-5.5955240441107890e-14}, /* L374 */
+{4.7907405889179788e+00, 1.9945156637390937e-13,
+	2.2204460492503131e-16, 3.6415315207705135e-14,
+	-1.6231460620019789e-13}, /* L375 */
+{4.7088492543932405e+00, 1.9656498650988397e-13,
+	2.2204460492503131e-16, -4.2588155224621005e-13,
+	1.3100631690576847e-14}, /* L376 */
+{4.7865460060700720e+00, 2.0033974479360950e-13,
+	2.2204460492503131e-16, 2.2870594307278225e-14,
+	1.9761969838327786e-14}, /* L377 */
+{4.4749367741899171e+00, 1.8779422461534523e-13,
+	2.2204460492503131e-16, 2.3425705819590803e-13,
+	-5.8064664187895687e-14}, /* L378 */
+{4.5066658449812271e+00, 1.8962609260597674e-13,
+	2.2204460492503131e-16, -5.1736392947532295e-14,
+	-3.9857006584043120e-14}, /* L379 */
+{5.6527188017265582e+00, 2.3847590568948362e-13,
+	2.2204460492503131e-16, 5.1514348342607263e-14,
+	3.3972824553529790e-14}, /* L380 */
+{3.5282696651269934e+00, 1.4924173008523667e-13,
+	2.2204460492503131e-16, 1.3988810110276972e-14,
+	1.9539925233402755e-14}, /* L381 */
+{5.2762464031563292e+00, 2.2376545061320030e-13,
+	2.2204460492503131e-16, -1.8762769116165146e-14,
+	5.4400928206632670e-14}, /* L382 */
+{3.7735476086558344e+00, 1.6045498263395075e-13,
+	2.2204460492503131e-16, 1.6697754290362354e-13,
+	7.6827433304060833e-14}, /* L383 */
+{4.2383361889014060e+00, 1.8068879725774423e-13,
+	2.2204460492503131e-16, 2.8976820942716586e-13,
+	-4.3964831775156199e-14}, /* L384 */
+{3.3558876561183313e+00, 1.4344081478157023e-13,
+	2.2204460492503131e-16, -2.5535129566378600e-14,
+	2.0206059048177849e-14}, /* L385 */
+{5.9320717123774740e+00, 2.5421331706354522e-13,
+	2.2204460492503131e-16, 6.5503158452884236e-13,
+	9.5856655946136016e-13}, /* L386 */
+{3.2041759006555273e+00, 1.3766765505351941e-13,
+	2.2204460492503131e-16, 6.0618177144533547e-14,
+	4.8849813083506888e-15}, /* L387 */
+{2.9961728581354108e+00, 1.2906342661267445e-13,
+	2.2204460492503131e-16, 1.4210854715202004e-14,
+	-6.7168492989821971e-14}, /* L388 */
+{3.8149594766426693e+00, 1.6475709685437323e-13,
+	2.2204460492503131e-16, -6.7612582199672033e-14,
+	-6.2505556286396313e-14}, /* L389 */
+{5.6949456148934239e+00, 2.4658053376924727e-13,
+	2.2204460492503131e-16, 7.6605388699135801e-14,
+	6.8389738316909643e-14}, /* L390 */
+{3.3619361617984511e+00, 1.4593881658697683e-13,
+	2.2204460492503131e-16, 3.5083047578154947e-14,
+	5.5955240441107890e-14}, /* L391 */
+{4.5823298060348492e+00, 1.9942381079829374e-13,
+	2.2204460492503131e-16, 2.0539125955565396e-13,
+	-7.7415851507112166e-13}, /* L392 */
+{4.3569267051264031e+00, 1.9009793739144243e-13,
+	2.2204460492503131e-16, -2.1094237467877974e-15,
+	7.3274719625260332e-15}, /* L393 */
+{3.5114668367467901e+00, 1.5359935545689041e-13,
+	2.2204460492503131e-16, -1.3355982986240633e-13,
+	3.0420110874729289e-14}, /* L394 */
+{5.8239678975141347e+00, 2.5539986792111335e-13,
+	2.2204460492503131e-16, 2.0339285811132868e-13,
+	-1.4233059175694507e-13}, /* L395 */
+{3.5300725889300715e+00, 1.5519703577826505e-13,
+	2.2204460492503131e-16, 2.7999824681046448e-13,
+	-3.7436720390360279e-13}, /* L396 */
+{5.3006039729013956e+00, 2.3362561885065247e-13,
+	2.2204460492503131e-16, -2.6645352591003757e-14,
+	-1.0214051826551440e-14}, /* L397 */
+{4.0634948836006606e+00, 1.7955081865750344e-13,
+	2.2204460492503131e-16, -6.3282712403633923e-14,
+	4.0190073491430667e-14}, /* L398 */
+{4.9250716726849681e+00, 2.1816749795622314e-13,
+	2.2204460492503131e-16, -1.7252865802674933e-13,
+	-4.8994142076708158e-13}, /* L399 */
+{4.0388023524696903e+00, 1.7935652962819404e-13,
+	2.2204460492503131e-16, -1.3622436512150671e-13,
+	-2.2204460492503131e-14}, /* L400 */
+{4.0948161708129209e+00, 1.8229862064345070e-13,
+	2.2204460492503131e-16, -4.4408920985006262e-15,
+	1.6209256159527285e-14}, /* L401 */
+{3.4204423470072500e+00, 1.5265566588595902e-13,
+	2.2204460492503131e-16, -1.4865886299730846e-13,
+	-3.8635761256955448e-14}, /* L402 */
+{4.2047547470537951e+00, 1.8812729152273278e-13,
+	2.2204460492503131e-16, -5.6843418860808015e-14,
+	-1.7985612998927536e-14}, /* L403 */
+{4.9356906432090160e+00, 2.2137847111025621e-13,
+	2.2204460492503131e-16, 2.2648549702353193e-14,
+	-4.0523140398818214e-14}, /* L404 */
+{3.6728745397139617e+00, 1.6514567491299204e-13,
+	2.2204460492503131e-16, -1.5210055437364645e-14,
+	-9.0705221111875289e-14}, /* L405 */
+{5.7106456037293754e+00, 2.5740520825934254e-13,
+	2.2204460492503131e-16, -2.2759572004815709e-14,
+	-7.5273121069585613e-14}, /* L406 */
+{4.5406606327450438e+00, 2.0517268439768088e-13,
+	2.2204460492503131e-16, 1.0569323194431490e-13,
+	-4.3742787170231168e-14}, /* L407 */
+{6.8180797398126272e+00, 3.0883628987510292e-13,
+	2.2204460492503131e-16, 6.6835426082434424e-14,
+	-2.0572432646304151e-13}, /* L408 */
+{4.5782832785419769e+00, 2.0788926136106056e-13,
+	2.2204460492503131e-16, -1.5654144647214707e-14,
+	-6.2283511681471282e-14}, /* L409 */
+{6.5378672391802688e+00, 2.9759528175077321e-13,
+	2.2204460492503131e-16, 1.8762769116165146e-13,
+	3.4949820815199928e-13}, /* L410 */
+{6.8796276647996475e+00, 3.1391556021276301e-13,
+	2.2204460492503131e-16, 9.7699626167013776e-15,
+	7.3496764230185363e-14}, /* L411 */
+{4.7991962623446414e+00, 2.1951884754400908e-13,
+	2.2204460492503131e-16, 5.5733195836182858e-14,
+	4.5963233219481481e-14}, /* L412 */
+{4.9649383989915412e+00, 2.2765123119938835e-13,
+	2.2204460492503131e-16, -2.1482815526496779e-13,
+	3.9523939676655573e-14}, /* L413 */
+{6.1099616612194732e+00, 2.8083091407893335e-13,
+	2.2204460492503131e-16, 3.4594549447319878e-13,
+	1.5609735726229701e-13}, /* L414 */
+{6.7193412005537780e+00, 3.0958569041672490e-13,
+	2.2204460492503131e-16, -2.7422508708241367e-14,
+	3.7081449022480228e-14}, /* L415 */
+{3.5348894866075398e+00, 1.6325829577112927e-13,
+	2.2204460492503131e-16, 1.1679546219056647e-13,
+	6.6613381477509392e-15}, /* L416 */
+{5.6703178750180285e+00, 2.6251223417261826e-13,
+	2.2204460492503131e-16, 6.8900440908237215e-13,
+	-8.1257223172315207e-13}, /* L417 */
+{4.6029147180674830e+00, 2.1360690993788012e-13,
+	2.2204460492503131e-16, -9.6223029544262317e-13,
+	-1.2267964422107980e-13}, /* L418 */
+{4.7816685214150239e+00, 2.2243318298365011e-13,
+	2.2204460492503131e-16, 4.6629367034256575e-14,
+	-4.3298697960381105e-14}, /* L419 */
+{4.9369518527870602e+00, 2.3020474415602621e-13,
+	2.2204460492503131e-16, 1.8096635301390052e-13,
+	3.5971225997855072e-14}, /* L420 */
+{5.8682269951850978e+00, 2.7428059823364492e-13,
+	2.2204460492503131e-16, 1.6209256159527285e-14,
+	3.5749181392930041e-14}, /* L421 */
+{5.6795565438470428e+00, 2.6609270342703439e-13,
+	2.2204460492503131e-16, -1.9684254226604025e-13,
+	1.4521717162097048e-13}, /* L422 */
+{3.9988561098035849e+00, 1.8779422461534523e-13,
+	2.2204460492503131e-16, 2.2715163083830703e-13,
+	1.5099033134902129e-14}, /* L423 */
+{4.7016957903000263e+00, 2.2132295995902496e-13,
+	2.2204460492503131e-16, 6.8389738316909643e-14,
+	5.1514348342607263e-14}, /* L424 */
+{4.9633561662689969e+00, 2.3419113870382091e-13,
+	2.2204460492503131e-16, 3.7747582837255322e-15,
+	-1.5543122344752192e-14}, /* L425 */
+{3.8627129006434746e+00, 1.8268719870206951e-13,
+	2.2204460492503131e-16, -2.7866597918091429e-14,
+	-4.6740389336719090e-14}, /* L426 */
+{4.6888620547007314e+00, 2.2228052731776415e-13,
+	2.2204460492503131e-16, -3.5527136788005009e-15,
+	-2.4424906541753444e-14}, /* L427 */
+{4.2652275995602578e+00, 2.0267121314532233e-13,
+	2.2204460492503131e-16, 4.6407322429331543e-14,
+	-8.1046280797636427e-14}, /* L428 */
+{5.0105373032567080e+00, 2.3864243914317740e-13,
+	2.2204460492503131e-16, -3.8802294710649221e-13,
+	3.9745984281580604e-14}, /* L429 */
+{4.1128299277090949e+00, 1.9634294190495893e-13,
+	2.2204460492503131e-16, -6.5281113847959205e-14,
+	1.1102230246251565e-13}, /* L430 */
+{4.6961004779885007e+00, 2.2470914018413168e-13,
+	2.2204460492503131e-16, -5.2069459854919842e-14,
+	-6.9166894434147252e-14}, /* L431 */
+{3.9988807357282870e+00, 1.9179102750399579e-13,
+	2.2204460492503131e-16, 1.1102230246251565e-14,
+	-1.6875389974302379e-14}, /* L432 */
+{5.4902822331073837e+00, 2.6392993693336031e-13,
+	2.2204460492503131e-16, -4.7462034302725442e-13,
+	3.5860203695392556e-13}, /* L433 */
+{5.2051187732038846e+00, 2.5079938126282286e-13,
+	2.2204460492503131e-16, 2.9976021664879227e-14,
+	2.2826185386293218e-13}, /* L434 */
+{5.8701709348763282e+00, 2.8349544933803372e-13,
+	2.2204460492503131e-16, -1.0291767438275201e-13,
+	-6.2394533983933798e-14}, /* L435 */
+{5.7400203472427505e+00, 2.7784718970025324e-13,
+	2.2204460492503131e-16, 3.8635761256955448e-13,
+	6.0174087934683484e-14}, /* L436 */
+{6.3956559703342561e+00, 3.1029345759492344e-13,
+	2.2204460492503131e-16, 1.8873791418627661e-13,
+	-1.8141044222375058e-13}, /* L437 */
+{5.9812214351582371e+00, 2.9085067687617538e-13,
+	2.2204460492503131e-16, -3.6481928589182644e-13,
+	-7.7604589421298442e-14}, /* L438 */
+{5.4658835711519105e+00, 2.6639801475880631e-13,
+	2.2204460492503131e-16, -3.2751579226442118e-14,
+	-8.8817841970012523e-14}, /* L439 */
+{3.7221945948830260e+00, 1.8182677585798501e-13,
+	2.2204460492503131e-16, -4.2488235152404741e-13,
+	2.4424906541753444e-14}, /* L440 */
+{4.9609316733542528e+00, 2.4288904221236862e-13,
+	2.2204460492503131e-16, -2.5202062658991053e-14,
+	-1.5043521983670871e-13}, /* L441 */
+{5.5639670987881980e+00, 2.7303159733094162e-13,
+	2.2204460492503131e-16, 2.0206059048177849e-14,
+	2.0428103653102880e-14}, /* L442 */
+{5.2077246172031204e+00, 2.5612845178102361e-13,
+	2.2204460492503131e-16, -1.3544720900426910e-14,
+	3.8635761256955448e-14}, /* L443 */
+{5.0495977148891908e+00, 2.4891200212096010e-13,
+	2.2204460492503131e-16, 1.3278267374516872e-13,
+	-8.1601392309949006e-14}, /* L444 */
+{4.8742037957345268e+00, 2.4080737404119645e-13,
+	2.2204460492503131e-16, 2.6201263381153694e-14,
+	-5.8841820305133297e-15}, /* L445 */
+{5.2870459459341737e+00, 2.6179058920661191e-13,
+	2.2204460492503131e-16, -1.9984014443252818e-15,
+	8.9039886574937555e-14}, /* L446 */
+{4.4846624635429873e+00, 2.2255808307392044e-13,
+	2.2204460492503131e-16, -9.2703622556200571e-14,
+	3.9968028886505635e-14}, /* L447 */
+{4.1663343832417468e+00, 2.0722312754628547e-13,
+	2.2204460492503131e-16, 1.0214051826551440e-14,
+	1.9984014443252818e-14}, /* L448 */
+{4.0807738908624955e+00, 2.0342061368694431e-13,
+	2.2204460492503131e-16, -5.3623772089395061e-14,
+	-6.3726801613483985e-14}, /* L449 */
+{5.8922784254429397e+00, 2.9437563497936026e-13,
+	2.2204460492503131e-16, 1.5765166949677223e-14,
+	1.0746958878371515e-13}, /* L450 */
+{4.2101288499112783e+00, 2.1080359680070160e-13,
+	2.2204460492503131e-16, -5.2291504459844873e-14,
+	8.8151708155237429e-14}, /* L451 */
+{4.9170822995881238e+00, 2.4674706722294104e-13,
+	2.2204460492503131e-16, -5.0071058410594560e-14,
+	-3.0642155479654321e-14}, /* L452 */
+{5.6992817353981957e+00, 2.8663182938259979e-13,
+	2.2204460492503131e-16, -4.2188474935755949e-15,
+	-1.4765966227514582e-14}, /* L453 */
+{4.3998217031750340e+00, 2.2176704916887502e-13,
+	2.2204460492503131e-16, -6.8833827526759706e-15,
+	1.3988810110276972e-14}, /* L454 */
+{3.9555322351529418e+00, 1.9981238885691255e-13,
+	2.2204460492503131e-16, -6.6613381477509392e-16,
+	-3.9968028886505635e-15}, /* L455 */
+{4.4364458255968806e+00, 2.2459811788166917e-13,
+	2.2204460492503131e-16, 2.1516122217235534e-13,
+	2.0428103653102880e-13}, /* L456 */
+{5.7637311258744965e+00, 2.9243274468626623e-13,
+	2.2204460492503131e-16, 5.5067062021407764e-14,
+	-8.4932061383824475e-14}, /* L457 */
+{6.2183999252689537e+00, 3.1619151741324458e-13,
+	2.2204460492503131e-16, -5.6621374255882984e-14,
+	-3.8857805861880479e-15}, /* L458 */
+{6.4918919879658779e+00, 3.3081870576268102e-13,
+	2.2204460492503131e-16, 4.3964831775156199e-14,
+	5.3068660577082483e-14}, /* L459 */
+{5.5163569653182405e+00, 2.8171909249863347e-13,
+	2.2204460492503131e-16, -1.4741541320972829e-12,
+	6.4370730967766576e-13}, /* L460 */
+{4.6958148558768267e+00, 2.4033552925573076e-13,
+	2.2204460492503131e-16, 3.0420110874729289e-14,
+	-1.1768364061026659e-14}, /* L461 */
+{5.5422606567947605e+00, 2.8427260545527133e-13,
+	2.2204460492503131e-16, -7.5828232581898192e-14,
+	3.0064839506849239e-13}, /* L462 */
+{7.9186770438068130e+00, 4.0704245529710192e-13,
+	2.2204460492503131e-16, 4.1744385725905886e-14,
+	2.0206059048177849e-14}, /* L463 */
+{4.3330154681851196e+00, 2.2321033910088772e-13,
+	2.2204460492503131e-16, 6.5769611978794273e-13,
+	7.6827433304060833e-13}, /* L464 */
+{5.0817689023215564e+00, 2.6234570071892449e-13,
+	2.2204460492503131e-16, 6.6613381477509392e-16,
+	-1.8873791418627661e-15}, /* L465 */
+{6.1062814204428140e+00, 3.1591396165708829e-13,
+	2.2204460492503131e-16, -1.8873791418627661e-15,
+	-7.3940853440035426e-14}, /* L466 */
+{4.8565773734848285e+00, 2.5179858198498550e-13,
+	2.2204460492503131e-16, -1.0536016503692736e-13,
+	8.7485574340462335e-14}, /* L467 */
+{5.9017656954216529e+00, 3.0664359940146824e-13,
+	2.2204460492503131e-16, 1.5698553568199713e-13,
+	-1.9739765377835283e-13}, /* L468 */
+{5.5426967919935635e+00, 2.8860247525130944e-13,
+	2.2204460492503131e-16, -2.5979218776228663e-14,
+	-3.2196467714129540e-15}, /* L469 */
+{4.7149385902403589e+00, 2.4602542225693469e-13,
+	2.2204460492503131e-16, -1.0735856648125264e-13,
+	9.5257135512838431e-14}, /* L470 */
+{6.9780389588025447e+00, 3.6488867483086551e-13,
+	2.2204460492503131e-16, 2.1691537455126308e-12,
+	-6.7290617522530738e-13}, /* L471 */
+{7.1300997897814780e+00, 3.7363168114978862e-13,
+	2.2204460492503131e-16, 6.8389738316909643e-14,
+	5.9285909514983359e-14}, /* L472 */
+{6.0666540609903699e+00, 3.1857849691618867e-13,
+	2.2204460492503131e-16, -4.2454928461665986e-13,
+	3.1685765122801968e-13}, /* L473 */
+{7.3562806105741236e+00, 3.8711742145203232e-13,
+	2.2204460492503131e-16, -5.7398530373120593e-14,
+	-1.0669243266647754e-13}, /* L474 */
+{5.9968993063800600e+00, 3.1624702856447584e-13,
+	2.2204460492503131e-16, -1.9728663147589032e-13,
+	3.7059244561987725e-13}, /* L475 */
+{6.5032132910670697e+00, 3.4366953727271721e-13,
+	2.2204460492503131e-16, -1.1952661083114435e-12,
+	2.2630786133959191e-12}, /* L476 */
+{6.7832801108031822e+00, 3.5922306795832526e-13,
+	2.2204460492503131e-16, -8.9483975784787617e-14,
+	5.5511151231257827e-14}, /* L477 */
+{5.2803850947349824e+00, 2.8022029141538951e-13,
+	2.2204460492503131e-16, 1.9473311851925246e-13,
+	-2.0772272790736679e-13}, /* L478 */
+{4.8758293888716402e+00, 2.5929258740120531e-13,
+	2.2204460492503131e-16, -2.2093438190040615e-14,
+	1.2878587085651816e-14}, /* L479 */
+{4.8417128491172807e+00, 2.5801583092288638e-13,
+	2.2204460492503131e-16, -2.1094237467877974e-15,
+	7.4162898044960457e-14}, /* L480 */
+{6.1196009910661093e+00, 3.2679414729841483e-13,
+	2.2204460492503131e-16, 4.0478731477833207e-13,
+	-4.1344705437040830e-13}, /* L481 */
+{4.9346943722537233e+00, 2.6406654640709348e-13,
+	2.2204460492503131e-16, -1.1435297153639112e-14,
+	-5.5955240441107890e-14}, /* L482 */
+{5.8427058338898181e+00, 3.1330493754921918e-13,
+	2.2204460492503131e-16, -2.2593038551121936e-13,
+	5.1070259132757201e-14}, /* L483 */
+{5.6539795500515018e+00, 3.0381253068867409e-13,
+	2.2204460492503131e-16, 7.7937656328685989e-14,
+	-2.4424906541753444e-14}, /* L484 */
+{6.3052147811699006e+00, 3.3950620093037287e-13,
+	2.2204460492503131e-16, 2.4424906541753444e-15,
+	-4.6629367034256575e-14}, /* L485 */
+{5.9905406795849077e+00, 3.2322755583180651e-13,
+	2.2204460492503131e-16, 5.7731597280508140e-15,
+	-2.2759572004815709e-14}, /* L486 */
+{4.2125658487098612e+00, 2.2776225350185086e-13,
+	2.2204460492503131e-16, 1.7386092565629951e-13,
+	-1.0047518372857667e-13}, /* L487 */
+{5.4908310625573691e+00, 2.9748425944831070e-13,
+	2.2204460492503131e-16, 2.5024426975051028e-13,
+	-3.2562841312255841e-13}, /* L488 */
+{5.1012756521416138e+00, 2.7694513349274530e-13,
+	2.2204460492503131e-16, 1.9251267247000214e-13,
+	1.7963408538435033e-13}, /* L489 */
+{4.9888230958546691e+00, 2.7139401836961952e-13,
+	2.2204460492503131e-16, -3.0497826486453050e-13,
+	-3.2107649872159527e-13}, /* L490 */
+{4.3951539392620198e+00, 2.3958612871410878e-13,
+	2.2204460492503131e-16, 4.2188474935755949e-15,
+	1.3922196728799463e-13}, /* L491 */
+{6.6284931036044803e+00, 3.6206454501197527e-13,
+	2.2204460492503131e-16, -1.3917755836700962e-12,
+	6.5702998597316764e-13}, /* L492 */
+{5.9371763069329377e+00, 3.2496227930778332e-13,
+	2.2204460492503131e-16, -4.5408121707168903e-14,
+	4.7961634663806763e-14}, /* L493 */
+{5.0091570913409829e+00, 2.7472468744349499e-13,
+	2.2204460492503131e-16, 5.2269299999352370e-13,
+	-7.3174799553044068e-13}, /* L494 */
+{3.8909462045156582e+00, 2.1382895454280515e-13,
+	2.2204460492503131e-16, -9.0816243414337805e-14,
+	8.5709217501062085e-14}, /* L495 */
+{4.6049456377668729e+00, 2.5357840827133771e-13,
+	2.2204460492503131e-16, -3.2973623831367149e-14,
+	-5.1403326040144748e-14}, /* L496 */
+{7.3793460414674348e+00, 4.0717429428127616e-13,
+	2.2204460492503131e-16, 8.9928064994637680e-14,
+	2.4424906541753444e-15}, /* L497 */
+{7.2026289428969541e+00, 3.9822312114523584e-13,
+	2.2204460492503131e-16, -1.1524114995609125e-13,
+	-3.3628655415895992e-13}, /* L498 */
+{4.7064577179742040e+00, 2.6073587733321801e-13,
+	2.2204460492503131e-16, 4.6629367034256575e-15,
+	7.7715611723760958e-15}, /* L499 */
+{5.8175554904793847e+00, 3.2293612228784241e-13,
+	2.2204460492503131e-16, -1.3322676295501878e-13,
+	9.4368957093138306e-14}, /* L500 */
+{4.3124163832796452e+00, 2.3986368447026507e-13,
+	2.2204460492503131e-16, 3.5682568011452531e-13,
+	-2.3003821070233244e-13}, /* L501 */
+{6.2236649418112178e+00, 3.4686142846851453e-13,
+	2.2204460492503131e-16, 1.1546319456101628e-13,
+	7.6161299489285739e-13}, /* L502 */
+{4.5849716659338560e+00, 2.5604171560722477e-13,
+	2.2204460492503131e-16, -1.0007550343971161e-12,
+	1.9961809982760315e-13}, /* L503 */
+{5.3819957803580101e+00, 3.0114799542957371e-13,
+	2.2204460492503131e-16, -8.1823436914874037e-14,
+	-3.8746783559417963e-14}, /* L504 */
+{4.9626710985811560e+00, 2.7823576775887204e-13,
+	2.2204460492503131e-16, -1.6542323066914832e-14,
+	-2.3980817331903381e-14}, /* L505 */
+{4.9852254169498611e+00, 2.8005375796169574e-13,
+	2.2204460492503131e-16, 2.3403501359098300e-13,
+	-1.7541523789077473e-14}, /* L506 */
+{4.6546301967872390e+00, 2.6199875602372913e-13,
+	2.2204460492503131e-16, 1.5165646516379638e-13,
+	6.6835426082434424e-14}, /* L507 */
+{5.2569399068437530e+00, 2.9648505872614805e-13,
+	2.2204460492503131e-16, 6.6568972556524386e-13,
+	-1.0703660180411134e-12}, /* L508 */
+{5.0599696788202966e+00, 2.8593793999220907e-13,
+	2.2204460492503131e-16, -6.9055872131684737e-14,
+	7.7493567118835927e-14}, /* L509 */
+{5.4588755986386763e+00, 3.0908609005564358e-13,
+	2.2204460492503131e-16, -2.5890400934258651e-13,
+	5.0182080713057076e-14}, /* L510 */
+{7.5137702998815419e+00, 4.2627013030482885e-13,
+	2.2204460492503131e-16, 3.1752378504279477e-14,
+	-8.5598195198599569e-14}, /* L511 */
+{5.7515197043496258e+00, 3.2693292517649297e-13,
+	2.2204460492503131e-16, 8.8817841970012523e-16,
+	1.2390088954816747e-13}, /* L512 */
+{5.3109668377417059e+00, 3.0248026305912390e-13,
+	2.2204460492503131e-16, -1.3078427230084344e-13,
+	1.3100631690576847e-14}, /* L513 */
+{8.3347098504314516e+00, 4.7561954374941706e-13,
+	2.2204460492503131e-16, -1.9928503292021560e-13,
+	2.0428103653102880e-14}, /* L514 */
+{4.9697075974963569e+00, 2.8414770536500100e-13,
+	2.2204460492503131e-16, -3.0753177782116836e-14,
+	2.2204460492503131e-15}, /* L515 */
+{6.7558783941152347e+00, 3.8702374638432957e-13,
+	2.2204460492503131e-16, 1.4743761767022079e-13,
+	-1.5343282200319663e-13}, /* L516 */
+{5.1697978082638567e+00, 2.9673832835364067e-13,
+	2.2204460492503131e-16, 2.4424906541753444e-14,
+	-2.3181456754173269e-13}, /* L517 */
+{5.8330207858098602e+00, 3.3545388689049105e-13,
+	2.2204460492503131e-16, -3.6970426720017713e-14,
+	8.4376949871511897e-15}, /* L518 */
+{6.9951940806813111e+00, 4.0306646909016308e-13,
+	2.2204460492503131e-16, -2.3536728122053319e-14,
+	-1.3766765505351941e-14}, /* L519 */
+{4.8105845127706477e+00, 2.7772228960998291e-13,
+	2.2204460492503131e-16, 1.2878587085651816e-14,
+	-5.4733995114020217e-14}, /* L520 */
+{6.0983781434855482e+00, 3.5274561049902786e-13,
+	2.2204460492503131e-16, -1.2988499165089706e-12,
+	5.2136073236397351e-13}, /* L521 */
+{4.9166744237375424e+00, 2.8493873927004643e-13,
+	2.2204460492503131e-16, 7.2386541205560206e-14,
+	1.4677148385544569e-13}, /* L522 */
+{6.0353823710121270e+00, 3.5044189772293066e-13,
+	2.2204460492503131e-16, -4.3742787170231168e-13,
+	-5.0726089995123402e-13}, /* L523 */
+{7.6040196304893746e+00, 4.4236836416189362e-13,
+	2.2204460492503131e-16, -8.2345241736447861e-13,
+	3.0286884111774270e-13}, /* L524 */
+{5.7352471437763413e+00, 3.3428815271463463e-13,
+	2.2204460492503131e-16, 1.3966605649784469e-13,
+	1.2123635428906709e-13}, /* L525 */
+{5.6330887352735486e+00, 3.2895908219643388e-13,
+	2.2204460492503131e-16, 1.5543122344752192e-14,
+	5.3512749786932545e-14}, /* L526 */
+{5.0047517290455383e+00, 2.9282132274488504e-13,
+	2.2204460492503131e-16, -1.3278267374516872e-13,
+	-1.3633538742396922e-13}, /* L527 */
+{6.4479268396057261e+00, 3.7797542873363454e-13,
+	2.2204460492503131e-16, -7.9269923958236177e-14,
+	-3.7303493627405260e-14}, /* L528 */
+{4.7554422853043672e+00, 2.7929047963226594e-13,
+	2.2204460492503131e-16, 1.2545520178264269e-13,
+	6.7279515292284486e-14}, /* L529 */
+{7.0207657936939389e+00, 4.1311398746302075e-13,
+	2.2204460492503131e-16, -8.5487172896137054e-14,
+	-1.0047518372857667e-13}, /* L530 */
+{5.2208180297221620e+00, 3.0778157800170902e-13,
+	2.2204460492503131e-16, 4.8021586707136521e-12,
+	3.5007552412480436e-12}, /* L531 */
+{7.2932445893095963e+00, 4.3076653355456074e-13,
+	2.2204460492503131e-16, -1.9317880628477724e-14,
+	-1.3555823130673161e-13}, /* L532 */
+{4.4953166607724802e+00, 2.6600943670018751e-13,
+	2.2204460492503131e-16, 4.3032244434471068e-13,
+	2.0916601783937949e-13}, /* L533 */
+{7.3173102337090583e+00, 4.3381270797837601e-13,
+	2.2204460492503131e-16, -1.1046719095020308e-13,
+	-2.4791280139879746e-13}, /* L534 */
+{6.7958051143131240e+00, 4.0364933617809129e-13,
+	2.2204460492503131e-16, -1.1546319456101628e-14,
+	7.5051076464660582e-14}, /* L535 */
+{6.8348988431670623e+00, 4.0673020507142610e-13,
+	2.2204460492503131e-16, -5.2069459854919842e-14,
+	-6.3504757008558954e-14}, /* L536 */
+{7.1326928175160100e+00, 4.2524317400705058e-13,
+	2.2204460492503131e-16, 1.2607692667643278e-12,
+	-1.5206724768290769e-12}, /* L537 */
+{5.8020537636069527e+00, 3.4655611713674261e-13,
+	2.2204460492503131e-16, 1.1590728377086634e-13,
+	7.3274719625260332e-14}, /* L538 */
+{5.5904540891157524e+00, 3.3453795289517529e-13,
+	2.2204460492503131e-16, 6.0396132539608516e-14,
+	7.2608585810485238e-14}, /* L539 */
+{5.5375087365670526e+00, 3.3198443993853743e-13,
+	2.2204460492503131e-16, -2.5535129566378600e-14,
+	3.3084646133829665e-14}, /* L540 */
+{5.5785670268502638e+00, 3.3506530883187224e-13,
+	2.2204460492503131e-16, -1.4321877017664519e-14,
+	-3.2784885917180873e-13}, /* L541 */
+{4.4271287559290471e+00, 2.6639801475880631e-13,
+	2.2204460492503131e-16, 3.3306690738754696e-15,
+	-9.6145313932538556e-14}, /* L542 */
+{4.3361026053221225e+00, 2.6140201114799311e-13,
+	2.2204460492503131e-16, 3.4952041261249178e-12,
+	-3.2902569557791139e-12}, /* L543 */
+{6.7867754133880798e+00, 4.0989434069160779e-13,
+	2.2204460492503131e-16, -3.1863400806741993e-12,
+	1.3513634655737405e-12}, /* L544 */
+{4.8403746091693245e+00, 2.9287683389611630e-13,
+	2.2204460492503131e-16, -9.5479180117763462e-15,
+	-3.2895908219643388e-13}, /* L545 */
+{5.1694220752481739e+00, 3.1336044870045043e-13,
+	2.2204460492503131e-16, -4.2299497238218464e-14,
+	9.3480778673438181e-14}, /* L546 */
+{7.8501037928372215e+00, 4.7672976677404222e-13,
+	2.2204460492503131e-16, 1.6675549829869851e-13,
+	1.4166445794216997e-13}, /* L547 */
+{5.9124180871872989e+00, 3.5971225997855072e-13,
+	2.2204460492503131e-16, 3.6859404417555197e-14,
+	1.0946799022804043e-13}, /* L548 */
+{6.2488998862544776e+00, 3.8087762110894374e-13,
+	2.2204460492503131e-16, 5.2402526762307389e-14,
+	-8.5043083686286991e-14}, /* L549 */
+{4.9372805168553153e+00, 3.0148106233696126e-13,
+	2.2204460492503131e-16, -9.0039087297100195e-14,
+	-3.9079850466805510e-14}, /* L550 */
+{7.0245119900629867e+00, 4.2971182168116684e-13,
+	2.2204460492503131e-16, 9.1260332624187868e-14,
+	9.3036689463588118e-14}, /* L551 */
+{4.8342467574573700e+00, 2.9626301412122302e-13,
+	2.2204460492503131e-16, -1.1912693054227930e-13,
+	3.9368508453208051e-13}, /* L552 */
+{7.7079687612789165e+00, 4.7323256424647298e-13,
+	2.2204460492503131e-16, -6.6835426082434424e-14,
+	-9.5035090907913400e-14}, /* L553 */
+{5.6173373823674746e+00, 3.4550140526334872e-13,
+	2.2204460492503131e-16, -9.2814644858663087e-14,
+	5.4178883601707639e-14}, /* L554 */
+{5.8234326110914427e+00, 3.5882408155885059e-13,
+	2.2204460492503131e-16, -3.4749980670767400e-13,
+	-4.7417625381740436e-13}, /* L555 */
+{8.7814886747606220e+00, 5.4206639177323268e-13,
+	2.2204460492503131e-16, -6.9944050551384862e-15,
+	2.1249668691325496e-13}, /* L556 */
+{6.0781065374043051e+00, 3.7586600498684675e-13,
+	2.2204460492503131e-16, -2.9254376698872875e-13,
+	6.1062266354383610e-14}, /* L557 */
+{5.1926605222452942e+00, 3.2168712138513911e-13,
+	2.2204460492503131e-16, -1.7852386235972517e-13,
+	2.5179858198498550e-13}, /* L558 */
+{5.3902142286877179e+00, 3.3452407510736748e-13,
+	2.2204460492503131e-16, 2.9976021664879227e-14,
+	-4.9182879990894435e-14}, /* L559 */
+{6.3218849740797296e+00, 3.9304670629292104e-13,
+	2.2204460492503131e-16, -3.8002934132919108e-13,
+	-8.4821039081361960e-14}, /* L560 */
+{6.2923450433403856e+00, 3.9190872769268026e-13,
+	2.2204460492503131e-16, 1.1701750679549150e-13,
+	-1.8096635301390052e-13}, /* L561 */
+{5.3211827724904852e+00, 3.3201219551415306e-13,
+	2.2204460492503131e-16, 1.7763568394002505e-13,
+	-2.8821389719269064e-13}, /* L562 */
+{5.1563136413664887e+00, 3.2229774404868294e-13,
+	2.2204460492503131e-16, -2.3969715101657130e-13,
+	2.5557334026871104e-13}, /* L563 */
+{6.9164005397024022e+00, 4.3308065467151380e-13,
+	2.2204460492503131e-16, -2.9487523534044158e-13,
+	-6.8389738316909643e-13}, /* L564 */
+{6.5474660821762898e+00, 4.1070619127836494e-13,
+	2.2204460492503131e-16, -2.0550228185811648e-13,
+	-4.0178971261184415e-13}, /* L565 */
+{5.9209457372623602e+00, 3.7206349112750559e-13,
+	2.2204460492503131e-16, -1.7541523789077473e-14,
+	6.8167693711984612e-14}, /* L566 */
+{6.5926029937818518e+00, 4.1500136660488351e-13,
+	2.2204460492503131e-16, 2.9487523534044158e-13,
+	-8.3488771451811772e-14}, /* L567 */
+{8.6569238693572377e+00, 5.4591053899599729e-13,
+	2.2204460492503131e-16, -3.1419311596891930e-14,
+	-1.0769163338864018e-13}, /* L568 */
+{8.2205753598151468e+00, 5.1930681976841697e-13,
+	2.2204460492503131e-16, 2.6956215037898801e-13,
+	-1.9251267247000214e-13}, /* L569 */
+{5.4280787393564784e+00, 3.4350300381902343e-13,
+	2.2204460492503131e-16, 1.1746159600534156e-13,
+	-1.1324274851176597e-13}, /* L570 */
+{6.3888016733530666e+00, 4.0500935938325711e-13,
+	2.2204460492503131e-16, -1.7097434579227411e-14,
+	1.2367884494324244e-13}, /* L571 */
+{6.7701155763631542e+00, 4.2993386628609187e-13,
+	2.2204460492503131e-16, 1.0325074129013956e-13,
+	3.6859404417555197e-14}, /* L572 */
+{4.7793487271334687e+00, 3.0404151418750303e-13,
+	2.2204460492503131e-16, -1.5620837956475953e-12,
+	-3.9357406222961799e-13}, /* L573 */
+{6.7238782041244392e+00, 4.2849057635407917e-13,
+	2.2204460492503131e-16, 1.8673951274195133e-13,
+	1.7585932710062480e-13}, /* L574 */
+{5.6508784806491095e+00, 3.6073921627632899e-13,
+	2.2204460492503131e-16, 4.2410519540680980e-14,
+	8.6597395920762210e-15}, /* L575 */
+{9.2014034059440135e+00, 5.8841820305133297e-13,
+	2.2204460492503131e-16, 2.5512925105886097e-13,
+	3.0087043967341742e-13}, /* L576 */
+{5.0520010381648124e+00, 3.2363001167823313e-13,
+	2.2204460492503131e-16, -2.8343993818680246e-13,
+	-4.0045744498229396e-13}, /* L577 */
+{7.3666854978796872e+00, 4.7272602499148775e-13,
+	2.2204460492503131e-16, -1.2102541191438831e-12,
+	-6.1606275636449936e-13}, /* L578 */
+{5.7046722127352201e+00, 3.6670666503368921e-13,
+	2.2204460492503131e-16, 3.6193270602780103e-14,
+	1.1945999744966684e-13}, /* L579 */
+{6.1241475931459428e+00, 3.9435121834685560e-13,
+	2.2204460492503131e-16, -4.4408920985006262e-14,
+	-1.2967404927621828e-13}, /* L580 */
+{7.0361556793020208e+00, 4.5385917246676399e-13,
+	2.2204460492503131e-16, -1.2023715356690445e-13,
+	-3.4749980670767400e-14}, /* L581 */
+{6.5438985868107347e+00, 4.2283320941804980e-13,
+	2.2204460492503131e-16, 9.7921670771938807e-14,
+	-1.3222756223285614e-13}, /* L582 */
+{7.4942228013883874e+00, 4.8507031724653871e-13,
+	2.2204460492503131e-16, 1.7608137170554983e-13,
+	2.2803980925800715e-13}, /* L583 */
+{7.4533508002780744e+00, 4.8325232704371501e-13,
+	2.2204460492503131e-16, 8.5087492607271997e-13,
+	1.3287149158713873e-12}, /* L584 */
+{7.5396486474910454e+00, 4.8968468169263701e-13,
+	2.2204460492503131e-16, -1.8807178037150152e-13,
+	4.2144066014770942e-13}, /* L585 */
+{7.5891757960216486e+00, 4.9374393462642274e-13,
+	2.2204460492503131e-16, 1.3322676295501878e-15,
+	1.3211653993039363e-13}, /* L586 */
+{8.6499284681761086e+00, 5.6371574075342323e-13,
+	2.2204460492503131e-16, -4.0301095793893182e-14,
+	1.3122836151069350e-13}, /* L587 */
+{7.0263716297740473e+00, 4.5868864262388342e-13,
+	2.2204460492503131e-16, 5.3734794391857577e-14,
+	-2.6645352591003757e-15}, /* L588 */
+{7.1697905987563058e+00, 4.6884718329920361e-13,
+	2.2204460492503131e-16, -1.7164047960704920e-13,
+	5.9952043329758453e-14}, /* L589 */
+{6.7330614702568390e+00, 4.4103609653234344e-13,
+	2.2204460492503131e-16, -9.8587804586713901e-14,
+	-7.9047879353311146e-14}, /* L590 */
+{5.0772076719376891e+00, 3.3313629632658603e-13,
+	2.2204460492503131e-16, -9.0705221111875289e-14,
+	9.5701224722688494e-14}, /* L591 */
+{5.2973056548945658e+00, 3.4816594052244909e-13,
+	2.2204460492503131e-16, 2.9976021664879227e-14,
+	4.4408920985006262e-15}, /* L592 */
+{7.9696584422515322e+00, 5.2469140143784898e-13,
+	2.2204460492503131e-16, 5.5511151231257827e-15,
+	-6.7057470687359455e-14}, /* L593 */
+{7.2693717383005367e+00, 4.7939430203314259e-13,
+	2.2204460492503131e-16, 1.6653345369377348e-14,
+	5.9507954119908391e-14}, /* L594 */
+{6.6260608741476643e+00, 4.3770542745846797e-13,
+	2.2204460492503131e-16, -4.3232084578903596e-13,
+	-3.9113157157544265e-13}, /* L595 */
+{7.4924614853196800e+00, 4.9577009164636365e-13,
+	2.2204460492503131e-16, 7.1653794009307603e-13,
+	-7.7438055967604669e-13}, /* L596 */
+{8.3073832908340481e+00, 5.5061510906284639e-13,
+	2.2204460492503131e-16, -1.7337242752546445e-12,
+	-9.2392760109305527e-13}, /* L597 */
+{6.8474188299759522e+00, 4.5460857300838597e-13,
+	2.2204460492503131e-16, 9.2592600253738055e-14,
+	7.1276318180935050e-14}, /* L598 */
+{6.6068551649127851e+00, 4.3937076199540570e-13,
+	2.2204460492503131e-16, 1.7452705947107461e-13,
+	-2.6623148130511254e-13}, /* L599 */
+{5.7943841415440849e+00, 3.8598291229874349e-13,
+	2.2204460492503131e-16, 2.1194379584699163e-11,
+	2.3312463071079037e-12}, /* L600 */
+{7.3793793629617079e+00, 4.9238391142125693e-13,
+	2.2204460492503131e-16, -7.4829031859735551e-14,
+	1.4033219031261979e-13}, /* L601 */
+{5.6079822696747463e+00, 3.7481129311345285e-13,
+	2.2204460492503131e-16, -7.5495165674510645e-15,
+	9.7277741417656216e-13}, /* L602 */
+{5.6011696992360323e+00, 3.7497782656714662e-13,
+	2.2204460492503131e-16, 1.9650947535865271e-12,
+	-4.3345327327415362e-12}, /* L603 */
+{8.2901620860081202e+00, 5.5591642400543151e-13,
+	2.2204460492503131e-16, 2.9327651418498135e-12,
+	-1.3200551762793111e-13}, /* L604 */
+{5.8450505440887328e+00, 3.9260261708307098e-13,
+	2.2204460492503131e-16, 2.3581137043038325e-13,
+	-3.1175062531474396e-13}, /* L605 */
+{7.0618923296561054e+00, 4.7511994338833574e-13,
+	2.2204460492503131e-16, 3.1068481121110381e-12,
+	-2.1924684290297591e-12}, /* L606 */
+{6.5856776060858495e+00, 4.4381165409390633e-13,
+	2.2204460492503131e-16, 1.5920598173124745e-13,
+	4.7739590058881731e-14}, /* L607 */
+{7.4070840546171866e+00, 4.9998893913993925e-13,
+	2.2204460492503131e-16, -3.1086244689504383e-14,
+	-4.9071857688431919e-14}, /* L608 */
+{6.1239833892743363e+00, 4.1405767703395213e-13,
+	2.2204460492503131e-16, -1.5232259897857148e-13,
+	3.8635761256955448e-14}, /* L609 */
+{6.5303381718135123e+00, 4.4225734185943111e-13,
+	2.2204460492503131e-16, 3.0864200084579352e-14,
+	2.2204460492503131e-14}, /* L610 */
+{5.9310650039648740e+00, 4.0233094633634892e-13,
+	2.2204460492503131e-16, 1.8696155734687636e-13,
+	-6.5281113847959205e-14}, /* L611 */
+{5.6560546752283836e+00, 3.8430369997399794e-13,
+	2.2204460492503131e-16, -1.9440005161186491e-13,
+	-1.7763568394002505e-15}, /* L612 */
+{1.0236557748975780e+01, 6.9666494795228573e-13,
+	2.2204460492503131e-16, 5.7331916991643084e-13,
+	7.2897243796887778e-13}, /* L613 */
+{8.6482221134177912e+00, 5.8952842607595812e-13,
+	2.2204460492503131e-16, -1.6320278461989801e-14,
+	3.8191672047105385e-14}, /* L614 */
+{7.8032643437780260e+00, 5.3279602951761262e-13,
+	2.2204460492503131e-16, 5.1603166184577276e-13,
+	-2.9565239145767919e-13}, /* L615 */
+{7.1018780877954510e+00, 4.8569481769789036e-13,
+	2.2204460492503131e-16, 5.5333515547317802e-13,
+	4.7761794519374234e-13}, /* L616 */
+{7.7779701319708030e+00, 5.3279602951761262e-13,
+	2.2204460492503131e-16, -4.3098857815948577e-13,
+	-1.9484414082171497e-13}, /* L617 */
+{6.7707428828944307e+00, 4.6455200797268503e-13,
+	2.2204460492503131e-16, -2.3869795029440866e-14,
+	1.3655743202889425e-13}, /* L618 */
+{6.0416088856672232e+00, 4.1519565563419292e-13,
+	2.2204460492503131e-16, 3.0397906414236786e-13,
+	6.6080474425689317e-13}, /* L619 */
+{6.4225907781135954e+00, 4.4209080840573733e-13,
+	2.2204460492503131e-16, 8.5642604119584576e-13,
+	1.2507772595427014e-12}, /* L620 */
+{6.5773050630469632e+00, 4.5347059440814519e-13,
+	2.2204460492503131e-16, -3.7014835641002719e-13,
+	-2.8765878568037806e-13}, /* L621 */
+{6.6953481831277335e+00, 4.6235237860514644e-13,
+	2.2204460492503131e-16, -3.0169977627281241e-11,
+	2.6100455130517730e-11}, /* L622 */
+{5.1911448273359717e+00, 3.5905479978115551e-13,
+	2.2204460492503131e-16, 8.7108098512089782e-13,
+	-5.3523852017178797e-13}, /* L623 */
+{6.1614680543235520e+00, 4.2685299739275706e-13,
+	2.2204460492503131e-16, -6.6613381477509392e-15,
+	1.7874590696465020e-13}, /* L624 */
+{5.7187090224479169e+00, 3.9681452568274267e-13,
+	2.2204460492503131e-16, -1.6653345369377348e-13,
+	-2.0539125955565396e-14}, /* L625 */
+{7.5676037924973532e+00, 5.2594734123445619e-13,
+	2.2204460492503131e-16, -1.3411494137471891e-13,
+	1.0147438445073931e-13}, /* L626 */
+{6.4609352333051344e+00, 4.4975134727565091e-13,
+	2.2204460492503131e-16, -3.9923619965520629e-13,
+	2.3669954885008337e-13}, /* L627 */
+{5.8503277014394026e+00, 4.0789593924728251e-13,
+	2.2204460492503131e-16, 6.8833827526759706e-15,
+	-1.2956302697375577e-13}, /* L628 */
+{7.2327220628888975e+00, 5.0508208726540715e-13,
+	2.2204460492503131e-16, -1.8729462425426391e-13,
+	6.3060667798708891e-14}, /* L629 */
+{6.8861219753515543e+00, 4.8164250365800854e-13,
+	2.2204460492503131e-16, 1.6937562463681388e-12,
+	1.2156942119645464e-12}, /* L630 */
+{6.1283773391454526e+00, 4.2932324362254803e-13,
+	2.2204460492503131e-16, -4.1833203567875898e-13,
+	-4.9182879990894435e-14}, /* L631 */
+{7.7291953431401188e+00, 5.4232660029462920e-13,
+	2.2204460492503131e-16, -1.3478107518949400e-13,
+	6.0174087934683484e-14}, /* L632 */
+{5.7866402512666113e+00, 4.0666775502629093e-13,
+	2.2204460492503131e-16, -1.7985612998927536e-14,
+	-3.2862601528904634e-14}, /* L633 */
+{1.0499030759977416e+01, 7.3900607855392764e-13,
+	2.2204460492503131e-16, 1.9984014443252818e-13,
+	7.6827433304060833e-14}, /* L634 */
+{8.4905645767254967e+00, 5.9857674372665315e-13,
+	2.2204460492503131e-16, 1.5987211554602254e-14,
+	-2.5368596112684827e-13}, /* L635 */
+{9.0853130761015439e+00, 6.4151461920403108e-13,
+	2.2204460492503131e-16, 7.9047879353311146e-14,
+	-6.8389738316909643e-14}, /* L636 */
+{7.2260710552487275e+00, 5.1103565823495956e-13,
+	2.2204460492503131e-16, -1.2645440250480533e-13,
+	4.6784798257704097e-13}, /* L637 */
+{6.0995394038308097e+00, 4.3204329003287967e-13,
+	2.2204460492503131e-16, 6.1994853695068741e-13,
+	2.3780977187470853e-13}, /* L638 */
+{6.5750299352832959e+00, 4.6645326490235561e-13,
+	2.2204460492503131e-16, 4.3098857815948577e-13,
+	-9.7699626167013776e-15}, /* L639 */
+{6.5437359100296488e+00, 4.6495966798953958e-13,
+	2.2204460492503131e-16, -8.9817042692175164e-14,
+	-6.1062266354383610e-14}, /* L640 */
+{6.0606569878389926e+00, 4.3130776727906550e-13,
+	2.2204460492503131e-16, -4.1078251911130792e-15,
+	2.7533531010703882e-14}, /* L641 */
+{8.4517267299685273e+00, 6.0240701316160994e-13,
+	2.2204460492503131e-16, 9.7055696812731185e-13,
+	1.7643664307342988e-12}, /* L642 */
+{6.2900565801635153e+00, 4.4902970230964456e-13,
+	2.2204460492503131e-16, 1.6253665080512292e-13,
+	-2.9753977059954195e-14}, /* L643 */
+{6.0773581907758221e+00, 4.3452047515657455e-13,
+	2.2204460492503131e-16, 1.7097434579227411e-13,
+	-7.5384143372048129e-14}, /* L644 */
+{7.7069889035575114e+00, 5.5189186554116532e-13,
+	2.2204460492503131e-16, -9.6811447747313650e-14,
+	-2.9976021664879227e-15}, /* L645 */
+{6.7335632551656612e+00, 4.8293313792413528e-13,
+	2.2204460492503131e-16, 2.2204460492503131e-16,
+	1.7230661342182430e-13}, /* L646 */
+{9.4259229084370713e+00, 6.7707645046155562e-13,
+	2.2204460492503131e-16, 3.7947422981687851e-13,
+	-2.3803181647963356e-13}, /* L647 */
+{6.6983130371100614e+00, 4.8189230383854920e-13,
+	2.2204460492503131e-16, -2.8532731732866523e-14,
+	3.1086244689504383e-15}, /* L648 */
+{7.7958520530350359e+00, 5.6171733930909795e-13,
+	2.2204460492503131e-16, 1.8496315590255108e-13,
+	1.0214051826551440e-13}, /* L649 */
+{7.0023187399134255e+00, 5.0531800965814000e-13,
+	2.2204460492503131e-16, -1.9417800700693988e-13,
+	-4.2144066014770942e-13}, /* L650 */
+{5.9005469437386679e+00, 4.2646441933413826e-13,
+	2.2204460492503131e-16, -6.4837024638109142e-14,
+	4.5563552930616424e-13}, /* L651 */
+{8.8922686306168384e+00, 6.4367955410205013e-13,
+	2.2204460492503131e-16, 4.5119463720766362e-13,
+	1.2922996006636822e-13}, /* L652 */
+{6.9984796479817293e+00, 5.0737192225369654e-13,
+	2.2204460492503131e-16, 1.5054624213917123e-13,
+	-3.9857006584043120e-14}, /* L653 */
+{5.8084954026368036e+00, 4.2174597147948134e-13,
+	2.2204460492503131e-16, -8.2156503822261584e-15,
+	8.9928064994637680e-14}, /* L654 */
+{5.8606962693522844e+00, 4.2618686357798197e-13,
+	2.2204460492503131e-16, -4.9649173661237000e-13,
+	-2.3547830352299570e-13}, /* L655 */
+{5.5228745671368511e+00, 4.0223380182169421e-13,
+	2.2204460492503131e-16, 1.0902390101819037e-13,
+	-9.7699626167013776e-14}, /* L656 */
+{7.4376068637415207e+00, 5.4251048098308274e-13,
+	2.2204460492503131e-16, 6.2172489379008766e-14,
+	6.0618177144533547e-14}, /* L657 */
+{6.6117125590043040e+00, 4.8300252686317435e-13,
+	2.2204460492503131e-16, 1.4432899320127035e-13,
+	8.2822637637036678e-14}, /* L658 */
+{6.9233796635805414e+00, 5.0653925498522767e-13,
+	2.2204460492503131e-16, -9.3036689463588118e-14,
+	-1.3877787807814457e-14}, /* L659 */
+{7.8170577875722520e+00, 5.7279181397973389e-13,
+	2.2204460492503131e-16, -2.1660451210436804e-13,
+	1.0902390101819037e-13}, /* L660 */
+{8.5446428304138173e+00, 6.2705396430828841e-13,
+	2.2204460492503131e-16, -8.9706020389712648e-14,
+	-9.5923269327613525e-14}, /* L661 */
+{6.1004627969488165e+00, 4.4836356849486947e-13,
+	2.2204460492503131e-16, -1.4943601911454607e-13,
+	-1.5543122344752192e-14}, /* L662 */
+{8.4215819142241255e+00, 6.1989302579945615e-13,
+	2.2204460492503131e-16, 8.4754425699884450e-13,
+	7.0743411129114975e-13}, /* L663 */
+{6.2628110856984094e+00, 4.6168624479037135e-13,
+	2.2204460492503131e-16, -9.2148511043887993e-15,
+	4.0190073491430667e-14}, /* L664 */
+{7.3422108319780888e+00, 5.4207333066713659e-13,
+	2.2204460492503131e-16, 9.4813046302988369e-14,
+	6.0174087934683484e-14}, /* L665 */
+{6.2239212309291796e+00, 4.6020132149493520e-13,
+	2.2204460492503131e-16, -1.4954704141700859e-13,
+	-5.6454840802189210e-13}, /* L666 */
+{7.1293215928052787e+00, 5.2793880378487756e-13,
+	2.2204460492503131e-16, 4.9604764740251994e-13,
+	1.8962609260597674e-13}, /* L667 */
+{7.9007422554708429e+00, 5.8594101792763809e-13,
+	2.2204460492503131e-16, 1.8096635301390052e-13,
+	-2.2015722578316854e-13}, /* L668 */
+{5.5744202297784016e+00, 4.1403339090528846e-13,
+	2.2204460492503131e-16, -2.1860291354869332e-13,
+	-8.6264329013374663e-14}, /* L669 */
+{5.5298594707635198e+00, 4.1133763062362050e-13,
+	2.2204460492503131e-16, -7.6938455606523348e-14,
+	-3.7359004778636518e-13}, /* L670 */
+{8.0108174076235912e+00, 5.9677263131163727e-13,
+	2.2204460492503131e-16, 2.3581137043038325e-13,
+	-2.5732749264761878e-12}, /* L671 */
+{7.0269828127116059e+00, 5.2426119001580673e-13,
+	2.2204460492503131e-16, 7.7049477908985864e-14,
+	-1.0302869668521453e-13}, /* L672 */
+{8.6129407803702200e+00, 6.4354077622397199e-13,
+	2.2204460492503131e-16, 3.6415315207705135e-13,
+	-1.3722356584366935e-13}, /* L673 */
+{8.5460075483744991e+00, 6.3948846218409017e-13,
+	2.2204460492503131e-16, 1.4144241333724494e-13,
+	-7.3496764230185363e-14}, /* L674 */
+{6.7000105706516360e+00, 5.0209836288672705e-13,
+	2.2204460492503131e-16, 6.9277916736609768e-14,
+	1.0724754417879012e-13}, /* L675 */
+{7.0488276890308095e+00, 5.2902127123388709e-13,
+	2.2204460492503131e-16, 2.5091040356528538e-14,
+	-2.6700863742235015e-13}, /* L676 */
+{6.9328026661452666e+00, 5.2108317660781722e-13,
+	2.2204460492503131e-16, 8.8151708155237429e-14,
+	-8.7485574340462335e-14}, /* L677 */
+{7.0951439374143641e+00, 5.3407278599593155e-13,
+	2.2204460492503131e-16, 4.4408920985006262e-13,
+	-5.5511151231257827e-14}, /* L678 */
+{8.4204845663392245e+00, 6.3477001432943325e-13,
+	2.2204460492503131e-16, -4.1189274213593308e-13,
+	-5.7376325912628090e-13}, /* L679 */
+{9.6331034335098256e+00, 7.2725159228070879e-13,
+	2.2204460492503131e-16, -5.6732396558345499e-14,
+	1.8207657603852567e-14}, /* L680 */
+{8.9434796021111094e+00, 6.7618133314795159e-13,
+	2.2204460492503131e-16, -3.4439118223872356e-13,
+	6.1062266354383610e-14}, /* L681 */
+{8.1081506221971527e+00, 6.1392557704209594e-13,
+	2.2204460492503131e-16, 3.0087043967341742e-13,
+	3.1175062531474396e-13}, /* L682 */
+{6.9915922898306571e+00, 5.3015924983412788e-13,
+	2.2204460492503131e-16, -3.4094949086238557e-13,
+	1.7763568394002505e-14}, /* L683 */
+{7.8587477789173938e+00, 5.9678650909944508e-13,
+	2.2204460492503131e-16, 2.9198865547641617e-13,
+	-1.3200551762793111e-13}, /* L684 */
+{5.4576728441824622e+00, 4.1505687775611477e-13,
+	2.2204460492503131e-16, 3.1130653610489389e-13,
+	-1.6409096303959814e-13}, /* L685 */
+{6.9690343187097543e+00, 5.3076987249767171e-13,
+	2.2204460492503131e-16, -1.2079226507921703e-13,
+	1.4233059175694507e-13}, /* L686 */
+{6.4126738727756809e+00, 4.8910875349861271e-13,
+	2.2204460492503131e-16, -1.3078427230084344e-13,
+	1.7985612998927536e-14}, /* L687 */
+{7.7438348919166877e+00, 5.9149907194466778e-13,
+	2.2204460492503131e-16, -1.6853185513809876e-13,
+	-5.0837112297585918e-13}, /* L688 */
+{8.7460225069273996e+00, 6.6902039463911933e-13,
+	2.2204460492503131e-16, -4.1144865292608301e-13,
+	-2.3758772726978350e-14}, /* L689 */
+{8.7283652200259443e+00, 6.6863875547440443e-13,
+	2.2204460492503131e-16, 4.5428105721612155e-12,
+	1.1601830607332886e-12}, /* L690 */
+{9.2050615561653295e+00, 7.0617817149454254e-13,
+	2.2204460492503131e-16, 9.2770235937678081e-13,
+	3.4305891460917337e-13}, /* L691 */
+{8.2188081258286392e+00, 6.3142893691470192e-13,
+	2.2204460492503131e-16, -4.8516746176119341e-14,
+	1.6475709685437323e-13}, /* L692 */
+{7.9924368521490514e+00, 6.1492477776425858e-13,
+	2.2204460492503131e-16, -1.3322676295501878e-14,
+	7.3274719625260332e-14}, /* L693 */
+{7.7374041381322156e+00, 5.9616200864809343e-13,
+	2.2204460492503131e-16, 4.5901060730102472e-12,
+	2.7537971902802383e-12}, /* L694 */
+{7.7777101126509907e+00, 6.0013105596112837e-13,
+	2.2204460492503131e-16, 6.8767214145282196e-13,
+	-9.3591800975900696e-13}, /* L695 */
+{6.9978558681507224e+00, 5.4073412414368249e-13,
+	2.2204460492503131e-16, -8.3877349510430577e-13,
+	9.5479180117763462e-14}, /* L696 */
+{6.1832952647551380e+00, 4.7847836803782684e-13,
+	2.2204460492503131e-16, 2.5979218776228663e-14,
+	3.1086244689504383e-15}, /* L697 */
+{6.2944225382050609e+00, 4.8777648586906253e-13,
+	2.2204460492503131e-16, 7.2386541205560206e-14,
+	3.1974423109204508e-14}, /* L698 */
+{6.2618124544072487e+00, 4.8594461787843102e-13,
+	2.2204460492503131e-16, 3.0953017926549364e-13,
+	-4.4653170050423796e-13}, /* L699 */
+{8.5525134933600828e+00, 6.6466276926746559e-13,
+	2.2204460492503131e-16, -1.0214051826551440e-13,
+	2.6534330288541241e-13}, /* L700 */
+{1.0350943577539496e+01, 8.0557782666801359e-13,
+	2.2204460492503131e-16, -3.3240077357277187e-13,
+	-9.1260332624187868e-14}, /* L701 */
+{5.5078434475941354e+00, 4.2926773247131678e-13,
+	2.2204460492503131e-16, 8.0824236192711396e-14,
+	5.2868820432649954e-13}, /* L702 */
+{7.8349163441299137e+00, 6.1150390306963232e-13,
+	2.2204460492503131e-16, 7.9714013168086240e-14,
+	-3.5804692544161298e-13}, /* L703 */
+{7.4936197772816788e+00, 5.8569815664100133e-13,
+	2.2204460492503131e-16, 1.5076828674409626e-13,
+	-1.4310774787418268e-13}, /* L704 */
+{6.7546205858901578e+00, 5.2868820432649954e-13,
+	2.2204460492503131e-16, -1.2312373343092986e-13,
+	1.5387691121304670e-13}, /* L705 */
+{7.5389637356321009e+00, 5.9091620485673957e-13,
+	2.2204460492503131e-16, 3.1752378504279477e-14,
+	-7.2608585810485238e-14}, /* L706 */
+{8.6004378971111883e+00, 6.7507111012332643e-13,
+	2.2204460492503131e-16, 1.8163248682867561e-13,
+	7.9958262233503774e-13}, /* L707 */
+{8.1666795512948696e+00, 6.4193095283826551e-13,
+	2.2204460492503131e-16, 9.1038288019262836e-15,
+	-6.5170091545496689e-14}, /* L708 */
+{7.0249581919299278e+00, 5.5296739409627094e-13,
+	2.2204460492503131e-16, -2.2204460492503131e-16,
+	4.1966430330830917e-14}, /* L709 */
+{6.2838127309141720e+00, 4.9532600243651359e-13,
+	2.2204460492503131e-16, -3.6026737149086330e-13,
+	-3.6848302187308946e-13}, /* L710 */
+{7.7493089912493005e+00, 6.1170513099284562e-13,
+	2.2204460492503131e-16, -6.9610983643997315e-14,
+	-1.1876055694415300e-12}, /* L711 */
+{7.7356161371159704e+00, 6.1148308638792059e-13,
+	2.2204460492503131e-16, 1.1723955140041653e-13,
+	-4.7262194158292914e-13}, /* L712 */
+{8.2843749216477036e+00, 6.5578098507046434e-13,
+	2.2204460492503131e-16, 1.2012613126444194e-13,
+	-7.7826634026223473e-14}, /* L713 */
+{5.5336221757895148e+00, 4.3864911702939935e-13,
+	2.2204460492503131e-16, -4.8250292650209303e-13,
+	1.2008172234345693e-12}, /* L714 */
+{7.6115504703326300e+00, 6.0421112557662582e-13,
+	2.2204460492503131e-16, -9.9920072216264089e-14,
+	1.3744561044859438e-13}, /* L715 */
+{8.4057395187759969e+00, 6.6818772737065046e-13,
+	2.2204460492503131e-16, 8.0824236192711396e-14,
+	8.3044682241961709e-14}, /* L716 */
+{7.3961065084995274e+00, 5.8875126995872051e-13,
+	2.2204460492503131e-16, 7.5051076464660582e-14,
+	1.9095836023552692e-14}, /* L717 */
+{6.5821830867037550e+00, 5.2469140143784898e-13,
+	2.2204460492503131e-16, -3.1108449149996886e-13,
+	2.2959412149248237e-13}, /* L718 */
+{8.7976494851194857e+00, 7.0227157422664277e-13,
+	2.2204460492503131e-16, -8.1379347705023974e-14,
+	9.6811447747313650e-14}, /* L719 */
+{8.4708466978478913e+00, 6.7712502271888297e-13,
+	2.2204460492503131e-16, 3.1086244689504383e-14,
+	3.3661962106634746e-13}, /* L720 */
+{1.1503225499560960e+01, 9.2079815994239311e-13,
+	2.2204460492503131e-16, 1.2334577803585489e-12,
+	1.3737899706711687e-12}, /* L721 */
+{5.4653825839906460e+00, 4.3809400551708677e-13,
+	2.2204460492503131e-16, 8.4376949871511897e-14,
+	7.1498362785860081e-14}, /* L722 */
+{6.5083090233911456e+00, 5.2241544423736741e-13,
+	2.2204460492503131e-16, 5.9952043329758453e-15,
+	-1.5420997812043424e-13}, /* L723 */
+{5.8280478689837913e+00, 4.6845860524058480e-13,
+	2.2204460492503131e-16, -1.8507417820501360e-13,
+	3.1086244689504383e-13}, /* L724 */
+{7.3427702054282129e+00, 5.9102722715920208e-13,
+	2.2204460492503131e-16, 1.8651746813702630e-14,
+	6.5503158452884236e-14}, /* L725 */
+{7.6088274314888045e+00, 6.1328719880293647e-13,
+	2.2204460492503131e-16, -3.3750779948604759e-13,
+	-8.3377749149349256e-14}, /* L726 */
+{7.1224321449377488e+00, 5.7487348215090606e-13,
+	2.2204460492503131e-16, -2.1094237467877974e-15,
+	4.9116266609416925e-13}, /* L727 */
+{8.0061939501100916e+00, 6.4709348990277249e-13,
+	2.2204460492503131e-16, -1.9073631563060189e-13,
+	2.3137047833188262e-13}, /* L728 */
+{8.7458985721268974e+00, 7.0785044492538418e-13,
+	2.2204460492503131e-16, 1.9340085088970227e-13,
+	-9.1482377229112899e-14}, /* L729 */
+{7.2287785281826453e+00, 5.8586469009469511e-13,
+	2.2204460492503131e-16, 9.1926466438962962e-14,
+	-1.0791367799356522e-13}, /* L730 */
+{8.8379072404787671e+00, 7.1725958505908238e-13,
+	2.2204460492503131e-16, 5.3557158707917552e-13,
+	-2.9864999362416711e-13}, /* L731 */
+{6.0538005347254558e+00, 4.9198145557483031e-13,
+	2.2204460492503131e-16, 3.4749980670767400e-13,
+	2.0650148258027912e-14}, /* L732 */
+{6.8258549028931919e+00, 5.5548274313643731e-13,
+	2.2204460492503131e-16, -5.9396931817445875e-14,
+	-3.7159164634203989e-13}, /* L733 */
+{6.4216722568547180e+00, 5.2330362265706754e-13,
+	2.2204460492503131e-16, 1.1635137298071641e-13,
+	-4.7462034302725442e-13}, /* L734 */
+{1.0262601225346939e+01, 8.3744122747475558e-13,
+	2.2204460492503131e-16, -6.0595972684041044e-13,
+	-7.5539574595495651e-13}, /* L735 */
+{1.0395226998437057e+01, 8.4941775835289945e-13,
+	2.2204460492503131e-16, -3.6270986214503864e-13,
+	2.5268676040468563e-13}, /* L736 */
+{7.5413958872491786e+00, 6.1706195708666201e-13,
+	2.2204460492503131e-16, 2.7533531010703882e-13,
+	1.5099033134902129e-14}, /* L737 */
+{7.2007227427401128e+00, 5.8998639307361600e-13,
+	2.2204460492503131e-16, -1.5365486660812167e-13,
+	-1.1457501614131615e-13}, /* L738 */
+{9.0822200124200876e+00, 7.4515393855278944e-13,
+	2.2204460492503131e-16, 2.4047430713380891e-13,
+	4.6074255521943996e-13}, /* L739 */
+{8.6040676287455984e+00, 7.0687899977883717e-13,
+	2.2204460492503131e-16, 2.1938006966593093e-13,
+	4.1722181265413383e-13}, /* L740 */
+{6.9959624545842134e+00, 5.7553961596568115e-13,
+	2.2204460492503131e-16, -4.9960036108132044e-15,
+	5.4400928206632670e-14}, /* L741 */
+{8.6270351742669185e+00, 7.1068151363817833e-13,
+	2.2204460492503131e-16, 2.9776181520446698e-13,
+	1.1879386363489175e-13}, /* L742 */
+{7.6675760271790914e+00, 6.3249405712895168e-13,
+	2.2204460492503131e-16, -8.4354745411019394e-13,
+	1.2543299732215019e-12}, /* L743 */
+{9.0858835804938423e+00, 7.5049818790140499e-13,
+	2.2204460492503131e-16, -7.2164496600635175e-14,
+	1.6076029396572267e-13}, /* L744 */
+{9.7399482526783014e+00, 8.0560558224362921e-13,
+	2.2204460492503131e-16, 1.7030821197749901e-13,
+	-2.4980018054066022e-14}, /* L745 */
+{8.5598325397587587e+00, 7.0894679016220152e-13,
+	2.2204460492503131e-16, -4.9071857688431919e-14,
+	9.1926466438962962e-14}, /* L746 */
+{1.1687434771339559e+01, 9.6928021164899292e-13,
+	2.2204460492503131e-16, 1.5543122344752192e-15,
+	-4.3176573427672338e-13}, /* L747 */
+{6.8028182194832372e+00, 5.6493698608051091e-13,
+	2.2204460492503131e-16, 2.6201263381153694e-14,
+	-1.7363888105137448e-13}, /* L748 */
+{7.7927359261637479e+00, 6.4800942389808824e-13,
+	2.2204460492503131e-16, -5.9507954119908391e-14,
+	-4.6740389336719090e-14}, /* L749 */
+{7.2618447903933889e+00, 6.0466909257428370e-13,
+	2.2204460492503131e-16, -1.0158540675320182e-13,
+	-2.3170354523927017e-13}, /* L750 */
+{7.0465324222738541e+00, 5.8752308573772893e-13,
+	2.2204460492503131e-16, -1.5143442055887135e-13,
+	1.0103029524088925e-12}, /* L751 */
+{7.4288681035552342e+00, 6.2022609270684370e-13,
+	2.2204460492503131e-16, -2.6978419498391304e-14,
+	-4.0523140398818214e-14}, /* L752 */
+{6.0969551703366998e+00, 5.0970339060540937e-13,
+	2.2204460492503131e-16, -1.4999113062685865e-13,
+	1.7874590696465020e-13}, /* L753 */
+{9.0424960303177233e+00, 7.5695352763638368e-13,
+	2.2204460492503131e-16, -5.3479443096193791e-13,
+	-3.5726976932437537e-13}, /* L754 */
+{7.9940523473722598e+00, 6.7007510651251323e-13,
+	2.2204460492503131e-16, 8.1934459217336553e-14,
+	4.0412118096355698e-14}, /* L755 */
+{6.6620475477928052e+00, 5.5916382635246009e-13,
+	2.2204460492503131e-16, -7.5717210279435676e-14,
+	4.7406523151494184e-13}, /* L756 */
+{7.7549659999264753e+00, 6.5175642660619815e-13,
+	2.2204460492503131e-16, -7.7715611723760958e-15,
+	-4.7184478546569153e-14}, /* L757 */
+{9.0560828894288310e+00, 7.6211259525393871e-13,
+	2.2204460492503131e-16, -1.3322676295501878e-15,
+	1.0680345496894006e-13}, /* L758 */
+{6.3583763030377494e+00, 5.3579363168410055e-13,
+	2.2204460492503131e-16, 1.7319479184152442e-13,
+	-1.2244649738590851e-12}, /* L759 */
+{8.3960658781100452e+00, 7.0843331201331239e-13,
+	2.2204460492503131e-16, -1.8562928971732617e-13,
+	1.8718360195180139e-13}, /* L760 */
+{8.7283317733465964e+00, 7.3743788853164460e-13,
+	2.2204460492503131e-16, 3.0087043967341742e-13,
+	-6.1606275636449936e-13}, /* L761 */
+{6.8687772411105019e+00, 5.8109073108880693e-13,
+	2.2204460492503131e-16, -6.5214500466481695e-13,
+	2.3758772726978350e-13}, /* L762 */
+{8.3381520804556502e+00, 7.0632388826652459e-13,
+	2.2204460492503131e-16, -4.9182879990894435e-14,
+	-7.6161299489285739e-14}, /* L763 */
+{7.9737118602828865e+00, 6.7633745826078950e-13,
+	2.2204460492503131e-16, -1.6209256159527285e-13,
+	1.8229862064345070e-13}, /* L764 */
+{7.5882472660224449e+00, 6.4448446579490337e-13,
+	2.2204460492503131e-16, 3.7614356074300304e-13,
+	-1.7479351299698465e-12}, /* L765 */
+{7.5969033042218879e+00, 6.4606306415804227e-13,
+	2.2204460492503131e-16, 6.1373128801278654e-13,
+	-2.4225066397320916e-13}, /* L766 */
+{9.1678762634182505e+00, 7.8068107534079445e-13,
+	2.2204460492503131e-16, -8.4598994476436928e-13,
+	-5.0270898555027088e-13}, /* L767 */
+{7.6718871039843828e+00, 6.5414340610914223e-13,
+	2.2204460492503131e-16, 2.6867397195928788e-13,
+	-6.4526162191214098e-13}, /* L768 */
+{9.2566791036726297e+00, 7.9029838229160987e-13,
+	2.2204460492503131e-16, -3.4727776210274897e-13,
+	5.2402526762307389e-13}, /* L769 */
+{8.4545587933612047e+00, 7.2275518903097691e-13,
+	2.2204460492503131e-16, -1.2689849171465539e-13,
+	-1.9506618542664000e-13}, /* L770 */
+{7.7814649357450358e+00, 6.6607830362386267e-13,
+	2.2204460492503131e-16, -9.6611607602881122e-13,
+	4.4453329905991268e-13}, /* L771 */
+{6.6179670474313426e+00, 5.6721988217489638e-13,
+	2.2204460492503131e-16, 6.1062266354383610e-14,
+	-8.8817841970012523e-15}, /* L772 */
+{6.3903318802437727e+00, 5.4841894914225975e-13,
+	2.2204460492503131e-16, -1.2414513861358500e-12,
+	1.2274625760255731e-12}, /* L773 */
+{7.0969104216449486e+00, 6.0984550742659849e-13,
+	2.2204460492503131e-16, -1.0824674490095276e-13,
+	5.5289106626332796e-14}, /* L774 */
+{7.4942053720480040e+00, 6.4481753270229092e-13,
+	2.2204460492503131e-16, 7.9047879353311146e-14,
+	2.6867397195928788e-14}, /* L775 */
+{7.1404751830966342e+00, 6.1517457794479924e-13,
+	2.2204460492503131e-16, -7.1465056095121327e-13,
+	-6.4170890823334048e-13}, /* L776 */
+{6.7709244534465682e+00, 5.8408833325529486e-13,
+	2.2204460492503131e-16, 2.9976021664879227e-14,
+	-1.2334577803585489e-13}, /* L777 */
+{6.9003964909081583e+00, 5.9602323077001529e-13,
+	2.2204460492503131e-16, -5.9752203185325925e-13,
+	1.5232259897857148e-13}, /* L778 */
+{9.0038652966024024e+00, 7.7871042947208480e-13,
+	2.2204460492503131e-16, 1.2856382625159313e-13,
+	-9.4924068605450884e-14}, /* L779 */
+{9.8480924604817446e+00, 8.5281781636581400e-13,
+	2.2204460492503131e-16, 2.6756374893466273e-13,
+	-7.6050277186823223e-14}, /* L780 */
+{9.6677489276500168e+00, 8.3827389474322445e-13,
+	2.2204460492503131e-16, -1.2589929099249275e-13,
+	-2.5879298704012399e-13}, /* L781 */
+{7.6934264602151936e+00, 6.6793792719010980e-13,
+	2.2204460492503131e-16, -3.9168668308775523e-13,
+	6.2416738444426301e-13}, /* L782 */
+{8.2496937307983238e+00, 7.1714856275661987e-13,
+	2.2204460492503131e-16, -1.3544720900426910e-14,
+	-7.9714013168086240e-14}, /* L783 */
+{7.9387880352840954e+00, 6.9100281052669743e-13,
+	2.2204460492503131e-16, 3.8635761256955448e-14,
+	-1.0214051826551440e-14}, /* L784 */
+{9.0694410605034239e+00, 7.9042328238188020e-13,
+	2.2204460492503131e-16, -4.3753889400477419e-13,
+	8.7929663550312398e-14}, /* L785 */
+{8.0280024877199399e+00, 7.0055072853847378e-13,
+	2.2204460492503131e-16, 1.0369483049998962e-13,
+	8.7929663550312398e-14}, /* L786 */
+{7.5162126207708928e+00, 6.5672467464139572e-13,
+	2.2204460492503131e-16, -3.2085445411667024e-14,
+	-3.3195668436292181e-14}, /* L787 */
+{7.6900105462848316e+00, 6.7276392790027728e-13,
+	2.2204460492503131e-16, 3.2462921240039577e-13,
+	-3.3506530883187224e-13}, /* L788 */
+{8.9271370248006132e+00, 7.8198558739472901e-13,
+	2.2204460492503131e-16, -7.0077277314339881e-13,
+	1.9717560917342780e-13}, /* L789 */
+{8.6107730789452379e+00, 7.5522921250126274e-13,
+	2.2204460492503131e-16, -6.2283511681471282e-14,
+	1.7541523789077473e-14}, /* L790 */
+{9.3672714159779389e+00, 8.2261975009600974e-13,
+	2.2204460492503131e-16, -1.9950707752514063e-13,
+	-1.0680345496894006e-13}, /* L791 */
+{1.1636381995105930e+01, 1.0231815394945443e-12,
+	2.2204460492503131e-16, 7.9758422089071246e-13,
+	-8.6264329013374663e-13}, /* L792 */
+{8.6513377350153711e+00, 7.6166850604408864e-13,
+	2.2204460492503131e-16, -3.4383607072641098e-13,
+	-1.8651746813702630e-13}, /* L793 */
+{8.4949756191999839e+00, 7.4884543010966809e-13,
+	2.2204460492503131e-16, -2.1405099914773018e-13,
+	4.6473935810809053e-13}, /* L794 */
+{9.3371216494801264e+00, 8.2411855117925370e-13,
+	2.2204460492503131e-16, -7.5495165674510645e-14,
+	2.6512125828048738e-13}, /* L795 */
+{7.7054141669061869e+00, 6.8095529215383976e-13,
+	2.2204460492503131e-16, -2.8965718712470334e-13,
+	4.5186077102243871e-13}, /* L796 */
+{9.8544697507287324e+00, 8.7196916354059795e-13,
+	2.2204460492503131e-16, -3.0864200084579352e-14,
+	-1.2934098236883074e-13}, /* L797 */
+{1.0341181728889325e+01, 9.1618379549629481e-13,
+	2.2204460492503131e-16, -1.5987211554602254e-14,
+	-1.4721557306529576e-13}, /* L798 */
+{1.1460124463608130e+01, 1.0165895902858324e-12,
+	2.2204460492503131e-16, -4.7056802898737260e-12,
+	-4.7528647684202951e-13}, /* L799 */
+{8.3106381117514339e+00, 7.3813177792203533e-13,
+	2.2204460492503131e-16, -1.1424194923392861e-13,
+	-1.5698553568199713e-13}, /* L800 */
+{1.1316341199668525e+01, 1.0063477828836653e-12,
+	2.2204460492503131e-16, -7.4940054162198066e-13,
+	4.8161474808239291e-13}, /* L801 */
+{1.0457934205284054e+01, 9.3117180632873442e-13,
+	2.2204460492503131e-16, -8.7263529735537304e-14,
+	1.2745360322696797e-13}, /* L802 */
+{7.4234239162229985e+00, 6.6180394497905581e-13,
+	2.2204460492503131e-16, -1.6986412276764895e-14,
+	-7.0166095156309893e-14}, /* L803 */
+{9.3289948179225330e+00, 8.3272277962009866e-13,
+	2.2204460492503131e-16, 6.1062266354383610e-14,
+	2.3758772726978350e-14}, /* L804 */
+{9.4795180614745913e+00, 8.4721119009145696e-13,
+	2.2204460492503131e-16, -7.8825834748386114e-14,
+	-5.5622173533720343e-14}, /* L805 */
+{1.1582369390209212e+01, 1.0364348268510071e-12,
+	2.2204460492503131e-16, -7.2608585810485238e-14,
+	1.5765166949677223e-14}, /* L806 */
+{8.1790711445648014e+00, 7.3280270740383457e-13,
+	2.2204460492503131e-16, 6.7412742055239505e-13,
+	-8.4598994476436928e-14}, /* L807 */
+{8.6791597327766912e+00, 7.7857165159400665e-13,
+	2.2204460492503131e-16, -1.0658141036401503e-14,
+	5.1070259132757201e-14}, /* L808 */
+{1.1482249265191783e+01, 1.0313000453621157e-12,
+	2.2204460492503131e-16, 1.3211653993039363e-13,
+	3.1086244689504383e-15}, /* L809 */
+{6.6429117151353250e+00, 5.9738325397518111e-13,
+	2.2204460492503131e-16, 1.9984014443252818e-14,
+	-3.8669067947694202e-13}, /* L810 */
+{9.4815192747112285e+00, 8.5370599478551412e-13,
+	2.2204460492503131e-16, 1.8118839761882555e-13,
+	2.8244073746463982e-13}, /* L811 */
+{8.2974268840057537e+00, 7.4801276284119922e-13,
+	2.2204460492503131e-16, -9.5257135512838431e-14,
+	2.9420910152566648e-13}, /* L812 */
+{9.2247993018775283e+00, 8.3263951289325178e-13,
+	2.2204460492503131e-16, 3.3972824553529790e-14,
+	-3.4305891460917337e-14}, /* L813 */
+{9.1501987115111945e+00, 8.2692186431643222e-13,
+	2.2204460492503131e-16, 4.8316906031686813e-13,
+	-4.2266190547479709e-13}, /* L814 */
+{1.0571182322398188e+01, 9.5651264686580362e-13,
+	2.2204460492503131e-16, 1.4321877017664519e-13,
+	-3.4916514124461173e-13}, /* L815 */
+{8.0995838572011785e+00, 7.3377415255038159e-13,
+	2.2204460492503131e-16, 2.5845992013273644e-13,
+	-8.0380146982861334e-14}, /* L816 */
+{1.2937596911125187e+01, 1.1735057370287905e-12,
+	2.2204460492503131e-16, -8.3488771451811772e-14,
+	1.4876988529977098e-14}, /* L817 */
+{9.3747091670684828e+00, 8.5137452643380129e-13,
+	2.2204460492503131e-16, -1.6731060981101109e-13,
+	1.6497914145929826e-13}, /* L818 */
+{1.0133105120159168e+01, 9.2137408813641741e-13,
+	2.2204460492503131e-16, -2.7977620220553945e-14,
+	8.5487172896137054e-14}, /* L819 */
+{9.6176981007353373e+00, 8.7557738837062971e-13,
+	2.2204460492503131e-16, 2.6600943670018751e-13,
+	-1.1779466291272911e-13}, /* L820 */
+{7.5706574984819293e+00, 6.9005912095576605e-13,
+	2.2204460492503131e-16, -1.0769163338864018e-14,
+	5.0182080713057076e-14}, /* L821 */
+{7.8771413815912839e+00, 7.1886940844478886e-13,
+	2.2204460492503131e-16, 2.4336088699783431e-13,
+	2.2515322939398175e-13}, /* L822 */
+{8.9735864541618575e+00, 8.1992745926129373e-13,
+	2.2204460492503131e-16, 4.9849013805669529e-13,
+	2.6934010577406298e-13}, /* L823 */
+{9.6201608088612041e+00, 8.8007379162036159e-13,
+	2.2204460492503131e-16, 2.1249668691325496e-13,
+	1.4144241333724494e-13}, /* L824 */
+{7.5872846977823265e+00, 6.9494410226411674e-13,
+	2.2204460492503131e-16, 3.1308289294429414e-14,
+	-1.7885692926711272e-13}, /* L825 */
+{8.7701409553574123e+00, 8.0425943682627121e-13,
+	2.2204460492503131e-16, -8.9817042692175164e-14,
+	-1.1102230246251565e-14}, /* L826 */
+{9.0553961262370191e+00, 8.3142390541746103e-13,
+	2.2204460492503131e-16, 7.7715611723760958e-14,
+	-3.0953017926549364e-13}, /* L827 */
+{9.3656548728269193e+00, 8.6095020002119327e-13,
+	2.2204460492503131e-16, -6.0862426209951082e-13,
+	-5.3068660577082483e-13}, /* L828 */
+{8.7724052757155917e+00, 8.0738887797693337e-13,
+	2.2204460492503131e-16, 1.8489654252107357e-12,
+	-2.0968782266095332e-12}, /* L829 */
+{8.3819409350819853e+00, 7.7238215823172141e-13,
+	2.2204460492503131e-16, -7.1831429693247628e-14,
+	1.1857181902996672e-13}, /* L830 */
+{9.6928552443259086e+00, 8.9425689075994796e-13,
+	2.2204460492503131e-16, 1.6131540547803525e-12,
+	9.0438767585965252e-13}, /* L831 */
+{6.9979076752612190e+00, 6.4639960051238177e-13,
+	2.2204460492503131e-16, 2.6134649999676185e-13,
+	2.1516122217235534e-13}, /* L832 */
+{7.5765425658090262e+00, 7.0068950641655192e-13,
+	2.2204460492503131e-16, 1.6231460620019789e-13,
+	2.3558932582545822e-13}, /* L833 */
+{9.3100416668638211e+00, 8.6203960636410670e-13,
+	2.2204460492503131e-16, -2.0347057372305244e-12,
+	4.3063330679160572e-12}, /* L834 */
+{1.2552115611940454e+01, 1.1636247521096266e-12,
+	2.2204460492503131e-16, 2.5579538487363607e-13,
+	-1.7341683644644945e-13}, /* L835 */
+{7.3474996304779925e+00, 6.8195449287600240e-13,
+	2.2204460492503131e-16, 2.3536728122053319e-14,
+	6.7945649107059580e-14}, /* L836 */
+{1.3074692073667933e+01, 1.2149725669985401e-12,
+	2.2204460492503131e-16, 9.6811447747313650e-14,
+	1.8385293287792592e-13}, /* L837 */
+{6.9516816121039309e+00, 6.4676042299538494e-13,
+	2.2204460492503131e-16, -3.5749181392930041e-14,
+	-5.8730798002670781e-14}, /* L838 */
+{9.6113083700242505e+00, 8.9526996926991842e-13,
+	2.2204460492503131e-16, -8.0491169285323849e-14,
+	-1.2811973704174306e-13}, /* L839 */
+{1.1201208148413031e+01, 1.0446088438698098e-12,
+	2.2204460492503131e-16, -4.7672976677404222e-13,
+	2.1938006966593093e-13}, /* L840 */
+{9.3466259234016533e+00, 8.7269080850660430e-13,
+	2.2204460492503131e-16, -6.1417537722263660e-13,
+	4.3010039973978564e-13}, /* L841 */
+{8.6829115613024843e+00, 8.1168405330345195e-13,
+	2.2204460492503131e-16, 1.5476508963274682e-13,
+	-5.0293103015519591e-14}, /* L842 */
+{7.8339388127985128e+00, 7.3319128546245338e-13,
+	2.2204460492503131e-16, 3.7014835641002719e-13,
+	-5.4756199574512721e-13}, /* L843 */
+{8.0438515534001027e+00, 7.5373041141801878e-13,
+	2.2204460492503131e-16, 2.3092638912203256e-13,
+	-3.2196467714129540e-14}, /* L844 */
+{7.7745684790091882e+00, 7.2936101602749659e-13,
+	2.2204460492503131e-16, 3.8857805861880479e-14,
+	-1.1968204205459188e-13}, /* L845 */
+{9.1867757233528238e+00, 8.6286533473867166e-13,
+	2.2204460492503131e-16, 1.3256062914024369e-13,
+	3.9968028886505635e-15}, /* L846 */
+{7.3208498028103328e+00, 6.8842154199444394e-13,
+	2.2204460492503131e-16, 2.1316282072803006e-14,
+	4.7961634663806763e-14}, /* L847 */
+{9.3156102161628223e+00, 8.7703455609045022e-13,
+	2.2204460492503131e-16, -5.5067062021407764e-13,
+	-4.8749893011290624e-13}, /* L848 */
+{8.6384117443105168e+00, 8.1423756626008981e-13,
+	2.2204460492503131e-16, -1.1979306435705439e-13,
+	-1.9528823003156504e-13}, /* L849 */
+{8.6311900880780392e+00, 8.1451512201624610e-13,
+	2.2204460492503131e-16, -7.6494366396673286e-14,
+	-7.2386541205560206e-14}, /* L850 */
+{9.4524238437647128e+00, 8.9306340100847592e-13,
+	2.2204460492503131e-16, 3.5345060211966484e-12,
+	-2.3018253969553371e-12}, /* L851 */
+{1.0380884922594200e+01, 9.8193675412971970e-13,
+	2.2204460492503131e-16, -3.0919711235810610e-13,
+	-1.5487611193520934e-13}, /* L852 */
+{7.7922162797596206e+00, 7.3793748889272592e-13,
+	2.2204460492503131e-16, 8.5331741672689532e-13,
+	-4.5508041779385167e-13}, /* L853 */
+{7.9159960956777988e+00, 7.5053852022222145e-13,
+	2.2204460492503131e-16, -2.1360690993788012e-13,
+	-4.1855408028368402e-14}, /* L854 */
+{9.3924124791664294e+00, 8.9156459992523196e-13,
+	2.2204460492503131e-16, 1.0347278589506459e-12,
+	6.9380057254875283e-12}, /* L855 */
+{1.0174081472279928e+01, 9.6689323214604883e-13,
+	2.2204460492503131e-16, 1.2545520178264269e-13,
+	-8.8040685852774914e-14}, /* L856 */
+{9.4755108655652815e+00, 9.0155660714685837e-13,
+	2.2204460492503131e-16, -1.2656542480726785e-14,
+	5.1514348342607263e-14}, /* L857 */
+{1.0995646718379708e+01, 1.0474121570069883e-12,
+	2.2204460492503131e-16, 2.8359536941024999e-12,
+	7.0328187717905166e-12}, /* L858 */
+{7.0884861544324318e+00, 6.7601479969425782e-13,
+	2.2204460492503131e-16, 3.2063240951174521e-13,
+	-4.4664272280670048e-13}, /* L859 */
+{1.1190715329791459e+01, 1.0684786388992507e-12,
+	2.2204460492503131e-16, -6.4894756235389650e-12,
+	-1.3474776849875525e-12}, /* L860 */
+{9.2468206282597958e+00, 8.8390406105531838e-13,
+	2.2204460492503131e-16, -8.8928864272475039e-14,
+	9.0150109599562711e-14}, /* L861 */
+{1.0117185335504043e+01, 9.6822549977559902e-13,
+	2.2204460492503131e-16, 7.9491968563161208e-14,
+	9.3924867883288243e-14}, /* L862 */
+{1.0208011470247856e+01, 9.7805097354353165e-13,
+	2.2204460492503131e-16, -1.3422596367718143e-13,
+	-1.6153745008296028e-13}, /* L863 */
+{9.9809185247304129e+00, 9.5740082528550374e-13,
+	2.2204460492503131e-16, 2.0472512574087887e-13,
+	-3.3184566206045929e-13}, /* L864 */
+{8.9398984976029592e+00, 8.5853546494263355e-13,
+	2.2204460492503131e-16, 3.1086244689504383e-14,
+	-1.6853185513809876e-13}, /* L865 */
+{9.7477059101764763e+00, 9.3719476623732589e-13,
+	2.2204460492503131e-16, -2.5213164889237305e-13,
+	-8.4265927569049381e-13}, /* L866 */
+{9.3483423152636096e+00, 8.9983576145868938e-13,
+	2.2204460492503131e-16, 1.9095836023552692e-13,
+	-2.3092638912203256e-14}, /* L867 */
+{7.4683297551855281e+00, 7.1970207571325773e-13,
+	2.2204460492503131e-16, 1.5321077739827160e-13,
+	-1.4310774787418268e-13}, /* L868 */
+{8.6553646337650854e+00, 8.3505424797181149e-13,
+	2.2204460492503131e-16, 6.2172489379008766e-14,
+	3.3750779948604759e-14}, /* L869 */
+{8.3734327509362476e+00, 8.0878359565161873e-13,
+	2.2204460492503131e-16, 1.7088552795030409e-12,
+	-2.3353541322990168e-12}, /* L870 */
+{1.1551395951467281e+01, 1.1170231406509856e-12,
+	2.2204460492503131e-16, -5.6177285046032921e-14,
+	-1.8285373215576328e-13}, /* L871 */
+{6.8655498226503484e+00, 6.6466276926746559e-13,
+	2.2204460492503131e-16, 2.9976021664879227e-13,
+	4.5963233219481481e-14}, /* L872 */
+{1.0369432167485062e+01, 1.0050293930419230e-12,
+	2.2204460492503131e-16, -1.8984813721090177e-14,
+	-5.1181281435219717e-14}, /* L873 */
+{8.6479684494530975e+00, 8.3914125648121285e-13,
+	2.2204460492503131e-16, -1.1690648449302898e-13,
+	-2.8643754035329039e-14}, /* L874 */
+{9.3988719714651765e+00, 9.1304741545172874e-13,
+	2.2204460492503131e-16, 1.7013057629355899e-12,
+	1.4468426456915040e-12}, /* L875 */
+{8.4763261585318315e+00, 8.2436835135979436e-13,
+	2.2204460492503131e-16, 8.4021678503631847e-13,
+	2.2051249715104859e-12}, /* L876 */
+{9.3814287121972892e+00, 9.1343599351034754e-13,
+	2.2204460492503131e-16, -1.6531220836668581e-13,
+	7.0987660194532509e-13}, /* L877 */
+{8.5948313277667729e+00, 8.3780204995775875e-13,
+	2.2204460492503131e-16, -7.0443650912466182e-13,
+	-1.0113021531310551e-12}, /* L878 */
+{1.0610084998985544e+01, 1.0354217483410366e-12,
+	2.2204460492503131e-16, -2.3880897259687117e-13,
+	4.3298697960381105e-14}, /* L879 */
+{1.0010527157235810e+01, 9.7802321796791603e-13,
+	2.2204460492503131e-16, -3.0967450825869491e-12,
+	-1.2501111257279263e-12}, /* L880 */
+{7.6895694530491729e+00, 7.5212058803231230e-13,
+	2.2204460492503131e-16, -7.1220807029703792e-13,
+	-2.2426505097428162e-13}, /* L881 */
+{8.3095369195311957e+00, 8.1368245474777723e-13,
+	2.2204460492503131e-16, 8.7929663550312398e-14,
+	2.4691360067663481e-13}, /* L882 */
+{9.8895965768349257e+00, 9.6950225625391795e-13,
+	2.2204460492503131e-16, -6.0729199446996063e-14,
+	-2.6789681584205027e-13}, /* L883 */
+{8.6442444073142859e+00, 8.4837692426731337e-13,
+	2.2204460492503131e-16, 7.5495165674510645e-14,
+	3.7081449022480228e-13}, /* L884 */
+{9.6960604952784930e+00, 9.5268237743084683e-13,
+	2.2204460492503131e-16, -5.0504045390198371e-13,
+	9.7699626167013776e-14}, /* L885 */
+{1.1052006714471835e+01, 1.0871373246068572e-12,
+	2.2204460492503131e-16, -1.3411494137471891e-13,
+	2.4225066397320916e-13}, /* L886 */
+{1.0251425418372760e+01, 1.0095257962916548e-12,
+	2.2204460492503131e-16, 1.0167422459517184e-12,
+	2.0472512574087887e-13}, /* L887 */
+{1.1583351608466337e+01, 1.1419754031294360e-12,
+	2.2204460492503131e-16, 2.0516921495072893e-13,
+	-2.3103741142449508e-13}, /* L888 */
+{1.1014640549975708e+01, 1.0871303857129533e-12,
+	2.2204460492503131e-16, -6.7945649107059580e-14,
+	-1.5387691121304670e-13}, /* L889 */
+{9.7702401336730880e+00, 9.6539443106280487e-13,
+	2.2204460492503131e-16, 1.8829382497642655e-13,
+	-2.0106138975961585e-13}, /* L890 */
+{1.0715785705451658e+01, 1.0600131883364838e-12,
+	2.2204460492503131e-16, -2.9620750296999176e-13,
+	9.5101704289390909e-13}, /* L891 */
+{7.6076353210017702e+00, 7.5339734451063123e-13,
+	2.2204460492503131e-16, 3.8569147875477938e-13,
+	-1.8440804439023850e-13}, /* L892 */
+{8.3379190898436502e+00, 8.2664430856027593e-13,
+	2.2204460492503131e-16, -7.1609385088322597e-14,
+	3.1086244689504383e-15}, /* L893 */
+{8.7883597826723321e+00, 8.7227794431932182e-13,
+	2.2204460492503131e-16, 3.1530333899354446e-13,
+	-1.1468603844377867e-12}, /* L894 */
+{7.8765487397153047e+00, 7.8265172120950410e-13,
+	2.2204460492503131e-16, -2.1834756225302954e-12,
+	9.0549789888427767e-13}, /* L895 */
+{7.3091633174309161e+00, 7.2708505882701502e-13,
+	2.2204460492503131e-16, -2.8410607200157756e-13,
+	-1.5332179970073412e-13}, /* L896 */
+{1.6333359102583998e+01, 1.6265877533783168e-12,
+	2.2204460492503131e-16, -1.4244161405940758e-13,
+	-3.3328895199247199e-13}, /* L897 */
+{9.1506269091671584e+00, 9.1229801491010676e-13,
+	2.2204460492503131e-16, -4.4297898682543746e-14,
+	3.1086244689504383e-14}, /* L898 */
+{9.5895590672040569e+00, 9.5712326952934745e-13,
+	2.2204460492503131e-16, -5.4023452378260117e-13,
+	-1.0524914273446484e-13}, /* L899 */
+{1.0686127970684332e+01, 1.0677569939332443e-12,
+	2.2204460492503131e-16, 9.5701224722688494e-14,
+	6.7723604502134549e-14}, /* L900 */
+{1.2051073397037014e+01, 1.2054801601379950e-12,
+	2.2204460492503131e-16, 1.4588330543574557e-12,
+	1.1164402735630574e-12}, /* L901 */
+{8.2533389636897816e+00, 8.2650553068219779e-13,
+	2.2204460492503131e-16, -3.3639757646142243e-14,
+	3.4794389591752406e-13}, /* L902 */
+{1.0995587668965866e+01, 1.1023404411503179e-12,
+	2.2204460492503131e-16, 1.1968204205459188e-13,
+	-1.2922996006636822e-13}, /* L903 */
+{1.1445814518305125e+01, 1.1487477635796495e-12,
+	2.2204460492503131e-16, 8.8906659811982536e-13,
+	2.1604940059205546e-13}, /* L904 */
+{1.0947703736355882e+01, 1.0999708088821336e-12,
+	2.2204460492503131e-16, 9.6367358537463588e-14,
+	1.0147438445073931e-13}, /* L905 */
+{1.1483461826144907e+01, 1.1550760348200129e-12,
+	2.2204460492503131e-16, -5.7731597280508140e-14,
+	-8.8373752760162461e-14}, /* L906 */
+{1.0890590500790017e+01, 1.0966505481491140e-12,
+	2.2204460492503131e-16, 1.0969003483296547e-13,
+	3.6792791036077688e-13}, /* L907 */
+{1.1563894896316020e+01, 1.1657341758564144e-12,
+	2.2204460492503131e-16, -9.9742436532324064e-13,
+	2.8526070394718772e-12}, /* L908 */
+{9.2915438122499463e+00, 9.3769436659840721e-13,
+	2.2204460492503131e-16, -2.3425705819590803e-14,
+	6.4614980033184111e-14}, /* L909 */
+{9.9934223600767460e+00, 1.0096368185941174e-12,
+	2.2204460492503131e-16, -4.4175774149834979e-13,
+	-6.3349325785111432e-13}, /* L910 */
+{8.4440308851593695e+00, 8.5403906169290167e-13,
+	2.2204460492503131e-16, 7.0567995891224200e-12,
+	5.3539395139523549e-12}, /* L911 */
+{8.8489722943209141e+00, 8.9597773644811696e-13,
+	2.2204460492503131e-16, 4.5785597535541456e-12,
+	6.2172489379008766e-15}, /* L912 */
+{9.0720296470633119e+00, 9.1956997572140153e-13,
+	2.2204460492503131e-16, 1.1302070390684094e-13,
+	4.7761794519374234e-13}, /* L913 */
+{9.7401685399985833e+00, 9.8837604767254561e-13,
+	2.2204460492503131e-16, 9.4591001698063337e-14,
+	-3.2862601528904634e-14}, /* L914 */
+{9.9557534121727329e+00, 1.0113576642822864e-12,
+	2.2204460492503131e-16, 4.6074255521943996e-13,
+	-1.2623235789988030e-13}, /* L915 */
+{9.9339676377992436e+00, 1.0102474412576612e-12,
+	2.2204460492503131e-16, -3.8113956435381624e-13,
+	4.3411940708892871e-12}, /* L916 */
+{9.8583852373942786e+00, 1.0036554920489493e-12,
+	2.2204460492503131e-16, 8.7707618945387367e-14,
+	1.6520118606422329e-13}, /* L917 */
+{6.9150435895278655e+00, 7.0476957603204937e-13,
+	2.2204460492503131e-16, 3.7541081354675043e-12,
+	9.8039354412549073e-12}, /* L918 */
+{9.1409284586791273e+00, 9.3264285183636275e-13,
+	2.2204460492503131e-16, -3.5293989952833726e-13,
+	6.0329519158131006e-13}, /* L919 */
+{8.2440347457951333e+00, 8.4204865302694998e-13,
+	2.2204460492503131e-16, -1.9317880628477724e-14,
+	5.9219296133505850e-13}, /* L920 */
+{8.7665719200691949e+00, 8.9639407008235139e-13,
+	2.2204460492503131e-16, 7.6805228843568329e-13,
+	-1.5285550603039155e-12}, /* L921 */
+{1.3183046829353204e+01, 1.3494483308562621e-12,
+	2.2204460492503131e-16, -1.7175150190951172e-13,
+	-2.4069635173873394e-13}, /* L922 */
+{7.8840861115702161e+00, 8.0790929501972641e-13,
+	2.2204460492503131e-16, 4.6296300126869028e-13,
+	8.7574392182432348e-13}, /* L923 */
+{1.0159648063539786e+01, 1.0422218643668657e-12,
+	2.2204460492503131e-16, 1.7035262089848402e-12,
+	1.9646506643766770e-12}, /* L924 */
+{9.3373627045941827e+00, 9.5890483053917563e-13,
+	2.2204460492503131e-16, -1.4432899320127035e-15,
+	3.0908609005564358e-13}, /* L925 */
+{1.1461141192473828e+01, 1.1782796960346786e-12,
+	2.2204460492503131e-16, -2.9198865547641617e-14,
+	-1.6209256159527285e-14}, /* L926 */
+{8.1553526725774024e+00, 8.3932860661661834e-13,
+	2.2204460492503131e-16, 2.7600144392181392e-13,
+	-1.5198953207118393e-13}, /* L927 */
+{1.1797432405991961e+01, 1.2154721673596214e-12,
+	2.2204460492503131e-16, 4.4408920985006262e-16,
+	2.7378099787256360e-13}, /* L928 */
+{1.2446601983679299e+01, 1.2837370055862607e-12,
+	2.2204460492503131e-16, 1.2194689702482719e-12,
+	-5.8930638147103309e-13}, /* L929 */
+{1.0972597956641225e+01, 1.1329270854787410e-12,
+	2.2204460492503131e-16, -6.4726002335646626e-14,
+	-3.8413716652030416e-14}, /* L930 */
+{8.4867212305868307e+00, 8.7720108954414400e-13,
+	2.2204460492503131e-16, 2.1338486533295509e-13,
+	1.6608936448392342e-13}, /* L931 */
+{8.2976257519751879e+00, 8.5857709830605700e-13,
+	2.2204460492503131e-16, -2.8654856265575290e-13,
+	3.1539215683551447e-12}, /* L932 */
+{8.4158760859262802e+00, 8.7174711893567292e-13,
+	2.2204460492503131e-16, -3.3262281817769690e-13,
+	-6.9277916736609768e-14}, /* L933 */
+{7.8434277921854898e+00, 8.1332163226477405e-13,
+	2.2204460492503131e-16, -3.5282887722587475e-13,
+	1.7541523789077473e-14}, /* L934 */
+{9.0887843929102257e+00, 9.4346752632645803e-13,
+	2.2204460492503131e-16, -3.2751579226442118e-14,
+	-2.2726265314076954e-13}, /* L935 */
+{1.0544354242370568e+01, 1.0957346141537982e-12,
+	2.2204460492503131e-16, -1.5971668432257502e-12,
+	9.5525809484797719e-12}, /* L936 */
+{1.2002153407532481e+01, 1.2485568134934510e-12,
+	2.2204460492503131e-16, -2.7677860003905153e-13,
+	1.9140244944537699e-13}, /* L937 */
+{1.0679121326131190e+01, 1.1121104037670193e-12,
+	2.2204460492503131e-16, 4.5630166312093934e-13,
+	-9.1038288019262836e-15}, /* L938 */
+{8.6105034677008874e+00, 8.9764307098505469e-13,
+	2.2204460492503131e-16, -2.7955415760061442e-13,
+	7.9714013168086240e-14}, /* L939 */
+{1.1961986957574991e+01, 1.2483625244641416e-12,
+	2.2204460492503131e-16, 8.3333340228364250e-13,
+	7.0343730840249918e-13}, /* L940 */
+{9.7957115227728142e+00, 1.0233758285238537e-12,
+	2.2204460492503131e-16, 0.0000000000000000e+00,
+	1.8429702208777599e-13}, /* L941 */
+{9.6942828106406189e+00, 1.0138556660876930e-12,
+	2.2204460492503131e-16, 1.2727596754302795e-12,
+	3.7503333771837788e-13}, /* L942 */
+{1.1678438361510514e+01, 1.2226608614440693e-12,
+	2.2204460492503131e-16, 4.9293902293356950e-13,
+	-9.4368957093138306e-15}, /* L943 */
+{1.1382962874235105e+01, 1.1929901511109620e-12,
+	2.2204460492503131e-16, -7.1165295878472534e-14,
+	-6.9499961341534799e-14}, /* L944 */
+{1.0870122969975602e+01, 1.1404488464705764e-12,
+	2.2204460492503131e-16, -1.3544720900426910e-14,
+	-5.6177285046032921e-14}, /* L945 */
+{9.2796002062085865e+00, 9.7460928216719367e-13,
+	2.2204460492503131e-16, -8.7707618945387367e-14,
+	8.5487172896137054e-14}, /* L946 */
+{1.0106126670570916e+01, 1.0625389457175061e-12,
+	2.2204460492503131e-16, 3.6415315207705135e-14,
+	2.8643754035329039e-14}, /* L947 */
+{1.1722839949838484e+01, 1.2338186028415521e-12,
+	2.2204460492503131e-16, -1.5605294834131200e-12,
+	-6.5569771834361745e-13}, /* L948 */
+{9.6217090275652115e+00, 1.0137446437852304e-12,
+	2.2204460492503131e-16, -2.0650148258027912e-14,
+	-4.3742787170231168e-13}, /* L949 */
+{9.8484230664083778e+00, 1.0387246618392965e-12,
+	2.2204460492503131e-16, -4.6036507939106741e-12,
+	7.0070615976192130e-12}, /* L950 */
+{1.0046794904055520e+01, 1.0607625888781058e-12,
+	2.2204460492503131e-16, -1.5165646516379638e-13,
+	-2.0738966099997924e-13}, /* L951 */
+{1.0820380363868004e+01, 1.1436407376663738e-12,
+	2.2204460492503131e-16, 3.6415315207705135e-13,
+	6.2350125062948791e-13}, /* L952 */
+{9.1112295650738790e+00, 9.6400665228202342e-13,
+	2.2204460492503131e-16, 1.9020340857878182e-12,
+	-4.5363712786183896e-13}, /* L953 */
+{9.4846062371189124e+00, 1.0045644871503612e-12,
+	2.2204460492503131e-16, -4.2077452633293433e-13,
+	1.4934720127257606e-12}, /* L954 */
+{1.1103667191997831e+01, 1.1772804953125160e-12,
+	2.2204460492503131e-16, 8.0380146982861334e-14,
+	1.3287149158713873e-12}, /* L955 */
+{8.7175750043242175e+00, 9.2525986872260546e-13,
+	2.2204460492503131e-16, -3.1419311596891930e-12,
+	1.1222134332911082e-12}, /* L956 */
+{1.0557473423221234e+01, 1.1217138329300269e-12,
+	2.2204460492503131e-16, -6.6613381477509392e-16,
+	4.1966430330830917e-14}, /* L957 */
+{9.7466095086920035e+00, 1.0366429936681243e-12,
+	2.2204460492503131e-16, -9.4146912488213275e-14,
+	5.9441340738430881e-13}, /* L958 */
+{9.0328485624150652e+00, 9.6173069508154185e-13,
+	2.2204460492503131e-16, -2.6578739209526248e-13,
+	-1.8540724511240114e-14}, /* L959 */
+{1.3895315341380449e+01, 1.4809820036987276e-12,
+	2.2204460492503131e-16, 2.5313084961453569e-14,
+	-8.1934459217336553e-13}, /* L960 */
+{9.0323849033783770e+00, 9.6368692106135745e-13,
+	2.2204460492503131e-16, -8.1379347705023974e-14,
+	-1.5543122344752192e-14}, /* L961 */
+{1.0350833717431327e+01, 1.1055045767704996e-12,
+	2.2204460492503131e-16, 2.2470914018413168e-13,
+	3.4638958368304884e-14}, /* L962 */
+{1.0921406698471406e+01, 1.1676562494677967e-12,
+	2.2204460492503131e-16, -2.1549428907974288e-13,
+	-1.4588330543574557e-13}, /* L963 */
+{1.2189317845236090e+01, 1.3045675650857902e-12,
+	2.2204460492503131e-16, -1.8274270985330077e-13,
+	-9.3591800975900696e-14}, /* L964 */
+{7.9318669069267802e+00, 8.4979245862371044e-13,
+	2.2204460492503131e-16, -2.4513724383723456e-13,
+	-6.4392935428259079e-15}, /* L965 */
+{1.1130954656834399e+01, 1.1937673072281996e-12,
+	2.2204460492503131e-16, 2.9378721677630892e-12,
+	2.2382096176443156e-13}, /* L966 */
+{9.2362997170224350e+00, 9.9159569444395856e-13,
+	2.2204460492503131e-16, -2.5746071941057380e-13,
+	-2.8288482667448989e-13}, /* L967 */
+{9.4284626717711593e+00, 1.0132727989997647e-12,
+	2.2204460492503131e-16, -6.6058269965196814e-14,
+	-2.2026824808563106e-13}, /* L968 */
+{1.3707054208983855e+01, 1.4746129664566787e-12,
+	2.2204460492503131e-16, -1.5765166949677223e-14,
+	-1.6686652060116103e-13}, /* L969 */
+{1.1446909557221781e+01, 1.2327361353925426e-12,
+	2.2204460492503131e-16, 2.9087843245179101e-13,
+	-9.3924867883288243e-14}, /* L970 */
+{9.8254557939041192e+00, 1.0592100113671066e-12,
+	2.2204460492503131e-16, -2.3414603589344551e-13,
+	-5.8053561957649435e-13}, /* L971 */
+{1.3618315541931494e+01, 1.4696022176963197e-12,
+	2.2204460492503131e-16, -5.4212190292446394e-13,
+	8.7885254629327392e-13}, /* L972 */
+{9.6459423629827103e+00, 1.0419998197619407e-12,
+	2.2204460492503131e-16, 5.7265303610165574e-13,
+	1.1057821325266559e-13}, /* L973 */
+{1.0501157178135733e+01, 1.1355499873744179e-12,
+	2.2204460492503131e-16, -5.5877524829384129e-13,
+	-1.0202949596305189e-13}, /* L974 */
+{1.0316412365958021e+01, 1.1167178293192137e-12,
+	2.2204460492503131e-16, -8.0202511298921308e-13,
+	-1.6386891843467311e-13}, /* L975 */
+{1.0151641420129716e+01, 1.1000089727986051e-12,
+	2.2204460492503131e-16, 6.5281113847959205e-14,
+	-4.3853809472693683e-14}, /* L976 */
+{8.7379751747128793e+00, 9.4779739612249614e-13,
+	2.2204460492503131e-16, 1.3944401189291966e-13,
+	-1.5021317523178368e-13}, /* L977 */
+{9.8126298184019856e+00, 1.0654532811571471e-12,
+	2.2204460492503131e-16, -1.7419399256368706e-13,
+	5.8841820305133297e-14}, /* L978 */
+{1.3239532840079457e+01, 1.4390155733678966e-12,
+	2.2204460492503131e-16, 1.7763568394002505e-14,
+	-6.1384231031524905e-13}, /* L979 */
+{1.1041838992514464e+01, 1.2013723349468819e-12,
+	2.2204460492503131e-16, -2.6681989950816387e-12,
+	3.2820413053968878e-12}, /* L980 */
+{1.1217127676006534e+01, 1.2216894162975223e-12,
+	2.2204460492503131e-16, 1.1501910535116622e-13,
+	1.3478107518949400e-13}, /* L981 */
+{8.4791259700988419e+00, 9.2442720145413659e-13,
+	2.2204460492503131e-16, -5.9985350020497208e-13,
+	-1.2619905120914154e-12}, /* L982 */
+{1.1448628994182879e+01, 1.2494449919131512e-12,
+	2.2204460492503131e-16, -1.1202150318467829e-13,
+	1.7430501486614958e-13}, /* L983 */
+{1.1029981930261446e+01, 1.2049805597769137e-12,
+	2.2204460492503131e-16, -1.2145839889399213e-13,
+	3.9146463848283020e-13}, /* L984 */
+{1.0919799187059123e+01, 1.1941558852868184e-12,
+	2.2204460492503131e-16, -8.9867002728283296e-12,
+	1.9659829320062272e-12}, /* L985 */
+{1.0241064467376354e+01, 1.1210685157969635e-12,
+	2.2204460492503131e-16, 1.0524914273446484e-13,
+	1.5543122344752192e-15}, /* L986 */
+{8.4549156093491824e+00, 9.2648111404969313e-13,
+	2.2204460492503131e-16, 2.2204460492503131e-14,
+	2.9642954757491680e-13}, /* L987 */
+{8.8208520061643405e+00, 9.6755936596082392e-13,
+	2.2204460492503131e-16, -1.5387691121304670e-13,
+	-1.0547118733938987e-13}, /* L988 */
+{1.2405652182886818e+01, 1.3621534455943163e-12,
+	2.2204460492503131e-16, 2.3092638912203256e-13,
+	-3.3317792969000948e-13}, /* L989 */
+{1.1107578028891034e+01, 1.2208567490290534e-12,
+	2.2204460492503131e-16, 9.7477581562088744e-14,
+	1.2891909761947318e-12}, /* L990 */
+{9.0343106263842223e+00, 9.9398267394690265e-13,
+	2.2204460492503131e-16, 1.0991207943789050e-13,
+	-7.0699002208129968e-13}, /* L991 */
+{1.0284024280353442e+01, 1.1326217741469691e-12,
+	2.2204460492503131e-16, 2.0206059048177849e-14,
+	-9.2814644858663087e-14}, /* L992 */
+{8.8851981913937248e+00, 9.7954977462677562e-13,
+	2.2204460492503131e-16, 7.1187500338965037e-12,
+	-1.6326939800137552e-12}, /* L993 */
+{1.4001260408274808e+01, 1.5451251389464460e-12,
+	2.2204460492503131e-16, -1.1400880239875733e-12,
+	2.9931612743894220e-13}, /* L994 */
+{1.0292841300706829e+01, 1.1370210328820463e-12,
+	2.2204460492503131e-16, 4.5785597535541456e-13,
+	6.2683191970336338e-13}, /* L995 */
+{1.3936749837815491e+01, 1.5411005804821798e-12,
+	2.2204460492503131e-16, 8.9039886574937555e-14,
+	-1.4277468096679513e-13}, /* L996 */
+{1.1541251106258247e+01, 1.2774920010727442e-12,
+	2.2204460492503131e-16, -6.0063065632220969e-13,
+	1.4388490399142029e-13}, /* L997 */
+{9.9814649669206350e+00, 1.1059486659803497e-12,
+	2.2204460492503131e-16, -1.7119639039719914e-13,
+	1.5809575870662229e-13}, /* L998 */
+{1.0939629364123027e+01, 1.2133280491433140e-12,
+	2.2204460492503131e-16, -9.5368157815300947e-14,
+	3.7747582837255322e-15}, /* L999 */
+{7.8078765965996340e+00, 8.6684825983951441e-13,
+	2.2204460492503131e-16, 7.5495165674510645e-15,
+	1.6742163211347361e-13}, /* L1000 */
+{2.3549019000387378e+01, 5.2289318708265142e-12,
+	2.2204460492503131e-16, -8.9506180245280120e-12,
+	4.1280312501612570e-12}, /* L1001 */
+{2.6398000009078743e+01, 8.7923002212164647e-12,
+	2.2204460492503131e-16, -1.3117951169761000e-11,
+	4.6029846600958990e-13}, /* L1002 */
+{3.7420692245374873e+01, 1.6684598147520546e-11,
+	2.2204460492503131e-16, 1.1437517599688363e-12,
+	-5.7873705827660160e-12}, /* L1003 */
+{5.0393900018547960e+01, 2.7974234040328838e-11,
+	2.2204460492503131e-16, -3.7119196605317484e-12,
+	-3.6116665214080967e-12}, /* L1004 */
+{6.4066354190196932e+01, 4.2676764899773900e-11,
+	2.2204460492503131e-16, 1.0669243266647754e-11,
+	7.3929751209789174e-12}, /* L1005 */
+{6.9029432745783822e+01, 5.3769266816772188e-11,
+	2.2204460492503131e-16, -3.2964631024867685e-11,
+	-2.3945401217417839e-11}, /* L1006 */
+{6.0884428697543100e+01, 5.4306059649178451e-11,
+	2.2204460492503131e-16, 1.2041700969689373e-11,
+	-7.6226802647738623e-12}, /* L1007 */
+{8.9131121164442703e+01, 8.9059880997721663e-11,
+	2.2204460492503131e-16, -8.1148754382809329e-11,
+	8.6431484191962227e-10}, /* L1008 */
+{1.0694525002117500e+02, 1.1873307892429352e-10,
+	2.2204460492503131e-16, -4.3724246445719928e-11,
+	2.0131674105527964e-11}, /* L1009 */
+
+#else  /* }  { */
+
+/* Start of SP golden values */
+
+
+{0.0000000000000000e+00, 0.0000000000000000e+00,
+	0.0000000000000000e+00, 0.0000000000000000e+00,
+	0.0000000000000000e+00}, /* L1010 */
+{0.0000000000000000e+00, 0.0000000000000000e+00,
+	1.1920928955078125e-07, 0.0000000000000000e+00,
+	0.0000000000000000e+00}, /* L1011 */
+{0.0000000000000000e+00, 0.0000000000000000e+00,
+	1.1920928955078125e-07, 0.0000000000000000e+00,
+	0.0000000000000000e+00}, /* L1012 */
+{6.8018096685409546e-01, 1.1920928955078125e-07,
+	1.1920928955078125e-07, -5.9604644775390625e-08,
+	-1.1920928955078125e-07}, /* L1013 */
+{8.9273703098297119e-01, 2.0861625671386719e-07,
+	1.1920928955078125e-07, -1.1920928955078125e-07,
+	-2.3841857910156250e-07}, /* L1014 */
+{7.1418994665145874e-01, 2.0861625671386719e-07,
+	1.1920928955078125e-07, -5.9604644775390625e-08,
+	1.1920928955078125e-07}, /* L1015 */
+{3.6134567856788635e-01, 1.2665987014770508e-07,
+	1.1920928955078125e-07, 2.3841857910156250e-07,
+	7.1525573730468750e-07}, /* L1016 */
+{4.3648514151573181e-01, 1.7881393432617188e-07,
+	1.1920928955078125e-07, -5.9604644775390625e-08,
+	3.5762786865234375e-07}, /* L1017 */
+{4.7549185156822205e-01, 2.2351741790771484e-07,
+	1.1920928955078125e-07, 3.6954879760742188e-06,
+	-5.9604644775390625e-07}, /* L1018 */
+{4.2266038060188293e-01, 2.2351741790771484e-07,
+	1.1920928955078125e-07, 4.7683715820312500e-07,
+	8.3446502685546875e-07}, /* L1019 */
+{4.0575435757637024e-01, 2.3841857910156250e-07,
+	1.1920928955078125e-07, 3.5762786865234375e-07,
+	3.5762786865234375e-07}, /* L1020 */
+{3.2275927066802979e-01, 2.0861625671386719e-07,
+	1.1920928955078125e-07, -1.1920928955078125e-07,
+	1.1920928955078125e-07}, /* L1021 */
+{2.9586255550384521e-01, 2.0861625671386719e-07,
+	1.1920928955078125e-07, -1.1920928955078125e-07,
+	-2.3841857910156250e-07}, /* L1022 */
+{7.8410917520523071e-01, 6.0349702835083008e-07,
+	1.1920928955078125e-07, 7.1525573730468750e-07,
+	-7.1525573730468750e-07}, /* L1023 */
+{3.5955643653869629e-01, 2.9802322387695312e-07,
+	1.1920928955078125e-07, -3.5762786865234375e-07,
+	-3.5762786865234375e-07}, /* L1024 */
+{4.0270313620567322e-01, 3.5762786865234375e-07,
+	1.1920928955078125e-07, -2.3841857910156250e-07,
+	3.5762786865234375e-07}, /* L1025 */
+{2.9888099431991577e-01, 2.8312206268310547e-07,
+	1.1920928955078125e-07, -7.1525573730468750e-07,
+	-1.1920928955078125e-07}, /* L1026 */
+{5.8850812911987305e-01, 5.9232115745544434e-07,
+	1.1920928955078125e-07, -1.7285346984863281e-06,
+	3.5762786865234375e-07}, /* L1027 */
+{5.0337857007980347e-01, 5.3644180297851562e-07,
+	1.1920928955078125e-07, -4.7683715820312500e-07,
+	-4.7683715820312500e-07}, /* L1028 */
+{4.5867058634757996e-01, 5.1595270633697510e-07,
+	1.1920928955078125e-07, 7.1525573730468750e-07,
+	-1.2516975402832031e-06}, /* L1029 */
+{4.7820881009101868e-01, 5.6624412536621094e-07,
+	1.1920928955078125e-07, 0.0000000000000000e+00,
+	-1.0728836059570312e-06}, /* L1030 */
+{9.7883027791976929e-01, 1.2218952178955078e-06,
+	1.1920928955078125e-07, 8.3446502685546875e-07,
+	2.3841857910156250e-07}, /* L1031 */
+{4.2159116268157959e-01, 5.5134296417236328e-07,
+	1.1920928955078125e-07, -2.6822090148925781e-06,
+	-8.9406967163085938e-07}, /* L1032 */
+{5.0135254859924316e-01, 6.8545341491699219e-07,
+	1.1920928955078125e-07, 1.1920928955078125e-07,
+	-1.7881393432617188e-07}, /* L1033 */
+{1.0027021169662476e+00, 1.4305114746093750e-06,
+	1.1920928955078125e-07, -3.6954879760742188e-06,
+	-2.3841857910156250e-07}, /* L1034 */
+{7.2194659709930420e-01, 1.0728836059570312e-06,
+	1.1920928955078125e-07, -5.3644180297851562e-07,
+	4.7683715820312500e-07}, /* L1035 */
+{3.9529633522033691e-01, 6.1094760894775391e-07,
+	1.1920928955078125e-07, -1.6093254089355469e-06,
+	1.1920928955078125e-07}, /* L1036 */
+{5.9419322013854980e-01, 9.5367431640625000e-07,
+	1.1920928955078125e-07, 2.2649765014648438e-06,
+	0.0000000000000000e+00}, /* L1037 */
+{5.9087789058685303e-01, 9.8347663879394531e-07,
+	1.1920928955078125e-07, 2.2649765014648438e-06,
+	-2.9802322387695312e-06}, /* L1038 */
+{6.3101136684417725e-01, 1.0877847671508789e-06,
+	1.1920928955078125e-07, 2.3841857910156250e-07,
+	1.1920928955078125e-06}, /* L1039 */
+{1.1363973617553711e+00, 2.0265579223632812e-06,
+	1.1920928955078125e-07, -5.9604644775390625e-07,
+	2.3841857910156250e-07}, /* L1040 */
+{5.0943696498870850e-01, 9.3877315521240234e-07,
+	1.1920928955078125e-07, 2.8610229492187500e-06,
+	-3.1590461730957031e-06}, /* L1041 */
+{9.7332048416137695e-01, 1.8514692783355713e-06,
+	1.1920928955078125e-07, -5.9604644775390625e-07,
+	7.2717666625976562e-06}, /* L1042 */
+{8.8116312026977539e-01, 1.7285346984863281e-06,
+	1.1920928955078125e-07, 1.0728836059570312e-06,
+	-1.0132789611816406e-06}, /* L1043 */
+{1.0469392538070679e+00, 2.1159648895263672e-06,
+	1.1920928955078125e-07, 0.0000000000000000e+00,
+	-1.7285346984863281e-06}, /* L1044 */
+{6.3979321718215942e-01, 1.3336539268493652e-06,
+	1.1920928955078125e-07, -1.1920928955078125e-07,
+	1.4305114746093750e-06}, /* L1045 */
+{1.0980664491653442e+00, 2.3543834686279297e-06,
+	1.1920928955078125e-07, 2.6583671569824219e-05,
+	-2.1398067474365234e-05}, /* L1046 */
+{7.8947657346725464e-01, 1.7397105693817139e-06,
+	1.1920928955078125e-07, 3.3378601074218750e-06,
+	-1.5497207641601562e-06}, /* L1047 */
+{1.1061322689056396e+00, 2.5033950805664062e-06,
+	1.1920928955078125e-07, 3.0994415283203125e-06,
+	1.1920928955078125e-07}, /* L1048 */
+{1.2958996295928955e+00, 3.0100345611572266e-06,
+	1.1920928955078125e-07, -5.9604644775390625e-08,
+	-1.6689300537109375e-06}, /* L1049 */
+{6.1920803785324097e-01, 1.4752149581909180e-06,
+	1.1920928955078125e-07, -1.9490718841552734e-05,
+	4.4703483581542969e-05}, /* L1050 */
+{9.3974453210830688e-01, 2.2947788238525391e-06,
+	1.1920928955078125e-07, -1.4066696166992188e-05,
+	-1.3649463653564453e-05}, /* L1051 */
+{5.5696403980255127e-01, 1.3932585716247559e-06,
+	1.1920928955078125e-07, -5.9604644775390625e-06,
+	7.5101852416992188e-06}, /* L1052 */
+{5.8767557144165039e-01, 1.5050172805786133e-06,
+	1.1920928955078125e-07, 2.7418136596679688e-06,
+	-1.3113021850585938e-06}, /* L1053 */
+{9.4389802217483521e-01, 2.4735927581787109e-06,
+	1.1920928955078125e-07, -1.6808509826660156e-05,
+	9.0599060058593750e-06}, /* L1054 */
+{9.3407374620437622e-01, 2.5033950805664062e-06,
+	1.1920928955078125e-07, -7.7486038208007812e-07,
+	-6.1392784118652344e-06}, /* L1055 */
+{1.6670787334442139e+00, 4.5672059059143066e-06,
+	1.1920928955078125e-07, -3.7550926208496094e-06,
+	-2.0265579223632812e-06}, /* L1056 */
+{6.6008597612380981e-01, 1.8477439880371094e-06,
+	1.1920928955078125e-07, 0.0000000000000000e+00,
+	5.9604644775390625e-07}, /* L1057 */
+{9.2781543731689453e-01, 2.6524066925048828e-06,
+	1.1920928955078125e-07, -4.8875808715820312e-06,
+	-1.0728836059570312e-06}, /* L1058 */
+{8.6735057830810547e-01, 2.5331974029541016e-06,
+	1.1920928955078125e-07, 6.6757202148437500e-06,
+	-1.1324882507324219e-06}, /* L1059 */
+{8.6625766754150391e-01, 2.5816261768341064e-06,
+	1.1920928955078125e-07, -1.7881393432617188e-06,
+	-3.2186508178710938e-06}, /* L1060 */
+{1.0391687154769897e+00, 3.1590461730957031e-06,
+	1.1920928955078125e-07, 7.2717666625976562e-06,
+	-2.1994113922119141e-05}, /* L1061 */
+{1.0913528203964233e+00, 3.3825635910034180e-06,
+	1.1920928955078125e-07, 4.7683715820312500e-07,
+	3.5762786865234375e-07}, /* L1062 */
+{1.2523679733276367e+00, 3.9562582969665527e-06,
+	1.1920928955078125e-07, -5.1856040954589844e-06,
+	1.9073486328125000e-06}, /* L1063 */
+{6.2963581085205078e-01, 2.0265579223632812e-06,
+	1.1920928955078125e-07, 9.5367431640625000e-07,
+	4.7683715820312500e-07}, /* L1064 */
+{5.0682407617568970e-01, 1.6614794731140137e-06,
+	1.1920928955078125e-07, 4.7683715820312500e-07,
+	9.5367431640625000e-07}, /* L1065 */
+{1.0089418888092041e+00, 3.3676624298095703e-06,
+	1.1920928955078125e-07, -5.9604644775390625e-08,
+	-1.0132789611816406e-06}, /* L1066 */
+{1.5701940059661865e+00, 5.3346157073974609e-06,
+	1.1920928955078125e-07, 1.4305114746093750e-06,
+	-3.3378601074218750e-06}, /* L1067 */
+{1.4263415336608887e+00, 4.9322843551635742e-06,
+	1.1920928955078125e-07, -1.3816356658935547e-04,
+	-7.9035758972167969e-05}, /* L1068 */
+{1.3898396492004395e+00, 4.8875808715820312e-06,
+	1.1920928955078125e-07, -8.0466270446777344e-06,
+	-4.9471855163574219e-06}, /* L1069 */
+{9.5001077651977539e-01, 3.3974647521972656e-06,
+	1.1920928955078125e-07, 9.5367431640625000e-07,
+	1.5497207641601562e-06}, /* L1070 */
+{1.0409712791442871e+00, 3.7848949432373047e-06,
+	1.1920928955078125e-07, 1.4543533325195312e-05,
+	2.7179718017578125e-05}, /* L1071 */
+{1.2903363704681396e+00, 4.7683715820312500e-06,
+	1.1920928955078125e-07, -4.7683715820312500e-07,
+	-8.3446502685546875e-07}, /* L1072 */
+{7.7579402923583984e-01, 2.9131770133972168e-06,
+	1.1920928955078125e-07, -2.2053718566894531e-06,
+	1.9073486328125000e-06}, /* L1073 */
+{1.9140597581863403e+00, 7.3015689849853516e-06,
+	1.1920928955078125e-07, 4.7683715820312500e-06,
+	-1.1086463928222656e-05}, /* L1074 */
+{1.0586640834808350e+00, 4.1015446186065674e-06,
+	1.1920928955078125e-07, 1.1920928955078125e-06,
+	-4.7683715820312500e-07}, /* L1075 */
+{1.0454654693603516e+00, 4.1127204895019531e-06,
+	1.1920928955078125e-07, -2.4437904357910156e-06,
+	1.9073486328125000e-06}, /* L1076 */
+{9.0949100255966187e-01, 3.6321580410003662e-06,
+	1.1920928955078125e-07, 1.0251998901367188e-05,
+	-4.5299530029296875e-06}, /* L1077 */
+{8.6765336990356445e-01, 3.5166740417480469e-06,
+	1.1920928955078125e-07, -1.7881393432617188e-07,
+	1.1920928955078125e-06}, /* L1078 */
+{1.6591906547546387e+00, 6.8247318267822266e-06,
+	1.1920928955078125e-07, -6.3300132751464844e-05,
+	-1.5711784362792969e-04}, /* L1079 */
+{1.5803515911102295e+00, 6.5937638282775879e-06,
+	1.1920928955078125e-07, 6.4373016357421875e-06,
+	3.5762786865234375e-07}, /* L1080 */
+{1.5871639251708984e+00, 6.7166984081268311e-06,
+	1.1920928955078125e-07, -8.3446502685546875e-07,
+	-1.0728836059570312e-06}, /* L1081 */
+{1.5208110809326172e+00, 6.5267086029052734e-06,
+	1.1920928955078125e-07, -1.9907951354980469e-05,
+	-1.5854835510253906e-05}, /* L1082 */
+{1.4109665155410767e+00, 6.1392784118652344e-06,
+	1.1920928955078125e-07, -5.9604644775390625e-07,
+	4.7683715820312500e-07}, /* L1083 */
+{1.6604399681091309e+00, 7.3239207267761230e-06,
+	1.1920928955078125e-07, -8.6426734924316406e-06,
+	-1.0132789611816406e-05}, /* L1084 */
+{1.6600131988525391e+00, 7.4207782745361328e-06,
+	1.1920928955078125e-07, 1.5497207641601562e-06,
+	2.3841857910156250e-07}, /* L1085 */
+{1.0657552480697632e+00, 4.8279762268066406e-06,
+	1.1920928955078125e-07, -2.7596950531005859e-05,
+	-2.5689601898193359e-05}, /* L1086 */
+{9.7807997465133667e-01, 4.4889748096466064e-06,
+	1.1920928955078125e-07, -7.7486038208007812e-07,
+	-1.1920928955078125e-07}, /* L1087 */
+{1.1570127010345459e+00, 5.3793191909790039e-06,
+	1.1920928955078125e-07, 3.0994415283203125e-06,
+	-2.9563903808593750e-05}, /* L1088 */
+{1.4557089805603027e+00, 6.8545341491699219e-06,
+	1.1920928955078125e-07, 3.5762786865234375e-07,
+	4.7683715820312500e-07}, /* L1089 */
+{1.1683254241943359e+00, 5.5730342864990234e-06,
+	1.1920928955078125e-07, -1.6516447067260742e-04,
+	-4.8935413360595703e-05}, /* L1090 */
+{1.2592644691467285e+00, 6.0796737670898438e-06,
+	1.1920928955078125e-07, -4.1723251342773438e-07,
+	7.1525573730468750e-07}, /* L1091 */
+{1.0975710153579712e+00, 5.3644180297851562e-06,
+	1.1920928955078125e-07, -1.6689300537109375e-06,
+	-3.7550926208496094e-06}, /* L1092 */
+{2.2108526229858398e+00, 1.0937452316284180e-05,
+	1.1920928955078125e-07, -1.1324882507324219e-06,
+	-1.2516975402832031e-06}, /* L1093 */
+{2.0297622680664062e+00, 1.0162591934204102e-05,
+	1.1920928955078125e-07, 1.5139579772949219e-05,
+	-4.1723251342773438e-06}, /* L1094 */
+{1.5676014423370361e+00, 7.9423189163208008e-06,
+	1.1920928955078125e-07, 4.8875808715820312e-06,
+	1.5497207641601562e-06}, /* L1095 */
+{1.3372215032577515e+00, 6.8545341491699219e-06,
+	1.1920928955078125e-07, -7.7486038208007812e-07,
+	4.7683715820312500e-06}, /* L1096 */
+{1.4568958282470703e+00, 7.5548887252807617e-06,
+	1.1920928955078125e-07, 1.9073486328125000e-06,
+	3.9339065551757812e-06}, /* L1097 */
+{1.2471650838851929e+00, 6.5416097640991211e-06,
+	1.1920928955078125e-07, -5.3644180297851562e-07,
+	-2.9802322387695312e-07}, /* L1098 */
+{1.0786615610122681e+00, 5.7220458984375000e-06,
+	1.1920928955078125e-07, -2.6822090148925781e-06,
+	0.0000000000000000e+00}, /* L1099 */
+{1.4416582584381104e+00, 7.7337026596069336e-06,
+	1.1920928955078125e-07, 1.7404556274414062e-05,
+	8.8214874267578125e-06}, /* L1100 */
+{1.2912023067474365e+00, 7.0035457611083984e-06,
+	1.1920928955078125e-07, 6.0796737670898438e-06,
+	1.4543533325195312e-05}, /* L1101 */
+{1.4266119003295898e+00, 7.8231096267700195e-06,
+	1.1920928955078125e-07, -1.8596649169921875e-05,
+	-5.9604644775390625e-08}, /* L1102 */
+{1.0443524122238159e+00, 5.7891011238098145e-06,
+	1.1920928955078125e-07, 9.0599060058593750e-06,
+	1.9073486328125000e-06}, /* L1103 */
+{8.7233221530914307e-01, 4.8875808715820312e-06,
+	1.1920928955078125e-07, -6.9737434387207031e-06,
+	2.2649765014648438e-06}, /* L1104 */
+{1.5466986894607544e+00, 8.7581574916839600e-06,
+	1.1920928955078125e-07, -1.6450881958007812e-05,
+	1.1801719665527344e-05}, /* L1105 */
+{1.8489117622375488e+00, 1.0579824447631836e-05,
+	1.1920928955078125e-07, 1.0013580322265625e-05,
+	2.3841857910156250e-07}, /* L1106 */
+{2.1134092807769775e+00, 1.2218952178955078e-05,
+	1.1920928955078125e-07, -1.3113021850585938e-06,
+	1.1920928955078125e-06}, /* L1107 */
+{1.0867348909378052e+00, 6.3478946685791016e-06,
+	1.1920928955078125e-07, -1.8477439880371094e-06,
+	-7.2717666625976562e-06}, /* L1108 */
+{1.6565171480178833e+00, 9.7751617431640625e-06,
+	1.1920928955078125e-07, -6.5565109252929688e-06,
+	7.2717666625976562e-06}, /* L1109 */
+{1.5700103044509888e+00, 9.3579292297363281e-06,
+	1.1920928955078125e-07, -3.7550926208496094e-06,
+	1.9073486328125000e-06}, /* L1110 */
+{9.6533346176147461e-01, 5.8114528656005859e-06,
+	1.1920928955078125e-07, -1.9669532775878906e-05,
+	-3.8146972656250000e-06}, /* L1111 */
+{1.4190838336944580e+00, 8.6277723312377930e-06,
+	1.1920928955078125e-07, -9.5367431640625000e-07,
+	2.2649765014648438e-06}, /* L1112 */
+{1.1650413274765015e+00, 7.1525573730468750e-06,
+	1.1920928955078125e-07, -4.7683715820312500e-07,
+	1.3113021850585938e-06}, /* L1113 */
+{1.6706761121749878e+00, 1.0356307029724121e-05,
+	1.1920928955078125e-07, 1.1920928955078125e-06,
+	3.3378601074218750e-06}, /* L1114 */
+{1.8690253496170044e+00, 1.1697411537170410e-05,
+	1.1920928955078125e-07, -1.3530254364013672e-05,
+	-5.1259994506835938e-06}, /* L1115 */
+{1.2451384067535400e+00, 7.8678131103515625e-06,
+	1.1920928955078125e-07, 1.6689300537109375e-05,
+	-3.8266181945800781e-05}, /* L1116 */
+{1.4018733501434326e+00, 8.9406967163085938e-06,
+	1.1920928955078125e-07, -5.0663948059082031e-06,
+	0.0000000000000000e+00}, /* L1117 */
+{2.1110765933990479e+00, 1.3589859008789062e-05,
+	1.1920928955078125e-07, -1.6450881958007812e-05,
+	-1.9550323486328125e-05}, /* L1118 */
+{1.7178971767425537e+00, 1.1160969734191895e-05,
+	1.1920928955078125e-07, 5.6028366088867188e-06,
+	2.2649765014648438e-06}, /* L1119 */
+{1.3181906938552856e+00, 8.6426734924316406e-06,
+	1.1920928955078125e-07, 8.3446502685546875e-07,
+	1.3113021850585938e-06}, /* L1120 */
+{1.2252202033996582e+00, 8.1062316894531250e-06,
+	1.1920928955078125e-07, 1.7881393432617188e-06,
+	8.5830688476562500e-06}, /* L1121 */
+{1.6874964237213135e+00, 1.1265277862548828e-05,
+	1.1920928955078125e-07, -3.0994415283203125e-06,
+	4.7683715820312500e-06}, /* L1122 */
+{2.1283390522003174e+00, 1.4334917068481445e-05,
+	1.1920928955078125e-07, 1.3113021850585938e-06,
+	-3.9339065551757812e-06}, /* L1123 */
+{1.2017642259597778e+00, 8.1658363342285156e-06,
+	1.1920928955078125e-07, -1.6689300537109375e-06,
+	-2.0265579223632812e-06}, /* L1124 */
+{1.8911085128784180e+00, 1.2964010238647461e-05,
+	1.1920928955078125e-07, -5.1081180572509766e-05,
+	1.7404556274414062e-05}, /* L1125 */
+{1.6616483926773071e+00, 1.1488795280456543e-05,
+	1.1920928955078125e-07, -2.9206275939941406e-06,
+	-6.9737434387207031e-06}, /* L1126 */
+{1.4078015089035034e+00, 9.8198652267456055e-06,
+	1.1920928955078125e-07, 6.8426132202148438e-05,
+	5.9723854064941406e-05}, /* L1127 */
+{1.5084152221679688e+00, 1.0609626770019531e-05,
+	1.1920928955078125e-07, -5.9604644775390625e-07,
+	-5.5551528930664062e-05}, /* L1128 */
+{1.5756088495254517e+00, 1.1175870895385742e-05,
+	1.1920928955078125e-07, 8.3446502685546875e-07,
+	-3.0398368835449219e-06}, /* L1129 */
+{2.3708157539367676e+00, 1.6957521438598633e-05,
+	1.1920928955078125e-07, -7.7486038208007812e-07,
+	2.1457672119140625e-06}, /* L1130 */
+{1.5120798349380493e+00, 1.0907649993896484e-05,
+	1.1920928955078125e-07, -8.5651874542236328e-05,
+	2.5272369384765625e-05}, /* L1131 */
+{2.7950906753540039e+00, 2.0325183868408203e-05,
+	1.1920928955078125e-07, -5.1856040954589844e-06,
+	-7.4505805969238281e-06}, /* L1132 */
+{1.3575928211212158e+00, 9.9539756774902344e-06,
+	1.1920928955078125e-07, -1.6272068023681641e-05,
+	-1.3530254364013672e-05}, /* L1133 */
+{1.8224974870681763e+00, 1.3470649719238281e-05,
+	1.1920928955078125e-07, -2.4855136871337891e-05,
+	-2.3782253265380859e-05}, /* L1134 */
+{1.3239212036132812e+00, 9.8645687103271484e-06,
+	1.1920928955078125e-07, 2.0384788513183594e-05,
+	-9.1195106506347656e-06}, /* L1135 */
+{2.3055584430694580e+00, 1.7315149307250977e-05,
+	1.1920928955078125e-07, 1.5497207641601562e-06,
+	-6.5565109252929688e-07}, /* L1136 */
+{1.6377103328704834e+00, 1.2397766113281250e-05,
+	1.1920928955078125e-07, 2.3841857910156250e-06,
+	-3.2424926757812500e-05}, /* L1137 */
+{2.5683627128601074e+00, 1.9595026969909668e-05,
+	1.1920928955078125e-07, 4.4107437133789062e-06,
+	-1.2516975402832031e-06}, /* L1138 */
+{1.9767295122146606e+00, 1.5199184417724609e-05,
+	1.1920928955078125e-07, -8.9406967163085938e-06,
+	-5.4836273193359375e-06}, /* L1139 */
+{1.6994286775588989e+00, 1.3168901205062866e-05,
+	1.1920928955078125e-07, 1.6450881958007812e-05,
+	6.3180923461914062e-06}, /* L1140 */
+{1.8375978469848633e+00, 1.4349818229675293e-05,
+	1.1920928955078125e-07, -1.6570091247558594e-05,
+	-2.0921230316162109e-05}, /* L1141 */
+{1.8105823993682861e+00, 1.4245510101318359e-05,
+	1.1920928955078125e-07, 2.0384788513183594e-05,
+	1.2159347534179688e-05}, /* L1142 */
+{2.3307569026947021e+00, 1.8477439880371094e-05,
+	1.1920928955078125e-07, -7.3313713073730469e-06,
+	-2.1517276763916016e-05}, /* L1143 */
+{1.3041013479232788e+00, 1.0415911674499512e-05,
+	1.1920928955078125e-07, 3.3378601074218750e-06,
+	-4.5299530029296875e-06}, /* L1144 */
+{2.1185142993927002e+00, 1.7046928405761719e-05,
+	1.1920928955078125e-07, -1.9073486328125000e-06,
+	-5.3644180297851562e-06}, /* L1145 */
+{1.6652044057846069e+00, 1.3500452041625977e-05,
+	1.1920928955078125e-07, -3.2246112823486328e-05,
+	-2.2947788238525391e-05}, /* L1146 */
+{3.0401215553283691e+00, 2.4825334548950195e-05,
+	1.1920928955078125e-07, 7.5101852416992188e-06,
+	1.0609626770019531e-05}, /* L1147 */
+{1.8043446540832520e+00, 1.4841556549072266e-05,
+	1.1920928955078125e-07, -1.0132789611816406e-05,
+	-1.1742115020751953e-05}, /* L1148 */
+{2.1798567771911621e+00, 1.8060207366943359e-05,
+	1.1920928955078125e-07, -5.0067901611328125e-06,
+	3.8146972656250000e-06}, /* L1149 */
+{1.5401673316955566e+00, 1.2852251529693604e-05,
+	1.1920928955078125e-07, -5.0663948059082031e-06,
+	1.7881393432617188e-06}, /* L1150 */
+{2.5070142745971680e+00, 2.1070241928100586e-05,
+	1.1920928955078125e-07, 1.3828277587890625e-05,
+	1.8954277038574219e-05}, /* L1151 */
+{1.6487674713134766e+00, 1.3954937458038330e-05,
+	1.1920928955078125e-07, -9.8347663879394531e-06,
+	-5.4240226745605469e-06}, /* L1152 */
+{1.4859261512756348e+00, 1.2665987014770508e-05,
+	1.1920928955078125e-07, 2.9802322387695312e-06,
+	3.9935111999511719e-05}, /* L1153 */
+{1.6457158327102661e+00, 1.4126300811767578e-05,
+	1.1920928955078125e-07, -1.6212463378906250e-05,
+	1.3589859008789062e-05}, /* L1154 */
+{1.8611181974411011e+00, 1.6085803508758545e-05,
+	1.1920928955078125e-07, -1.1622905731201172e-05,
+	-1.1682510375976562e-05}, /* L1155 */
+{1.8321113586425781e+00, 1.5944242477416992e-05,
+	1.1920928955078125e-07, -2.2232532501220703e-05,
+	3.1352043151855469e-05}, /* L1156 */
+{2.2074513435363770e+00, 1.9341707229614258e-05,
+	1.1920928955078125e-07, -2.6404857635498047e-05,
+	-2.7418136596679688e-06}, /* L1157 */
+{2.0101280212402344e+00, 1.7732381820678711e-05,
+	1.1920928955078125e-07, -3.1590461730957031e-06,
+	-6.9141387939453125e-06}, /* L1158 */
+{3.4258801937103271e+00, 3.0428171157836914e-05,
+	1.1920928955078125e-07, -1.4126300811767578e-05,
+	-1.9788742065429688e-05}, /* L1159 */
+{1.8116010427474976e+00, 1.6197562217712402e-05,
+	1.1920928955078125e-07, -1.6093254089355469e-06,
+	7.6293945312500000e-06}, /* L1160 */
+{2.0053453445434570e+00, 1.8049031496047974e-05,
+	1.1920928955078125e-07, -3.2126903533935547e-05,
+	-1.7106533050537109e-05}, /* L1161 */
+{2.2388551235198975e+00, 2.0284205675125122e-05,
+	1.1920928955078125e-07, -4.6491622924804688e-06,
+	-1.3589859008789062e-05}, /* L1162 */
+{1.6697667837142944e+00, 1.5228986740112305e-05,
+	1.1920928955078125e-07, -1.5079975128173828e-05,
+	-4.3272972106933594e-05}, /* L1163 */
+{2.2406351566314697e+00, 2.0567327737808228e-05,
+	1.1920928955078125e-07, 1.5735626220703125e-05,
+	-9.5367431640625000e-06}, /* L1164 */
+{2.2467515468597412e+00, 2.0757317543029785e-05,
+	1.1920928955078125e-07, -1.4305114746093750e-06,
+	5.1259994506835938e-06}, /* L1165 */
+{2.3745467662811279e+00, 2.2079795598983765e-05,
+	1.1920928955078125e-07, 3.7431716918945312e-05,
+	-3.6358833312988281e-06}, /* L1166 */
+{2.0955083370208740e+00, 1.9609928131103516e-05,
+	1.1920928955078125e-07, 9.5367431640625000e-07,
+	-2.7298927307128906e-05}, /* L1167 */
+{1.7495329380035400e+00, 1.6480684280395508e-05,
+	1.1920928955078125e-07, -1.4305114746093750e-05,
+	-4.9769878387451172e-05}, /* L1168 */
+{2.1758046150207520e+00, 2.0623207092285156e-05,
+	1.1920928955078125e-07, 6.1154365539550781e-05,
+	-3.0517578125000000e-05}, /* L1169 */
+{2.2445225715637207e+00, 2.1405518054962158e-05,
+	1.1920928955078125e-07, -8.4638595581054688e-06,
+	-4.5299530029296875e-06}, /* L1170 */
+{1.6459550857543945e+00, 1.5795230865478516e-05,
+	1.1920928955078125e-07, 3.5762786865234375e-07,
+	7.0333480834960938e-06}, /* L1171 */
+{2.4256405830383301e+00, 2.3423694074153900e-05,
+	1.1920928955078125e-07, 3.2901763916015625e-05,
+	4.0531158447265625e-06}, /* L1172 */
+{1.8588899374008179e+00, 1.8060207366943359e-05,
+	1.1920928955078125e-07, -1.6927719116210938e-05,
+	-7.7486038208007812e-07}, /* L1173 */
+{2.1371707916259766e+00, 2.0891427993774414e-05,
+	1.1920928955078125e-07, -5.3644180297851562e-06,
+	-1.3709068298339844e-06}, /* L1174 */
+{2.0060150623321533e+00, 1.9729137420654297e-05,
+	1.1920928955078125e-07, -2.3782253265380859e-05,
+	1.1920928955078125e-06}, /* L1175 */
+{2.0059118270874023e+00, 1.9848346710205078e-05,
+	1.1920928955078125e-07, -2.8014183044433594e-05,
+	-3.5166740417480469e-05}, /* L1176 */
+{2.0755820274353027e+00, 2.0660459995269775e-05,
+	1.1920928955078125e-07, 4.1723251342773438e-06,
+	7.1525573730468750e-07}, /* L1177 */
+{3.0146615505218506e+00, 3.0189752578735352e-05,
+	1.1920928955078125e-07, 3.5405158996582031e-05,
+	-1.8298625946044922e-05}, /* L1178 */
+{3.9156386852264404e+00, 3.9443373680114746e-05,
+	1.1920928955078125e-07, -2.9802322387695312e-07,
+	1.0251998901367188e-05}, /* L1179 */
+{2.4558520317077637e+00, 2.4884939193725586e-05,
+	1.1920928955078125e-07, 8.3446502685546875e-06,
+	-5.3048133850097656e-06}, /* L1180 */
+{2.8026320934295654e+00, 2.8565526008605957e-05,
+	1.1920928955078125e-07, -1.9669532775878906e-06,
+	-1.0848045349121094e-05}, /* L1181 */
+{2.3371465206146240e+00, 2.3961067199707031e-05,
+	1.1920928955078125e-07, 2.3841857910156250e-07,
+	1.9073486328125000e-06}, /* L1182 */
+{2.1054863929748535e+00, 2.1710991859436035e-05,
+	1.1920928955078125e-07, 4.5299530029296875e-06,
+	-3.8146972656250000e-06}, /* L1183 */
+{2.3062880039215088e+00, 2.3931264877319336e-05,
+	1.1920928955078125e-07, 1.1324882507324219e-04,
+	-1.0037422180175781e-04}, /* L1184 */
+{2.5199549198150635e+00, 2.6285648345947266e-05,
+	1.1920928955078125e-07, -1.6748905181884766e-05,
+	2.2053718566894531e-05}, /* L1185 */
+{1.5906770229339600e+00, 1.6689300537109375e-05,
+	1.1920928955078125e-07, 4.4107437133789062e-05,
+	-1.6510486602783203e-05}, /* L1186 */
+{2.2541122436523438e+00, 2.3782253265380859e-05,
+	1.1920928955078125e-07, -3.5464763641357422e-05,
+	-6.1392784118652344e-06}, /* L1187 */
+{1.9265031814575195e+00, 2.0444393157958984e-05,
+	1.1920928955078125e-07, -3.2544136047363281e-05,
+	-4.9293041229248047e-05}, /* L1188 */
+{2.2580652236938477e+00, 2.4095177650451660e-05,
+	1.1920928955078125e-07, 1.0728836059570312e-05,
+	-5.9962272644042969e-05}, /* L1189 */
+{1.8595248460769653e+00, 1.9952654838562012e-05,
+	1.1920928955078125e-07, -2.0265579223632812e-06,
+	4.0411949157714844e-05}, /* L1190 */
+{2.6842482089996338e+00, 2.8960406780242920e-05,
+	1.1920928955078125e-07, -2.8252601623535156e-05,
+	-1.4364719390869141e-05}, /* L1191 */
+{2.4145283699035645e+00, 2.6196241378784180e-05,
+	1.1920928955078125e-07, 6.4373016357421875e-06,
+	-1.0728836059570312e-05}, /* L1192 */
+{2.0791890621185303e+00, 2.2679567337036133e-05,
+	1.1920928955078125e-07, -7.5697898864746094e-06,
+	1.8835067749023438e-05}, /* L1193 */
+{2.7559175491333008e+00, 3.0225142836570740e-05,
+	1.1920928955078125e-07, -4.2915344238281250e-06,
+	-8.3446502685546875e-07}, /* L1194 */
+{2.5566635131835938e+00, 2.8196722269058228e-05,
+	1.1920928955078125e-07, -9.7632408142089844e-05,
+	3.1471252441406250e-05}, /* L1195 */
+{3.8623738288879395e+00, 4.2855739593505859e-05,
+	1.1920928955078125e-07, 3.3819675445556641e-04,
+	2.2149085998535156e-04}, /* L1196 */
+{2.4945464134216309e+00, 2.7805566787719727e-05,
+	1.1920928955078125e-07, -1.3232231140136719e-05,
+	-3.5762786865234375e-07}, /* L1197 */
+{2.3874394893646240e+00, 2.6755034923553467e-05,
+	1.1920928955078125e-07, 2.1457672119140625e-05,
+	5.8412551879882812e-06}, /* L1198 */
+{3.1719310283660889e+00, 3.5732984542846680e-05,
+	1.1920928955078125e-07, -5.9604644775390625e-08,
+	-5.6624412536621094e-06}, /* L1199 */
+{2.5210285186767578e+00, 2.8550624847412109e-05,
+	1.1920928955078125e-07, -4.7683715820312500e-06,
+	1.0490417480468750e-05}, /* L1200 */
+{3.5811295509338379e+00, 4.0769577026367188e-05,
+	1.1920928955078125e-07, 4.7683715820312500e-06,
+	1.8119812011718750e-05}, /* L1201 */
+{2.6432023048400879e+00, 3.0249357223510742e-05,
+	1.1920928955078125e-07, 1.9669532775878906e-05,
+	7.0333480834960938e-06}, /* L1202 */
+{2.3445589542388916e+00, 2.6971101760864258e-05,
+	1.1920928955078125e-07, 1.2874603271484375e-05,
+	-3.3378601074218750e-06}, /* L1203 */
+{1.9561572074890137e+00, 2.2619962692260742e-05,
+	1.1920928955078125e-07, 2.6226043701171875e-06,
+	3.5762786865234375e-07}, /* L1204 */
+{2.0115103721618652e+00, 2.3379921913146973e-05,
+	1.1920928955078125e-07, 8.1062316894531250e-06,
+	2.4199485778808594e-05}, /* L1205 */
+{2.6887228488922119e+00, 3.1411647796630859e-05,
+	1.1920928955078125e-07, -4.1723251342773438e-07,
+	2.1457672119140625e-06}, /* L1206 */
+{2.2429711818695068e+00, 2.6345252990722656e-05,
+	1.1920928955078125e-07, 1.4436244964599609e-04,
+	-5.9545040130615234e-05}, /* L1207 */
+{2.2017180919647217e+00, 2.5987625122070312e-05,
+	1.1920928955078125e-07, 8.4519386291503906e-05,
+	-2.4557113647460938e-05}, /* L1208 */
+{2.1833324432373047e+00, 2.5898218154907227e-05,
+	1.1920928955078125e-07, -4.7147274017333984e-05,
+	1.9073486328125000e-05}, /* L1209 */
+{2.7066788673400879e+00, 3.2275915145874023e-05,
+	1.1920928955078125e-07, 9.6917152404785156e-05,
+	3.7431716918945312e-05}, /* L1210 */
+{2.2679762840270996e+00, 2.7172267436981201e-05,
+	1.1920928955078125e-07, -2.0503997802734375e-05,
+	-8.4042549133300781e-06}, /* L1211 */
+{2.2597937583923340e+00, 2.7209520339965820e-05,
+	1.1920928955078125e-07, -2.0682811737060547e-05,
+	-3.0577182769775391e-05}, /* L1212 */
+{2.4088115692138672e+00, 2.9146671295166016e-05,
+	1.1920928955078125e-07, 1.5497207641601562e-05,
+	-4.5895576477050781e-06}, /* L1213 */
+{2.9950757026672363e+00, 3.6418437957763672e-05,
+	1.1920928955078125e-07, -1.2636184692382812e-05,
+	-1.7046928405761719e-05}, /* L1214 */
+{2.5846471786499023e+00, 3.1664967536926270e-05,
+	1.1920928955078125e-07, 1.7772912979125977e-03,
+	-2.7197599411010742e-04}, /* L1215 */
+{2.6067717075347900e+00, 3.2007694244384766e-05,
+	1.1920928955078125e-07, 1.5258789062500000e-05,
+	-6.2584877014160156e-06}, /* L1216 */
+{2.1771912574768066e+00, 2.6863068342208862e-05,
+	1.1920928955078125e-07, -2.2053718566894531e-06,
+	1.3709068298339844e-05}, /* L1217 */
+{3.1068594455718994e+00, 3.8519501686096191e-05,
+	1.1920928955078125e-07, 1.5497207641601562e-05,
+	-6.7353248596191406e-06}, /* L1218 */
+{2.5741207599639893e+00, 3.2067298889160156e-05,
+	1.1920928955078125e-07, -8.5830688476562500e-06,
+	1.5974044799804688e-05}, /* L1219 */
+{3.2612531185150146e+00, 4.0821731090545654e-05,
+	1.1920928955078125e-07, -6.0200691223144531e-06,
+	-2.6702880859375000e-05}, /* L1220 */
+{3.1061952114105225e+00, 3.9067119359970093e-05,
+	1.1920928955078125e-07, 1.5139579772949219e-05,
+	-3.5762786865234375e-07}, /* L1221 */
+{3.9090692996978760e+00, 4.9397349357604980e-05,
+	1.1920928955078125e-07, -8.5830688476562500e-06,
+	-2.5033950805664062e-06}, /* L1222 */
+{2.9082803726196289e+00, 3.6925077438354492e-05,
+	1.1920928955078125e-07, -2.3841857910156250e-07,
+	-6.5565109252929688e-07}, /* L1223 */
+{2.2300553321838379e+00, 2.8446316719055176e-05,
+	1.1920928955078125e-07, -1.8239021301269531e-05,
+	-3.7372112274169922e-05}, /* L1224 */
+{3.8737306594848633e+00, 4.9658119678497314e-05,
+	1.1920928955078125e-07, -5.2392482757568359e-05,
+	-1.5497207641601562e-05}, /* L1225 */
+{2.3996686935424805e+00, 3.0897557735443115e-05,
+	1.1920928955078125e-07, -7.5757503509521484e-05,
+	-2.1457672119140625e-05}, /* L1226 */
+{3.0302970409393311e+00, 3.9309263229370117e-05,
+	1.1920928955078125e-07, 1.3022422790527344e-03,
+	-4.0930509567260742e-04}, /* L1227 */
+{2.0802607536315918e+00, 2.7030706405639648e-05,
+	1.1920928955078125e-07, 5.4836273193359375e-06,
+	5.8412551879882812e-06}, /* L1228 */
+{3.0661604404449463e+00, 4.0024518966674805e-05,
+	1.1920928955078125e-07, 1.5497207641601562e-06,
+	8.7022781372070312e-06}, /* L1229 */
+{2.2863128185272217e+00, 2.9981136322021484e-05,
+	1.1920928955078125e-07, 1.6331672668457031e-05,
+	-7.5697898864746094e-06}, /* L1230 */
+{3.1289212703704834e+00, 4.1216611862182617e-05,
+	1.1920928955078125e-07, 2.6226043701171875e-06,
+	1.0728836059570312e-05}, /* L1231 */
+{2.9346113204956055e+00, 3.8832426071166992e-05,
+	1.1920928955078125e-07, -5.3644180297851562e-06,
+	-1.4662742614746094e-05}, /* L1232 */
+{2.3267719745635986e+00, 3.0927360057830811e-05,
+	1.1920928955078125e-07, -1.1086463928222656e-05,
+	8.1062316894531250e-06}, /* L1233 */
+{2.2917885780334473e+00, 3.0666589736938477e-05,
+	1.1920928955078125e-07, -5.5700540542602539e-04,
+	-1.0199546813964844e-03}, /* L1234 */
+{2.6463797092437744e+00, 3.5494565963745117e-05,
+	1.1920928955078125e-07, -9.2387199401855469e-05,
+	2.7060508728027344e-05}, /* L1235 */
+{3.1678485870361328e+00, 4.2676925659179688e-05,
+	1.1920928955078125e-07, -6.3180923461914062e-06,
+	-2.4437904357910156e-06}, /* L1236 */
+{3.2464599609375000e+00, 4.3928623199462891e-05,
+	1.1920928955078125e-07, -1.5497207641601562e-05,
+	3.7074089050292969e-05}, /* L1237 */
+{3.2306761741638184e+00, 4.3913722038269043e-05,
+	1.1920928955078125e-07, -7.1525573730468750e-06,
+	2.9206275939941406e-05}, /* L1238 */
+{2.3965263366699219e+00, 3.2735988497734070e-05,
+	1.1920928955078125e-07, -2.4777650833129883e-04,
+	1.2147426605224609e-04}, /* L1239 */
+{3.2906377315521240e+00, 4.5120716094970703e-05,
+	1.1920928955078125e-07, -3.4153461456298828e-05,
+	-2.9683113098144531e-05}, /* L1240 */
+{3.3776614665985107e+00, 4.6506524085998535e-05,
+	1.1920928955078125e-07, -3.5166740417480469e-06,
+	1.7881393432617188e-06}, /* L1241 */
+{2.7369720935821533e+00, 3.7848949432373047e-05,
+	1.1920928955078125e-07, -1.0728836059570312e-06,
+	-1.0132789611816406e-05}, /* L1242 */
+{4.4909911155700684e+00, 6.2376260757446289e-05,
+	1.1920928955078125e-07, 1.1205673217773438e-05,
+	-2.4378299713134766e-05}, /* L1243 */
+{2.6878952980041504e+00, 3.7491321563720703e-05,
+	1.1920928955078125e-07, -4.3272972106933594e-05,
+	-4.2140483856201172e-05}, /* L1244 */
+{2.1084623336791992e+00, 2.9534101486206055e-05,
+	1.1920928955078125e-07, -1.0192394256591797e-05,
+	1.3828277587890625e-05}, /* L1245 */
+{2.8241481781005859e+00, 3.9726495742797852e-05,
+	1.1920928955078125e-07, 2.8610229492187500e-06,
+	-3.1590461730957031e-06}, /* L1246 */
+{3.9472033977508545e+00, 5.5767595767974854e-05,
+	1.1920928955078125e-07, 8.8214874267578125e-06,
+	4.2200088500976562e-05}, /* L1247 */
+{2.7856087684631348e+00, 3.9517879486083984e-05,
+	1.1920928955078125e-07, 2.7418136596679688e-06,
+	-2.5153160095214844e-05}, /* L1248 */
+{3.1797544956207275e+00, 4.5299530029296875e-05,
+	1.1920928955078125e-07, 4.0054321289062500e-05,
+	4.0769577026367188e-05}, /* L1249 */
+{3.2002224922180176e+00, 4.5806169509887695e-05,
+	1.1920928955078125e-07, 3.5643577575683594e-05,
+	1.0037422180175781e-04}, /* L1250 */
+{2.9428439140319824e+00, 4.2289495468139648e-05,
+	1.1920928955078125e-07, -5.0783157348632812e-05,
+	3.9577484130859375e-05}, /* L1251 */
+{3.3541893959045410e+00, 4.8384070396423340e-05,
+	1.1920928955078125e-07, -2.4616718292236328e-05,
+	-5.4121017456054688e-05}, /* L1252 */
+{3.0121967792510986e+00, 4.3645501136779785e-05,
+	1.1920928955078125e-07, -2.5999546051025391e-04,
+	-1.1211633682250977e-04}, /* L1253 */
+{2.7211909294128418e+00, 3.9577484130859375e-05,
+	1.1920928955078125e-07, -1.9967555999755859e-05,
+	1.7881393432617188e-06}, /* L1254 */
+{2.6671855449676514e+00, 3.8951635360717773e-05,
+	1.1920928955078125e-07, 4.1365623474121094e-05,
+	9.5367431640625000e-07}, /* L1255 */
+{3.5121285915374756e+00, 5.1498413085937500e-05,
+	1.1920928955078125e-07, 1.6093254089355469e-05,
+	3.4570693969726562e-06}, /* L1256 */
+{2.9267933368682861e+00, 4.3094158172607422e-05,
+	1.1920928955078125e-07, -7.1227550506591797e-05,
+	-6.4253807067871094e-05}, /* L1257 */
+{2.5106649398803711e+00, 3.7118792533874512e-05,
+	1.1920928955078125e-07, 2.5391578674316406e-05,
+	1.5211105346679688e-04}, /* L1258 */
+{2.4577031135559082e+00, 3.6492943763732910e-05,
+	1.1920928955078125e-07, -4.3272972106933594e-05,
+	-3.0696392059326172e-05}, /* L1259 */
+{3.2924635410308838e+00, 4.9069523811340332e-05,
+	1.1920928955078125e-07, -6.5565109252929688e-05,
+	-1.0550022125244141e-05}, /* L1260 */
+{3.1647403240203857e+00, 4.7355890274047852e-05,
+	1.1920928955078125e-07, 2.5033950805664062e-06,
+	5.3405761718750000e-05}, /* L1261 */
+{2.5652899742126465e+00, 3.8534402847290039e-05,
+	1.1920928955078125e-07, 1.5497207641601562e-05,
+	-7.1525573730468750e-06}, /* L1262 */
+{3.0589282512664795e+00, 4.6133995056152344e-05,
+	1.1920928955078125e-07, -1.3053417205810547e-05,
+	-6.1035156250000000e-05}, /* L1263 */
+{3.4289965629577637e+00, 5.1915645599365234e-05,
+	1.1920928955078125e-07, -3.9935111999511719e-06,
+	3.8862228393554688e-05}, /* L1264 */
+{3.9899127483367920e+00, 6.0647726058959961e-05,
+	1.1920928955078125e-07, -2.8550624847412109e-05,
+	-3.5762786865234375e-07}, /* L1265 */
+{2.8133091926574707e+00, 4.2930245399475098e-05,
+	1.1920928955078125e-07, 1.9907951354980469e-05,
+	-2.7418136596679688e-06}, /* L1266 */
+{3.9885497093200684e+00, 6.1154365539550781e-05,
+	1.1920928955078125e-07, -1.3113021850585938e-05,
+	-1.2624263763427734e-04}, /* L1267 */
+{3.0203218460083008e+00, 4.6454370021820068e-05,
+	1.1920928955078125e-07, -1.1920928955078125e-05,
+	-7.1287155151367188e-05}, /* L1268 */
+{2.6234917640686035e+00, 4.0501356124877930e-05,
+	1.1920928955078125e-07, -1.1265277862548828e-05,
+	-8.7022781372070312e-06}, /* L1269 */
+{3.4784512519836426e+00, 5.3912401199340820e-05,
+	1.1920928955078125e-07, 1.5974044799804688e-05,
+	-4.1723251342773438e-06}, /* L1270 */
+{5.2191519737243652e+00, 8.1203877925872803e-05,
+	1.1920928955078125e-07, 3.8146972656250000e-05,
+	3.6478042602539062e-05}, /* L1271 */
+{3.7924778461456299e+00, 5.9247016906738281e-05,
+	1.1920928955078125e-07, 2.7549266815185547e-04,
+	-3.7968158721923828e-05}, /* L1272 */
+{3.3542623519897461e+00, 5.2586197853088379e-05,
+	1.1920928955078125e-07, 4.5776367187500000e-05,
+	-6.7532062530517578e-05}, /* L1273 */
+{3.5926158428192139e+00, 5.6535005569458008e-05,
+	1.1920928955078125e-07, -5.6028366088867188e-06,
+	2.7656555175781250e-05}, /* L1274 */
+{3.5994863510131836e+00, 5.6862831115722656e-05,
+	1.1920928955078125e-07, -6.7114830017089844e-05,
+	-6.7353248596191406e-05}, /* L1275 */
+{3.8888278007507324e+00, 6.1661005020141602e-05,
+	1.1920928955078125e-07, 3.2663345336914062e-05,
+	3.3378601074218750e-05}, /* L1276 */
+{3.9306416511535645e+00, 6.2577426433563232e-05,
+	1.1920928955078125e-07, -8.1419944763183594e-05,
+	-2.8014183044433594e-05}, /* L1277 */
+{2.8954002857208252e+00, 4.6253204345703125e-05,
+	1.1920928955078125e-07, 1.6450881958007812e-05,
+	-9.8943710327148438e-06}, /* L1278 */
+{2.8672094345092773e+00, 4.5999884605407715e-05,
+	1.1920928955078125e-07, 7.4505805969238281e-05,
+	-4.9054622650146484e-05}, /* L1279 */
+{2.3275427818298340e+00, 3.7461519241333008e-05,
+	1.1920928955078125e-07, -5.2809715270996094e-05,
+	-3.3557415008544922e-05}, /* L1280 */
+{2.8670883178710938e+00, 4.6312808990478516e-05,
+	1.1920928955078125e-07, -1.8060207366943359e-05,
+	-1.4662742614746094e-05}, /* L1281 */
+{3.5310692787170410e+00, 5.7250261306762695e-05,
+	1.1920928955078125e-07, -4.3511390686035156e-06,
+	1.8477439880371094e-05}, /* L1282 */
+{3.8918013572692871e+00, 6.3329935073852539e-05,
+	1.1920928955078125e-07, 7.3909759521484375e-06,
+	-1.0848045349121094e-05}, /* L1283 */
+{3.1068062782287598e+00, 5.0749629735946655e-05,
+	1.1920928955078125e-07, -5.3644180297851562e-05,
+	-2.7418136596679688e-05}, /* L1284 */
+{2.8671267032623291e+00, 4.6998262405395508e-05,
+	1.1920928955078125e-07, -9.5367431640625000e-07,
+	1.3351440429687500e-05}, /* L1285 */
+{3.5216612815856934e+00, 5.7935714721679688e-05,
+	1.1920928955078125e-07, -1.4781951904296875e-05,
+	-8.7022781372070312e-06}, /* L1286 */
+{2.7244505882263184e+00, 4.5001506805419922e-05,
+	1.1920928955078125e-07, 1.8489360809326172e-04,
+	-1.6993284225463867e-04}, /* L1287 */
+{3.3593361377716064e+00, 5.5670738220214844e-05,
+	1.1920928955078125e-07, -3.6418437957763672e-05,
+	2.0742416381835938e-05}, /* L1288 */
+{2.6397724151611328e+00, 4.3898820877075195e-05,
+	1.1920928955078125e-07, -1.1086463928222656e-05,
+	8.3446502685546875e-07}, /* L1289 */
+{3.2254927158355713e+00, 5.3852796554565430e-05,
+	1.1920928955078125e-07, -3.0815601348876953e-05,
+	1.1920928955078125e-07}, /* L1290 */
+{3.3631930351257324e+00, 5.6341290473937988e-05,
+	1.1920928955078125e-07, -6.7949295043945312e-06,
+	5.9962272644042969e-05}, /* L1291 */
+{3.4079694747924805e+00, 5.7285651564598083e-05,
+	1.1920928955078125e-07, -3.6001205444335938e-05,
+	2.8610229492187500e-06}, /* L1292 */
+{2.8880021572113037e+00, 4.8749148845672607e-05,
+	1.1920928955078125e-07, -5.7220458984375000e-06,
+	-1.2904405593872070e-04}, /* L1293 */
+{3.8768889904022217e+00, 6.5632164478302002e-05,
+	1.1920928955078125e-07, -4.0531158447265625e-06,
+	3.4093856811523438e-05}, /* L1294 */
+{3.2189145088195801e+00, 5.4687261581420898e-05,
+	1.1920928955078125e-07, -2.3305416107177734e-05,
+	-1.7583370208740234e-05}, /* L1295 */
+{2.7826395034790039e+00, 4.7439709305763245e-05,
+	1.1920928955078125e-07, -8.6188316345214844e-05,
+	-1.3828277587890625e-05}, /* L1296 */
+{2.9319143295288086e+00, 5.0157308578491211e-05,
+	1.1920928955078125e-07, 1.3709068298339844e-05,
+	-2.3841857910156250e-07}, /* L1297 */
+{4.1965179443359375e+00, 7.2211027145385742e-05,
+	1.1920928955078125e-07, -2.0766258239746094e-04,
+	3.7491321563720703e-04}, /* L1298 */
+{3.0189342498779297e+00, 5.2005052566528320e-05,
+	1.1920928955078125e-07, 8.4638595581054688e-06,
+	4.5299530029296875e-06}, /* L1299 */
+{2.9598660469055176e+00, 5.1163136959075928e-05,
+	1.1920928955078125e-07, -2.9206275939941406e-06,
+	-2.3841857910156250e-06}, /* L1300 */
+{4.8141779899597168e+00, 8.3506107330322266e-05,
+	1.1920928955078125e-07, 2.9206275939941406e-05,
+	-1.7285346984863281e-06}, /* L1301 */
+{3.1006553173065186e+00, 5.3977011702954769e-05,
+	1.1920928955078125e-07, 7.7128410339355469e-05,
+	-1.2838840484619141e-04}, /* L1302 */
+{2.6993238925933838e+00, 4.7147274017333984e-05,
+	1.1920928955078125e-07, 4.4345855712890625e-05,
+	-1.0132789611816406e-06}, /* L1303 */
+{4.3526625633239746e+00, 7.6293945312500000e-05,
+	1.1920928955078125e-07, 7.2121620178222656e-05,
+	-2.3025274276733398e-04}, /* L1304 */
+{4.0632801055908203e+00, 7.1555376052856445e-05,
+	1.1920928955078125e-07, 1.8525123596191406e-04,
+	4.5967102050781250e-04}, /* L1305 */
+{6.7649230957031250e+00, 1.1935830116271973e-04,
+	1.1920928955078125e-07, 1.1682510375976562e-05,
+	1.9550323486328125e-05}, /* L1306 */
+{4.0029668807983398e+00, 7.0869922637939453e-05,
+	1.1920928955078125e-07, -1.7702579498291016e-05,
+	-7.0333480834960938e-06}, /* L1307 */
+{5.3224954605102539e+00, 9.4577670097351074e-05,
+	1.1920928955078125e-07, 4.6491622924804688e-05,
+	1.4436244964599609e-04}, /* L1308 */
+{3.4629216194152832e+00, 6.1720609664916992e-05,
+	1.1920928955078125e-07, 2.2411346435546875e-05,
+	-2.9981136322021484e-05}, /* L1309 */
+{3.6836194992065430e+00, 6.5892934799194336e-05,
+	1.1920928955078125e-07, 1.6975402832031250e-04,
+	-2.0557641983032227e-04}, /* L1310 */
+{3.7666192054748535e+00, 6.7591667175292969e-05,
+	1.1920928955078125e-07, -1.2642145156860352e-04,
+	-3.4868717193603516e-05}, /* L1311 */
+{3.0687901973724365e+00, 5.5253505706787109e-05,
+	1.1920928955078125e-07, -2.9146671295166016e-05,
+	2.9563903808593750e-05}, /* L1312 */
+{2.6712586879730225e+00, 4.8249959945678711e-05,
+	1.1920928955078125e-07, 3.4928321838378906e-05,
+	-5.0127506256103516e-05}, /* L1313 */
+{3.4850175380706787e+00, 6.3151121139526367e-05,
+	1.1920928955078125e-07, 2.9563903808593750e-05,
+	-3.0398368835449219e-06}, /* L1314 */
+{3.4851601123809814e+00, 6.3360668718814850e-05,
+	1.1920928955078125e-07, 3.4570693969726562e-06,
+	-9.7155570983886719e-06}, /* L1315 */
+{3.3319339752197266e+00, 6.0796737670898438e-05,
+	1.1920928955078125e-07, 1.0681152343750000e-04,
+	1.6474723815917969e-04}, /* L1316 */
+{5.1887230873107910e+00, 9.4980001449584961e-05,
+	1.1920928955078125e-07, -4.0411949157714844e-05,
+	3.7908554077148438e-05}, /* L1317 */
+{5.3918108940124512e+00, 9.8999589681625366e-05,
+	1.1920928955078125e-07, 2.6702880859375000e-05,
+	-4.9293041229248047e-05}, /* L1318 */
+{3.7143328189849854e+00, 6.8426132202148438e-05,
+	1.1920928955078125e-07, 2.7656555175781250e-05,
+	-5.5789947509765625e-05}, /* L1319 */
+{3.5686254501342773e+00, 6.5952539443969727e-05,
+	1.1920928955078125e-07, -1.0555982589721680e-04,
+	-1.0311603546142578e-05}, /* L1320 */
+{4.0656347274780273e+00, 7.5370073318481445e-05,
+	1.1920928955078125e-07, -2.6106834411621094e-05,
+	2.5153160095214844e-05}, /* L1321 */
+{4.2824273109436035e+00, 7.9661607742309570e-05,
+	1.1920928955078125e-07, -1.9639730453491211e-04,
+	-1.2457370758056641e-05}, /* L1322 */
+{3.5407865047454834e+00, 6.6071748733520508e-05,
+	1.1920928955078125e-07, 1.6641616821289062e-04,
+	1.1157989501953125e-04}, /* L1323 */
+{3.4998750686645508e+00, 6.5505504608154297e-05,
+	1.1920928955078125e-07, -1.4424324035644531e-05,
+	2.6583671569824219e-05}, /* L1324 */
+{3.6763875484466553e+00, 6.9029629230499268e-05,
+	1.1920928955078125e-07, 4.1007995605468750e-05,
+	-2.9802322387695312e-06}, /* L1325 */
+{5.0139293670654297e+00, 9.4443559646606445e-05,
+	1.1920928955078125e-07, -7.1465969085693359e-05,
+	-2.9385089874267578e-05}, /* L1326 */
+{4.4658980369567871e+00, 8.4385275840759277e-05,
+	1.1920928955078125e-07, 1.3113021850585938e-05,
+	-1.7285346984863281e-06}, /* L1327 */
+{3.1854162216186523e+00, 6.0379505157470703e-05,
+	1.1920928955078125e-07, -1.7583370208740234e-05,
+	1.8835067749023438e-05}, /* L1328 */
+{3.8384883403778076e+00, 7.2985887527465820e-05,
+	1.1920928955078125e-07, 2.1815299987792969e-05,
+	-1.2397766113281250e-05}, /* L1329 */
+{3.4356751441955566e+00, 6.5535306930541992e-05,
+	1.1920928955078125e-07, -1.2516975402832031e-06,
+	2.8729438781738281e-05}, /* L1330 */
+{2.9541642665863037e+00, 5.6564807891845703e-05,
+	1.1920928955078125e-07, 7.5137615203857422e-04,
+	-2.8008222579956055e-04}, /* L1331 */
+{3.7685103416442871e+00, 7.2330236434936523e-05,
+	1.1920928955078125e-07, -1.6391277313232422e-05,
+	-2.3543834686279297e-05}, /* L1332 */
+{3.7530016899108887e+00, 7.2270631790161133e-05,
+	1.1920928955078125e-07, 1.9073486328125000e-06,
+	-3.3736228942871094e-05}, /* L1333 */
+{3.2955565452575684e+00, 6.3657760620117188e-05,
+	1.1920928955078125e-07, 2.4437904357910156e-05,
+	1.7166137695312500e-05}, /* L1334 */
+{4.7795829772949219e+00, 9.2595815658569336e-05,
+	1.1920928955078125e-07, -1.2874603271484375e-05,
+	-8.3446502685546875e-07}, /* L1335 */
+{3.7617290019989014e+00, 7.3105096817016602e-05,
+	1.1920928955078125e-07, 5.3763389587402344e-05,
+	-3.1888484954833984e-05}, /* L1336 */
+{3.8056991100311279e+00, 7.4177980422973633e-05,
+	1.1920928955078125e-07, 3.4570693969726562e-06,
+	-1.3113021850585938e-06}, /* L1337 */
+{4.3724923133850098e+00, 8.5502862930297852e-05,
+	1.1920928955078125e-07, -8.7857246398925781e-05,
+	-2.7942657470703125e-04}, /* L1338 */
+{3.7000031471252441e+00, 7.2583556175231934e-05,
+	1.1920928955078125e-07, 2.2530555725097656e-05,
+	-3.5464763641357422e-05}, /* L1339 */
+{3.9001255035400391e+00, 7.6718628406524658e-05,
+	1.1920928955078125e-07, -8.7797641754150391e-05,
+	-1.4483928680419922e-05}, /* L1340 */
+{4.4363026618957520e+00, 8.7529420852661133e-05,
+	1.1920928955078125e-07, 7.1525573730468750e-07,
+	3.8146972656250000e-06}, /* L1341 */
+{4.4184427261352539e+00, 8.7440013885498047e-05,
+	1.1920928955078125e-07, 2.4437904357910156e-05,
+	2.3245811462402344e-05}, /* L1342 */
+{3.0645101070404053e+00, 6.0901045799255371e-05,
+	1.1920928955078125e-07, 2.5093555450439453e-04,
+	5.7590007781982422e-04}, /* L1343 */
+{3.2422950267791748e+00, 6.4581632614135742e-05,
+	1.1920928955078125e-07, 1.7821788787841797e-04,
+	5.9723854064941406e-05}, /* L1344 */
+{3.6899039745330811e+00, 7.3730945587158203e-05,
+	1.1920928955078125e-07, 1.9395351409912109e-04,
+	9.5248222351074219e-05}, /* L1345 */
+{3.9974186420440674e+00, 8.0078840255737305e-05,
+	1.1920928955078125e-07, 4.6491622924804688e-05,
+	-1.2278556823730469e-05}, /* L1346 */
+{3.4381773471832275e+00, 6.9111585617065430e-05,
+	1.1920928955078125e-07, -9.4294548034667969e-05,
+	1.8656253814697266e-04}, /* L1347 */
+{3.3473718166351318e+00, 6.7442655563354492e-05,
+	1.1920928955078125e-07, 9.3460083007812500e-05,
+	1.1563301086425781e-05}, /* L1348 */
+{4.7897124290466309e+00, 9.6812844276428223e-05,
+	1.1920928955078125e-07, -2.9861927032470703e-05,
+	4.1842460632324219e-05}, /* L1349 */
+{4.7768397331237793e+00, 9.6887350082397461e-05,
+	1.1920928955078125e-07, 1.5878677368164062e-04,
+	2.6476383209228516e-04}, /* L1350 */
+{4.2064580917358398e+00, 8.5502862930297852e-05,
+	1.1920928955078125e-07, 5.4001808166503906e-05,
+	4.6372413635253906e-05}, /* L1351 */
+{3.8003456592559814e+00, 7.7471137046813965e-05,
+	1.1920928955078125e-07, 7.5101852416992188e-06,
+	1.2636184692382812e-05}, /* L1352 */
+{3.1709525585174561e+00, 6.4849853515625000e-05,
+	1.1920928955078125e-07, 1.5330314636230469e-04,
+	4.6968460083007812e-05}, /* L1353 */
+{4.8793897628784180e+00, 1.0005198419094086e-04,
+	1.1920928955078125e-07, 3.0994415283203125e-06,
+	-2.5868415832519531e-05}, /* L1354 */
+{4.4213376045227051e+00, 9.0926885604858398e-05,
+	1.1920928955078125e-07, -1.3351440429687500e-05,
+	-6.2227249145507812e-05}, /* L1355 */
+{3.8869545459747314e+00, 8.0168247222900391e-05,
+	1.1920928955078125e-07, 3.6239624023437500e-05,
+	1.4305114746093750e-05}, /* L1356 */
+{4.4384484291076660e+00, 9.1813504695892334e-05,
+	1.1920928955078125e-07, 5.1379203796386719e-05,
+	3.9458274841308594e-05}, /* L1357 */
+{3.3497838973999023e+00, 6.9588422775268555e-05,
+	1.1920928955078125e-07, 1.0526180267333984e-04,
+	-4.7951936721801758e-04}, /* L1358 */
+{4.2968616485595703e+00, 8.9406967163085938e-05,
+	1.1920928955078125e-07, -5.0067901611328125e-06,
+	-1.2087821960449219e-04}, /* L1359 */
+{3.2734379768371582e+00, 6.8306922912597656e-05,
+	1.1920928955078125e-07, 4.7683715820312500e-05,
+	5.4121017456054688e-05}, /* L1360 */
+{3.7476680278778076e+00, 7.8409910202026367e-05,
+	1.1920928955078125e-07, -5.9604644775390625e-08,
+	-2.1874904632568359e-05}, /* L1361 */
+{2.6689467430114746e+00, 5.5998563766479492e-05,
+	1.1920928955078125e-07, 1.8835067749023438e-05,
+	6.7949295043945312e-06}, /* L1362 */
+{4.1301960945129395e+00, 8.6911022663116455e-05,
+	1.1920928955078125e-07, -8.0823898315429688e-05,
+	-5.5909156799316406e-05}, /* L1363 */
+{3.7226531505584717e+00, 7.8558921813964844e-05,
+	1.1920928955078125e-07, -8.6426734924316406e-06,
+	-1.4024972915649414e-04}, /* L1364 */
+{4.2799062728881836e+00, 9.0651214122772217e-05,
+	1.1920928955078125e-07, 1.0025501251220703e-04,
+	9.7906589508056641e-04}, /* L1365 */
+{4.6442990303039551e+00, 9.8556280136108398e-05,
+	1.1920928955078125e-07, -5.0663948059082031e-06,
+	3.0994415283203125e-06}, /* L1366 */
+{4.7994618415832520e+00, 1.0213255882263184e-04,
+	1.1920928955078125e-07, -4.9412250518798828e-05,
+	1.4543533325195312e-05}, /* L1367 */
+{3.9578948020935059e+00, 8.4459781646728516e-05,
+	1.1920928955078125e-07, -3.6954879760742188e-05,
+	-1.0728836059570312e-05}, /* L1368 */
+{4.7142872810363770e+00, 1.0088086128234863e-04,
+	1.1920928955078125e-07, 2.0503997802734375e-05,
+	-3.2603740692138672e-05}, /* L1369 */
+{5.0617432594299316e+00, 1.0862946510314941e-04,
+	1.1920928955078125e-07, -1.1181831359863281e-04,
+	4.1246414184570312e-05}, /* L1370 */
+{5.4651422500610352e+00, 1.1759996414184570e-04,
+	1.1920928955078125e-07, -2.6047229766845703e-05,
+	1.0728836059570312e-05}, /* L1371 */
+{4.6017537117004395e+00, 9.9293887615203857e-05,
+	1.1920928955078125e-07, 1.2516975402832031e-05,
+	-3.6478042602539062e-05}, /* L1372 */
+{4.5816631317138672e+00, 9.9137425422668457e-05,
+	1.1920928955078125e-07, 3.6954879760742188e-06,
+	2.1100044250488281e-05}, /* L1373 */
+{4.7823390960693359e+00, 1.0377168655395508e-04,
+	1.1920928955078125e-07, -1.3709068298339844e-05,
+	-1.1742115020751953e-05}, /* L1374 */
+{4.1994113922119141e+00, 9.1386958956718445e-05,
+	1.1920928955078125e-07, -6.6399574279785156e-05,
+	9.4413757324218750e-05}, /* L1375 */
+{4.8262686729431152e+00, 1.0529160499572754e-04,
+	1.1920928955078125e-07, 2.7537345886230469e-05,
+	7.2717666625976562e-06}, /* L1376 */
+{3.3819701671600342e+00, 7.3999166488647461e-05,
+	1.1920928955078125e-07, 7.6889991760253906e-05,
+	1.5044212341308594e-04}, /* L1377 */
+{3.3624505996704102e+00, 7.3760747909545898e-05,
+	1.1920928955078125e-07, -3.3974647521972656e-05,
+	2.9444694519042969e-05}, /* L1378 */
+{4.9617981910705566e+00, 1.0913610458374023e-04,
+	1.1920928955078125e-07, -1.7285346984863281e-06,
+	-2.4974346160888672e-05}, /* L1379 */
+{3.5646283626556396e+00, 7.8618526458740234e-05,
+	1.1920928955078125e-07, 1.1563301086425781e-05,
+	-1.9013881683349609e-05}, /* L1380 */
+{3.5102624893188477e+00, 7.7642500400543213e-05,
+	1.1920928955078125e-07, -3.1173229217529297e-05,
+	9.8705291748046875e-05}, /* L1381 */
+{6.0708155632019043e+00, 1.3461709022521973e-04,
+	1.1920928955078125e-07, 5.2452087402343750e-06,
+	2.3245811462402344e-05}, /* L1382 */
+{5.0780024528503418e+00, 1.1290609836578369e-04,
+	1.1920928955078125e-07, -2.0861625671386719e-05,
+	-1.4662742614746094e-05}, /* L1383 */
+{4.7435007095336914e+00, 1.0645389556884766e-04,
+	1.1920928955078125e-07, 3.3431053161621094e-03,
+	3.3942461013793945e-03}, /* L1384 */
+{4.6372504234313965e+00, 1.0368227958679199e-04,
+	1.1920928955078125e-07, -3.0100345611572266e-05,
+	8.4877014160156250e-05}, /* L1385 */
+{4.3456716537475586e+00, 9.7418669611215591e-05,
+	1.1920928955078125e-07, 2.8550624847412109e-04,
+	1.4424324035644531e-05}, /* L1386 */
+{4.2961630821228027e+00, 9.6589326858520508e-05,
+	1.1920928955078125e-07, 6.7949295043945312e-05,
+	3.3974647521972656e-05}, /* L1387 */
+{4.9144001007080078e+00, 1.1077523231506348e-04,
+	1.1920928955078125e-07, 1.0597705841064453e-04,
+	-6.3776969909667969e-06}, /* L1388 */
+{4.4230256080627441e+00, 9.9927186965942383e-05,
+	1.1920928955078125e-07, 2.7418136596679688e-05,
+	-4.2319297790527344e-06}, /* L1389 */
+{4.6450762748718262e+00, 1.0521709918975830e-04,
+	1.1920928955078125e-07, 5.8412551879882812e-05,
+	6.1631202697753906e-05}, /* L1390 */
+{3.1887686252593994e+00, 7.2419643402099609e-05,
+	1.1920928955078125e-07, 1.9311904907226562e-05,
+	1.5497207641601562e-05}, /* L1391 */
+{6.2474112510681152e+00, 1.4239549636840820e-04,
+	1.1920928955078125e-07, -1.8680095672607422e-04,
+	3.9577484130859375e-04}, /* L1392 */
+{4.5461459159851074e+00, 1.0380148887634277e-04,
+	1.1920928955078125e-07, -4.9412250518798828e-05,
+	1.2040138244628906e-05}, /* L1393 */
+{5.0377044677734375e+00, 1.1539459228515625e-04,
+	1.1920928955078125e-07, -4.3505430221557617e-04,
+	-8.9287757873535156e-05}, /* L1394 */
+{6.0852775573730469e+00, 1.3966858386993408e-04,
+	1.1920928955078125e-07, 1.6927719116210938e-05,
+	4.3869018554687500e-05}, /* L1395 */
+{4.5087976455688477e+00, 1.0374188423156738e-04,
+	1.1920928955078125e-07, 2.1219253540039062e-05,
+	7.1525573730468750e-06}, /* L1396 */
+{5.5137805938720703e+00, 1.2719631195068359e-04,
+	1.1920928955078125e-07, -1.8596649169921875e-05,
+	-1.7404556274414062e-05}, /* L1397 */
+{3.8598725795745850e+00, 8.9272856712341309e-05,
+	1.1920928955078125e-07, 2.0146369934082031e-05,
+	-1.8179416656494141e-05}, /* L1398 */
+{3.4021766185760498e+00, 7.8886747360229492e-05,
+	1.1920928955078125e-07, 2.3961067199707031e-05,
+	3.1590461730957031e-05}, /* L1399 */
+{5.9166455268859863e+00, 1.3754516839981079e-04,
+	1.1920928955078125e-07, 1.0609626770019531e-05,
+	-1.8179416656494141e-05}, /* L1400 */
+{3.1801805496215820e+00, 7.4118375778198242e-05,
+	1.1920928955078125e-07, -7.0333480834960938e-06,
+	-7.0929527282714844e-06}, /* L1401 */
+{4.5846505165100098e+00, 1.0737776756286621e-04,
+	1.1920928955078125e-07, -2.8544664382934570e-04,
+	1.0683536529541016e-03}, /* L1402 */
+{6.6109290122985840e+00, 1.5487521886825562e-04,
+	1.1920928955078125e-07, 7.2717666625976562e-06,
+	-7.2121620178222656e-06}, /* L1403 */
+{4.8248658180236816e+00, 1.1331588029861450e-04,
+	1.1920928955078125e-07, -1.2457370758056641e-05,
+	2.3961067199707031e-05}, /* L1404 */
+{5.3237805366516113e+00, 1.2554973363876343e-04,
+	1.1920928955078125e-07, -3.0612945556640625e-04,
+	2.4306774139404297e-04}, /* L1405 */
+{4.9872794151306152e+00, 1.1783838272094727e-04,
+	1.1920928955078125e-07, -2.5516748428344727e-04,
+	2.8669834136962891e-04}, /* L1406 */
+{4.0393199920654297e+00, 9.5590949058532715e-05,
+	1.1920928955078125e-07, -1.1384487152099609e-05,
+	-4.3869018554687500e-05}, /* L1407 */
+{3.8832790851593018e+00, 9.2133879661560059e-05,
+	1.1920928955078125e-07, -2.1874904632568359e-05,
+	6.3776969909667969e-05}, /* L1408 */
+{5.4100017547607422e+00, 1.2868829071521759e-04,
+	1.1920928955078125e-07, 1.7285346984863281e-05,
+	-2.9802322387695312e-05}, /* L1409 */
+{4.4211664199829102e+00, 1.0542571544647217e-04,
+	1.1920928955078125e-07, 5.5551528930664062e-05,
+	3.5881996154785156e-05}, /* L1410 */
+{3.2668707370758057e+00, 7.8089535236358643e-05,
+	1.1920928955078125e-07, 4.8637390136718750e-05,
+	-4.0173530578613281e-05}, /* L1411 */
+{6.1488976478576660e+00, 1.4734268188476562e-04,
+	1.1920928955078125e-07, 2.3245811462402344e-05,
+	1.5020370483398438e-05}, /* L1412 */
+{5.3101110458374023e+00, 1.2756884098052979e-04,
+	1.1920928955078125e-07, 2.7537345886230469e-05,
+	-5.4538249969482422e-05}, /* L1413 */
+{5.2199330329895020e+00, 1.2570619583129883e-04,
+	1.1920928955078125e-07, -1.7344951629638672e-05,
+	-2.4914741516113281e-05}, /* L1414 */
+{4.4799566268920898e+00, 1.0815262794494629e-04,
+	1.1920928955078125e-07, 1.3589859008789062e-05,
+	6.7591667175292969e-05}, /* L1415 */
+{5.8589501380920410e+00, 1.4179944992065430e-04,
+	1.1920928955078125e-07, -7.7068805694580078e-05,
+	3.6120414733886719e-05}, /* L1416 */
+{3.6312186717987061e+00, 8.8095664978027344e-05,
+	1.1920928955078125e-07, 2.5153160095214844e-05,
+	7.9870223999023438e-06}, /* L1417 */
+{4.9162602424621582e+00, 1.1957436800003052e-04,
+	1.1920928955078125e-07, -4.2915344238281250e-06,
+	-7.6234340667724609e-05}, /* L1418 */
+{4.8697094917297363e+00, 1.1873245239257812e-04,
+	1.1920928955078125e-07, -3.2007694244384766e-05,
+	-1.1289119720458984e-04}, /* L1419 */
+{5.6039214134216309e+00, 1.3706088066101074e-04,
+	1.1920928955078125e-07, -8.9526176452636719e-05,
+	-1.2260675430297852e-04}, /* L1420 */
+{6.0624976158142090e+00, 1.4853477478027344e-04,
+	1.1920928955078125e-07, -9.6559524536132812e-06,
+	5.6385993957519531e-05}, /* L1421 */
+{5.2167501449584961e+00, 1.2812018394470215e-04,
+	1.1920928955078125e-07, -1.0073184967041016e-05,
+	1.4543533325195312e-05}, /* L1422 */
+{4.6749162673950195e+00, 1.1511531192809343e-04,
+	1.1920928955078125e-07, -2.1779537200927734e-04,
+	9.8466873168945312e-05}, /* L1423 */
+{4.3700361251831055e+00, 1.0785460472106934e-04,
+	1.1920928955078125e-07, 5.8531761169433594e-05,
+	-1.4722347259521484e-05}, /* L1424 */
+{4.4332079887390137e+00, 1.0967254638671875e-04,
+	1.1920928955078125e-07, 1.7166137695312500e-05,
+	1.8596649169921875e-05}, /* L1425 */
+{5.1984019279479980e+00, 1.2895464897155762e-04,
+	1.1920928955078125e-07, 1.5163421630859375e-04,
+	-6.1392784118652344e-06}, /* L1426 */
+{4.1160373687744141e+00, 1.0234117507934570e-04,
+	1.1920928955078125e-07, -1.2093782424926758e-04,
+	2.0217895507812500e-04}, /* L1427 */
+{4.6941976547241211e+00, 1.1697411537170410e-04,
+	1.1920928955078125e-07, 9.5486640930175781e-05,
+	1.6212463378906250e-05}, /* L1428 */
+{4.7335615158081055e+00, 1.1822581291198730e-04,
+	1.1920928955078125e-07, -2.1815299987792969e-05,
+	6.8664550781250000e-05}, /* L1429 */
+{5.0993728637695312e+00, 1.2767314910888672e-04,
+	1.1920928955078125e-07, -5.8770179748535156e-05,
+	-2.1100044250488281e-05}, /* L1430 */
+{6.7603044509887695e+00, 1.6964972019195557e-04,
+	1.1920928955078125e-07, 6.4373016357421875e-06,
+	2.3841857910156250e-07}, /* L1431 */
+{3.6456432342529297e+00, 9.1709196567535400e-05,
+	1.1920928955078125e-07, -3.5166740417480469e-05,
+	2.4676322937011719e-05}, /* L1432 */
+{3.6505048274993896e+00, 9.2049129307270050e-05,
+	1.1920928955078125e-07, -4.0769577026367188e-05,
+	1.8000602722167969e-05}, /* L1433 */
+{4.8351521492004395e+00, 1.2222677469253540e-04,
+	1.1920928955078125e-07, -2.5051832199096680e-04,
+	-1.1861324310302734e-05}, /* L1434 */
+{4.3703279495239258e+00, 1.1071562767028809e-04,
+	1.1920928955078125e-07, 4.8398971557617188e-05,
+	-2.6881694793701172e-05}, /* L1435 */
+{6.1353759765625000e+00, 1.5580654144287109e-04,
+	1.1920928955078125e-07, -8.7022781372070312e-06,
+	-5.8114528656005859e-05}, /* L1436 */
+{5.5625419616699219e+00, 1.4159083366394043e-04,
+	1.1920928955078125e-07, -3.4868717193603516e-05,
+	5.0902366638183594e-05}, /* L1437 */
+{3.5406966209411621e+00, 9.0330839157104492e-05,
+	1.1920928955078125e-07, -3.9935111999511719e-06,
+	4.5299530029296875e-06}, /* L1438 */
+{4.2404432296752930e+00, 1.0858476161956787e-04,
+	1.1920928955078125e-07, 1.5187263488769531e-04,
+	4.1961669921875000e-05}, /* L1439 */
+{4.8489222526550293e+00, 1.2429058551788330e-04,
+	1.1920928955078125e-07, 4.5895576477050781e-05,
+	-2.3126602172851562e-05}, /* L1440 */
+{4.3888530731201172e+00, 1.1283159255981445e-04,
+	1.1920928955078125e-07, -2.3812055587768555e-04,
+	-1.8435716629028320e-04}, /* L1441 */
+{4.5411114692687988e+00, 1.1694431304931641e-04,
+	1.1920928955078125e-07, 2.1696090698242188e-05,
+	-1.0073184967041016e-05}, /* L1442 */
+{4.7393536567687988e+00, 1.2253224849700928e-04,
+	1.1920928955078125e-07, -4.2486190795898438e-04,
+	2.0360946655273438e-04}, /* L1443 */
+{4.0770010948181152e+00, 1.0547041893005371e-04,
+	1.1920928955078125e-07, -9.0599060058593750e-06,
+	-5.7220458984375000e-06}, /* L1444 */
+{5.0433492660522461e+00, 1.3077259063720703e-04,
+	1.1920928955078125e-07, 1.3470649719238281e-05,
+	2.6106834411621094e-05}, /* L1445 */
+{5.1698369979858398e+00, 1.3439357280731201e-04,
+	1.1920928955078125e-07, -1.8024444580078125e-04,
+	-2.6166439056396484e-05}, /* L1446 */
+{3.8861188888549805e+00, 1.0123848915100098e-04,
+	1.1920928955078125e-07, 3.3617019653320312e-05,
+	5.4836273193359375e-05}, /* L1447 */
+{4.3704109191894531e+00, 1.1411309242248535e-04,
+	1.1920928955078125e-07, -4.1127204895019531e-05,
+	-7.5101852416992188e-06}, /* L1448 */
+{4.8980259895324707e+00, 1.2817978858947754e-04,
+	1.1920928955078125e-07, -4.9412250518798828e-05,
+	2.5391578674316406e-05}, /* L1449 */
+{4.3612704277038574e+00, 1.1438317596912384e-04,
+	1.1920928955078125e-07, 0.0000000000000000e+00,
+	1.4185905456542969e-05}, /* L1450 */
+{5.7527580261230469e+00, 1.5124678611755371e-04,
+	1.1920928955078125e-07, 8.9406967163085938e-06,
+	-1.2487173080444336e-04}, /* L1451 */
+{5.5650038719177246e+00, 1.4662742614746094e-04,
+	1.1920928955078125e-07, -4.2080879211425781e-05,
+	3.1709671020507812e-05}, /* L1452 */
+{4.2241549491882324e+00, 1.1154264211654663e-04,
+	1.1920928955078125e-07, 2.3007392883300781e-05,
+	1.7762184143066406e-05}, /* L1453 */
+{4.0936546325683594e+00, 1.0834634304046631e-04,
+	1.1920928955078125e-07, -6.5565109252929688e-06,
+	2.9683113098144531e-05}, /* L1454 */
+{4.0500717163085938e+00, 1.0743737220764160e-04,
+	1.1920928955078125e-07, -4.4107437133789062e-06,
+	-3.3736228942871094e-05}, /* L1455 */
+{5.9028835296630859e+00, 1.5693157911300659e-04,
+	1.1920928955078125e-07, 1.1444091796875000e-05,
+	1.7285346984863281e-05}, /* L1456 */
+{6.6958923339843750e+00, 1.7845630645751953e-04,
+	1.1920928955078125e-07, 1.3744831085205078e-04,
+	-2.1684169769287109e-04}, /* L1457 */
+{4.7673230171203613e+00, 1.2730807065963745e-04,
+	1.1920928955078125e-07, 1.3828277587890625e-05,
+	2.1934509277343750e-05}, /* L1458 */
+{6.1993622779846191e+00, 1.6592442989349365e-04,
+	1.1920928955078125e-07, 3.0159950256347656e-05,
+	4.1604042053222656e-05}, /* L1459 */
+{4.9040460586547852e+00, 1.3155117630958557e-04,
+	1.1920928955078125e-07, 4.6491622924804688e-05,
+	5.9723854064941406e-05}, /* L1460 */
+{4.4135026931762695e+00, 1.1867284774780273e-04,
+	1.1920928955078125e-07, 6.8306922912597656e-05,
+	-2.8371810913085938e-05}, /* L1461 */
+{6.3232822418212891e+00, 1.7037242650985718e-04,
+	1.1920928955078125e-07, 3.7789344787597656e-05,
+	1.7881393432617188e-05}, /* L1462 */
+{4.7820315361022949e+00, 1.2913346290588379e-04,
+	1.1920928955078125e-07, -3.0994415283203125e-06,
+	3.1590461730957031e-05}, /* L1463 */
+{5.8575887680053711e+00, 1.5854835510253906e-04,
+	1.1920928955078125e-07, 6.6757202148437500e-06,
+	-9.7751617431640625e-05}, /* L1464 */
+{4.6069049835205078e+00, 1.2494623661041260e-04,
+	1.1920928955078125e-07, -2.0802021026611328e-05,
+	-5.0187110900878906e-05}, /* L1465 */
+{3.6946730613708496e+00, 1.0044500231742859e-04,
+	1.1920928955078125e-07, -4.3690204620361328e-05,
+	-7.5519084930419922e-05}, /* L1466 */
+{4.4400382041931152e+00, 1.2096762657165527e-04,
+	1.1920928955078125e-07, 2.5391578674316406e-05,
+	-7.5161457061767578e-05}, /* L1467 */
+{5.6785926818847656e+00, 1.5506148338317871e-04,
+	1.1920928955078125e-07, 5.2690505981445312e-05,
+	9.2983245849609375e-06}, /* L1468 */
+{5.9646377563476562e+00, 1.6320496797561646e-04,
+	1.1920928955078125e-07, -4.9471855163574219e-05,
+	-8.1062316894531250e-05}, /* L1469 */
+{4.9088644981384277e+00, 1.3473629951477051e-04,
+	1.1920928955078125e-07, 6.3097476959228516e-04,
+	8.0823898315429688e-05}, /* L1470 */
+{3.7326440811157227e+00, 1.0259449481964111e-04,
+	1.1920928955078125e-07, -1.1503696441650391e-05,
+	2.7418136596679688e-06}, /* L1471 */
+{4.1820335388183594e+00, 1.1519342660903931e-04,
+	1.1920928955078125e-07, -9.2387199401855469e-06,
+	-3.1769275665283203e-05}, /* L1472 */
+{6.7988538742065430e+00, 1.8766522407531738e-04,
+	1.1920928955078125e-07, -1.7344951629638672e-05,
+	3.9458274841308594e-05}, /* L1473 */
+{4.0071740150451660e+00, 1.1090934276580811e-04,
+	1.1920928955078125e-07, 2.1839141845703125e-04,
+	2.2232532501220703e-04}, /* L1474 */
+{5.1238522529602051e+00, 1.4203786849975586e-04,
+	1.1920928955078125e-07, 1.1086463928222656e-05,
+	-6.0200691223144531e-06}, /* L1475 */
+{5.8487634658813477e+00, 1.6246736049652100e-04,
+	1.1920928955078125e-07, -4.4465065002441406e-05,
+	1.9788742065429688e-05}, /* L1476 */
+{5.4141168594360352e+00, 1.5072524547576904e-04,
+	1.1920928955078125e-07, 1.3029575347900391e-04,
+	-3.1292438507080078e-05}, /* L1477 */
+{4.7024874687194824e+00, 1.3121962547302246e-04,
+	1.1920928955078125e-07, -5.6087970733642578e-05,
+	1.2695789337158203e-04}, /* L1478 */
+{5.0653290748596191e+00, 1.4161411672830582e-04,
+	1.1920928955078125e-07, 7.1167945861816406e-05,
+	3.8862228393554688e-05}, /* L1479 */
+{3.9772584438323975e+00, 1.1143088340759277e-04,
+	1.1920928955078125e-07, 1.7881393432617188e-05,
+	-3.5047531127929688e-05}, /* L1480 */
+{5.0348796844482422e+00, 1.4251470565795898e-04,
+	1.1920928955078125e-07, -2.3993849754333496e-03,
+	8.5771083831787109e-04}, /* L1481 */
+{5.5807471275329590e+00, 1.5701353549957275e-04,
+	1.1920928955078125e-07, 2.5629997253417969e-05,
+	2.0623207092285156e-05}, /* L1482 */
+{5.0025205612182617e+00, 1.4105439186096191e-04,
+	1.1920928955078125e-07, -2.1874904632568359e-05,
+	6.1511993408203125e-05}, /* L1483 */
+{7.4436874389648438e+00, 2.1032989025115967e-04,
+	1.1920928955078125e-07, 2.1457672119140625e-05,
+	1.8596649169921875e-05}, /* L1484 */
+{4.9420204162597656e+00, 1.4011561870574951e-04,
+	1.1920928955078125e-07, -7.4684619903564453e-05,
+	1.5759468078613281e-04}, /* L1485 */
+{5.3286194801330566e+00, 1.5120953321456909e-04,
+	1.1920928955078125e-07, -3.9160251617431641e-05,
+	5.3644180297851562e-05}, /* L1486 */
+{4.9017491340637207e+00, 1.3938546180725098e-04,
+	1.1920928955078125e-07, -4.1306018829345703e-05,
+	3.4570693969726562e-06}, /* L1487 */
+{6.1502108573913574e+00, 1.7523765563964844e-04,
+	1.1920928955078125e-07, 2.8967857360839844e-05,
+	1.8119812011718750e-05}, /* L1488 */
+{5.3834056854248047e+00, 1.5372037887573242e-04,
+	1.1920928955078125e-07, 1.9907951354980469e-05,
+	-3.3378601074218750e-06}, /* L1489 */
+{6.0058851242065430e+00, 1.7184019088745117e-04,
+	1.1920928955078125e-07, -3.1232833862304688e-05,
+	-4.7624111175537109e-05}, /* L1490 */
+{6.1604924201965332e+00, 1.7675757408142090e-04,
+	1.1920928955078125e-07, 4.7647953033447266e-04,
+	-5.6785345077514648e-04}, /* L1491 */
+{8.0020484924316406e+00, 2.2995471954345703e-04,
+	1.1920928955078125e-07, 3.5762786865234375e-07,
+	7.2240829467773438e-05}, /* L1492 */
+{4.7145266532897949e+00, 1.3586878776550293e-04,
+	1.1920928955078125e-07, -2.6023387908935547e-04,
+	9.5605850219726562e-05}, /* L1493 */
+{5.4914135932922363e+00, 1.5843100845813751e-04,
+	1.1920928955078125e-07, -3.8325786590576172e-05,
+	-1.2159347534179688e-05}, /* L1494 */
+{6.3612146377563477e+00, 1.8393993377685547e-04,
+	1.1920928955078125e-07, 1.9311904907226562e-05,
+	-9.0897083282470703e-05}, /* L1495 */
+{7.1484522819519043e+00, 2.0709633827209473e-04,
+	1.1920928955078125e-07, 2.3841857910156250e-06,
+	-8.2850456237792969e-06}, /* L1496 */
+{4.1670236587524414e+00, 1.2096762657165527e-04,
+	1.1920928955078125e-07, 2.4914741516113281e-05,
+	-4.2498111724853516e-05}, /* L1497 */
+{6.0602579116821289e+00, 1.7634034156799316e-04,
+	1.1920928955078125e-07, 3.1590461730957031e-04,
+	-2.3967027664184570e-04}, /* L1498 */
+{4.9270291328430176e+00, 1.4361739158630371e-04,
+	1.1920928955078125e-07, -1.6152858734130859e-05,
+	1.8596649169921875e-05}, /* L1499 */
+{6.3606724739074707e+00, 1.8579498282633722e-04,
+	1.1920928955078125e-07, 4.8637390136718750e-05,
+	7.9512596130371094e-05}, /* L1500 */
+{5.2753887176513672e+00, 1.5440583229064941e-04,
+	1.1920928955078125e-07, -1.5079975128173828e-05,
+	-2.3424625396728516e-05}, /* L1501 */
+{7.3513460159301758e+00, 2.1563470363616943e-04,
+	1.1920928955078125e-07, -1.2916326522827148e-04,
+	4.0173530578613281e-05}, /* L1502 */
+{3.9155988693237305e+00, 1.1506676673889160e-04,
+	1.1920928955078125e-07, -1.3768672943115234e-05,
+	3.1232833862304688e-05}, /* L1503 */
+{5.1235876083374023e+00, 1.5094876289367676e-04,
+	1.1920928955078125e-07, 1.2397766113281250e-04,
+	-2.0122528076171875e-04}, /* L1504 */
+{5.6760935783386230e+00, 1.6748905181884766e-04,
+	1.1920928955078125e-07, 3.5285949707031250e-05,
+	4.6730041503906250e-05}, /* L1505 */
+{5.1203889846801758e+00, 1.5139579772949219e-04,
+	1.1920928955078125e-07, 9.5367431640625000e-07,
+	-1.8715858459472656e-05}, /* L1506 */
+{6.8399348258972168e+00, 2.0264089107513428e-04,
+	1.1920928955078125e-07, -5.3763389587402344e-05,
+	-4.9471855163574219e-06}, /* L1507 */
+{5.9234356880187988e+00, 1.7586350440979004e-04,
+	1.1920928955078125e-07, -3.7848949432373047e-05,
+	-9.7155570983886719e-05}, /* L1508 */
+{4.6010227203369141e+00, 1.3689696788787842e-04,
+	1.1920928955078125e-07, -2.4139881134033203e-05,
+	3.8146972656250000e-06}, /* L1509 */
+{7.3738422393798828e+00, 2.1979212760925293e-04,
+	1.1920928955078125e-07, -6.5326690673828125e-05,
+	-1.6331672668457031e-05}, /* L1510 */
+{5.5350818634033203e+00, 1.6538798809051514e-04,
+	1.1920928955078125e-07, -3.0404329299926758e-04,
+	2.0647048950195312e-04}, /* L1511 */
+{5.2993330955505371e+00, 1.5858560800552368e-04,
+	1.1920928955078125e-07, 3.6954879760742188e-05,
+	9.0122222900390625e-05}, /* L1512 */
+{5.4391717910766602e+00, 1.6328692436218262e-04,
+	1.1920928955078125e-07, -6.0027837753295898e-04,
+	-8.7380409240722656e-05}, /* L1513 */
+{5.0555434226989746e+00, 1.5190243721008301e-04,
+	1.1920928955078125e-07, -2.1755695343017578e-05,
+	-1.6450881958007812e-05}, /* L1514 */
+{5.5656056404113770e+00, 1.6754865646362305e-04,
+	1.1920928955078125e-07, 1.5020370483398438e-05,
+	-8.2910060882568359e-05}, /* L1515 */
+{4.3916397094726562e+00, 1.3250112533569336e-04,
+	1.1920928955078125e-07, -2.6518106460571289e-04,
+	1.9311904907226562e-05}, /* L1516 */
+{5.4428820610046387e+00, 1.6465783119201660e-04,
+	1.1920928955078125e-07, 6.9522857666015625e-04,
+	3.1399726867675781e-04}, /* L1517 */
+{5.6694173812866211e+00, 1.7234683036804199e-04,
+	1.1920928955078125e-07, 1.0383129119873047e-03,
+	-1.8698573112487793e-03}, /* L1518 */
+{6.7812099456787109e+00, 2.0582973957061768e-04,
+	1.1920928955078125e-07, -9.0956687927246094e-05,
+	7.0929527282714844e-05}, /* L1519 */
+{5.1436595916748047e+00, 1.5643239021301270e-04,
+	1.1920928955078125e-07, -2.0134449005126953e-04,
+	2.5510787963867188e-05}, /* L1520 */
+{6.1056780815124512e+00, 1.8599629402160645e-04,
+	1.1920928955078125e-07, 6.8306922912597656e-05,
+	2.9921531677246094e-05}, /* L1521 */
+{4.7902460098266602e+00, 1.4621019363403320e-04,
+	1.1920928955078125e-07, -3.4213066101074219e-05,
+	3.3140182495117188e-05}, /* L1522 */
+{6.3455085754394531e+00, 1.9407272338867188e-04,
+	1.1920928955078125e-07, -4.2200088500976562e-05,
+	-6.5565109252929688e-07}, /* L1523 */
+{6.3733029365539551e+00, 1.9529461860656738e-04,
+	1.1920928955078125e-07, -1.9907951354980469e-05,
+	1.4424324035644531e-05}, /* L1524 */
+{4.5927534103393555e+00, 1.4099478721618652e-04,
+	1.1920928955078125e-07, -5.5789947509765625e-05,
+	4.9710273742675781e-05}, /* L1525 */
+{4.8711824417114258e+00, 1.4984607696533203e-04,
+	1.1920928955078125e-07, -8.3088874816894531e-05,
+	5.7816505432128906e-05}, /* L1526 */
+{4.6142587661743164e+00, 1.4230608940124512e-04,
+	1.1920928955078125e-07, 2.7179718017578125e-05,
+	6.6399574279785156e-05}, /* L1527 */
+{6.0828628540039062e+00, 1.8784403800964355e-04,
+	1.1920928955078125e-07, -2.3841857910156250e-06,
+	-1.7046928405761719e-05}, /* L1528 */
+{5.3480257987976074e+00, 1.6564130783081055e-04,
+	1.1920928955078125e-07, -6.1213970184326172e-05,
+	6.2704086303710938e-05}, /* L1529 */
+{6.4968309402465820e+00, 2.0140409469604492e-04,
+	1.1920928955078125e-07, 2.0265579223632812e-05,
+	-6.1094760894775391e-05}, /* L1530 */
+{5.8082156181335449e+00, 1.8048286437988281e-04,
+	1.1920928955078125e-07, -1.3518333435058594e-04,
+	7.6174736022949219e-05}, /* L1531 */
+{4.8875293731689453e+00, 1.5209615230560303e-04,
+	1.1920928955078125e-07, -5.5491924285888672e-05,
+	2.2649765014648438e-06}, /* L1532 */
+{5.4844498634338379e+00, 1.7100572586059570e-04,
+	1.1920928955078125e-07, -1.0466575622558594e-04,
+	-2.1237134933471680e-04}, /* L1533 */
+{5.9610209465026855e+00, 1.8626451492309570e-04,
+	1.1920928955078125e-07, 1.3041496276855469e-04,
+	-1.2099742889404297e-04}, /* L1534 */
+{6.3852038383483887e+00, 1.9989907741546631e-04,
+	1.1920928955078125e-07, 1.1587142944335938e-04,
+	1.4650821685791016e-04}, /* L1535 */
+{5.1573905944824219e+00, 1.6170740127563477e-04,
+	1.1920928955078125e-07, -5.2452087402343750e-06,
+	-1.7404556274414062e-05}, /* L1536 */
+{5.2878279685974121e+00, 1.6614794731140137e-04,
+	1.1920928955078125e-07, -3.0696392059326172e-05,
+	-1.9669532775878906e-05}, /* L1537 */
+{4.7292981147766113e+00, 1.4895200729370117e-04,
+	1.1920928955078125e-07, 1.8131732940673828e-04,
+	2.7060508728027344e-04}, /* L1538 */
+{6.5145025253295898e+00, 2.0543485879898071e-04,
+	1.1920928955078125e-07, -1.3470649719238281e-05,
+	8.8691711425781250e-05}, /* L1539 */
+{6.9765748977661133e+00, 2.2053718566894531e-04,
+	1.1920928955078125e-07, 2.3961067199707031e-04,
+	4.4476985931396484e-04}, /* L1540 */
+{6.5441446304321289e+00, 2.0727515220642090e-04,
+	1.1920928955078125e-07, 4.3499469757080078e-04,
+	3.5548210144042969e-04}, /* L1541 */
+{9.2936744689941406e+00, 2.9498338699340820e-04,
+	1.1920928955078125e-07, 1.1360645294189453e-04,
+	-7.9751014709472656e-05}, /* L1542 */
+{6.6832408905029297e+00, 2.1445751190185547e-04,
+	1.1920928955078125e-07, -5.4982304573059082e-03,
+	-1.7100572586059570e-03}, /* L1543 */
+{1.1340641975402832e+01, 3.6099553108215332e-04,
+	1.1920928955078125e-07, 3.2782554626464844e-05,
+	2.3245811462402344e-05}, /* L1544 */
+{6.6539411544799805e+00, 2.1223723888397217e-04,
+	1.1920928955078125e-07, 5.1259994506835938e-05,
+	1.4948844909667969e-04}, /* L1545 */
+{5.7673397064208984e+00, 1.8435716629028320e-04,
+	1.1920928955078125e-07, -4.8041343688964844e-05,
+	2.5868415832519531e-05}, /* L1546 */
+{6.4843931198120117e+00, 2.0821392536163330e-04,
+	1.1920928955078125e-07, -6.9642066955566406e-04,
+	7.7426433563232422e-04}, /* L1547 */
+{4.9204277992248535e+00, 1.5781819820404053e-04,
+	1.1920928955078125e-07, -2.1934509277343750e-05,
+	2.7298927307128906e-05}, /* L1548 */
+{5.7416129112243652e+00, 1.8447637557983398e-04,
+	1.1920928955078125e-07, -1.0371208190917969e-05,
+	2.1457672119140625e-06}, /* L1549 */
+{6.9889173507690430e+00, 2.2497773170471191e-04,
+	1.1920928955078125e-07, -3.7491321563720703e-05,
+	4.1246414184570312e-05}, /* L1550 */
+{6.9942154884338379e+00, 2.2555887699127197e-04,
+	1.1920928955078125e-07, 2.7775764465332031e-05,
+	6.6757202148437500e-06}, /* L1551 */
+{5.9428272247314453e+00, 1.9200146198272705e-04,
+	1.1920928955078125e-07, -1.2576580047607422e-05,
+	2.3126602172851562e-05}, /* L1552 */
+{5.5200729370117188e+00, 1.8015503883361816e-04,
+	1.1920928955078125e-07, -2.5536417961120605e-03,
+	2.4120807647705078e-03}, /* L1553 */
+{5.9261970520019531e+00, 1.9228458404541016e-04,
+	1.1920928955078125e-07, 4.0280818939208984e-04,
+	-2.1648406982421875e-04}, /* L1554 */
+{4.9420609474182129e+00, 1.6057491302490234e-04,
+	1.1920928955078125e-07, 7.2598457336425781e-05,
+	-9.4294548034667969e-05}, /* L1555 */
+{5.7787709236145020e+00, 1.8808245658874512e-04,
+	1.1920928955078125e-07, 6.6518783569335938e-05,
+	-3.5405158996582031e-05}, /* L1556 */
+{6.7051978111267090e+00, 2.1863728761672974e-04,
+	1.1920928955078125e-07, 3.0994415283203125e-06,
+	-7.3313713073730469e-06}, /* L1557 */
+{7.6644401550292969e+00, 2.5036931037902832e-04,
+	1.1920928955078125e-07, 1.7642974853515625e-05,
+	-8.9406967163085938e-07}, /* L1558 */
+{5.3232679367065430e+00, 1.7424672842025757e-04,
+	1.1920928955078125e-07, 5.1140785217285156e-05,
+	-1.8960237503051758e-04}, /* L1559 */
+{5.1175212860107422e+00, 1.6778707504272461e-04,
+	1.1920928955078125e-07, -5.2273273468017578e-05,
+	-2.4735927581787109e-05}, /* L1560 */
+{7.2600560188293457e+00, 2.3847073316574097e-04,
+	1.1920928955078125e-07, -1.1980533599853516e-05,
+	-2.9206275939941406e-05}, /* L1561 */
+{4.8857469558715820e+00, 1.6079843044281006e-04,
+	1.1920928955078125e-07, -7.2598457336425781e-05,
+	1.4972686767578125e-04}, /* L1562 */
+{5.7856483459472656e+00, 1.9073486328125000e-04,
+	1.1920928955078125e-07, -8.1121921539306641e-05,
+	4.5895576477050781e-05}, /* L1563 */
+{6.1987195014953613e+00, 2.0474568009376526e-04,
+	1.1920928955078125e-07, 3.4451484680175781e-05,
+	-3.4451484680175781e-05}, /* L1564 */
+{5.5280623435974121e+00, 1.8292665481567383e-04,
+	1.1920928955078125e-07, 4.3630599975585938e-05,
+	1.1086463928222656e-04}, /* L1565 */
+{5.2719717025756836e+00, 1.7476081848144531e-04,
+	1.1920928955078125e-07, 2.7418136596679688e-06,
+	1.2278556823730469e-05}, /* L1566 */
+{5.8493833541870117e+00, 1.9428133964538574e-04,
+	1.1920928955078125e-07, -8.6963176727294922e-05,
+	-8.7559223175048828e-05}, /* L1567 */
+{7.4994993209838867e+00, 2.4946220219135284e-04,
+	1.1920928955078125e-07, -3.8743019104003906e-05,
+	6.1750411987304688e-05}, /* L1568 */
+{8.0564422607421875e+00, 2.6848539710044861e-04,
+	1.1920928955078125e-07, 7.8320503234863281e-05,
+	1.3828277587890625e-05}, /* L1569 */
+{8.2448787689208984e+00, 2.7525424957275391e-04,
+	1.1920928955078125e-07, 1.8954277038574219e-04,
+	4.0173530578613281e-05}, /* L1570 */
+{6.3698124885559082e+00, 2.1308660507202148e-04,
+	1.1920928955078125e-07, 8.7261199951171875e-05,
+	-1.3130903244018555e-04}, /* L1571 */
+{7.7860383987426758e+00, 2.6084296405315399e-04,
+	1.1920928955078125e-07, -4.9710273742675781e-05,
+	1.8358230590820312e-05}, /* L1572 */
+{6.2749595642089844e+00, 2.1065771579742432e-04,
+	1.1920928955078125e-07, 2.1064281463623047e-04,
+	-1.5228986740112305e-04}, /* L1573 */
+{7.0988192558288574e+00, 2.3871660232543945e-04,
+	1.1920928955078125e-07, 5.4597854614257812e-05,
+	1.0812282562255859e-04}, /* L1574 */
+{6.1754641532897949e+00, 2.0840764045715332e-04,
+	1.1920928955078125e-07, 2.3710727691650391e-04,
+	3.8146972656250000e-04}, /* L1575 */
+{6.0608286857604980e+00, 2.0477175712585449e-04,
+	1.1920928955078125e-07, -1.1539459228515625e-04,
+	-2.9015541076660156e-04}, /* L1576 */
+{7.0008625984191895e+00, 2.3673474788665771e-04,
+	1.1920928955078125e-07, -1.1914968490600586e-04,
+	1.4185905456542969e-04}, /* L1577 */
+{6.7248425483703613e+00, 2.2769719362258911e-04,
+	1.1920928955078125e-07, 3.3855438232421875e-05,
+	3.6358833312988281e-05}, /* L1578 */
+{6.7595577239990234e+00, 2.2929906845092773e-04,
+	1.1920928955078125e-07, 6.0796737670898438e-05,
+	-7.1167945861816406e-05}, /* L1579 */
+{5.9898591041564941e+00, 2.0356476306915283e-04,
+	1.1920928955078125e-07, 6.1988830566406250e-05,
+	5.8412551879882812e-06}, /* L1580 */
+{6.8751063346862793e+00, 2.3401901125907898e-04,
+	1.1920928955078125e-07, -8.5234642028808594e-06,
+	6.5803527832031250e-05}, /* L1581 */
+{7.3971276283264160e+00, 2.5224685668945312e-04,
+	1.1920928955078125e-07, 6.4134597778320312e-05,
+	-1.3709068298339844e-05}, /* L1582 */
+{6.3223195075988770e+00, 2.1603703498840332e-04,
+	1.1920928955078125e-07, 8.7261199951171875e-05,
+	1.8715858459472656e-05}, /* L1583 */
+{5.6579871177673340e+00, 1.9365549087524414e-04,
+	1.1920928955078125e-07, -8.6307525634765625e-05,
+	-1.8417835235595703e-05}, /* L1584 */
+{7.4046993255615234e+00, 2.5379657745361328e-04,
+	1.1920928955078125e-07, -5.1140785217285156e-05,
+	1.1444091796875000e-05}, /* L1585 */
+{6.0522208213806152e+00, 2.0798295736312866e-04,
+	1.1920928955078125e-07, -3.1769275665283203e-05,
+	-8.6307525634765625e-05}, /* L1586 */
+{5.4351930618286133e+00, 1.8714368343353271e-04,
+	1.1920928955078125e-07, 4.3511390686035156e-04,
+	4.6527385711669922e-04}, /* L1587 */
+{9.4351921081542969e+00, 3.2550096511840820e-04,
+	1.1920928955078125e-07, -4.7796964645385742e-04,
+	-2.5969743728637695e-04}, /* L1588 */
+{5.0385971069335938e+00, 1.7394125461578369e-04,
+	1.1920928955078125e-07, -3.4928321838378906e-05,
+	3.6716461181640625e-05}, /* L1589 */
+{6.3993549346923828e+00, 2.2125244140625000e-04,
+	1.1920928955078125e-07, -1.0251998901367188e-05,
+	1.3113021850585938e-06}, /* L1590 */
+{7.2028784751892090e+00, 2.4959444999694824e-04,
+	1.1920928955078125e-07, 9.9897384643554688e-05,
+	7.2598457336425781e-05}, /* L1591 */
+{6.3808298110961914e+00, 2.2146757692098618e-04,
+	1.1920928955078125e-07, 3.6787986755371094e-04,
+	-6.9081783294677734e-05}, /* L1592 */
+{8.0772647857666016e+00, 2.8081052005290985e-04,
+	1.1920928955078125e-07, 1.6140937805175781e-04,
+	2.1207332611083984e-04}, /* L1593 */
+{6.4131917953491211e+00, 2.2350251674652100e-04,
+	1.1920928955078125e-07, -1.4680624008178711e-04,
+	-4.6044588088989258e-04}, /* L1594 */
+{6.4220824241638184e+00, 2.2399425506591797e-04,
+	1.1920928955078125e-07, 5.4955482482910156e-05,
+	-1.9073486328125000e-04}, /* L1595 */
+{6.0896100997924805e+00, 2.1272432059049606e-04,
+	1.1920928955078125e-07, 1.1062622070312500e-04,
+	1.3709068298339844e-05}, /* L1596 */
+{6.5197033882141113e+00, 2.2843480110168457e-04,
+	1.1920928955078125e-07, -3.8433074951171875e-04,
+	2.2113323211669922e-04}, /* L1597 */
+{6.2656197547912598e+00, 2.1961331367492676e-04,
+	1.1920928955078125e-07, 5.9604644775390625e-07,
+	7.3909759521484375e-06}, /* L1598 */
+{5.9526052474975586e+00, 2.0903348922729492e-04,
+	1.1920928955078125e-07, 1.2767314910888672e-04,
+	1.3089179992675781e-04}, /* L1599 */
+{5.3630847930908203e+00, 1.8861889839172363e-04,
+	1.1920928955078125e-07, -3.6954879760742188e-05,
+	3.2186508178710938e-06}, /* L1600 */
+{5.8160314559936523e+00, 2.0493566989898682e-04,
+	1.1920928955078125e-07, 8.9287757873535156e-05,
+	-5.2988529205322266e-05}, /* L1601 */
+{5.7849211692810059e+00, 2.0414590835571289e-04,
+	1.1920928955078125e-07, 1.9192695617675781e-05,
+	2.9325485229492188e-05}, /* L1602 */
+{7.3695979118347168e+00, 2.6057288050651550e-04,
+	1.1920928955078125e-07, -8.8214874267578125e-05,
+	1.0168552398681641e-04}, /* L1603 */
+{5.8746728897094727e+00, 2.0802021026611328e-04,
+	1.1920928955078125e-07, 1.2874603271484375e-05,
+	3.9339065551757812e-06}, /* L1604 */
+{7.6387066841125488e+00, 2.7126073837280273e-04,
+	1.1920928955078125e-07, 5.3381919860839844e-04,
+	6.3467025756835938e-04}, /* L1605 */
+{6.6640315055847168e+00, 2.3685395717620850e-04,
+	1.1920928955078125e-07, 1.4805793762207031e-04,
+	-1.2105703353881836e-04}, /* L1606 */
+{7.4180846214294434e+00, 2.6440620422363281e-04,
+	1.1920928955078125e-07, 7.5030326843261719e-04,
+	3.3307075500488281e-04}, /* L1607 */
+{6.1843800544738770e+00, 2.2045196965336800e-04,
+	1.1920928955078125e-07, 6.1154365539550781e-05,
+	-3.1888484954833984e-05}, /* L1608 */
+{8.0226764678955078e+00, 2.8651952743530273e-04,
+	1.1920928955078125e-07, -3.0696392059326172e-05,
+	-1.5497207641601562e-05}, /* L1609 */
+{6.4083571434020996e+00, 2.3349747061729431e-04,
+	1.1920928955078125e-07, 7.7294111251831055e-03,
+	8.8059902191162109e-04}, /* L1610 */
+{6.6084260940551758e+00, 2.3680925369262695e-04,
+	1.1920928955078125e-07, 1.3136863708496094e-04,
+	8.0347061157226562e-05}, /* L1611 */
+{5.6835446357727051e+00, 2.0396709442138672e-04,
+	1.1920928955078125e-07, -3.3855438232421875e-05,
+	-1.3530254364013672e-05}, /* L1612 */
+{7.0634860992431641e+00, 2.6224553585052490e-04,
+	1.1920928955078125e-07, 2.8293132781982422e-03,
+	-6.3961744308471680e-03}, /* L1613 */
+{8.3286542892456055e+00, 3.0000880360603333e-04,
+	1.1920928955078125e-07, -1.8060207366943359e-04,
+	7.6293945312500000e-06}, /* L1614 */
+{6.0193595886230469e+00, 2.1710991859436035e-04,
+	1.1920928955078125e-07, -7.6889991760253906e-06,
+	-2.2649765014648438e-06}, /* L1615 */
+{8.2057666778564453e+00, 2.9712915420532227e-04,
+	1.1920928955078125e-07, -9.3710422515869141e-04,
+	6.3157081604003906e-04}, /* L1616 */
+{7.5656437873840332e+00, 2.7377344667911530e-04,
+	1.1920928955078125e-07, 3.9339065551757812e-05,
+	6.0796737670898438e-05}, /* L1617 */
+{8.0642127990722656e+00, 2.9236078262329102e-04,
+	1.1920928955078125e-07, -5.9366226196289062e-05,
+	7.9870223999023438e-06}, /* L1618 */
+{6.5877547264099121e+00, 2.3916363716125488e-04,
+	1.1920928955078125e-07, 8.4757804870605469e-05,
+	2.3603439331054688e-05}, /* L1619 */
+{6.5712537765502930e+00, 2.3898482322692871e-04,
+	1.1920928955078125e-07, -2.0802021026611328e-05,
+	9.9897384643554688e-05}, /* L1620 */
+{8.6658744812011719e+00, 3.1563639640808105e-04,
+	1.1920928955078125e-07, -6.9141387939453125e-06,
+	-4.5359134674072266e-05}, /* L1621 */
+{6.7469592094421387e+00, 2.4625658988952637e-04,
+	1.1920928955078125e-07, 1.2993812561035156e-04,
+	4.3511390686035156e-05}, /* L1622 */
+{7.2914371490478516e+00, 2.6673451066017151e-04,
+	1.1920928955078125e-07, -8.1598758697509766e-04,
+	-5.4031610488891602e-04}, /* L1623 */
+{9.4930953979492188e+00, 3.4746527671813965e-04,
+	1.1920928955078125e-07, 1.4543533325195312e-05,
+	-4.3272972106933594e-05}, /* L1624 */
+{5.7312974929809570e+00, 2.1012010984122753e-04,
+	1.1920928955078125e-07, -5.6982040405273438e-05,
+	9.1195106506347656e-05}, /* L1625 */
+{5.9745678901672363e+00, 2.1940469741821289e-04,
+	1.1920928955078125e-07, -4.5120716094970703e-05,
+	-2.6881694793701172e-05}, /* L1626 */
+{4.7506341934204102e+00, 1.7473101615905762e-04,
+	1.1920928955078125e-07, -5.3107738494873047e-05,
+	-2.4914741516113281e-05}, /* L1627 */
+{7.3024945259094238e+00, 2.6917457580566406e-04,
+	1.1920928955078125e-07, 1.3470649719238281e-04,
+	-1.7821788787841797e-05}, /* L1628 */
+{7.3836154937744141e+00, 2.7278065681457520e-04,
+	1.1920928955078125e-07, 5.6147575378417969e-05,
+	2.3281574249267578e-04}, /* L1629 */
+{6.6289205551147461e+00, 2.4520978331565857e-04,
+	1.1920928955078125e-07, 2.5522708892822266e-04,
+	3.9613246917724609e-04}, /* L1630 */
+{5.9359660148620605e+00, 2.1988153457641602e-04,
+	1.1920928955078125e-07, -2.9522180557250977e-04,
+	-2.6547908782958984e-04}, /* L1631 */
+{6.3866081237792969e+00, 2.7644634246826172e-04,
+	1.1920928955078125e-07, 4.7813892364501953e-02,
+	-4.1634857654571533e-02}, /* L1632 */
+{6.7924633026123047e+00, 2.5237351655960083e-04,
+	1.1920928955078125e-07, -2.8592348098754883e-04,
+	1.0669231414794922e-04}, /* L1633 */
+{5.8325419425964355e+00, 2.1696090698242188e-04,
+	1.1920928955078125e-07, -2.2530555725097656e-05,
+	-3.9517879486083984e-05}, /* L1634 */
+{8.8326196670532227e+00, 3.2913684844970703e-04,
+	1.1920928955078125e-07, -1.5616416931152344e-05,
+	1.9073486328125000e-06}, /* L1635 */
+{7.7967424392700195e+00, 2.9098987579345703e-04,
+	1.1920928955078125e-07, -3.0457973480224609e-05,
+	6.8068504333496094e-05}, /* L1636 */
+{7.0446209907531738e+00, 2.6366114616394043e-04,
+	1.1920928955078125e-07, 5.5193901062011719e-05,
+	-1.2505054473876953e-04}, /* L1637 */
+{5.8722696304321289e+00, 2.1991133689880371e-04,
+	1.1920928955078125e-07, 9.0599060058593750e-06,
+	2.4461746215820312e-04}, /* L1638 */
+{6.7226681709289551e+00, 2.5242567062377930e-04,
+	1.1920928955078125e-07, 2.3245811462402344e-05,
+	-1.6927719116210938e-05}, /* L1639 */
+{7.3555049896240234e+00, 2.7644634246826172e-04,
+	1.1920928955078125e-07, 2.7585029602050781e-04,
+	1.1384487152099609e-04}, /* L1640 */
+{7.1646018028259277e+00, 2.6959180831909180e-04,
+	1.1920928955078125e-07, -1.8101930618286133e-04,
+	-4.3749809265136719e-05}, /* L1641 */
+{6.6215577125549316e+00, 2.4950504302978516e-04,
+	1.1920928955078125e-07, 1.6331672668457031e-05,
+	5.8174133300781250e-05}, /* L1642 */
+{5.8195476531982422e+00, 2.1961331367492676e-04,
+	1.1920928955078125e-07, 5.7458877563476562e-05,
+	9.1791152954101562e-05}, /* L1643 */
+{6.3836760520935059e+00, 2.4129450321197510e-04,
+	1.1920928955078125e-07, 2.5033950805664062e-06,
+	-2.5093555450439453e-05}, /* L1644 */
+{9.0051755905151367e+00, 3.4102797508239746e-04,
+	1.1920928955078125e-07, -3.5703182220458984e-05,
+	-2.2363662719726562e-04}, /* L1645 */
+{6.8281569480895996e+00, 2.5889277458190918e-04,
+	1.1920928955078125e-07, 9.7036361694335938e-05,
+	-2.4855136871337891e-05}, /* L1646 */
+{8.8414764404296875e+00, 3.3578276634216309e-04,
+	1.1920928955078125e-07, -1.4364719390869141e-05,
+	1.1956691741943359e-04}, /* L1647 */
+{9.4787073135375977e+00, 3.6081671714782715e-04,
+	1.1920928955078125e-07, -2.1374225616455078e-04,
+	-8.2969665527343750e-05}, /* L1648 */
+{7.4477825164794922e+00, 2.8382986783981323e-04,
+	1.1920928955078125e-07, -4.5675039291381836e-04,
+	1.7809867858886719e-04}, /* L1649 */
+{7.4903297424316406e+00, 2.8580427169799805e-04,
+	1.1920928955078125e-07, 2.8610229492187500e-05,
+	-8.5353851318359375e-05}, /* L1650 */
+{7.1923398971557617e+00, 2.7483701705932617e-04,
+	1.1920928955078125e-07, -5.8114528656005859e-05,
+	-5.0842761993408203e-05}, /* L1651 */
+{9.4947175979614258e+00, 3.6343932151794434e-04,
+	1.1920928955078125e-07, -1.2582540512084961e-04,
+	-1.3440847396850586e-04}, /* L1652 */
+{5.4654045104980469e+00, 2.0959973335266113e-04,
+	1.1920928955078125e-07, -1.1622905731201172e-05,
+	-1.9204616546630859e-04}, /* L1653 */
+{7.8130364418029785e+00, 2.9996037483215332e-04,
+	1.1920928955078125e-07, 1.4662742614746094e-05,
+	0.0000000000000000e+00}, /* L1654 */
+{8.8489961624145508e+00, 3.4028291702270508e-04,
+	1.1920928955078125e-07, -2.6226043701171875e-06,
+	-2.9146671295166016e-05}, /* L1655 */
+{6.8574461936950684e+00, 2.6428699493408203e-04,
+	1.1920928955078125e-07, -1.2308359146118164e-04,
+	-1.9216537475585938e-04}, /* L1656 */
+{7.4716701507568359e+00, 2.8818845748901367e-04,
+	1.1920928955078125e-07, 7.0571899414062500e-05,
+	-8.6009502410888672e-05}, /* L1657 */
+{6.2409458160400391e+00, 2.4127960205078125e-04,
+	1.1920928955078125e-07, -4.3451786041259766e-05,
+	-4.4167041778564453e-05}, /* L1658 */
+{5.7782907485961914e+00, 2.2360682487487793e-04,
+	1.1920928955078125e-07, -2.9188394546508789e-04,
+	-1.1426210403442383e-04}, /* L1659 */
+{7.1288127899169922e+00, 2.7626752853393555e-04,
+	1.1920928955078125e-07, -5.8948993682861328e-05,
+	-1.5914440155029297e-04}, /* L1660 */
+{7.3286099433898926e+00, 2.8458237648010254e-04,
+	1.1920928955078125e-07, -1.0550022125244141e-04,
+	2.7155876159667969e-04}, /* L1661 */
+{8.6960897445678711e+00, 3.3807754516601562e-04,
+	1.1920928955078125e-07, -2.8473138809204102e-04,
+	-5.3167343139648438e-05}, /* L1662 */
+{8.4404230117797852e+00, 3.2868376001715660e-04,
+	1.1920928955078125e-07, 1.7619132995605469e-04,
+	1.0645389556884766e-04}, /* L1663 */
+{7.0070075988769531e+00, 2.7343630790710449e-04,
+	1.1920928955078125e-07, -2.8640031814575195e-04,
+	-3.0982494354248047e-04}, /* L1664 */
+{7.1653118133544922e+00, 2.8052553534507751e-04,
+	1.1920928955078125e-07, 6.7937374114990234e-04,
+	3.9863586425781250e-04}, /* L1665 */
+{5.4770722389221191e+00, 2.1421909332275391e-04,
+	1.1920928955078125e-07, 1.8715858459472656e-05,
+	-6.4015388488769531e-05}, /* L1666 */
+{6.1754908561706543e+00, 2.4187564849853516e-04,
+	1.1920928955078125e-07, -1.0854005813598633e-04,
+	1.5854835510253906e-05}, /* L1667 */
+{8.1684961318969727e+00, 3.2046437263488770e-04,
+	1.1920928955078125e-07, -3.6835670471191406e-05,
+	3.3617019653320312e-05}, /* L1668 */
+{7.9395952224731445e+00, 3.1191110610961914e-04,
+	1.1920928955078125e-07, -6.3598155975341797e-05,
+	-5.2452087402343750e-06}, /* L1669 */
+{7.2965555191040039e+00, 2.8708763420581818e-04,
+	1.1920928955078125e-07, 8.9526176452636719e-05,
+	-9.6619129180908203e-05}, /* L1670 */
+{6.1464676856994629e+00, 2.4226307868957520e-04,
+	1.1920928955078125e-07, -5.8472156524658203e-05,
+	-6.0796737670898438e-06}, /* L1671 */
+{6.9402055740356445e+00, 2.7392804622650146e-04,
+	1.1920928955078125e-07, -1.2093782424926758e-04,
+	-4.6730041503906250e-05}, /* L1672 */
+{7.8485608100891113e+00, 3.1125545501708984e-04,
+	1.1920928955078125e-07, 1.1475086212158203e-03,
+	1.1372566223144531e-03}, /* L1673 */
+{8.3945627212524414e+00, 3.3235549926757812e-04,
+	1.1920928955078125e-07, 7.0691108703613281e-05,
+	5.4121017456054688e-05}, /* L1674 */
+{9.3921451568603516e+00, 3.7246942520141602e-04,
+	1.1920928955078125e-07, 2.6106834411621094e-05,
+	-4.9412250518798828e-05}, /* L1675 */
+{6.4424710273742676e+00, 2.5579333305358887e-04,
+	1.1920928955078125e-07, -9.2983245849609375e-06,
+	-9.1791152954101562e-05}, /* L1676 */
+{6.0105714797973633e+00, 2.3901462554931641e-04,
+	1.1920928955078125e-07, 7.7009201049804688e-05,
+	4.6133995056152344e-05}, /* L1677 */
+{1.0094603538513184e+01, 4.0227174758911133e-04,
+	1.1920928955078125e-07, 2.1934509277343750e-05,
+	-2.5600194931030273e-04}, /* L1678 */
+{7.4718470573425293e+00, 2.9796361923217773e-04,
+	1.1920928955078125e-07, 4.2915344238281250e-06,
+	8.5830688476562500e-06}, /* L1679 */
+{7.1870899200439453e+00, 2.8711557388305664e-04,
+	1.1920928955078125e-07, 1.5366077423095703e-04,
+	1.6105175018310547e-04}, /* L1680 */
+{8.6702060699462891e+00, 3.5549700260162354e-04,
+	1.1920928955078125e-07, 4.1091442108154297e-04,
+	-4.9638748168945312e-03}, /* L1681 */
+{9.6852750778198242e+00, 3.8848072290420532e-04,
+	1.1920928955078125e-07, -3.4344196319580078e-04,
+	-5.3715705871582031e-04}, /* L1682 */
+{8.0611362457275391e+00, 3.2350420951843262e-04,
+	1.1920928955078125e-07, 1.0108947753906250e-04,
+	6.6518783569335938e-05}, /* L1683 */
+{8.0878114700317383e+00, 3.2500922679901123e-04,
+	1.1920928955078125e-07, -9.2327594757080078e-05,
+	3.4332275390625000e-05}, /* L1684 */
+{6.6700811386108398e+00, 2.6844441890716553e-04,
+	1.1920928955078125e-07, -6.6220760345458984e-05,
+	-1.1324882507324219e-06}, /* L1685 */
+{8.7757596969604492e+00, 3.5375356674194336e-04,
+	1.1920928955078125e-07, -8.9049339294433594e-05,
+	2.2053718566894531e-05}, /* L1686 */
+{7.8898215293884277e+00, 3.1843781471252441e-04,
+	1.1920928955078125e-07, 5.6147575378417969e-05,
+	-3.8206577301025391e-05}, /* L1687 */
+{7.8435001373291016e+00, 3.1750649213790894e-04,
+	1.1920928955078125e-07, -4.9018859863281250e-04,
+	2.4139881134033203e-04}, /* L1688 */
+{6.8878722190856934e+00, 2.7962028980255127e-04,
+	1.1920928955078125e-07, 5.3644180297851562e-04,
+	9.1743469238281250e-04}, /* L1689 */
+{8.0054874420166016e+00, 3.2514333724975586e-04,
+	1.1920928955078125e-07, -3.1340122222900391e-04,
+	-2.7525424957275391e-04}, /* L1690 */
+{6.1898012161254883e+00, 2.5136768817901611e-04,
+	1.1920928955078125e-07, -2.5087594985961914e-04,
+	6.8426132202148438e-05}, /* L1691 */
+{8.3880691528320312e+00, 3.4102052450180054e-04,
+	1.1920928955078125e-07, 6.9260597229003906e-05,
+	5.9247016906738281e-05}, /* L1692 */
+{7.6392235755920410e+00, 3.1103193759918213e-04,
+	1.1920928955078125e-07, 8.7022781372070312e-06,
+	4.0531158447265625e-06}, /* L1693 */
+{5.9234805107116699e+00, 2.4158135056495667e-04,
+	1.1920928955078125e-07, 7.2479248046875000e-05,
+	-1.3524293899536133e-04}, /* L1694 */
+{7.1599431037902832e+00, 2.9253959655761719e-04,
+	1.1920928955078125e-07, 2.6094913482666016e-04,
+	-5.3107738494873047e-05}, /* L1695 */
+{6.9457530975341797e+00, 2.8434395790100098e-04,
+	1.1920928955078125e-07, -3.8725137710571289e-04,
+	4.7433376312255859e-04}, /* L1696 */
+{7.5628337860107422e+00, 3.0997209250926971e-04,
+	1.1920928955078125e-07, 3.4880638122558594e-04,
+	-1.6421079635620117e-04}, /* L1697 */
+{8.9344701766967773e+00, 3.6644935607910156e-04,
+	1.1920928955078125e-07, -2.6404857635498047e-05,
+	3.8146972656250000e-05}, /* L1698 */
+{8.3928050994873047e+00, 3.4471787512302399e-04,
+	1.1920928955078125e-07, 8.5592269897460938e-05,
+	2.8729438781738281e-05}, /* L1699 */
+{7.4448008537292480e+00, 3.0811131000518799e-04,
+	1.1920928955078125e-07, 4.2700767517089844e-03,
+	1.3093948364257812e-03}, /* L1700 */
+{7.5336132049560547e+00, 3.1045079231262207e-04,
+	1.1920928955078125e-07, -3.9225816726684570e-04,
+	-1.7702579498291016e-04}, /* L1701 */
+{8.3356781005859375e+00, 3.4401565790176392e-04,
+	1.1920928955078125e-07, -9.5546245574951172e-05,
+	1.1432170867919922e-04}, /* L1702 */
+{7.3213653564453125e+00, 3.0249357223510742e-04,
+	1.1920928955078125e-07, 7.4625015258789062e-05,
+	3.0994415283203125e-06}, /* L1703 */
+{8.3764381408691406e+00, 3.4719705581665039e-04,
+	1.1920928955078125e-07, 1.1534690856933594e-03,
+	7.1549415588378906e-04}, /* L1704 */
+{8.1920614242553711e+00, 3.3940374851226807e-04,
+	1.1920928955078125e-07, -3.0159950256347656e-05,
+	7.0929527282714844e-05}, /* L1705 */
+{6.5224223136901855e+00, 2.7072429656982422e-04,
+	1.1920928955078125e-07, 5.2893161773681641e-04,
+	-6.4909458160400391e-05}, /* L1706 */
+{7.5301632881164551e+00, 3.1288713216781616e-04,
+	1.1920928955078125e-07, -1.6272068023681641e-05,
+	-6.8664550781250000e-05}, /* L1707 */
+{6.9484806060791016e+00, 2.8948485851287842e-04,
+	1.1920928955078125e-07, 4.6479701995849609e-04,
+	7.6484680175781250e-04}, /* L1708 */
+{8.4858427047729492e+00, 3.5366415977478027e-04,
+	1.1920928955078125e-07, 1.1384487152099609e-04,
+	5.6028366088867188e-05}, /* L1709 */
+{8.1798229217529297e+00, 3.4136325120925903e-04,
+	1.1920928955078125e-07, -3.2961368560791016e-05,
+	-1.5985965728759766e-04}, /* L1710 */
+{8.0417051315307617e+00, 3.3633410930633545e-04,
+	1.1920928955078125e-07, 3.1614303588867188e-04,
+	2.0956993103027344e-04}, /* L1711 */
+{6.3120932579040527e+00, 2.6422739028930664e-04,
+	1.1920928955078125e-07, 2.5510787963867188e-05,
+	2.5308132171630859e-04}, /* L1712 */
+{7.5596413612365723e+00, 3.1697191298007965e-04,
+	1.1920928955078125e-07, -1.7523765563964844e-05,
+	2.9826164245605469e-04}, /* L1713 */
+{8.9704370498657227e+00, 3.7647783756256104e-04,
+	1.1920928955078125e-07, 2.9087066650390625e-05,
+	-4.6610832214355469e-05}, /* L1714 */
+{7.8447594642639160e+00, 3.2970309257507324e-04,
+	1.1920928955078125e-07, -1.6093254089355469e-05,
+	6.9141387939453125e-05}, /* L1715 */
+{8.7568292617797852e+00, 3.6856532096862793e-04,
+	1.1920928955078125e-07, -7.0333480834960938e-06,
+	5.1736831665039062e-05}, /* L1716 */
+{7.1848812103271484e+00, 3.0285865068435669e-04,
+	1.1920928955078125e-07, -9.7155570983886719e-06,
+	-1.5765428543090820e-04}, /* L1717 */
+{6.2608566284179688e+00, 2.6431679725646973e-04,
+	1.1920928955078125e-07, -5.8889389038085938e-05,
+	1.3959407806396484e-04}, /* L1718 */
+{7.1052174568176270e+00, 3.0028820037841797e-04,
+	1.1920928955078125e-07, -6.5267086029052734e-05,
+	3.0994415283203125e-06}, /* L1719 */
+{8.1239242553710938e+00, 3.4400448203086853e-04,
+	1.1920928955078125e-07, -1.6486644744873047e-04,
+	-2.2834539413452148e-04}, /* L1720 */
+{7.3886308670043945e+00, 3.1322240829467773e-04,
+	1.1920928955078125e-07, 2.7298927307128906e-05,
+	1.8274784088134766e-04}, /* L1721 */
+{6.5135970115661621e+00, 2.7655065059661865e-04,
+	1.1920928955078125e-07, -1.0621547698974609e-04,
+	1.3160705566406250e-04}, /* L1722 */
+{7.9292917251586914e+00, 3.3712387084960938e-04,
+	1.1920928955078125e-07, -6.6161155700683594e-05,
+	1.1408329010009766e-04}, /* L1723 */
+{6.8155994415283203e+00, 2.9048323631286621e-04,
+	1.1920928955078125e-07, -1.8739700317382812e-04,
+	3.0899047851562500e-04}, /* L1724 */
+{1.2214772224426270e+01, 5.2075088024139404e-04,
+	1.1920928955078125e-07, 1.6331672668457031e-05,
+	1.2993812561035156e-05}, /* L1725 */
+{8.2308912277221680e+00, 3.5136938095092773e-04,
+	1.1920928955078125e-07, -9.0539455413818359e-05,
+	-5.1736831665039062e-05}, /* L1726 */
+{7.8772892951965332e+00, 3.3681560307741165e-04,
+	1.1920928955078125e-07, 7.2717666625976562e-05,
+	1.1563301086425781e-05}, /* L1727 */
+{7.1280322074890137e+00, 3.0514597892761230e-04,
+	1.1920928955078125e-07, 9.5725059509277344e-05,
+	-7.9214572906494141e-05}, /* L1728 */
+{6.7140235900878906e+00, 2.8777122497558594e-04,
+	1.1920928955078125e-07, -2.1398067474365234e-05,
+	2.8729438781738281e-05}, /* L1729 */
+{9.4931888580322266e+00, 4.0748715400695801e-04,
+	1.1920928955078125e-07, -3.7074089050292969e-05,
+	-2.0051002502441406e-04}, /* L1730 */
+{8.0390768051147461e+00, 3.4582614898681641e-04,
+	1.1920928955078125e-07, 2.6059150695800781e-04,
+	1.9061565399169922e-04}, /* L1731 */
+{8.4637918472290039e+00, 3.6428309977054596e-04,
+	1.1920928955078125e-07, 4.8875808715820312e-06,
+	-6.5565109252929688e-06}, /* L1732 */
+{6.7536096572875977e+00, 2.9107183218002319e-04,
+	1.1920928955078125e-07, 2.0742416381835938e-05,
+	2.9325485229492188e-05}, /* L1733 */
+{7.7602891921997070e+00, 3.3496320247650146e-04,
+	1.1920928955078125e-07, -4.4286251068115234e-05,
+	-1.0490417480468750e-04}, /* L1734 */
+{8.2205200195312500e+00, 3.5539269447326660e-04,
+	1.1920928955078125e-07, 4.4465065002441406e-05,
+	-1.1539459228515625e-04}, /* L1735 */
+{9.7931032180786133e+00, 4.2398273944854736e-04,
+	1.1920928955078125e-07, -1.1318922042846680e-04,
+	-7.0571899414062500e-05}, /* L1736 */
+{9.1870574951171875e+00, 3.9863586425781250e-04,
+	1.1920928955078125e-07, 1.8012523651123047e-04,
+	-4.4214725494384766e-04}, /* L1737 */
+{6.1563978195190430e+00, 2.6717782020568848e-04,
+	1.1920928955078125e-07, -3.3855438232421875e-05,
+	3.3855438232421875e-05}, /* L1738 */
+{6.8462176322937012e+00, 2.9757618904113770e-04,
+	1.1920928955078125e-07, -1.4549493789672852e-04,
+	6.2823295593261719e-05}, /* L1739 */
+{1.1501506805419922e+01, 5.0055235624313354e-04,
+	1.1920928955078125e-07, -3.1471252441406250e-05,
+	-6.5267086029052734e-05}, /* L1740 */
+{8.1276788711547852e+00, 3.5434588789939880e-04,
+	1.1920928955078125e-07, -2.8783082962036133e-04,
+	2.7835369110107422e-04}, /* L1741 */
+{8.9012432098388672e+00, 3.8963556289672852e-04,
+	1.1920928955078125e-07, 6.5410137176513672e-04,
+	2.0003318786621094e-04}, /* L1742 */
+{8.9505472183227539e+00, 3.9109587669372559e-04,
+	1.1920928955078125e-07, -9.0599060058593750e-06,
+	-3.4928321838378906e-05}, /* L1743 */
+{6.8560595512390137e+00, 3.0006840825080872e-04,
+	1.1920928955078125e-07, 4.6968460083007812e-05,
+	-1.9645690917968750e-04}, /* L1744 */
+{7.6387114524841309e+00, 3.3494830131530762e-04,
+	1.1920928955078125e-07, 1.8584728240966797e-04,
+	2.1016597747802734e-04}, /* L1745 */
+{1.3856999397277832e+01, 6.0841441154479980e-04,
+	1.1920928955078125e-07, 1.8370151519775391e-04,
+	-1.0305643081665039e-04}, /* L1746 */
+{9.5806503295898438e+00, 4.2113661766052246e-04,
+	1.1920928955078125e-07, 1.6701221466064453e-04,
+	-2.7120113372802734e-05}, /* L1747 */
+{9.3762521743774414e+00, 4.1258335113525391e-04,
+	1.1920928955078125e-07, 9.2983245849609375e-06,
+	-2.7179718017578125e-05}, /* L1748 */
+{7.1638541221618652e+00, 3.1572580337524414e-04,
+	1.1920928955078125e-07, 9.1433525085449219e-05,
+	6.5803527832031250e-05}, /* L1749 */
+{1.0060608863830566e+01, 4.4420361518859863e-04,
+	1.1920928955078125e-07, 9.4652175903320312e-05,
+	2.0051002502441406e-04}, /* L1750 */
+{1.0392632484436035e+01, 4.5907497406005859e-04,
+	1.1920928955078125e-07, -6.9022178649902344e-05,
+	-3.6299228668212891e-05}, /* L1751 */
+{1.0086337089538574e+01, 4.4629722833633423e-04,
+	1.1920928955078125e-07, -1.9544363021850586e-04,
+	2.3961067199707031e-05}, /* L1752 */
+{6.8485445976257324e+00, 3.0413269996643066e-04,
+	1.1920928955078125e-07, 3.1352043151855469e-04,
+	-1.0773539543151855e-03}, /* L1753 */
+{7.3182778358459473e+00, 3.2487511634826660e-04,
+	1.1920928955078125e-07, 1.4674663543701172e-04,
+	3.5083293914794922e-04}, /* L1754 */
+{1.1382732391357422e+01, 5.0559639930725098e-04,
+	1.1920928955078125e-07, 1.1527538299560547e-04,
+	-1.7821788787841797e-05}, /* L1755 */
+{1.1784219741821289e+01, 5.2417814731597900e-04,
+	1.1920928955078125e-07, -2.4318695068359375e-05,
+	1.4448165893554688e-04}, /* L1756 */
+{1.0092412948608398e+01, 4.4946372509002686e-04,
+	1.1920928955078125e-07, -3.5822391510009766e-05,
+	-1.7285346984863281e-06}, /* L1757 */
+{8.1610031127929688e+00, 3.6394596099853516e-04,
+	1.1920928955078125e-07, -3.4093856811523438e-05,
+	-9.8705291748046875e-05}, /* L1758 */
+{7.2934813499450684e+00, 3.2569468021392822e-04,
+	1.1920928955078125e-07, -2.9087066650390625e-05,
+	4.2796134948730469e-05}, /* L1759 */
+{8.9696063995361328e+00, 4.0209293365478516e-04,
+	1.1920928955078125e-07, 3.5285949707031250e-05,
+	6.9642066955566406e-04}, /* L1760 */
+{7.7596564292907715e+00, 3.4902349580079317e-04,
+	1.1920928955078125e-07, -3.0612945556640625e-04,
+	1.8527507781982422e-03}, /* L1761 */
+{7.5170044898986816e+00, 3.3697485923767090e-04,
+	1.1920928955078125e-07, -5.7280063629150391e-05,
+	3.1471252441406250e-05}, /* L1762 */
+{7.3801550865173340e+00, 3.3152103424072266e-04,
+	1.1920928955078125e-07, 3.1113624572753906e-04,
+	-3.6716461181640625e-05}, /* L1763 */
+{7.7326264381408691e+00, 3.4764409065246582e-04,
+	1.1920928955078125e-07, -1.4668703079223633e-04,
+	1.5175342559814453e-04}, /* L1764 */
+{9.9847259521484375e+00, 4.4937431812286377e-04,
+	1.1920928955078125e-07, 5.2332878112792969e-05,
+	2.6941299438476562e-05}, /* L1765 */
+{7.6198606491088867e+00, 3.4343823790550232e-04,
+	1.1920928955078125e-07, -4.8339366912841797e-05,
+	6.9141387939453125e-05}, /* L1766 */
+{9.3424644470214844e+00, 4.2179226875305176e-04,
+	1.1920928955078125e-07, 9.6797943115234375e-05,
+	8.2492828369140625e-05}, /* L1767 */
+{1.0122292518615723e+01, 4.5834481716156006e-04,
+	1.1920928955078125e-07, 1.8191337585449219e-04,
+	3.9446353912353516e-04}, /* L1768 */
+{7.8261585235595703e+00, 3.5451352596282959e-04,
+	1.1920928955078125e-07, 2.7298927307128906e-05,
+	-3.4487247467041016e-04}, /* L1769 */
+{6.3397402763366699e+00, 2.8729438781738281e-04,
+	1.1920928955078125e-07, 6.1154365539550781e-05,
+	-7.3611736297607422e-05}, /* L1770 */
+{8.0116338729858398e+00, 3.6415457725524902e-04,
+	1.1920928955078125e-07, 2.9325485229492188e-05,
+	-2.3478269577026367e-04}, /* L1771 */
+{6.4598374366760254e+00, 2.9349327087402344e-04,
+	1.1920928955078125e-07, -5.3763389587402344e-05,
+	1.1920928955078125e-06}, /* L1772 */
+{7.8836803436279297e+00, 3.5864114761352539e-04,
+	1.1920928955078125e-07, 1.6093254089355469e-05,
+	2.2649765014648438e-06}, /* L1773 */
+{7.3308377265930176e+00, 3.3399462699890137e-04,
+	1.1920928955078125e-07, 9.0599060058593750e-06,
+	-5.1498413085937500e-05}, /* L1774 */
+{8.9430446624755859e+00, 4.0802359580993652e-04,
+	1.1920928955078125e-07, -2.8252601623535156e-05,
+	7.9989433288574219e-05}, /* L1775 */
+{7.7559614181518555e+00, 3.5418570041656494e-04,
+	1.1920928955078125e-07, -6.0677528381347656e-05,
+	1.2338161468505859e-04}, /* L1776 */
+{8.5532112121582031e+00, 3.9142370223999023e-04,
+	1.1920928955078125e-07, 3.3950805664062500e-04,
+	2.3829936981201172e-04}, /* L1777 */
+{8.1330900192260742e+00, 3.7238001823425293e-04,
+	1.1920928955078125e-07, 8.1658363342285156e-05,
+	-4.2259693145751953e-05}, /* L1778 */
+{7.8867855072021484e+00, 3.6156177520751953e-04,
+	1.1920928955078125e-07, 5.8531761169433594e-05,
+	-3.3974647521972656e-05}, /* L1779 */
+{9.2829980850219727e+00, 4.2662024497985840e-04,
+	1.1920928955078125e-07, -7.8797340393066406e-05,
+	-2.9522180557250977e-04}, /* L1780 */
+{7.8920426368713379e+00, 3.6305189132690430e-04,
+	1.1920928955078125e-07, -2.1296739578247070e-04,
+	2.3496150970458984e-04}, /* L1781 */
+{5.2652087211608887e+00, 2.4230778217315674e-04,
+	1.1920928955078125e-07, -1.9311904907226562e-05,
+	8.9406967163085938e-06}, /* L1782 */
+{6.5016040802001953e+00, 2.9963254928588867e-04,
+	1.1920928955078125e-07, 1.9443035125732422e-04,
+	-1.8566846847534180e-04}, /* L1783 */
+{9.1465921401977539e+00, 4.2220950126647949e-04,
+	1.1920928955078125e-07, -2.5057792663574219e-04,
+	8.3446502685546875e-05}, /* L1784 */
+{7.5987195968627930e+00, 3.5110116004943848e-04,
+	1.1920928955078125e-07, -7.4267387390136719e-05,
+	-1.7285346984863281e-05}, /* L1785 */
+{1.1630291938781738e+01, 5.3809583187103271e-04,
+	1.1920928955078125e-07, 2.2125244140625000e-04,
+	-6.9677829742431641e-05}, /* L1786 */
+{7.4712214469909668e+00, 3.4604966640472412e-04,
+	1.1920928955078125e-07, -1.1742115020751953e-05,
+	-1.1265277862548828e-05}, /* L1787 */
+{9.6669740676879883e+00, 4.4859945774078369e-04,
+	1.1920928955078125e-07, 1.4150142669677734e-04,
+	-5.3405761718750000e-05}, /* L1788 */
+{8.1722412109375000e+00, 3.7953257560729980e-04,
+	1.1920928955078125e-07, -3.0994415283203125e-06,
+	-8.7618827819824219e-05}, /* L1789 */
+{8.9006671905517578e+00, 4.1392445564270020e-04,
+	1.1920928955078125e-07, -1.6689300537109375e-05,
+	-4.3511390686035156e-06}, /* L1790 */
+{7.6381330490112305e+00, 3.5577919334173203e-04,
+	1.1920928955078125e-07, 2.3305416107177734e-04,
+	3.1912326812744141e-04}, /* L1791 */
+{8.4448270797729492e+00, 3.9374083280563354e-04,
+	1.1920928955078125e-07, 1.0299682617187500e-04,
+	-8.8632106781005859e-05}, /* L1792 */
+{6.0394244194030762e+00, 2.8195232152938843e-04,
+	1.1920928955078125e-07, -6.4432621002197266e-05,
+	-2.7418136596679688e-05}, /* L1793 */
+{8.4957714080810547e+00, 3.9707217365503311e-04,
+	1.1920928955078125e-07, 6.4015388488769531e-05,
+	-4.6670436859130859e-05}, /* L1794 */
+{8.2524023056030273e+00, 3.8620829582214355e-04,
+	1.1920928955078125e-07, 4.1007995605468750e-05,
+	-2.1517276763916016e-05}, /* L1795 */
+{8.9413251876831055e+00, 4.1896104812622070e-04,
+	1.1920928955078125e-07, -2.0027160644531250e-05,
+	-2.0265579223632812e-06}, /* L1796 */
+{7.5875697135925293e+00, 3.5599619150161743e-04,
+	1.1920928955078125e-07, -3.0398368835449219e-06,
+	2.2053718566894531e-05}, /* L1797 */
+{9.3489646911621094e+00, 4.3928623199462891e-04,
+	1.1920928955078125e-07, 7.7486038208007812e-06,
+	5.7220458984375000e-05}, /* L1798 */
+{9.4379720687866211e+00, 4.4991075992584229e-04,
+	1.1920928955078125e-07, -1.2984871864318848e-03,
+	4.7528743743896484e-04}, /* L1799 */
+{8.9030637741088867e+00, 4.1933357715606689e-04,
+	1.1920928955078125e-07, 4.7206878662109375e-05,
+	5.2809715270996094e-05}, /* L1800 */
+{9.6848850250244141e+00, 4.5676529407501221e-04,
+	1.1920928955078125e-07, 1.4591217041015625e-04,
+	-3.2186508178710938e-06}, /* L1801 */
+{8.3598384857177734e+00, 3.9549171924591064e-04,
+	1.1920928955078125e-07, 4.7934055328369141e-04,
+	-3.0088424682617188e-04}, /* L1802 */
+{8.4960269927978516e+00, 4.0179770439863205e-04,
+	1.1920928955078125e-07, -1.6629695892333984e-05,
+	1.5556812286376953e-04}, /* L1803 */
+{9.2985544204711914e+00, 4.4021688518114388e-04,
+	1.1920928955078125e-07, 1.9252300262451172e-04,
+	-2.1517276763916016e-04}, /* L1804 */
+{9.7057590484619141e+00, 4.6023726463317871e-04,
+	1.1920928955078125e-07, 2.8359889984130859e-04,
+	-3.3080577850341797e-04}, /* L1805 */
+{7.9213466644287109e+00, 3.7634372711181641e-04,
+	1.1920928955078125e-07, -8.3565711975097656e-05,
+	1.5676021575927734e-04}, /* L1806 */
+{9.6130933761596680e+00, 4.5680999755859375e-04,
+	1.1920928955078125e-07, 5.4717063903808594e-05,
+	-3.5881996154785156e-05}, /* L1807 */
+{7.3325204849243164e+00, 3.4882128238677979e-04,
+	1.1920928955078125e-07, -6.3180923461914062e-05,
+	9.5367431640625000e-07}, /* L1808 */
+{1.3709208488464355e+01, 6.5575912594795227e-04,
+	1.1920928955078125e-07, -1.9404292106628418e-03,
+	2.8967857360839844e-05}, /* L1809 */
+{8.5193071365356445e+00, 4.0632486343383789e-04,
+	1.1920928955078125e-07, 1.9073486328125000e-04,
+	2.9683113098144531e-05}, /* L1810 */
+{9.9353561401367188e+00, 4.7567486763000488e-04,
+	1.1920928955078125e-07, -6.5171718597412109e-04,
+	5.9115886688232422e-04}, /* L1811 */
+{8.1408920288085938e+00, 3.8932263851165771e-04,
+	1.1920928955078125e-07, 8.8214874267578125e-05,
+	-2.1833181381225586e-04}, /* L1812 */
+{8.4855289459228516e+00, 4.0661357343196869e-04,
+	1.1920928955078125e-07, 3.1280517578125000e-04,
+	3.6406517028808594e-04}, /* L1813 */
+{9.4413423538208008e+00, 4.5257806777954102e-04,
+	1.1920928955078125e-07, 7.8797340393066406e-05,
+	-1.3589859008789062e-05}, /* L1814 */
+{8.0692148208618164e+00, 3.8731098175048828e-04,
+	1.1920928955078125e-07, -6.3240528106689453e-05,
+	-1.4781951904296875e-05}, /* L1815 */
+{1.0032471656799316e+01, 4.8217177391052246e-04,
+	1.1920928955078125e-07, 7.5101852416992188e-05,
+	7.8201293945312500e-05}, /* L1816 */
+{1.0497788429260254e+01, 5.0520896911621094e-04,
+	1.1920928955078125e-07, 2.0062923431396484e-04,
+	-1.1920928955078125e-07}, /* L1817 */
+{8.5386505126953125e+00, 4.1130185127258301e-04,
+	1.1920928955078125e-07, -4.8279762268066406e-05,
+	5.9723854064941406e-05}, /* L1818 */
+{6.9657130241394043e+00, 3.3596158027648926e-04,
+	1.1920928955078125e-07, -5.9485435485839844e-05,
+	8.4638595581054688e-06}, /* L1819 */
+{6.6829357147216797e+00, 3.2269954681396484e-04,
+	1.1920928955078125e-07, 2.9563903808593750e-05,
+	2.8610229492187500e-05}, /* L1820 */
+{9.6015148162841797e+00, 4.6496093273162842e-04,
+	1.1920928955078125e-07, -1.8113851547241211e-04,
+	-1.8864870071411133e-04}, /* L1821 */
+{7.5750684738159180e+00, 3.6722421646118164e-04,
+	1.1920928955078125e-07, 1.2636184692382812e-04,
+	-3.3521652221679688e-04}, /* L1822 */
+{8.1503810882568359e+00, 3.9502978324890137e-04,
+	1.1920928955078125e-07, 2.3245811462402344e-05,
+	1.1205673217773438e-05}, /* L1823 */
+{9.1790513992309570e+00, 4.4545531272888184e-04,
+	1.1920928955078125e-07, 1.5497207641601562e-05,
+	-2.4437904357910156e-05}, /* L1824 */
+{1.0218440055847168e+01, 4.9647688865661621e-04,
+	1.1920928955078125e-07, -1.0848045349121094e-05,
+	-1.1682510375976562e-05}, /* L1825 */
+{1.0018550872802734e+01, 4.8764050006866455e-04,
+	1.1920928955078125e-07, 3.7276744842529297e-04,
+	-2.6851892471313477e-04}, /* L1826 */
+{1.1475614547729492e+01, 5.5900216102600098e-04,
+	1.1920928955078125e-07, -1.0490417480468750e-05,
+	8.7022781372070312e-06}, /* L1827 */
+{7.5149459838867188e+00, 3.6661699414253235e-04,
+	1.1920928955078125e-07, 2.0074844360351562e-04,
+	-1.8823146820068359e-04}, /* L1828 */
+{8.7518529891967773e+00, 4.2748451232910156e-04,
+	1.1920928955078125e-07, -1.0424852371215820e-04,
+	-5.0067901611328125e-05}, /* L1829 */
+{9.5794782638549805e+00, 4.6828389167785645e-04,
+	1.1920928955078125e-07, 6.3180923461914062e-06,
+	1.1920928955078125e-05}, /* L1830 */
+{7.7948117256164551e+00, 3.8161873817443848e-04,
+	1.1920928955078125e-07, 5.9127807617187500e-05,
+	-2.4259090423583984e-05}, /* L1831 */
+{6.8610491752624512e+00, 3.3641606569290161e-04,
+	1.1920928955078125e-07, -2.8663873672485352e-04,
+	-2.2703409194946289e-04}, /* L1832 */
+{1.1438397407531738e+01, 5.6164711713790894e-04,
+	1.1920928955078125e-07, -5.7816505432128906e-04,
+	-3.6299228668212891e-04}, /* L1833 */
+{9.0859918594360352e+00, 4.4649466872215271e-04,
+	1.1920928955078125e-07, -2.4306774139404297e-04,
+	2.6357173919677734e-04}, /* L1834 */
+{9.2801256179809570e+00, 4.5673549175262451e-04,
+	1.1920928955078125e-07, 2.9206275939941406e-05,
+	-2.4962425231933594e-04}, /* L1835 */
+{7.4274253845214844e+00, 3.6585330963134766e-04,
+	1.1920928955078125e-07, 3.7789344787597656e-05,
+	-1.9091367721557617e-04}, /* L1836 */
+{1.1450325012207031e+01, 5.6454539299011230e-04,
+	1.1920928955078125e-07, -3.2007694244384766e-05,
+	6.1988830566406250e-06}, /* L1837 */
+{8.5475053787231445e+00, 4.2253732681274414e-04,
+	1.1920928955078125e-07, 3.9100646972656250e-04,
+	2.8538703918457031e-04}, /* L1838 */
+{7.4893050193786621e+00, 3.7036836147308350e-04,
+	1.1920928955078125e-07, -3.2490491867065430e-04,
+	4.2247772216796875e-04}, /* L1839 */
+{1.1874397277832031e+01, 5.8771669864654541e-04,
+	1.1920928955078125e-07, 1.9013881683349609e-04,
+	1.1134147644042969e-04}, /* L1840 */
+{9.4951753616333008e+00, 4.7510862350463867e-04,
+	1.1920928955078125e-07, -4.7467350959777832e-03,
+	-3.1897425651550293e-03}, /* L1841 */
+{6.9518699645996094e+00, 3.4487247467041016e-04,
+	1.1920928955078125e-07, -1.4883279800415039e-04,
+	7.2121620178222656e-05}, /* L1842 */
+{7.0681729316711426e+00, 3.5104155540466309e-04,
+	1.1920928955078125e-07, 2.0813941955566406e-04,
+	1.1444091796875000e-05}, /* L1843 */
+{1.0756000518798828e+01, 5.3673237562179565e-04,
+	1.1920928955078125e-07, 1.0007619857788086e-03,
+	-1.9377470016479492e-03}, /* L1844 */
+{8.8895196914672852e+00, 4.4274330139160156e-04,
+	1.1920928955078125e-07, 2.7668476104736328e-04,
+	-1.0246038436889648e-04}, /* L1845 */
+{7.7958626747131348e+00, 3.8865208625793457e-04,
+	1.1920928955078125e-07, 2.7418136596679688e-06,
+	1.0967254638671875e-05}, /* L1846 */
+{7.6057376861572266e+00, 3.7956237792968750e-04,
+	1.1920928955078125e-07, 9.7751617431640625e-05,
+	3.9935111999511719e-05}, /* L1847 */
+{6.5784082412719727e+00, 3.2880157232284546e-04,
+	1.1920928955078125e-07, 1.9431114196777344e-05,
+	-3.0541419982910156e-04}, /* L1848 */
+{8.9543466567993164e+00, 4.4825673103332520e-04,
+	1.1920928955078125e-07, 2.4735927581787109e-04,
+	-2.1570920944213867e-04}, /* L1849 */
+{9.0601425170898438e+00, 4.5377761125564575e-04,
+	1.1920928955078125e-07, 2.7298927307128906e-05,
+	-8.4877014160156250e-05}, /* L1850 */
+{1.0608367919921875e+01, 5.3188204765319824e-04,
+	1.1920928955078125e-07, -4.9352645874023438e-05,
+	-3.2126903533935547e-05}, /* L1851 */
+{8.4174890518188477e+00, 4.2295455932617188e-04,
+	1.1920928955078125e-07, -2.1207332611083984e-04,
+	5.1617622375488281e-05}, /* L1852 */
+{8.9814271926879883e+00, 4.5187771320343018e-04,
+	1.1920928955078125e-07, -5.4836273193359375e-04,
+	8.9180469512939453e-04}, /* L1853 */
+{8.0059556961059570e+00, 4.0289759635925293e-04,
+	1.1920928955078125e-07, -1.9848346710205078e-05,
+	1.0836124420166016e-04}, /* L1854 */
+{8.2595949172973633e+00, 4.1610747575759888e-04,
+	1.1920928955078125e-07, -8.3506107330322266e-05,
+	-1.3887882232666016e-05}, /* L1855 */
+{9.0352134704589844e+00, 4.5570731163024902e-04,
+	1.1920928955078125e-07, -3.3378601074218750e-05,
+	3.0040740966796875e-05}, /* L1856 */
+{8.3262290954589844e+00, 4.2049586772918701e-04,
+	1.1920928955078125e-07, -8.8095664978027344e-05,
+	-5.7816505432128906e-06}, /* L1857 */
+{9.2682580947875977e+00, 4.6864151954650879e-04,
+	1.1920928955078125e-07, -2.8300285339355469e-04,
+	-8.7916851043701172e-05}, /* L1858 */
+{9.8189849853515625e+00, 4.9709901213645935e-04,
+	1.1920928955078125e-07, -1.1974573135375977e-04,
+	-9.4830989837646484e-05}, /* L1859 */
+{1.0359735488891602e+01, 5.2499771118164062e-04,
+	1.1920928955078125e-07, 1.9323825836181641e-04,
+	-2.0384788513183594e-05}, /* L1860 */
+{6.5773878097534180e+00, 3.3459067344665527e-04,
+	1.1920928955078125e-07, -1.4141798019409180e-03,
+	8.0692768096923828e-04}, /* L1861 */
+{8.6505784988403320e+00, 4.3940544128417969e-04,
+	1.1920928955078125e-07, 9.0479850769042969e-05,
+	3.2305717468261719e-05}, /* L1862 */
+{6.9849939346313477e+00, 3.5546859726309776e-04,
+	1.1920928955078125e-07, 5.6743621826171875e-04,
+	-2.5689601898193359e-04}, /* L1863 */
+{9.3527984619140625e+00, 4.7633051872253418e-04,
+	1.1920928955078125e-07, 4.5061111450195312e-05,
+	-8.8810920715332031e-06}, /* L1864 */
+{8.6561861038208008e+00, 4.4298171997070312e-04,
+	1.1920928955078125e-07, -5.4836273193359375e-04,
+	-2.4150609970092773e-03}, /* L1865 */
+{8.7005128860473633e+00, 4.4403225183486938e-04,
+	1.1920928955078125e-07, -2.2590160369873047e-05,
+	-3.5524368286132812e-05}, /* L1866 */
+{7.5531415939331055e+00, 3.8588047027587891e-04,
+	1.1920928955078125e-07, 2.9802322387695312e-05,
+	-6.0737133026123047e-05}, /* L1867 */
+{8.7230911254882812e+00, 4.4808536767959595e-04,
+	1.1920928955078125e-07, -8.9961290359497070e-04,
+	-2.3205280303955078e-03}, /* L1868 */
+{8.5916881561279297e+00, 4.4009089469909668e-04,
+	1.1920928955078125e-07, 1.0716915130615234e-04,
+	-2.9814243316650391e-04}, /* L1869 */
+{9.1893367767333984e+00, 4.7269463539123535e-04,
+	1.1920928955078125e-07, 8.4483623504638672e-04,
+	2.0468235015869141e-04}, /* L1870 */
+{7.6518578529357910e+00, 3.9274990558624268e-04,
+	1.1920928955078125e-07, 1.4424324035644531e-05,
+	-4.1127204895019531e-06}, /* L1871 */
+{1.2129143714904785e+01, 6.2337517738342285e-04,
+	1.1920928955078125e-07, 1.0108947753906250e-04,
+	-9.4175338745117188e-06}, /* L1872 */
+{8.4717893600463867e+00, 4.3584406375885010e-04,
+	1.1920928955078125e-07, 2.9087066650390625e-05,
+	-5.7816505432128906e-06}, /* L1873 */
+{8.3352432250976562e+00, 4.2951107025146484e-04,
+	1.1920928955078125e-07, -2.9802322387695312e-06,
+	-8.1658363342285156e-05}, /* L1874 */
+{9.2474269866943359e+00, 4.7698616981506348e-04,
+	1.1920928955078125e-07, -2.6881694793701172e-05,
+	-8.8512897491455078e-05}, /* L1875 */
+{9.2441177368164062e+00, 4.7749280929565430e-04,
+	1.1920928955078125e-07, -1.6427040100097656e-04,
+	1.6307830810546875e-04}, /* L1876 */
+{9.9934844970703125e+00, 5.1665306091308594e-04,
+	1.1920928955078125e-07, 4.7326087951660156e-05,
+	1.1026859283447266e-04}, /* L1877 */
+{1.1417752265930176e+01, 5.9089064598083496e-04,
+	1.1920928955078125e-07, 5.2332878112792969e-05,
+	-3.3318996429443359e-05}, /* L1878 */
+{7.9370808601379395e+00, 4.1124224662780762e-04,
+	1.1920928955078125e-07, 1.7428398132324219e-04,
+	6.7710876464843750e-05}, /* L1879 */
+{9.8608522415161133e+00, 5.1711872220039368e-04,
+	1.1920928955078125e-07, -1.4584660530090332e-03,
+	1.9093751907348633e-03}, /* L1880 */
+{8.2230386734008789e+00, 4.2715668678283691e-04,
+	1.1920928955078125e-07, 1.6713142395019531e-04,
+	1.9180774688720703e-04}, /* L1881 */
+{7.4083065986633301e+00, 3.8517266511917114e-04,
+	1.1920928955078125e-07, 2.6941299438476562e-05,
+	8.3327293395996094e-05}, /* L1882 */
+{9.2573480606079102e+00, 4.8185419291257858e-04,
+	1.1920928955078125e-07, -3.5166740417480469e-06,
+	4.1961669921875000e-05}, /* L1883 */
+{1.0731763839721680e+01, 5.5927038192749023e-04,
+	1.1920928955078125e-07, -2.6583671569824219e-04,
+	4.1246414184570312e-05}, /* L1884 */
+{9.9990072250366211e+00, 5.2294135093688965e-04,
+	1.1920928955078125e-07, -7.5775384902954102e-04,
+	-6.0123205184936523e-04}, /* L1885 */
+{1.0617819786071777e+01, 5.5624544620513916e-04,
+	1.1920928955078125e-07, -1.2918114662170410e-03,
+	-2.8576850891113281e-03}, /* L1886 */
+{7.6358456611633301e+00, 3.9932131767272949e-04,
+	1.1920928955078125e-07, -9.3579292297363281e-06,
+	-5.2213668823242188e-05}, /* L1887 */
+{8.3299045562744141e+00, 4.3621659278869629e-04,
+	1.1920928955078125e-07, 1.8310546875000000e-04,
+	1.8501281738281250e-04}, /* L1888 */
+{9.2889890670776367e+00, 4.8676133155822754e-04,
+	1.1920928955078125e-07, -9.2267990112304688e-05,
+	7.0214271545410156e-05}, /* L1889 */
+{7.5539221763610840e+00, 4.0073692798614502e-04,
+	1.1920928955078125e-07, 4.8210620880126953e-03,
+	1.6785860061645508e-03}, /* L1890 */
+{8.1479606628417969e+00, 4.3424963951110840e-04,
+	1.1920928955078125e-07, -1.3075470924377441e-03,
+	-2.0909309387207031e-04}, /* L1891 */
+{6.6375904083251953e+00, 3.4964084625244141e-04,
+	1.1920928955078125e-07, 7.8320503234863281e-05,
+	3.7717819213867188e-04}, /* L1892 */
+{9.0733795166015625e+00, 4.7793984413146973e-04,
+	1.1920928955078125e-07, -2.3221969604492188e-04,
+	-3.7759542465209961e-04}, /* L1893 */
+{7.9673933982849121e+00, 4.2000412940979004e-04,
+	1.1920928955078125e-07, 6.5565109252929688e-05,
+	8.2015991210937500e-05}, /* L1894 */
+{1.0386767387390137e+01, 5.4809451103210449e-04,
+	1.1920928955078125e-07, -7.5995922088623047e-05,
+	-1.5854835510253906e-05}, /* L1895 */
+{1.0470783233642578e+01, 5.5384635925292969e-04,
+	1.1920928955078125e-07, 8.0704689025878906e-05,
+	1.0120868682861328e-04}, /* L1896 */
+{8.9655103683471680e+00, 4.7418475151062012e-04,
+	1.1920928955078125e-07, 1.5819072723388672e-04,
+	-1.6987323760986328e-05}, /* L1897 */
+{1.0187598228454590e+01, 5.3933262825012207e-04,
+	1.1920928955078125e-07, 6.5922737121582031e-05,
+	3.7670135498046875e-05}, /* L1898 */
+{1.1103092193603516e+01, 5.8859586715698242e-04,
+	1.1920928955078125e-07, 8.8810920715332031e-05,
+	1.5985965728759766e-04}, /* L1899 */
+{1.1348529815673828e+01, 6.0232728719711304e-04,
+	1.1920928955078125e-07, -3.8623809814453125e-05,
+	9.5129013061523438e-05}, /* L1900 */
+{1.0201865196228027e+01, 5.4249167442321777e-04,
+	1.1920928955078125e-07, -1.1128187179565430e-04,
+	5.1534175872802734e-04}, /* L1901 */
+{1.0959078788757324e+01, 5.8294832706451416e-04,
+	1.1920928955078125e-07, -2.4318695068359375e-04,
+	2.3114681243896484e-04}, /* L1902 */
+{9.6982774734497070e+00, 5.1629543304443359e-04,
+	1.1920928955078125e-07, 1.3113021850585938e-05,
+	2.3484230041503906e-05}, /* L1903 */
+{1.1804619789123535e+01, 6.2921643257141113e-04,
+	1.1920928955078125e-07, -2.6643276214599609e-05,
+	2.1123886108398438e-04}, /* L1904 */
+{1.0200138092041016e+01, 5.4486095905303955e-04,
+	1.1920928955078125e-07, 8.7666511535644531e-04,
+	-4.2217969894409180e-04}, /* L1905 */
+{9.2188777923583984e+00, 4.9246102571487427e-04,
+	1.1920928955078125e-07, 2.4676322937011719e-05,
+	2.0623207092285156e-05}, /* L1906 */
+{1.0456287384033203e+01, 5.5949389934539795e-04,
+	1.1920928955078125e-07, -2.7060508728027344e-05,
+	-3.4934282302856445e-04}, /* L1907 */
+{9.0423278808593750e+00, 4.8449635505676270e-04,
+	1.1920928955078125e-07, 7.0929527282714844e-05,
+	-5.6469440460205078e-04}, /* L1908 */
+{1.1014037132263184e+01, 5.9181451797485352e-04,
+	1.1920928955078125e-07, -5.2487850189208984e-04,
+	-6.7114830017089844e-05}, /* L1909 */
+{8.3355932235717773e+00, 4.4730305671691895e-04,
+	1.1920928955078125e-07, -1.0192394256591797e-05,
+	5.1379203796386719e-05}, /* L1910 */
+{1.0213484764099121e+01, 5.4895877838134766e-04,
+	1.1920928955078125e-07, 4.4870376586914062e-04,
+	1.3160705566406250e-04}, /* L1911 */
+{9.5378265380859375e+00, 5.1292777061462402e-04,
+	1.1920928955078125e-07, -7.9393386840820312e-05,
+	7.3909759521484375e-05}, /* L1912 */
+{1.0189579963684082e+01, 5.4869055747985840e-04,
+	1.1920928955078125e-07, -1.3172626495361328e-05,
+	6.8306922912597656e-05}, /* L1913 */
+{1.2732538223266602e+01, 6.8700313568115234e-04,
+	1.1920928955078125e-07, 6.9832801818847656e-04,
+	3.5011768341064453e-04}, /* L1914 */
+{8.5322532653808594e+00, 4.6125426888465881e-04,
+	1.1920928955078125e-07, -1.0893344879150391e-03,
+	-1.1384487152099609e-04}, /* L1915 */
+{9.4907054901123047e+00, 5.1279366016387939e-04,
+	1.1920928955078125e-07, 4.0650367736816406e-05,
+	-2.2530555725097656e-05}, /* L1916 */
+{7.6368107795715332e+00, 4.1300058364868164e-04,
+	1.1920928955078125e-07, -2.1994113922119141e-05,
+	1.7642974853515625e-05}, /* L1917 */
+{8.9430675506591797e+00, 4.8416852951049805e-04,
+	1.1920928955078125e-07, 1.5139579772949219e-05,
+	3.0755996704101562e-05}, /* L1918 */
+{9.6885662078857422e+00, 5.2526593208312988e-04,
+	1.1920928955078125e-07, 2.2149085998535156e-04,
+	9.6082687377929688e-05}, /* L1919 */
+{1.1273062705993652e+01, 6.1184167861938477e-04,
+	1.1920928955078125e-07, 2.1934509277343750e-05,
+	1.4090538024902344e-04}, /* L1920 */
+{8.2396593093872070e+00, 4.4792890548706055e-04,
+	1.1920928955078125e-07, 2.2864341735839844e-04,
+	2.9540061950683594e-04}, /* L1921 */
+{9.3179578781127930e+00, 5.0947070121765137e-04,
+	1.1920928955078125e-07, 2.4203062057495117e-03,
+	-4.7564506530761719e-05}, /* L1922 */
+{9.7452087402343750e+00, 5.3104758262634277e-04,
+	1.1920928955078125e-07, -1.7464160919189453e-05,
+	-7.8511238098144531e-04}, /* L1923 */
+{9.1860475540161133e+00, 5.0061941146850586e-04,
+	1.1920928955078125e-07, 4.9591064453125000e-05,
+	-8.3684921264648438e-05}, /* L1924 */
+{8.4290475845336914e+00, 4.5995414257049561e-04,
+	1.1920928955078125e-07, 1.5830993652343750e-04,
+	-1.2934207916259766e-05}, /* L1925 */
+{9.1229066848754883e+00, 5.0601363182067871e-04,
+	1.1920928955078125e-07, 6.1523914337158203e-04,
+	-4.0934681892395020e-03}, /* L1926 */
+{8.0631389617919922e+00, 4.4082850217819214e-04,
+	1.1920928955078125e-07, -4.8696994781494141e-05,
+	-3.5107135772705078e-05}, /* L1927 */
+{8.6928014755249023e+00, 4.7783553600311279e-04,
+	1.1920928955078125e-07, -9.1612339019775391e-04,
+	-2.5457143783569336e-03}, /* L1928 */
+{9.6367349624633789e+00, 5.2803754806518555e-04,
+	1.1920928955078125e-07, -1.4740228652954102e-04,
+	-2.4133920669555664e-04}, /* L1929 */
+{1.1175786018371582e+01, 6.1327219009399414e-04,
+	1.1920928955078125e-07, 2.1827220916748047e-04,
+	2.4306774139404297e-04}, /* L1930 */
+{1.0167559623718262e+01, 5.5964291095733643e-04,
+	1.1920928955078125e-07, -2.8723478317260742e-04,
+	4.0638446807861328e-04}, /* L1931 */
+{1.0183979988098145e+01, 5.5974721908569336e-04,
+	1.1920928955078125e-07, -3.2603740692138672e-05,
+	2.4437904357910156e-05}, /* L1932 */
+{8.8087539672851562e+00, 4.8625469207763672e-04,
+	1.1920928955078125e-07, -1.1152029037475586e-03,
+	-1.8329024314880371e-03}, /* L1933 */
+{1.4495589256286621e+01, 8.0052018165588379e-04,
+	1.1920928955078125e-07, -1.2446641921997070e-03,
+	-1.2664198875427246e-03}, /* L1934 */
+{1.0585183143615723e+01, 5.8382749557495117e-04,
+	1.1920928955078125e-07, 1.5079975128173828e-04,
+	1.0323524475097656e-04}, /* L1935 */
+{1.0339366912841797e+01, 5.7132169604301453e-04,
+	1.1920928955078125e-07, -4.0733814239501953e-04,
+	-4.0030479431152344e-04}, /* L1936 */
+{1.0962856292724609e+01, 6.0608610510826111e-04,
+	1.1920928955078125e-07, -3.0040740966796875e-05,
+	-2.4819374084472656e-04}, /* L1937 */
+{1.0381913185119629e+01, 5.7502835988998413e-04,
+	1.1920928955078125e-07, -3.5697221755981445e-04,
+	2.5451183319091797e-04}, /* L1938 */
+{1.1519732475280762e+01, 6.3921511173248291e-04,
+	1.1920928955078125e-07, 1.3747215270996094e-03,
+	-7.0559978485107422e-04}, /* L1939 */
+{9.5184192657470703e+00, 5.3052604198455811e-04,
+	1.1920928955078125e-07, -2.7453899383544922e-04,
+	4.1484832763671875e-05}, /* L1940 */
+{8.5668268203735352e+00, 4.7579407691955566e-04,
+	1.1920928955078125e-07, 9.1314315795898438e-05,
+	-2.3722648620605469e-04}, /* L1941 */
+{9.4552268981933594e+00, 5.4079294204711914e-04,
+	1.1920928955078125e-07, 4.3010711669921875e-04,
+	-4.7474503517150879e-03}, /* L1942 */
+{1.1977722167968750e+01, 6.6637992858886719e-04,
+	1.1920928955078125e-07, 3.5047531127929688e-05,
+	5.1021575927734375e-05}, /* L1943 */
+{1.0210963249206543e+01, 5.6863576173782349e-04,
+	1.1920928955078125e-07, -1.4752149581909180e-04,
+	-1.4781951904296875e-05}, /* L1944 */
+{1.2073630332946777e+01, 6.7320466041564941e-04,
+	1.1920928955078125e-07, 5.0902366638183594e-05,
+	7.1763992309570312e-05}, /* L1945 */
+{7.5864367485046387e+00, 4.3940544128417969e-04,
+	1.1920928955078125e-07, 1.1296272277832031e-03,
+	-8.2113146781921387e-03}, /* L1946 */
+{9.6716833114624023e+00, 5.4062157869338989e-04,
+	1.1920928955078125e-07, 1.5103816986083984e-04,
+	1.6689300537109375e-05}, /* L1947 */
+{1.0730534553527832e+01, 6.0021877288818359e-04,
+	1.1920928955078125e-07, -2.5868415832519531e-04,
+	4.1961669921875000e-05}, /* L1948 */
+{8.7035503387451172e+00, 4.8764050006866455e-04,
+	1.1920928955078125e-07, 2.2232532501220703e-04,
+	7.4315071105957031e-04}, /* L1949 */
+{8.5631618499755859e+00, 4.8037990927696228e-04,
+	1.1920928955078125e-07, -2.7400255203247070e-04,
+	-2.9486417770385742e-04}, /* L1950 */
+{8.8643732070922852e+00, 4.9737095832824707e-04,
+	1.1920928955078125e-07, -1.7321109771728516e-04,
+	-2.3066997528076172e-05}, /* L1951 */
+{9.5164451599121094e+00, 5.3486227989196777e-04,
+	1.1920928955078125e-07, 4.4643878936767578e-04,
+	9.8109245300292969e-05}, /* L1952 */
+{1.0712300300598145e+01, 6.0426443815231323e-04,
+	1.1920928955078125e-07, -4.5710802078247070e-04,
+	-7.0732831954956055e-04}, /* L1953 */
+{9.5847721099853516e+00, 5.3951144218444824e-04,
+	1.1920928955078125e-07, 3.0636787414550781e-05,
+	-4.6730041503906250e-05}, /* L1954 */
+{7.9309968948364258e+00, 4.4685602188110352e-04,
+	1.1920928955078125e-07, 7.5221061706542969e-05,
+	1.0347366333007812e-04}, /* L1955 */
+{6.8448896408081055e+00, 3.8608908653259277e-04,
+	1.1920928955078125e-07, -7.3850154876708984e-05,
+	8.9406967163085938e-06}, /* L1956 */
+{8.9013347625732422e+00, 5.0285458564758301e-04,
+	1.1920928955078125e-07, 3.8087368011474609e-04,
+	3.0231475830078125e-04}, /* L1957 */
+{8.0350475311279297e+00, 4.5436620712280273e-04,
+	1.1920928955078125e-07, -1.4233589172363281e-04,
+	-1.1080503463745117e-04}, /* L1958 */
+{1.0773261070251465e+01, 6.0981512069702148e-04,
+	1.1920928955078125e-07, -2.5522708892822266e-04,
+	-1.3500452041625977e-04}, /* L1959 */
+{1.1945131301879883e+01, 6.8248808383941650e-04,
+	1.1920928955078125e-07, -4.3541193008422852e-03,
+	6.8250894546508789e-03}, /* L1960 */
+{9.7029876708984375e+00, 5.5011361837387085e-04,
+	1.1920928955078125e-07, 8.7380409240722656e-05,
+	-1.8835067749023438e-05}, /* L1961 */
+{9.8058280944824219e+00, 5.5676698684692383e-04,
+	1.1920928955078125e-07, -1.3411045074462891e-05,
+	-1.2248754501342773e-04}, /* L1962 */
+{1.3611980438232422e+01, 7.7419006265699863e-04,
+	1.1920928955078125e-07, 3.5655498504638672e-04,
+	-2.2375583648681641e-04}, /* L1963 */
+{8.4177064895629883e+00, 4.7904253005981445e-04,
+	1.1920928955078125e-07, 5.0544738769531250e-05,
+	-2.1189451217651367e-04}, /* L1964 */
+{1.0175786972045898e+01, 5.7952105998992920e-04,
+	1.1920928955078125e-07, -1.3244152069091797e-04,
+	3.6311149597167969e-04}, /* L1965 */
+{8.3086719512939453e+00, 4.7411024570465088e-04,
+	1.1920928955078125e-07, -6.0033798217773438e-04,
+	2.2900104522705078e-04}, /* L1966 */
+{8.6043062210083008e+00, 4.9097090959548950e-04,
+	1.1920928955078125e-07, 8.3446502685546875e-07,
+	-1.5795230865478516e-05}, /* L1967 */
+{1.0641353607177734e+01, 6.0817599296569824e-04,
+	1.1920928955078125e-07, 5.7101249694824219e-05,
+	-3.8707256317138672e-04}, /* L1968 */
+{1.0268855094909668e+01, 5.8725476264953613e-04,
+	1.1920928955078125e-07, -2.1457672119140625e-06,
+	2.7763843536376953e-04}, /* L1969 */
+{1.2710402488708496e+01, 7.2799623012542725e-04,
+	1.1920928955078125e-07, 2.2530555725097656e-05,
+	-5.0431489944458008e-04}, /* L1970 */
+{1.1090595245361328e+01, 6.3568353652954102e-04,
+	1.1920928955078125e-07, 5.5551528930664062e-05,
+	4.3034553527832031e-05}, /* L1971 */
+{1.1624182701110840e+01, 6.6687166690826416e-04,
+	1.1920928955078125e-07, 1.5711784362792969e-04,
+	2.2065639495849609e-04}, /* L1972 */
+{1.0314638137817383e+01, 5.9263408184051514e-04,
+	1.1920928955078125e-07, 2.4759769439697266e-04,
+	4.5609474182128906e-04}, /* L1973 */
+{1.0397470474243164e+01, 5.9762597084045410e-04,
+	1.1920928955078125e-07, 2.0384788513183594e-05,
+	1.8596649169921875e-05}, /* L1974 */
+{7.9526839256286621e+00, 4.5779347419738770e-04,
+	1.1920928955078125e-07, 1.0085105895996094e-04,
+	-7.6770782470703125e-05}, /* L1975 */
+{8.9509191513061523e+00, 5.1692128181457520e-04,
+	1.1920928955078125e-07, 3.5035610198974609e-04,
+	1.5652179718017578e-04}, /* L1976 */
+{9.6313333511352539e+00, 5.5524706840515137e-04,
+	1.1920928955078125e-07, -5.7697296142578125e-05,
+	-6.1631202697753906e-05}, /* L1977 */
+{1.0058417320251465e+01, 5.8156251907348633e-04,
+	1.1920928955078125e-07, 3.1507015228271484e-04,
+	-2.2852420806884766e-04}, /* L1978 */
+{1.0616869926452637e+01, 6.1337649822235107e-04,
+	1.1920928955078125e-07, 1.8596649169921875e-05,
+	-9.7274780273437500e-05}, /* L1979 */
+{9.6551551818847656e+00, 5.5843591690063477e-04,
+	1.1920928955078125e-07, -7.4684619903564453e-05,
+	5.7458877563476562e-05}, /* L1980 */
+{9.6228322982788086e+00, 5.5742263793945312e-04,
+	1.1920928955078125e-07, -1.2600421905517578e-04,
+	2.7525424957275391e-04}, /* L1981 */
+{1.0596381187438965e+01, 6.1428546905517578e-04,
+	1.1920928955078125e-07, -4.6432018280029297e-05,
+	1.3089179992675781e-04}, /* L1982 */
+{1.2365359306335449e+01, 7.1737170219421387e-04,
+	1.1920928955078125e-07, 1.7440319061279297e-04,
+	-2.4855136871337891e-05}, /* L1983 */
+{9.0907354354858398e+00, 5.2788853645324707e-04,
+	1.1920928955078125e-07, 9.0479850769042969e-05,
+	-1.0967254638671875e-05}, /* L1984 */
+{9.0471115112304688e+00, 5.2592158317565918e-04,
+	1.1920928955078125e-07, 8.5949897766113281e-05,
+	1.7762184143066406e-05}, /* L1985 */
+{1.0919524192810059e+01, 6.3553452491760254e-04,
+	1.1920928955078125e-07, 5.7220458984375000e-05,
+	1.1074542999267578e-04}, /* L1986 */
+{9.3615312576293945e+00, 5.4559111595153809e-04,
+	1.1920928955078125e-07, -1.4656782150268555e-04,
+	2.0146369934082031e-04}, /* L1987 */
+{9.8919372558593750e+00, 5.7685188949108124e-04,
+	1.1920928955078125e-07, 1.1503696441650391e-04,
+	-6.2584877014160156e-06}, /* L1988 */
+{9.1773252487182617e+00, 5.3569674491882324e-04,
+	1.1920928955078125e-07, -4.5537948608398438e-05,
+	2.2327899932861328e-04}, /* L1989 */
+{1.0185897827148438e+01, 5.9595331549644470e-04,
+	1.1920928955078125e-07, -6.0927867889404297e-04,
+	6.8533420562744141e-04}, /* L1990 */
+{8.6529941558837891e+00, 5.0607323646545410e-04,
+	1.1920928955078125e-07, -5.1140785217285156e-05,
+	1.9717216491699219e-04}, /* L1991 */
+{9.2955474853515625e+00, 5.4464489221572876e-04,
+	1.1920928955078125e-07, 3.8146972656250000e-06,
+	-1.4382600784301758e-04}, /* L1992 */
+{9.4217214584350586e+00, 5.5211782455444336e-04,
+	1.1920928955078125e-07, -6.5863132476806641e-05,
+	-4.2617321014404297e-05}, /* L1993 */
+{9.1833600997924805e+00, 5.3887069225311279e-04,
+	1.1920928955078125e-07, -5.1856040954589844e-06,
+	-6.4492225646972656e-05}, /* L1994 */
+{1.0723596572875977e+01, 6.3091516494750977e-04,
+	1.1920928955078125e-07, -9.6172094345092773e-04,
+	1.8572807312011719e-04}, /* L1995 */
+{1.4520234107971191e+01, 8.5377693176269531e-04,
+	1.1920928955078125e-07, 1.4865398406982422e-04,
+	7.2598457336425781e-05}, /* L1996 */
+{8.6223506927490234e+00, 5.0773471593856812e-04,
+	1.1920928955078125e-07, 2.6702880859375000e-05,
+	-3.0374526977539062e-04}, /* L1997 */
+{1.2070078849792480e+01, 7.1102380752563477e-04,
+	1.1920928955078125e-07, -1.4424324035644531e-05,
+	-6.3002109527587891e-05}, /* L1998 */
+{1.1777620315551758e+01, 6.9475173950195312e-04,
+	1.1920928955078125e-07, 7.6770782470703125e-05,
+	-1.4966726303100586e-04}, /* L1999 */
+{1.2227584838867188e+01, 7.2187930345535278e-04,
+	1.1920928955078125e-07, 3.4451484680175781e-05,
+	3.6478042602539062e-05}, /* L2000 */
+{8.8412332534790039e+00, 5.2274763584136963e-04,
+	1.1920928955078125e-07, -1.4603137969970703e-04,
+	-7.0863962173461914e-04}, /* L2001 */
+{1.3288765907287598e+01, 7.8594684600830078e-04,
+	1.1920928955078125e-07, 1.0967254638671875e-05,
+	8.1181526184082031e-05}, /* L2002 */
+{1.4326131820678711e+01, 8.4811449050903320e-04,
+	1.1920928955078125e-07, -5.1081180572509766e-05,
+	1.9431114196777344e-05}, /* L2003 */
+{1.0843397140502930e+01, 6.4434111118316650e-04,
+	1.1920928955078125e-07, 9.0384483337402344e-04,
+	-4.3058395385742188e-04}, /* L2004 */
+{1.0322278022766113e+01, 6.1281025409698486e-04,
+	1.1920928955078125e-07, -2.3847818374633789e-04,
+	-3.7145614624023438e-04}, /* L2005 */
+{1.0549732208251953e+01, 6.2641501426696777e-04,
+	1.1920928955078125e-07, 1.6689300537109375e-05,
+	-2.9683113098144531e-05}, /* L2006 */
+{1.1172326087951660e+01, 6.6402554512023926e-04,
+	1.1920928955078125e-07, 4.5418739318847656e-05,
+	3.2782554626464844e-05}, /* L2007 */
+{1.0778042793273926e+01, 6.4164400100708008e-04,
+	1.1920928955078125e-07, -6.8366527557373047e-05,
+	1.2004375457763672e-04}, /* L2008 */
+{1.1256361007690430e+01, 6.7144632339477539e-04,
+	1.1920928955078125e-07, -2.4515390396118164e-04,
+	-1.3053417205810547e-05}, /* L2009 */
+{8.3230304718017578e+00, 4.9619842320680618e-04,
+	1.1920928955078125e-07, -2.8491020202636719e-05,
+	-4.0531158447265625e-05}, /* L2010 */
+{1.9389345169067383e+01, 2.3628771305084229e-03,
+	1.1920928955078125e-07, -8.1286430358886719e-03,
+	3.5625696182250977e-03}, /* L2011 */
+{2.2398042678833008e+01, 4.0780454874038696e-03,
+	1.1920928955078125e-07, -4.2932629585266113e-03,
+	7.0285797119140625e-04}, /* L2012 */
+{3.7127368927001953e+01, 8.9380443096160889e-03,
+	1.1920928955078125e-07, -4.1711330413818359e-04,
+	1.5066862106323242e-03}, /* L2013 */
+{4.4158779144287109e+01, 1.3220252469182014e-02,
+	1.1920928955078125e-07, -1.3178586959838867e-04,
+	5.6421756744384766e-04}, /* L2014 */
+{5.0687767028808594e+01, 1.8235534429550171e-02,
+	1.1920928955078125e-07, 2.0543336868286133e-03,
+	1.3195276260375977e-03}, /* L2015 */
+{6.0456470489501953e+01, 2.5663286447525024e-02,
+	1.1920928955078125e-07, 2.4507045745849609e-03,
+	-4.9054622650146484e-05}, /* L2016 */
+{6.7426277160644531e+01, 3.2831013202667236e-02,
+	1.1920928955078125e-07, -7.8994035720825195e-04,
+	-4.4494867324829102e-03}, /* L2017 */
+{7.1163208007812500e+01, 4.6596020460128784e-02,
+	1.1920928955078125e-07, -6.0402154922485352e-03,
+	4.1137099266052246e-02}, /* L2018 */
+{9.2498748779296875e+01, 5.6218922138214111e-02,
+	1.1920928955078125e-07, -5.7453513145446777e-03,
+	3.6135911941528320e-03}, /* L2019 */
+#endif	/* } */
+
+/* Always the last one. Common to both DP and SP */
+
+{0.0000000000000000e+00, 0.0000000000000000e+00,
+	0.0000000000000000e+00, 0.0000000000000000e+00,
+	0.0000000000000000e+00}, /* L2020 */
+};
+
+#endif	/* LAPACK_V9B_SS13 */
--- a/usr/src/cmd/fps/fptest/singdoub64v9b_ss13.h	Wed Aug 05 18:08:09 2009 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,6115 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License (the "License").
- * You may not use this file except in compliance with the License.
- *
- * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
- * or http://www.opensolaris.org/os/licensing.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information: Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- */
-
-/*
- * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
- * Use is subject to license terms.
- */
-
-#ifndef	LAPACK_V9B_SS13
-#define	LAPACK_V9B_SS13
-
-/* 64-bit golden values for V9B/SS13 Lapack */
-
-
-static struct LinpVals LinpValsA[] = {
-
-#ifdef DP  /* { */
-
-/* Start of DP golden values */
-
-
-{0.0000000000000000e+00, 0.0000000000000000e+00,
-	0.0000000000000000e+00, 0.0000000000000000e+00,
-	0.0000000000000000e+00}, /* L0 */
-{0.0000000000000000e+00, 0.0000000000000000e+00,
-	2.2204460492503131e-16, 0.0000000000000000e+00,
-	0.0000000000000000e+00}, /* L1 */
-{0.0000000000000000e+00, 0.0000000000000000e+00,
-	2.2204460492503131e-16, 0.0000000000000000e+00,
-	0.0000000000000000e+00}, /* L2 */
-{0.0000000000000000e+00, 0.0000000000000000e+00,
-	2.2204460492503131e-16, 0.0000000000000000e+00,
-	0.0000000000000000e+00}, /* L3 */
-{3.8260177822204688e-01, 1.6653345369377348e-16,
-	2.2204460492503131e-16, 2.2204460492503131e-16,
-	2.2204460492503131e-16}, /* L4 */
-{4.0810856343684981e-01, 2.2204460492503131e-16,
-	2.2204460492503131e-16, -3.3306690738754696e-16,
-	0.0000000000000000e+00}, /* L5 */
-{3.4009046953070693e-01, 2.2204460492503131e-16,
-	2.2204460492503131e-16, 8.8817841970012523e-16,
-	2.6645352591003757e-15}, /* L6 */
-{3.6373773558278227e-01, 2.7755575615628914e-16,
-	2.2204460492503131e-16, -3.3306690738754696e-16,
-	8.8817841970012523e-16}, /* L7 */
-{3.2492063115128750e-01, 2.8449465006019636e-16,
-	2.2204460492503131e-16, -1.7763568394002505e-15,
-	-1.1102230246251565e-16}, /* L8 */
-{4.5083838251885799e-01, 4.4408920985006262e-16,
-	2.2204460492503131e-16, -1.5543122344752192e-15,
-	-4.5519144009631418e-15}, /* L9 */
-{4.0575454426697483e-01, 4.4408920985006262e-16,
-	2.2204460492503131e-16, -1.1102230246251565e-16,
-	-2.2204460492503131e-16}, /* L10 */
-{5.9941012221257661e-01, 7.2164496600635175e-16,
-	2.2204460492503131e-16, 2.2204460492503131e-16,
-	2.2204460492503131e-16}, /* L11 */
-{2.9586268852800246e-01, 3.8857805861880479e-16,
-	2.2204460492503131e-16, -5.5511151231257827e-16,
-	0.0000000000000000e+00}, /* L12 */
-{6.2922387221750764e-01, 9.0205620750793969e-16,
-	2.2204460492503131e-16, -1.6653345369377348e-15,
-	-2.2204460492503131e-16}, /* L13 */
-{5.3933474761500677e-01, 8.3266726846886741e-16,
-	2.2204460492503131e-16, -4.4408920985006262e-16,
-	0.0000000000000000e+00}, /* L14 */
-{6.7117213036534140e-01, 1.1102230246251565e-15,
-	2.2204460492503131e-16, -6.6613381477509392e-16,
-	-1.1102230246251565e-16}, /* L15 */
-{7.8652984027188344e-01, 1.3877787807814457e-15,
-	2.2204460492503131e-16, -6.6613381477509392e-16,
-	0.0000000000000000e+00}, /* L16 */
-{6.3662650600829918e-01, 1.1934897514720433e-15,
-	2.2204460492503131e-16, -1.1102230246251565e-15,
-	-1.3322676295501878e-15}, /* L17 */
-{2.9363780703483666e-01, 5.8286708792820718e-16,
-	2.2204460492503131e-16, 4.4408920985006262e-16,
-	4.4408920985006262e-16}, /* L18 */
-{8.0143251092966705e-01, 1.6792123247455493e-15,
-	2.2204460492503131e-16, -5.5511151231257827e-16,
-	8.8817841970012523e-16}, /* L19 */
-{5.9147043988445613e-01, 1.3045120539345589e-15,
-	2.2204460492503131e-16, -6.6613381477509392e-16,
-	-2.2204460492503131e-16}, /* L20 */
-{5.9684867319455459e-01, 1.3877787807814457e-15,
-	2.2204460492503131e-16, 2.2204460492503131e-15,
-	-1.4432899320127035e-15}, /* L21 */
-{4.7856411796145321e-01, 1.1657341758564144e-15,
-	2.2204460492503131e-16, -5.5511151231257827e-16,
-	-2.3314683517128287e-15}, /* L22 */
-{4.5775698239791013e-01, 1.1657341758564144e-15,
-	2.2204460492503131e-16, 2.4424906541753444e-15,
-	-2.9976021664879227e-15}, /* L23 */
-{6.7891536575880340e-01, 1.8041124150158794e-15,
-	2.2204460492503131e-16, -1.1546319456101628e-14,
-	-2.2204460492503131e-15}, /* L24 */
-{5.8156934716077235e-01, 1.6098233857064770e-15,
-	2.2204460492503131e-16, 1.5543122344752192e-15,
-	3.3306690738754696e-15}, /* L25 */
-{6.1704970521036173e-01, 1.7763568394002505e-15,
-	2.2204460492503131e-16, -2.9976021664879227e-15,
-	-4.2188474935755949e-15}, /* L26 */
-{8.9129401863720303e-01, 2.6645352591003757e-15,
-	2.2204460492503131e-16, -4.4408920985006262e-16,
-	2.4424906541753444e-15}, /* L27 */
-{8.9527300979183411e-01, 2.7755575615628914e-15,
-	2.2204460492503131e-16, 1.5543122344752192e-15,
-	-1.3322676295501878e-15}, /* L28 */
-{8.1253743509383025e-01, 2.6090241078691179e-15,
-	2.2204460492503131e-16, 0.0000000000000000e+00,
-	6.6613381477509392e-16}, /* L29 */
-{8.6065578674654963e-01, 2.8588242884097781e-15,
-	2.2204460492503131e-16, 8.8817841970012523e-16,
-	8.8817841970012523e-16}, /* L30 */
-{9.0566972861522066e-01, 3.1086244689504383e-15,
-	2.2204460492503131e-16, 1.7763568394002505e-15,
-	-1.6653345369377348e-15}, /* L31 */
-{7.3636205055376436e-01, 2.6090241078691179e-15,
-	2.2204460492503131e-16, -9.9920072216264089e-16,
-	2.1760371282653068e-14}, /* L32 */
-{8.4318439831303504e-01, 3.0808688933348094e-15,
-	2.2204460492503131e-16, 6.6613381477509392e-16,
-	1.1102230246251565e-15}, /* L33 */
-{9.7321442476194397e-01, 3.6637359812630166e-15,
-	2.2204460492503131e-16, -2.6645352591003757e-15,
-	2.2204460492503131e-16}, /* L34 */
-{1.4583044708110673e+00, 5.6621374255882984e-15,
-	2.2204460492503131e-16, -3.9968028886505635e-15,
-	-4.4408920985006262e-16}, /* L35 */
-{7.3322293824479434e-01, 2.9282132274488504e-15,
-	2.2204460492503131e-16, -1.7652546091539989e-14,
-	1.4654943925052066e-14}, /* L36 */
-{8.4526789345500786e-01, 3.4694469519536142e-15,
-	2.2204460492503131e-16, -1.9984014443252818e-15,
-	-7.7715611723760958e-16}, /* L37 */
-{3.8846732871836481e-01, 1.6375789613221059e-15,
-	2.2204460492503131e-16, 1.0658141036401503e-14,
-	1.9984014443252818e-15}, /* L38 */
-{9.3664352009106877e-01, 4.0523140398818214e-15,
-	2.2204460492503131e-16, 2.8865798640254070e-15,
-	1.7763568394002505e-15}, /* L39 */
-{5.5043845221636245e-01, 2.4424906541753444e-15,
-	2.2204460492503131e-16, -9.0261131902025227e-13,
-	2.2069013283498862e-12}, /* L40 */
-{8.0551968617249903e-01, 3.6637359812630166e-15,
-	2.2204460492503131e-16, -2.6312285683616210e-14,
-	-2.6645352591003757e-14}, /* L41 */
-{1.0454756316476288e+00, 4.8711035205428743e-15,
-	2.2204460492503131e-16, 4.6629367034256575e-15,
-	-5.2180482157382357e-15}, /* L42 */
-{9.7752283269141105e-01, 4.6629367034256575e-15,
-	2.2204460492503131e-16, -5.5511151231257827e-16,
-	-2.6645352591003757e-15}, /* L43 */
-{8.6148166850218699e-01, 4.2049697057677804e-15,
-	2.2204460492503131e-16, -3.4416913763379853e-15,
-	1.1102230246251565e-15}, /* L44 */
-{1.0563970295090952e+00, 5.2735593669694936e-15,
-	2.2204460492503131e-16, -2.8865798640254070e-15,
-	-1.2101430968414206e-14}, /* L45 */
-{1.0211938676275674e+00, 5.2111093218343285e-15,
-	2.2204460492503131e-16, -8.7707618945387367e-15,
-	-4.1078251911130792e-15}, /* L46 */
-{9.6885685013140577e-01, 5.0515147620444623e-15,
-	2.2204460492503131e-16, -3.8191672047105385e-14,
-	4.4408920985006262e-15}, /* L47 */
-{1.1825826121868439e+00, 6.2970462177958098e-15,
-	2.2204460492503131e-16, 2.6645352591003757e-15,
-	6.6613381477509392e-15}, /* L48 */
-{1.5740038790865019e+00, 8.5625950774215198e-15,
-	2.2204460492503131e-16, -1.8984813721090177e-14,
-	-8.1046280797636427e-15}, /* L49 */
-{9.0001388742580246e-01, 4.9960036108132044e-15,
-	2.2204460492503131e-16, 8.8817841970012523e-16,
-	-3.2196467714129540e-15}, /* L50 */
-{8.5295433775635876e-01, 4.8294701571194310e-15,
-	2.2204460492503131e-16, -1.2212453270876722e-15,
-	3.7969627442180354e-14}, /* L51 */
-{1.3605979174225624e+00, 7.8548278992229825e-15,
-	2.2204460492503131e-16, 3.5527136788005009e-15,
-	3.7747582837255322e-15}, /* L52 */
-{8.8680613645728601e-01, 5.2180482157382357e-15,
-	2.2204460492503131e-16, -2.4424906541753444e-15,
-	-3.8857805861880479e-15}, /* L53 */
-{9.6529267247058115e-01, 5.7870375158586285e-15,
-	2.2204460492503131e-16, 1.7763568394002505e-15,
-	-2.3314683517128287e-15}, /* L54 */
-{8.9092283805786343e-01, 5.4400928206632670e-15,
-	2.2204460492503131e-16, 2.8865798640254070e-15,
-	4.4408920985006262e-15}, /* L55 */
-{9.1965704766721101e-01, 5.7176485768195562e-15,
-	2.2204460492503131e-16, 1.6209256159527285e-14,
-	-1.8873791418627661e-15}, /* L56 */
-{1.0000154304731188e+00, 6.3282712403633923e-15,
-	2.2204460492503131e-16, -2.3314683517128287e-15,
-	7.9936057773011271e-15}, /* L57 */
-{1.2586401107668486e+00, 8.1046280797636427e-15,
-	2.2204460492503131e-16, 3.8968828164342995e-13,
-	2.3470114740575809e-13}, /* L58 */
-{8.8242887032215045e-01, 5.7800986219547212e-15,
-	2.2204460492503131e-16, -4.5519144009631418e-15,
-	-2.3314683517128287e-15}, /* L59 */
-{9.7501504471128808e-01, 6.4948046940571658e-15,
-	2.2204460492503131e-16, -1.5543122344752192e-15,
-	8.8817841970012523e-16}, /* L60 */
-{1.3688735810572958e+00, 9.2703622556200571e-15,
-	2.2204460492503131e-16, -7.4606987254810520e-14,
-	-1.2134737659152961e-13}, /* L61 */
-{1.0902385968313253e+00, 7.5044137570756675e-15,
-	2.2204460492503131e-16, 4.4408920985006262e-16,
-	3.7747582837255322e-15}, /* L62 */
-{7.2620168165310051e-01, 5.0792703376600912e-15,
-	2.2204460492503131e-16, -4.8849813083506888e-15,
-	4.4408920985006262e-16}, /* L63 */
-{1.0722821705659045e+00, 7.6189055064901368e-15,
-	2.2204460492503131e-16, -1.5543122344752192e-15,
-	2.2204460492503131e-16}, /* L64 */
-{1.1692488110146999e+00, 8.4376949871511897e-15,
-	2.2204460492503131e-16, -8.8817841970012523e-16,
-	-2.7755575615628914e-15}, /* L65 */
-{1.0378948028395030e+00, 7.6050277186823223e-15,
-	2.2204460492503131e-16, -2.0206059048177849e-14,
-	7.3274719625260332e-15}, /* L66 */
-{1.3750212169004810e+00, 1.0227929614359255e-14,
-	2.2204460492503131e-16, -9.7699626167013776e-15,
-	6.6613381477509392e-15}, /* L67 */
-{7.9780642798774548e-01, 6.0229599085914742e-15,
-	2.2204460492503131e-16, -9.7699626167013776e-15,
-	-3.8857805861880479e-15}, /* L68 */
-{1.2445844216208166e+00, 9.5340402239685318e-15,
-	2.2204460492503131e-16, 1.8141044222375058e-13,
-	3.5194069880617462e-13}, /* L69 */
-{1.0643021367178127e+00, 8.2711615334574162e-15,
-	2.2204460492503131e-16, -3.2196467714129540e-15,
-	-1.5543122344752192e-15}, /* L70 */
-{1.1760744851338045e+00, 9.2703622556200571e-15,
-	2.2204460492503131e-16, -3.2751579226442118e-14,
-	-2.0539125955565396e-14}, /* L71 */
-{1.3402984588979951e+00, 1.0713652187632761e-14,
-	2.2204460492503131e-16, -1.9984014443252818e-15,
-	-1.9984014443252818e-15}, /* L72 */
-{1.0993320314446988e+00, 8.9095397726168812e-15,
-	2.2204460492503131e-16, -2.3869795029440866e-14,
-	7.3274719625260332e-15}, /* L73 */
-{1.4020486609673712e+00, 1.1518563880485999e-14,
-	2.2204460492503131e-16, 5.1070259132757201e-15,
-	-5.8841820305133297e-15}, /* L74 */
-{1.7035809741547945e+00, 1.4184942283279600e-14,
-	2.2204460492503131e-16, -9.9920072216264089e-16,
-	-5.2180482157382357e-15}, /* L75 */
-{1.1513335548210102e+00, 9.7144514654701197e-15,
-	2.2204460492503131e-16, -4.5519144009631418e-15,
-	-3.2196467714129540e-15}, /* L76 */
-{1.1802130161590194e+00, 1.0089151736281110e-14,
-	2.2204460492503131e-16, 6.8833827526759706e-15,
-	-1.7763568394002505e-15}, /* L77 */
-{1.0448879177378469e+00, 9.0483176506950258e-15,
-	2.2204460492503131e-16, 8.8817841970012523e-16,
-	5.4178883601707639e-14}, /* L78 */
-{1.7785084554616846e+00, 1.5598633495983449e-14,
-	2.2204460492503131e-16, 1.7763568394002505e-15,
-	8.8817841970012523e-16}, /* L79 */
-{1.5640866342229285e+00, 1.3891665595622271e-14,
-	2.2204460492503131e-16, 4.4830805734363821e-13,
-	1.3677947663381929e-13}, /* L80 */
-{1.2407598859573825e+00, 1.1157741397482823e-14,
-	2.2204460492503131e-16, -4.5519144009631418e-15,
-	1.1102230246251565e-15}, /* L81 */
-{2.3414995445223701e+00, 2.1316282072803006e-14,
-	2.2204460492503131e-16, -5.1070259132757201e-15,
-	-3.0087043967341742e-14}, /* L82 */
-{1.4909868616993309e+00, 1.3739009929736312e-14,
-	2.2204460492503131e-16, 2.5091040356528538e-14,
-	-6.5503158452884236e-15}, /* L83 */
-{1.1250173592822328e+00, 1.0491607582707729e-14,
-	2.2204460492503131e-16, -4.1744385725905886e-14,
-	-3.4416913763379853e-15}, /* L84 */
-{1.9217208290746031e+00, 1.8134799217861541e-14,
-	2.2204460492503131e-16, -3.2196467714129540e-15,
-	-2.4424906541753444e-15}, /* L85 */
-{1.6860725281232691e+00, 1.6098233857064770e-14,
-	2.2204460492503131e-16, 8.2156503822261584e-15,
-	-6.6613381477509392e-16}, /* L86 */
-{1.0862236572379966e+00, 1.0491607582707729e-14,
-	2.2204460492503131e-16, -2.9087843245179101e-14,
-	-1.2212453270876722e-14}, /* L87 */
-{1.6988898506332140e+00, 1.6597834218146090e-14,
-	2.2204460492503131e-16, 6.2172489379008766e-15,
-	-1.0436096431476471e-14}, /* L88 */
-{1.4101341182513836e+00, 1.3933298959045715e-14,
-	2.2204460492503131e-16, 1.1324274851176597e-14,
-	-2.8865798640254070e-15}, /* L89 */
-{9.4445901766904683e-01, 9.4368957093138306e-15,
-	2.2204460492503131e-16, -1.4432899320127035e-15,
-	4.2188474935755949e-15}, /* L90 */
-{8.8462903464924114e-01, 8.9372953482325102e-15,
-	2.2204460492503131e-16, 2.7311486405778851e-14,
-	4.3076653355456074e-14}, /* L91 */
-{1.4293698816001337e+00, 1.4599432773820809e-14,
-	2.2204460492503131e-16, -9.7699626167013776e-15,
-	6.8833827526759706e-15}, /* L92 */
-{1.4381942346857988e+00, 1.4849232954361469e-14,
-	2.2204460492503131e-16, -1.0547118733938987e-14,
-	2.8865798640254070e-15}, /* L93 */
-{1.4095962184859603e+00, 1.4710455076283324e-14,
-	2.2204460492503131e-16, -1.4765966227514582e-14,
-	-7.9936057773011271e-15}, /* L94 */
-{2.8039906346555035e+00, 2.9573565818452607e-14,
-	2.2204460492503131e-16, -1.6431300764452317e-14,
-	5.5511151231257827e-15}, /* L95 */
-{1.6041914197172078e+00, 1.7097434579227411e-14,
-	2.2204460492503131e-16, -1.5987211554602254e-14,
-	-2.6645352591003757e-15}, /* L96 */
-{1.8170383466070419e+00, 1.9567680809018384e-14,
-	2.2204460492503131e-16, -1.5321077739827160e-14,
-	5.3290705182007514e-15}, /* L97 */
-{1.3439301759339604e+00, 1.4621984179008507e-14,
-	2.2204460492503131e-16, 7.3274719625260332e-15,
-	-1.3322676295501878e-15}, /* L98 */
-{1.9242721162132923e+00, 2.1149748619109232e-14,
-	2.2204460492503131e-16, 6.2172489379008766e-15,
-	8.8817841970012523e-16}, /* L99 */
-{2.9625457127765391e+00, 3.2890357104520263e-14,
-	2.2204460492503131e-16, -3.5527136788005009e-15,
-	5.5511151231257827e-15}, /* L100 */
-{1.2852921095869991e+00, 1.4412082638415313e-14,
-	2.2204460492503131e-16, -2.4535928844215960e-14,
-	-1.0103029524088925e-14}, /* L101 */
-{1.3970803808080099e+00, 1.5820678100908481e-14,
-	2.2204460492503131e-16, -7.7715611723760958e-15,
-	6.2172489379008766e-15}, /* L102 */
-{1.6844920115250395e+00, 1.9262369477246466e-14,
-	2.2204460492503131e-16, -2.6756374893466273e-14,
-	-6.8833827526759706e-15}, /* L103 */
-{1.3750212169004725e+00, 1.5876189252139739e-14,
-	2.2204460492503131e-16, -1.0547118733938987e-14,
-	1.5765166949677223e-14}, /* L104 */
-{1.3047820378553872e+00, 1.5210055437364645e-14,
-	2.2204460492503131e-16, -7.5495165674510645e-15,
-	9.5479180117763462e-15}, /* L105 */
-{1.1226588323233835e+00, 1.3211653993039363e-14,
-	2.2204460492503131e-16, 2.3758772726978350e-14,
-	-5.9063864910058328e-14}, /* L106 */
-{1.4112367289854100e+00, 1.6764367671839864e-14,
-	2.2204460492503131e-16, 1.7319479184152442e-14,
-	1.2656542480726785e-14}, /* L107 */
-{2.4329079107111644e+00, 2.9171109972025988e-14,
-	2.2204460492503131e-16, 1.3322676295501878e-15,
-	-5.9952043329758453e-15}, /* L108 */
-{1.3486446631150799e+00, 1.6320278461989801e-14,
-	2.2204460492503131e-16, 3.3084646133829665e-14,
-	3.1974423109204508e-14}, /* L109 */
-{1.6272978368607867e+00, 1.9872992140790302e-14,
-	2.2204460492503131e-16, -8.9928064994637680e-15,
-	2.2204460492503131e-16}, /* L110 */
-{1.9583635513431428e+00, 2.4133472997789340e-14,
-	2.2204460492503131e-16, -3.5527136788005009e-15,
-	-2.7755575615628914e-15}, /* L111 */
-{1.4910944365089831e+00, 1.8540724511240114e-14,
-	2.2204460492503131e-16, 1.5543122344752192e-14,
-	-3.1863400806741993e-14}, /* L112 */
-{1.6593176390593474e+00, 2.0816681711721685e-14,
-	2.2204460492503131e-16, 7.3274719625260332e-15,
-	1.0436096431476471e-14}, /* L113 */
-{1.4802859990555859e+00, 1.8735013540549517e-14,
-	2.2204460492503131e-16, 8.8817841970012523e-16,
-	-1.5543122344752192e-15}, /* L114 */
-{2.1060107571102940e+00, 2.6888213877640510e-14,
-	2.2204460492503131e-16, 3.3528735343679728e-14,
-	-1.0325074129013956e-14}, /* L115 */
-{1.2823473731281858e+00, 1.6514567491299204e-14,
-	2.2204460492503131e-16, -9.4368957093138306e-15,
-	-2.2537527399890678e-14}, /* L116 */
-{1.6709659543366842e+00, 2.1704860131421810e-14,
-	2.2204460492503131e-16, -1.0558220964185239e-13,
-	-1.3256062914024369e-13}, /* L117 */
-{2.0731252091441892e+00, 2.7158830739892892e-14,
-	2.2204460492503131e-16, 2.6645352591003757e-15,
-	-2.0341506257182118e-12}, /* L118 */
-{1.1575808869552118e+00, 1.5293322164211531e-14,
-	2.2204460492503131e-16, -4.4408920985006262e-16,
-	-8.4376949871511897e-15}, /* L119 */
-{2.4625379975399899e+00, 3.2807090377673376e-14,
-	2.2204460492503131e-16, -3.2196467714129540e-14,
-	-8.4376949871511897e-15}, /* L120 */
-{1.7438285605758650e+00, 2.3425705819590803e-14,
-	2.2204460492503131e-16, 1.2456702336294256e-13,
-	-5.9396931817445875e-14}, /* L121 */
-{2.5451212390319462e+00, 3.4472424914611111e-14,
-	2.2204460492503131e-16, -1.6653345369377348e-15,
-	4.4408920985006262e-15}, /* L122 */
-{1.1016430148704714e+00, 1.5043521983670871e-14,
-	2.2204460492503131e-16, -2.9198865547641617e-14,
-	-2.6867397195928788e-14}, /* L123 */
-{1.4506272222286285e+00, 1.9970136655445003e-14,
-	2.2204460492503131e-16, 1.9984014443252818e-15,
-	1.2434497875801753e-14}, /* L124 */
-{1.5360237012065137e+00, 2.1316282072803006e-14,
-	2.2204460492503131e-16, -6.4726002335646626e-14,
-	3.2862601528904634e-14}, /* L125 */
-{1.6746290145223433e+00, 2.3425705819590803e-14,
-	2.2204460492503131e-16, 5.9952043329758453e-15,
-	7.7715611723760958e-15}, /* L126 */
-{1.3090753174492020e+00, 1.8457457784393227e-14,
-	2.2204460492503131e-16, -2.3980817331903381e-14,
-	-2.6179058920661191e-13}, /* L127 */
-{1.9687803787438483e+00, 2.7977620220553945e-14,
-	2.2204460492503131e-16, -2.7755575615628914e-15,
-	-9.9920072216264089e-16}, /* L128 */
-{1.9070061697393341e+00, 2.7311486405778851e-14,
-	2.2204460492503131e-16, 1.7319479184152442e-14,
-	3.4638958368304884e-14}, /* L129 */
-{2.1846490942642083e+00, 3.1530333899354446e-14,
-	2.2204460492503131e-16, -1.4876988529977098e-14,
-	7.9936057773011271e-15}, /* L130 */
-{2.0649173583425950e+00, 3.0031532816110484e-14,
-	2.2204460492503131e-16, -7.0499162063697440e-14,
-	1.4876988529977098e-14}, /* L131 */
-{1.3409297817707460e+00, 1.9650947535865271e-14,
-	2.2204460492503131e-16, 1.7541523789077473e-14,
-	-5.8841820305133297e-15}, /* L132 */
-{1.5413771672704086e+00, 2.2759572004815709e-14,
-	2.2204460492503131e-16, -9.1038288019262836e-15,
-	6.8389738316909643e-14}, /* L133 */
-{1.8946187866518844e+00, 2.8185787037671162e-14,
-	2.2204460492503131e-16, 5.7731597280508140e-15,
-	-6.6613381477509392e-15}, /* L134 */
-{1.6203953734517988e+00, 2.4286128663675299e-14,
-	2.2204460492503131e-16, -4.4408920985006262e-16,
-	3.7747582837255322e-15}, /* L135 */
-{1.5919363286574972e+00, 2.4036328483134639e-14,
-	2.2204460492503131e-16, -1.2878587085651816e-14,
-	1.0436096431476471e-14}, /* L136 */
-{1.9452854906648289e+00, 2.9587443606260422e-14,
-	2.2204460492503131e-16, -5.6621374255882984e-15,
-	-1.0325074129013956e-14}, /* L137 */
-{2.2323714025370274e+00, 3.4201808052358729e-14,
-	2.2204460492503131e-16, -5.9063864910058328e-14,
-	-3.9634961979118088e-14}, /* L138 */
-{1.8075818482472423e+00, 2.7894353493707058e-14,
-	2.2204460492503131e-16, 7.3274719625260332e-15,
-	-9.4368957093138306e-15}, /* L139 */
-{1.5321664988307440e+00, 2.3814283878209608e-14,
-	2.2204460492503131e-16, -2.9942714974140472e-13,
-	-3.4139358007223564e-13}, /* L140 */
-{2.6347924285160054e+00, 4.1244785364824565e-14,
-	2.2204460492503131e-16, 6.6613381477509392e-16,
-	-8.4376949871511897e-15}, /* L141 */
-{1.8521412550311385e+00, 2.9198865547641617e-14,
-	2.2204460492503131e-16, 1.7763568394002505e-15,
-	1.0658141036401503e-14}, /* L142 */
-{1.8496788906302410e+00, 2.9365399001335390e-14,
-	2.2204460492503131e-16, -1.6653345369377348e-15,
-	-3.2862601528904634e-14}, /* L143 */
-{1.3906464580015256e+00, 2.2232216068118760e-14,
-	2.2204460492503131e-16, -1.1213252548714081e-14,
-	3.4416913763379853e-14}, /* L144 */
-{1.4827815003566338e+00, 2.3869795029440866e-14,
-	2.2204460492503131e-16, 4.3964831775156199e-14,
-	9.9920072216264089e-15}, /* L145 */
-{1.9366737189468126e+00, 3.1391556021276301e-14,
-	2.2204460492503131e-16, -2.8532731732866523e-14,
-	2.9976021664879227e-14}, /* L146 */
-{1.6802980362370283e+00, 2.7422508708241367e-14,
-	2.2204460492503131e-16, 7.7493567118835927e-14,
-	2.2204460492503131e-16}, /* L147 */
-{1.7094858372276440e+00, 2.8088642523016460e-14,
-	2.2204460492503131e-16, 2.4424906541753444e-15,
-	-1.1324274851176597e-14}, /* L148 */
-{3.3616290519342669e+00, 5.5608295745912528e-14,
-	2.2204460492503131e-16, 1.5987211554602254e-14,
-	1.9761969838327786e-14}, /* L149 */
-{2.9133782874447340e+00, 4.8516746176119341e-14,
-	2.2204460492503131e-16, -1.6320278461989801e-14,
-	1.0658141036401503e-14}, /* L150 */
-{1.9205594360078899e+00, 3.2196467714129540e-14,
-	2.2204460492503131e-16, 4.5075054799781356e-14,
-	2.9976021664879227e-14}, /* L151 */
-{1.5723926834412174e+00, 2.6534330288541241e-14,
-	2.2204460492503131e-16, -2.1649348980190553e-14,
-	1.7763568394002505e-14}, /* L152 */
-{2.2484007064231508e+00, 3.8191672047105385e-14,
-	2.2204460492503131e-16, -1.1990408665951691e-14,
-	-8.4376949871511897e-15}, /* L153 */
-{2.2159432834345298e+00, 3.7886360715333467e-14,
-	2.2204460492503131e-16, -2.1094237467877974e-15,
-	5.7731597280508140e-14}, /* L154 */
-{2.4839092950460229e+00, 4.2743586448068527e-14,
-	2.2204460492503131e-16, 1.7763568394002505e-15,
-	-3.3639757646142243e-14}, /* L155 */
-{2.8429925859922287e+00, 4.9238391142125693e-14,
-	2.2204460492503131e-16, 9.3702823278363212e-14,
-	-4.3298697960381105e-15}, /* L156 */
-{1.7985946317186561e+00, 3.1349922657852858e-14,
-	2.2204460492503131e-16, 3.9079850466805510e-14,
-	-4.3187675657918589e-14}, /* L157 */
-{2.2500347185644372e+00, 3.9468428525424315e-14,
-	2.2204460492503131e-16, -6.8833827526759706e-15,
-	9.3258734068513149e-15}, /* L158 */
-{2.5189067918509283e+00, 4.4464432136237519e-14,
-	2.2204460492503131e-16, 2.3048229991218250e-13,
-	-1.4599432773820809e-13}, /* L159 */
-{2.9300256797347366e+00, 5.2046908449732143e-14,
-	2.2204460492503131e-16, -1.3766765505351941e-14,
-	9.1038288019262836e-15}, /* L160 */
-{2.2018973298304485e+00, 3.9357406222961799e-14,
-	2.2204460492503131e-16, 2.1538326677728037e-14,
-	-2.4535928844215960e-14}, /* L161 */
-{2.4784333045366185e+00, 4.4575454438700035e-14,
-	2.2204460492503131e-16, -2.8088642523016460e-14,
-	2.2204460492503131e-16}, /* L162 */
-{2.4478905322621287e+00, 4.4297898682543746e-14,
-	2.2204460492503131e-16, 6.3060667798708891e-14,
-	8.2156503822261584e-15}, /* L163 */
-{1.9390543103075617e+00, 3.5305092183079978e-14,
-	2.2204460492503131e-16, -1.0214051826551440e-14,
-	2.9753977059954195e-14}, /* L164 */
-{2.3926979047394039e+00, 4.3830390705767996e-14,
-	2.2204460492503131e-16, -2.9753977059954195e-14,
-	3.3306690738754696e-15}, /* L165 */
-{1.8870773108172394e+00, 3.4777736246383029e-14,
-	2.2204460492503131e-16, -3.0642155479654321e-14,
-	-7.2830630415410269e-14}, /* L166 */
-{3.0988502111965350e+00, 5.7454041524351851e-14,
-	2.2204460492503131e-16, 1.9984014443252818e-15,
-	-1.1768364061026659e-14}, /* L167 */
-{2.0774130073509189e+00, 3.8746783559417963e-14,
-	2.2204460492503131e-16, 1.7963408538435033e-13,
-	-9.8254737679326354e-14}, /* L168 */
-{1.7840511969681965e+00, 3.3473224192448470e-14,
-	2.2204460492503131e-16, 1.2656542480726785e-14,
-	2.0428103653102880e-14}, /* L169 */
-{1.6103189652471119e+00, 3.0392355299113660e-14,
-	2.2204460492503131e-16, -6.4392935428259079e-15,
-	3.3306690738754696e-15}, /* L170 */
-{1.4590868415381790e+00, 2.7700064464397656e-14,
-	2.2204460492503131e-16, -3.4861002973229915e-14,
-	1.7541523789077473e-14}, /* L171 */
-{2.0625318253507161e+00, 3.9385161798577428e-14,
-	2.2204460492503131e-16, 4.4408920985006262e-15,
-	5.7731597280508140e-15}, /* L172 */
-{2.4509048700612515e+00, 4.7073456244106637e-14,
-	2.2204460492503131e-16, 6.8833827526759706e-15,
-	-4.3298697960381105e-15}, /* L173 */
-{2.7672840791527755e+00, 5.3457238635701287e-14,
-	2.2204460492503131e-16, 9.6811447747313650e-14,
-	-1.2778667013435552e-13}, /* L174 */
-{2.0886036562166272e+00, 4.0578651550049472e-14,
-	2.2204460492503131e-16, -2.6867397195928788e-14,
-	-9.6589403142388619e-15}, /* L175 */
-{2.3238994946785558e+00, 4.5408121707168903e-14,
-	2.2204460492503131e-16, 4.7295500849031669e-14,
-	-2.7200464103316335e-14}, /* L176 */
-{2.8051280295473875e+00, 5.5122573172639022e-14,
-	2.2204460492503131e-16, -7.3274719625260332e-15,
-	1.1546319456101628e-14}, /* L177 */
-{1.9901992485659987e+00, 3.9329650647346170e-14,
-	2.2204460492503131e-16, -2.2848389846785722e-13,
-	-1.6198153929281034e-13}, /* L178 */
-{2.7221090418883036e+00, 5.4095616874860752e-14,
-	2.2204460492503131e-16, -5.9952043329758453e-15,
-	2.7311486405778851e-14}, /* L179 */
-{1.7104430592043798e+00, 3.4180991370647007e-14,
-	2.2204460492503131e-16, -7.4384942649885488e-15,
-	-1.2945200467129325e-13}, /* L180 */
-{1.6882166573145112e+00, 3.3924252296202440e-14,
-	2.2204460492503131e-16, -9.8809849191638932e-15,
-	-7.3274719625260332e-15}, /* L181 */
-{3.0563658417612878e+00, 6.1756155744774333e-14,
-	2.2204460492503131e-16, -2.2315482794965646e-14,
-	1.5543122344752192e-14}, /* L182 */
-{2.9494990633760696e+00, 5.9924287754142824e-14,
-	2.2204460492503131e-16, -3.7858605139717838e-14,
-	5.5067062021407764e-14}, /* L183 */
-{1.8668766324320636e+00, 3.8136160895874127e-14,
-	2.2204460492503131e-16, 4.4408920985006262e-15,
-	2.2204460492503131e-14}, /* L184 */
-{3.3041050371670369e+00, 6.7862382380212694e-14,
-	2.2204460492503131e-16, -6.6435745793569367e-13,
-	3.2640556923979602e-13}, /* L185 */
-{2.2150879427681005e+00, 4.5741188614556449e-14,
-	2.2204460492503131e-16, 1.3256062914024369e-13,
-	1.8207657603852567e-14}, /* L186 */
-{2.5762429605903074e+00, 5.3484994211316916e-14,
-	2.2204460492503131e-16, 3.6859404417555197e-14,
-	-1.3100631690576847e-14}, /* L187 */
-{2.6542962755625545e+00, 5.5400128928795311e-14,
-	2.2204460492503131e-16, -1.7685852782278744e-13,
-	-1.5509815654013437e-13}, /* L188 */
-{2.4524187937789370e+00, 5.1458837191376006e-14,
-	2.2204460492503131e-16, -4.8960835385969403e-14,
-	-7.4384942649885488e-15}, /* L189 */
-{2.1552964146248783e+00, 4.5463632858400160e-14,
-	2.2204460492503131e-16, -2.9087843245179101e-14,
-	2.4646951146678475e-14}, /* L190 */
-{2.2729408311734809e+00, 4.8197557056539608e-14,
-	2.2204460492503131e-16, -1.2434497875801753e-14,
-	-1.1102230246251565e-16}, /* L191 */
-{2.7057709173477096e+00, 5.7676086129276882e-14,
-	2.2204460492503131e-16, -2.1205259770340490e-14,
-	2.5313084961453569e-14}, /* L192 */
-{2.8238777699887536e+00, 6.0507154842071031e-14,
-	2.2204460492503131e-16, 1.1768364061026659e-14,
-	-5.2180482157382357e-15}, /* L193 */
-{2.7062273247337711e+00, 5.8286708792820718e-14,
-	2.2204460492503131e-16, 3.2418512319054571e-14,
-	1.7319479184152442e-14}, /* L194 */
-{1.5974605466275047e+00, 3.4583447217073626e-14,
-	2.2204460492503131e-16, -1.5543122344752192e-14,
-	3.7969627442180354e-14}, /* L195 */
-{3.3776031376180593e+00, 7.3496764230185363e-14,
-	2.2204460492503131e-16, 3.1752378504279477e-14,
-	3.5749181392930041e-14}, /* L196 */
-{2.8191266216130195e+00, 6.1657276506643655e-14,
-	2.2204460492503131e-16, 1.6919798895287386e-13,
-	-3.7081449022480228e-14}, /* L197 */
-{2.3611475441724723e+00, 5.1902926401226068e-14,
-	2.2204460492503131e-16, 3.9745984281580604e-14,
-	-3.2529534621517087e-14}, /* L198 */
-{2.1935011829220654e+00, 4.8461235024888083e-14,
-	2.2204460492503131e-16, 5.9507954119908391e-14,
-	-1.7208456881689926e-14}, /* L199 */
-{2.5250389619438347e+00, 5.6066262743570405e-14,
-	2.2204460492503131e-16, -1.3200551762793111e-13,
-	-4.2410519540680980e-14}, /* L200 */
-{2.3084933320371150e+00, 5.1514348342607263e-14,
-	2.2204460492503131e-16, 2.1760371282653068e-14,
-	4.8849813083506888e-15}, /* L201 */
-{2.1584491469616061e+00, 4.8405723873656825e-14,
-	2.2204460492503131e-16, -8.5709217501062085e-14,
-	5.5511151231257827e-15}, /* L202 */
-{3.3719732126048272e+00, 7.5994766035591965e-14,
-	2.2204460492503131e-16, 3.9968028886505635e-15,
-	2.4202861936828413e-14}, /* L203 */
-{2.5711181043290647e+00, 5.8231197641589461e-14,
-	2.2204460492503131e-16, 7.5495165674510645e-15,
-	1.4654943925052066e-14}, /* L204 */
-{2.2414980014670256e+00, 5.1014747981525943e-14,
-	2.2204460492503131e-16, -2.7233770794055090e-12,
-	4.0367709175370692e-13}, /* L205 */
-{2.6747985543232389e+00, 6.1173288656846125e-14,
-	2.2204460492503131e-16, -4.1855408028368402e-14,
-	1.9184653865522705e-13}, /* L206 */
-{2.4275736899163927e+00, 5.5788706987414116e-14,
-	2.2204460492503131e-16, 4.5741188614556449e-14,
-	4.7295500849031669e-14}, /* L207 */
-{3.4207258595269141e+00, 7.8992368202079888e-14,
-	2.2204460492503131e-16, 4.8849813083506888e-15,
-	1.0214051826551440e-14}, /* L208 */
-{1.9928537167083293e+00, 4.6240788975637770e-14,
-	2.2204460492503131e-16, -6.2172489379008766e-15,
-	6.8833827526759706e-15}, /* L209 */
-{3.3228191290223670e+00, 7.7469280990172251e-14,
-	2.2204460492503131e-16, 3.9968028886505635e-14,
-	1.1213252548714081e-13}, /* L210 */
-{2.3815533356051382e+00, 5.5788706987414116e-14,
-	2.2204460492503131e-16, -1.1213252548714081e-14,
-	-1.6653345369377348e-15}, /* L211 */
-{3.7193970138113874e+00, 8.7541085491693593e-14,
-	2.2204460492503131e-16, 3.6193270602780103e-14,
-	1.3544720900426910e-14}, /* L212 */
-{2.9190591262752417e+00, 6.9028116556069108e-14,
-	2.2204460492503131e-16, -2.6645352591003757e-15,
-	7.1054273576010019e-15}, /* L213 */
-{2.7885944305365191e+00, 6.6252558994506217e-14,
-	2.2204460492503131e-16, 6.2172489379008766e-15,
-	-8.9928064994637680e-15}, /* L214 */
-{3.2233055503148913e+00, 7.6938455606523348e-14,
-	2.2204460492503131e-16, 7.1276318180935050e-14,
-	8.2156503822261584e-15}, /* L215 */
-{2.0960971580864860e+00, 5.0265347439903962e-14,
-	2.2204460492503131e-16, -4.8405723873656825e-14,
-	1.3100631690576847e-14}, /* L216 */
-{3.6682593670737966e+00, 8.8373752760162461e-14,
-	2.2204460492503131e-16, -1.0820233597996776e-12,
-	3.2818192607919627e-13}, /* L217 */
-{2.3555409337051239e+00, 5.7009952314501788e-14,
-	2.2204460492503131e-16, -9.0483176506950258e-14,
-	-1.0935696792557792e-13}, /* L218 */
-{2.7580334246836968e+00, 6.7057470687359455e-14,
-	2.2204460492503131e-16, -8.4376949871511897e-15,
-	-4.2188474935755949e-15}, /* L219 */
-{2.5875399263489585e+00, 6.3199445676787036e-14,
-	2.2204460492503131e-16, 4.4408920985006262e-15,
-	-9.7699626167013776e-15}, /* L220 */
-{2.6776431266172818e+00, 6.5697447482193638e-14,
-	2.2204460492503131e-16, -4.1078251911130792e-15,
-	-3.0975222387041867e-14}, /* L221 */
-{2.9465544750369372e+00, 7.2622463598293052e-14,
-	2.2204460492503131e-16, 2.6645352591003757e-15,
-	1.8873791418627661e-14}, /* L222 */
-{2.9103588088650989e+00, 7.2053474298172659e-14,
-	2.2204460492503131e-16, 8.0380146982861334e-14,
-	-1.0491607582707729e-13}, /* L223 */
-{2.1942302860490086e+00, 5.4567461660326444e-14,
-	2.2204460492503131e-16, -1.2543299732215019e-12,
-	-2.3796520309815605e-12}, /* L224 */
-{2.9328230319262962e+00, 7.3260841837452517e-14,
-	2.2204460492503131e-16, 5.5733195836182858e-14,
-	3.3306690738754696e-15}, /* L225 */
-{2.4845516115510300e+00, 6.2339022832702540e-14,
-	2.2204460492503131e-16, -1.7541523789077473e-14,
-	-2.4313884239290928e-14}, /* L226 */
-{2.8414535359253952e+00, 7.1609385088322597e-14,
-	2.2204460492503131e-16, 4.5297099404706387e-14,
-	-9.8365759981788869e-14}, /* L227 */
-{2.1601210504727981e+00, 5.4678483962788960e-14,
-	2.2204460492503131e-16, 3.8413716652030416e-14,
-	2.5757174171303632e-14}, /* L228 */
-{3.1812717951789433e+00, 8.0879747343942654e-14,
-	2.2204460492503131e-16, -1.7047474543119279e-12,
-	6.3793414994961495e-13}, /* L229 */
-{3.1060261875834261e+00, 7.9311557321659620e-14,
-	2.2204460492503131e-16, 3.7303493627405260e-14,
-	5.1070259132757201e-14}, /* L230 */
-{2.8831613709740678e+00, 7.3940853440035426e-14,
-	2.2204460492503131e-16, -2.7533531010703882e-14,
-	-1.0769163338864018e-14}, /* L231 */
-{2.5205130300389698e+00, 6.4920291364956029e-14,
-	2.2204460492503131e-16, 6.3948846218409017e-14,
-	2.5757174171303632e-14}, /* L232 */
-{4.5757143811716361e+00, 1.1836365221284950e-13,
-	2.2204460492503131e-16, -1.8651746813702630e-14,
-	1.3766765505351941e-14}, /* L233 */
-{2.3782418250352051e+00, 6.1783911320389961e-14,
-	2.2204460492503131e-16, 6.4837024638109142e-14,
-	-8.7707618945387367e-15}, /* L234 */
-{2.6340831977140020e+00, 6.8722805224297190e-14,
-	2.2204460492503131e-16, -5.1736392947532295e-14,
-	-1.9428902930940239e-14}, /* L235 */
-{2.4438936420564654e+00, 6.4032112945255903e-14,
-	2.2204460492503131e-16, -4.3298697960381105e-15,
-	-1.0769163338864018e-14}, /* L236 */
-{3.6435161359218013e+00, 9.5867758176382267e-14,
-	2.2204460492503131e-16, 8.8817841970012523e-15,
-	2.6645352591003757e-14}, /* L237 */
-{3.0378620009741142e+00, 8.0269124680398818e-14,
-	2.2204460492503131e-16, 1.9317880628477724e-14,
-	-1.4466206010865790e-13}, /* L238 */
-{3.6726508121238957e+00, 9.7449825986473115e-14,
-	2.2204460492503131e-16, -1.4332979247910771e-13,
-	2.7533531010703882e-14}, /* L239 */
-{1.8989876351583057e+00, 5.0598414347291509e-14,
-	2.2204460492503131e-16, 4.6629367034256575e-15,
-	7.3052675020335300e-14}, /* L240 */
-{3.4689331945027613e+00, 9.2814644858663087e-14,
-	2.2204460492503131e-16, 8.8373752760162461e-14,
-	-7.7937656328685989e-14}, /* L241 */
-{3.7774343197562574e+00, 1.0148826223854712e-13,
-	2.2204460492503131e-16, -1.3256062914024369e-13,
-	-2.0405899192610377e-13}, /* L242 */
-{2.6003487659619116e+00, 7.0152217368502079e-14,
-	2.2204460492503131e-16, -1.6106005418237146e-12,
-	-5.1847415249994810e-13}, /* L243 */
-{2.8709459387145744e+00, 7.7771122874992216e-14,
-	2.2204460492503131e-16, -1.3655743202889425e-14,
-	1.1324274851176597e-14}, /* L244 */
-{3.5551568977225330e+00, 9.6700425444851135e-14,
-	2.2204460492503131e-16, -4.0634162701280729e-14,
-	1.0658141036401503e-14}, /* L245 */
-{4.1484379951128876e+00, 1.1329825966299722e-13,
-	2.2204460492503131e-16, -8.7707618945387367e-15,
-	-5.9952043329758453e-15}, /* L246 */
-{3.4089594836366168e+00, 9.3480778673438181e-14,
-	2.2204460492503131e-16, 7.2830630415410269e-14,
-	6.8611782921834674e-14}, /* L247 */
-{2.5645557007292012e+00, 7.0610184366159956e-14,
-	2.2204460492503131e-16, -4.0634162701280729e-14,
-	-7.2053474298172659e-14}, /* L248 */
-{3.0582801217071753e+00, 8.4543483325205671e-14,
-	2.2204460492503131e-16, -1.6764367671839864e-14,
-	-3.0864200084579352e-14}, /* L249 */
-{2.9685458053592919e+00, 8.2392426214994430e-14,
-	2.2204460492503131e-16, -3.2196467714129540e-14,
-	-1.9650947535865271e-14}, /* L250 */
-{3.6434825146120655e+00, 1.0152989560197057e-13,
-	2.2204460492503131e-16, 1.7097434579227411e-14,
-	1.5543122344752192e-14}, /* L251 */
-{3.0139353946202108e+00, 8.4321438720280639e-14,
-	2.2204460492503131e-16, -2.0539125955565396e-14,
-	-1.5543122344752192e-15}, /* L252 */
-{2.8508345028798892e+00, 8.0074835651089415e-14,
-	2.2204460492503131e-16, 3.7747582837255322e-15,
-	1.1168843627729075e-13}, /* L253 */
-{3.5039910752784365e+00, 9.8809849191638932e-14,
-	2.2204460492503131e-16, 7.1276318180935050e-14,
-	2.0805579481475434e-13}, /* L254 */
-{3.7103513692402537e+00, 1.0504097591734762e-13,
-	2.2204460492503131e-16, -7.5495165674510645e-15,
-	-3.1530333899354446e-14}, /* L255 */
-{2.7695739851769900e+00, 7.8714812445923599e-14,
-	2.2204460492503131e-16, 5.1070259132757201e-15,
-	2.5091040356528538e-14}, /* L256 */
-{2.7724163198841438e+00, 7.9103390504542404e-14,
-	2.2204460492503131e-16, 3.5305092183079978e-14,
-	4.8472337255134335e-13}, /* L257 */
-{3.7132355906710761e+00, 1.0635936575909000e-13,
-	2.2204460492503131e-16, 5.7287508070658077e-14,
-	-7.7049477908985864e-14}, /* L258 */
-{3.0791980919006119e+00, 8.8540286213856234e-14,
-	2.2204460492503131e-16, 1.7985612998927536e-14,
-	-9.6589403142388619e-15}, /* L259 */
-{2.0783974547759732e+00, 5.9993676693181897e-14,
-	2.2204460492503131e-16, 2.9531932455029164e-14,
-	-4.1078251911130792e-15}, /* L260 */
-{3.8851174195338651e+00, 1.1257661469699087e-13,
-	2.2204460492503131e-16, 1.6875389974302379e-13,
-	2.6711965972481266e-13}, /* L261 */
-{4.3186496530423506e+00, 1.2561826578938451e-13,
-	2.2204460492503131e-16, -5.1136872514234710e-13,
-	5.1736392947532295e-14}, /* L262 */
-{3.7909330197018480e+00, 1.1068923555512811e-13,
-	2.2204460492503131e-16, -7.8492767840998567e-14,
-	6.5503158452884236e-14}, /* L263 */
-{3.9299848830139119e+00, 1.1518563880485999e-13,
-	2.2204460492503131e-16, -5.8841820305133297e-15,
-	-1.4155343563970746e-13}, /* L264 */
-{4.1774229491837191e+00, 1.2290168882600483e-13,
-	2.2204460492503131e-16, -1.5987211554602254e-14,
-	4.0412118096355698e-14}, /* L265 */
-{2.7744789010868378e+00, 8.1934459217336553e-14,
-	2.2204460492503131e-16, 3.9968028886505635e-15,
-	6.4392935428259079e-15}, /* L266 */
-{3.7355445317129057e+00, 1.1073086891855155e-13,
-	2.2204460492503131e-16, -3.0464519795714295e-13,
-	-9.8920871494101448e-14}, /* L267 */
-{2.3022743306039679e+00, 6.8500760619372159e-14,
-	2.2204460492503131e-16, -6.5614180755346752e-14,
-	2.1094237467877974e-14}, /* L268 */
-{2.5474370770692856e+00, 7.6078032762438852e-14,
-	2.2204460492503131e-16, -9.7699626167013776e-15,
-	2.1094237467877974e-14}, /* L269 */
-{2.9259710743468554e+00, 8.7707618945387367e-14,
-	2.2204460492503131e-16, -9.2925667161125602e-14,
-	-1.9428902930940239e-14}, /* L270 */
-{4.1684222533137527e+00, 1.2541356841921925e-13,
-	2.2204460492503131e-16, 8.5043083686286991e-14,
-	3.7525538232330291e-14}, /* L271 */
-{3.7500578642739915e+00, 1.1324274851176597e-13,
-	2.2204460492503131e-16, -5.9729998724833422e-14,
-	-7.8825834748386114e-15}, /* L272 */
-{2.7784311502337311e+00, 8.4210416417818124e-14,
-	2.2204460492503131e-16, -1.0880185641326534e-14,
-	1.4876988529977098e-14}, /* L273 */
-{4.3778047768327930e+00, 1.3317125180378753e-13,
-	2.2204460492503131e-16, -6.0063065632220969e-14,
-	-5.9952043329758453e-14}, /* L274 */
-{2.9973189766086441e+00, 9.1510132804728528e-14,
-	2.2204460492503131e-16, -1.7985612998927536e-14,
-	-1.6431300764452317e-14}, /* L275 */
-{4.1993401591234125e+00, 1.2867484855405564e-13,
-	2.2204460492503131e-16, -6.5392136150421720e-14,
-	-3.1086244689504383e-15}, /* L276 */
-{2.8780058252709164e+00, 8.8506459106074686e-14,
-	2.2204460492503131e-16, 3.7059244561987725e-13,
-	-3.6881608878047700e-13}, /* L277 */
-{3.5000540066536838e+00, 1.0802470029602773e-13,
-	2.2204460492503131e-16, -8.5043083686286991e-14,
-	2.6556534749033744e-13}, /* L278 */
-{2.8208320565674430e+00, 8.7374552037999820e-14,
-	2.2204460492503131e-16, -1.4210854715202004e-14,
-	1.3322676295501878e-15}, /* L279 */
-{4.0357765586935717e+00, 1.2545520178264269e-13,
-	2.2204460492503131e-16, 1.3322676295501878e-14,
-	3.7969627442180354e-14}, /* L280 */
-{4.5320984010938821e+00, 1.4138690218601369e-13,
-	2.2204460492503131e-16, -6.4392935428259079e-15,
-	-5.5511151231257827e-16}, /* L281 */
-{2.7855039738885403e+00, 8.7208018584306046e-14,
-	2.2204460492503131e-16, -8.9928064994637680e-15,
-	2.0206059048177849e-14}, /* L282 */
-{4.0201592051375776e+00, 1.2630868573282328e-13,
-	2.2204460492503131e-16, 1.8429702208777599e-14,
-	2.8954616482224083e-13}, /* L283 */
-{3.5405475892265676e+00, 1.1163292512605949e-13,
-	2.2204460492503131e-16, -1.2068124277675452e-13,
-	-1.0058620603103918e-13}, /* L284 */
-{3.1482941929541530e+00, 9.9614760884492171e-14,
-	2.2204460492503131e-16, 3.3306690738754696e-14,
-	-2.2648549702353193e-14}, /* L285 */
-{3.7041655477529858e+00, 1.1761425167122752e-13,
-	2.2204460492503131e-16, 2.5535129566378600e-14,
-	-9.8365759981788869e-14}, /* L286 */
-{4.0584249917889874e+00, 1.2931322679321511e-13,
-	2.2204460492503131e-16, -3.3750779948604759e-14,
-	-1.7541523789077473e-14}, /* L287 */
-{4.7561497773972219e+00, 1.5207279879803082e-13,
-	2.2204460492503131e-16, 2.6645352591003757e-14,
-	9.9920072216264089e-15}, /* L288 */
-{3.6280836638441429e+00, 1.1640688413194766e-13,
-	2.2204460492503131e-16, -4.1633363423443370e-14,
-	-5.1847415249994810e-14}, /* L289 */
-{3.9892856935458521e+00, 1.2843892616132280e-13,
-	2.2204460492503131e-16, -7.3718808835110394e-14,
-	-9.9253938401488995e-14}, /* L290 */
-{2.6392159814544351e+00, 8.5265128291212022e-14,
-	2.2204460492503131e-16, 9.2814644858663087e-14,
-	1.2034817586936697e-13}, /* L291 */
-{3.6918377878422501e+00, 1.1968204205459188e-13,
-	2.2204460492503131e-16, -1.0547118733938987e-14,
-	-4.8294701571194310e-14}, /* L292 */
-{3.4659237871852957e+00, 1.1274314815068465e-13,
-	2.2204460492503131e-16, -3.3750779948604759e-14,
-	-1.6653345369377348e-14}, /* L293 */
-{3.9949596023480041e+00, 1.3039569424222464e-13,
-	2.2204460492503131e-16, 7.5273121069585613e-14,
-	-1.9073631563060189e-13}, /* L294 */
-{4.0949784407116701e+00, 1.3411494137471891e-13,
-	2.2204460492503131e-16, -1.3822276656583199e-13,
-	-3.7403413699621524e-13}, /* L295 */
-{3.5878931998724704e+00, 1.1790568521519162e-13,
-	2.2204460492503131e-16, 2.2870594307278225e-14,
-	-5.0626169922907138e-14}, /* L296 */
-{2.8889334658101604e+00, 9.5257135512838431e-14,
-	2.2204460492503131e-16, 8.0158102377936302e-14,
-	4.9515946898281982e-14}, /* L297 */
-{2.8020566592086511e+00, 9.2703622556200571e-14,
-	2.2204460492503131e-16, 9.7255536957163713e-14,
-	5.1403326040144748e-13}, /* L298 */
-{3.2726257482199399e+00, 1.0863532295957157e-13,
-	2.2204460492503131e-16, 8.4376949871511897e-15,
-	-6.0174087934683484e-14}, /* L299 */
-{3.3617185387731494e+00, 1.1196599203344704e-13,
-	2.2204460492503131e-16, 1.1501910535116622e-13,
-	-1.1157741397482823e-13}, /* L300 */
-{3.8219028266783948e+00, 1.2771728119531645e-13,
-	2.2204460492503131e-16, 9.0594198809412774e-14,
-	3.4194869158454821e-14}, /* L301 */
-{3.8543641095037744e+00, 1.2922996006636822e-13,
-	2.2204460492503131e-16, 7.5495165674510645e-14,
-	-1.4221956945448255e-13}, /* L302 */
-{3.3602003635324427e+00, 1.1303458169464875e-13,
-	2.2204460492503131e-16, 4.3742787170231168e-14,
-	-9.4368957093138306e-15}, /* L303 */
-{3.6595959421092354e+00, 1.2351231148954867e-13,
-	2.2204460492503131e-16, -5.3179682879544998e-14,
-	5.1514348342607263e-14}, /* L304 */
-{3.1943115840600873e+00, 1.0816347817410588e-13,
-	2.2204460492503131e-16, -5.7509552675583109e-14,
-	-1.5543122344752192e-14}, /* L305 */
-{4.4710657216009277e+00, 1.5189238755652923e-13,
-	2.2204460492503131e-16, 1.1262102361797588e-12,
-	1.9320101074526974e-12}, /* L306 */
-{4.0896396513316224e+00, 1.3938850074168840e-13,
-	2.2204460492503131e-16, -1.5210055437364645e-14,
-	-7.9269923958236177e-14}, /* L307 */
-{5.9612324052940657e+00, 2.0384041676813069e-13,
-	2.2204460492503131e-16, -6.3282712403633923e-14,
-	6.0396132539608516e-14}, /* L308 */
-{3.6327421382070098e+00, 1.2462253451417382e-13,
-	2.2204460492503131e-16, 1.1102230246251565e-15,
-	-1.8873791418627661e-14}, /* L309 */
-{4.3702287239778652e+00, 1.5040746426109308e-13,
-	2.2204460492503131e-16, 2.6423307986078726e-14,
-	2.2204460492503131e-16}, /* L310 */
-{2.6972884043591026e+00, 9.3130364531290866e-14,
-	2.2204460492503131e-16, -9.2148511043887993e-14,
-	-1.6875389974302379e-14}, /* L311 */
-{3.8542261382814735e+00, 1.3350431871117507e-13,
-	2.2204460492503131e-16, 7.7493567118835927e-14,
-	-1.4432899320127035e-14}, /* L312 */
-{3.3275273828674061e+00, 1.1562972801471005e-13,
-	2.2204460492503131e-16, -8.3266726846886741e-14,
-	-3.7081449022480228e-14}, /* L313 */
-{4.9347895207576640e+00, 1.7202905766566801e-13,
-	2.2204460492503131e-16, -3.5749181392930041e-14,
-	2.3980817331903381e-14}, /* L314 */
-{4.1857788732647982e+00, 1.4638290579682689e-13,
-	2.2204460492503131e-16, -7.4051875742497941e-14,
-	1.0813572259849025e-13}, /* L315 */
-{4.4225365952081974e+00, 1.5515366769136563e-13,
-	2.2204460492503131e-16, 2.1316282072803006e-14,
-	-1.4188650254709501e-13}, /* L316 */
-{4.0276646714714666e+00, 1.4174772466901686e-13,
-	2.2204460492503131e-16, -2.0761170560490427e-14,
-	1.1990408665951691e-14}, /* L317 */
-{4.0723898819578377e+00, 1.4377388168895777e-13,
-	2.2204460492503131e-16, 5.9952043329758453e-15,
-	1.0436096431476471e-14}, /* L318 */
-{3.4828123613023654e+00, 1.2334577803585489e-13,
-	2.2204460492503131e-16, 4.4408920985006262e-15,
-	1.0524914273446484e-13}, /* L319 */
-{4.0625626862965687e+00, 1.4432899320127035e-13,
-	2.2204460492503131e-16, 1.3544720900426910e-14,
-	-6.6946448384896939e-14}, /* L320 */
-{3.4922657244865749e+00, 1.2445600106048005e-13,
-	2.2204460492503131e-16, 1.2634338020234281e-13,
-	-6.0951244051921094e-14}, /* L321 */
-{4.3649741848750399e+00, 1.5604184611106575e-13,
-	2.2204460492503131e-16, 9.5479180117763462e-15,
-	8.8151708155237429e-14}, /* L322 */
-{3.6169288750767836e+00, 1.2970180485183391e-13,
-	2.2204460492503131e-16, -7.7715611723760958e-16,
-	-1.7097434579227411e-14}, /* L323 */
-{4.6875723303391226e+00, 1.6861512186494565e-13,
-	2.2204460492503131e-16, -1.5620837956475953e-13,
-	-2.1538326677728037e-14}, /* L324 */
-{3.7169804308043264e+00, 1.3411494137471891e-13,
-	2.2204460492503131e-16, 4.4408920985006262e-16,
-	1.7985612998927536e-14}, /* L325 */
-{4.1664753326374369e+00, 1.5079604231971189e-13,
-	2.2204460492503131e-16, 6.1506355564233672e-14,
-	-5.0293103015519591e-14}, /* L326 */
-{4.0153524777097829e+00, 1.4577228313328305e-13,
-	2.2204460492503131e-16, 6.8389738316909643e-14,
-	-2.2426505097428162e-14}, /* L327 */
-{3.8826818619100782e+00, 1.4138690218601369e-13,
-	2.2204460492503131e-16, -3.0353497493251780e-13,
-	-9.7710728397260027e-13}, /* L328 */
-{4.2158705229913114e+00, 1.5398793351550921e-13,
-	2.2204460492503131e-16, -1.5054624213917123e-13,
-	1.6342482922482304e-13}, /* L329 */
-{4.9803798787347473e+00, 1.8246515409714448e-13,
-	2.2204460492503131e-16, -3.5527136788005009e-15,
-	-3.7747582837255322e-15}, /* L330 */
-{3.8622197158024405e+00, 1.4192813591051845e-13,
-	2.2204460492503131e-16, -2.5313084961453569e-14,
-	-6.9499961341534799e-14}, /* L331 */
-{2.6434895848459301e+00, 9.7435948198665301e-14,
-	2.2204460492503131e-16, 1.1746159600534156e-13,
-	2.1094237467877974e-14}, /* L332 */
-{3.5977469555222945e+00, 1.3300818779704571e-13,
-	2.2204460492503131e-16, -5.4289905904170155e-14,
-	-3.2196467714129540e-14}, /* L333 */
-{3.8743112785364828e+00, 1.4366285938649526e-13,
-	2.2204460492503131e-16, 2.7311486405778851e-13,
-	5.0404125317982107e-14}, /* L334 */
-{4.4806661526545577e+00, 1.6664447599623600e-13,
-	2.2204460492503131e-16, -2.6212365611399946e-13,
-	-1.4832579608992091e-13}, /* L335 */
-{4.1518497783032586e+00, 1.5487611193520934e-13,
-	2.2204460492503131e-16, -1.2101430968414206e-14,
-	-1.3544720900426910e-14}, /* L336 */
-{2.8116160841917153e+00, 1.0519363158323358e-13,
-	2.2204460492503131e-16, 1.0591527654923993e-13,
-	-2.5746071941057380e-13}, /* L337 */
-{4.6420834627579532e+00, 1.7419399256368706e-13,
-	2.2204460492503131e-16, 2.2204460492503131e-16,
-	3.0642155479654321e-14}, /* L338 */
-{3.0693688950053040e+00, 1.1551870571224754e-13,
-	2.2204460492503131e-16, -3.1419311596891930e-14,
-	-1.1979306435705439e-13}, /* L339 */
-{5.8192074387900297e+00, 2.1965762542208722e-13,
-	2.2204460492503131e-16, 2.6290081223123707e-13,
-	3.9501735216163070e-13}, /* L340 */
-{4.9590208003801601e+00, 1.8773871346411397e-13,
-	2.2204460492503131e-16, 4.8627768478581856e-14,
-	9.1926466438962962e-14}, /* L341 */
-{4.1871991123897319e+00, 1.5898393712632242e-13,
-	2.2204460492503131e-16, 8.0380146982861334e-14,
-	9.1482377229112899e-14}, /* L342 */
-{2.9242433724901558e+00, 1.1135536936990320e-13,
-	2.2204460492503131e-16, -1.3455903058456897e-13,
-	-5.2846615972157451e-14}, /* L343 */
-{3.0750837864740705e+00, 1.1744077932362984e-13,
-	2.2204460492503131e-16, -6.0840221749458578e-14,
-	6.3948846218409017e-14}, /* L344 */
-{3.3029495160113536e+00, 1.2650991365603659e-13,
-	2.2204460492503131e-16, 1.2878587085651816e-14,
-	-1.6653345369377348e-14}, /* L345 */
-{3.6113273999264486e+00, 1.3872236692691331e-13,
-	2.2204460492503131e-16, -3.1874503036988244e-13,
-	-1.4965806371947110e-13}, /* L346 */
-{4.6801874901676896e+00, 1.8030021919912542e-13,
-	2.2204460492503131e-16, 1.4432899320127035e-14,
-	-5.6621374255882984e-15}, /* L347 */
-{3.8678757741819410e+00, 1.4943601911454607e-13,
-	2.2204460492503131e-16, -6.6835426082434424e-14,
-	4.1167069753100805e-13}, /* L348 */
-{4.1304362264359300e+00, 1.6003864899971632e-13,
-	2.2204460492503131e-16, 1.0969003483296547e-13,
-	-2.3714363805993344e-13}, /* L349 */
-{5.2586525708158405e+00, 2.0433654768226006e-13,
-	2.2204460492503131e-16, -4.0634162701280729e-14,
-	2.8643754035329039e-14}, /* L350 */
-{3.5620207747832455e+00, 1.3880563365376020e-13,
-	2.2204460492503131e-16, 2.2204460492503131e-16,
-	-3.5971225997855072e-14}, /* L351 */
-{4.3773757825724546e+00, 1.7106455141302490e-13,
-	2.2204460492503131e-16, 1.3389289676979388e-13,
-	1.0613732115416497e-13}, /* L352 */
-{2.7580099788377992e+00, 1.0808715034116290e-13,
-	2.2204460492503131e-16, 1.3367085216486885e-13,
-	1.7541523789077473e-14}, /* L353 */
-{4.2133418490128216e+00, 1.6558976412284210e-13,
-	2.2204460492503131e-16, -1.5210055437364645e-14,
-	3.3972824553529790e-14}, /* L354 */
-{3.5732945733826411e+00, 1.4083179067370111e-13,
-	2.2204460492503131e-16, 4.3876013933186186e-13,
-	3.2955860262973147e-12}, /* L355 */
-{3.2921856306561907e+00, 1.3011813848606835e-13,
-	2.2204460492503131e-16, 2.9753977059954195e-13,
-	5.5733195836182858e-14}, /* L356 */
-{5.3040034106458469e+00, 2.1022072971277339e-13,
-	2.2204460492503131e-16, 1.1546319456101628e-14,
-	1.7985612998927536e-14}, /* L357 */
-{3.5915358651695191e+00, 1.4274692539117950e-13,
-	2.2204460492503131e-16, 1.4210854715202004e-14,
-	1.3766765505351941e-14}, /* L358 */
-{3.5947629889288719e+00, 1.4327428132787645e-13,
-	2.2204460492503131e-16, -7.4718009557273035e-14,
-	4.2188474935755949e-14}, /* L359 */
-{5.9612030938742242e+00, 2.3825386108455859e-13,
-	2.2204460492503131e-16, -6.5614180755346752e-14,
-	5.5067062021407764e-14}, /* L360 */
-{4.4187835568296707e+00, 1.7709791966247224e-13,
-	2.2204460492503131e-16, 6.2172489379008766e-14,
-	2.7089441800853820e-14}, /* L361 */
-{3.6879022090647569e+00, 1.4821477378745840e-13,
-	2.2204460492503131e-16, -2.0539125955565396e-14,
-	3.9745984281580604e-14}, /* L362 */
-{3.6047388175569290e+00, 1.4527268277220173e-13,
-	2.2204460492503131e-16, -1.2290168882600483e-13,
-	-2.1049828546892968e-13}, /* L363 */
-{5.5007716913857783e+00, 2.2229440510557197e-13,
-	2.2204460492503131e-16, -5.0293103015519591e-14,
-	4.5519144009631418e-14}, /* L364 */
-{4.6014408643245703e+00, 1.8646195698579504e-13,
-	2.2204460492503131e-16, -9.8143715376863838e-14,
-	2.1427304375265521e-13}, /* L365 */
-{3.8129003640029775e+00, 1.5493162308644060e-13,
-	2.2204460492503131e-16, 9.0372154204487742e-14,
-	5.9952043329758453e-14}, /* L366 */
-{3.7275779533709077e+00, 1.5187850976872141e-13,
-	2.2204460492503131e-16, -2.9976021664879227e-15,
-	3.1308289294429414e-14}, /* L367 */
-{3.9334846076349184e+00, 1.6070478281449141e-13,
-	2.2204460492503131e-16, 2.4646951146678475e-14,
-	-2.7644553313166398e-14}, /* L368 */
-{4.5000694371284702e+00, 1.8435253323900724e-13,
-	2.2204460492503131e-16, -5.9174887212520844e-14,
-	-1.1779466291272911e-13}, /* L369 */
-{4.5852058859376799e+00, 1.8834933612765781e-13,
-	2.2204460492503131e-16, -5.4067861299245124e-14,
-	-1.1990408665951691e-14}, /* L370 */
-{3.9731071280783361e+00, 1.6364687382974807e-13,
-	2.2204460492503131e-16, 5.7953641885433171e-14,
-	-5.6732396558345499e-14}, /* L371 */
-{6.1761705685796437e+00, 2.5507373990762972e-13,
-	2.2204460492503131e-16, -1.4432899320127035e-15,
-	6.0396132539608516e-14}, /* L372 */
-{4.7078474421172833e+00, 1.9495516312417749e-13,
-	2.2204460492503131e-16, -8.7707618945387367e-14,
-	-1.4865886299730846e-13}, /* L373 */
-{4.6130390947152637e+00, 1.9154122732345513e-13,
-	2.2204460492503131e-16, -1.1246559239452836e-13,
-	-5.5955240441107890e-14}, /* L374 */
-{4.7907405889179788e+00, 1.9945156637390937e-13,
-	2.2204460492503131e-16, 3.6415315207705135e-14,
-	-1.6231460620019789e-13}, /* L375 */
-{4.7088492543932405e+00, 1.9656498650988397e-13,
-	2.2204460492503131e-16, -4.2588155224621005e-13,
-	1.3100631690576847e-14}, /* L376 */
-{4.7865460060700720e+00, 2.0033974479360950e-13,
-	2.2204460492503131e-16, 2.2870594307278225e-14,
-	1.9761969838327786e-14}, /* L377 */
-{4.4749367741899171e+00, 1.8779422461534523e-13,
-	2.2204460492503131e-16, 2.3425705819590803e-13,
-	-5.8064664187895687e-14}, /* L378 */
-{4.5066658449812271e+00, 1.8962609260597674e-13,
-	2.2204460492503131e-16, -5.1736392947532295e-14,
-	-3.9857006584043120e-14}, /* L379 */
-{5.6527188017265582e+00, 2.3847590568948362e-13,
-	2.2204460492503131e-16, 5.1514348342607263e-14,
-	3.3972824553529790e-14}, /* L380 */
-{3.5282696651269934e+00, 1.4924173008523667e-13,
-	2.2204460492503131e-16, 1.3988810110276972e-14,
-	1.9539925233402755e-14}, /* L381 */
-{5.2762464031563292e+00, 2.2376545061320030e-13,
-	2.2204460492503131e-16, -1.8762769116165146e-14,
-	5.4400928206632670e-14}, /* L382 */
-{3.7735476086558344e+00, 1.6045498263395075e-13,
-	2.2204460492503131e-16, 1.6697754290362354e-13,
-	7.6827433304060833e-14}, /* L383 */
-{4.2383361889014060e+00, 1.8068879725774423e-13,
-	2.2204460492503131e-16, 2.8976820942716586e-13,
-	-4.3964831775156199e-14}, /* L384 */
-{3.3558876561183313e+00, 1.4344081478157023e-13,
-	2.2204460492503131e-16, -2.5535129566378600e-14,
-	2.0206059048177849e-14}, /* L385 */
-{5.9320717123774740e+00, 2.5421331706354522e-13,
-	2.2204460492503131e-16, 6.5503158452884236e-13,
-	9.5856655946136016e-13}, /* L386 */
-{3.2041759006555273e+00, 1.3766765505351941e-13,
-	2.2204460492503131e-16, 6.0618177144533547e-14,
-	4.8849813083506888e-15}, /* L387 */
-{2.9961728581354108e+00, 1.2906342661267445e-13,
-	2.2204460492503131e-16, 1.4210854715202004e-14,
-	-6.7168492989821971e-14}, /* L388 */
-{3.8149594766426693e+00, 1.6475709685437323e-13,
-	2.2204460492503131e-16, -6.7612582199672033e-14,
-	-6.2505556286396313e-14}, /* L389 */
-{5.6949456148934239e+00, 2.4658053376924727e-13,
-	2.2204460492503131e-16, 7.6605388699135801e-14,
-	6.8389738316909643e-14}, /* L390 */
-{3.3619361617984511e+00, 1.4593881658697683e-13,
-	2.2204460492503131e-16, 3.5083047578154947e-14,
-	5.5955240441107890e-14}, /* L391 */
-{4.5823298060348492e+00, 1.9942381079829374e-13,
-	2.2204460492503131e-16, 2.0539125955565396e-13,
-	-7.7415851507112166e-13}, /* L392 */
-{4.3569267051264031e+00, 1.9009793739144243e-13,
-	2.2204460492503131e-16, -2.1094237467877974e-15,
-	7.3274719625260332e-15}, /* L393 */
-{3.5114668367467901e+00, 1.5359935545689041e-13,
-	2.2204460492503131e-16, -1.3355982986240633e-13,
-	3.0420110874729289e-14}, /* L394 */
-{5.8239678975141347e+00, 2.5539986792111335e-13,
-	2.2204460492503131e-16, 2.0339285811132868e-13,
-	-1.4233059175694507e-13}, /* L395 */
-{3.5300725889300715e+00, 1.5519703577826505e-13,
-	2.2204460492503131e-16, 2.7999824681046448e-13,
-	-3.7436720390360279e-13}, /* L396 */
-{5.3006039729013956e+00, 2.3362561885065247e-13,
-	2.2204460492503131e-16, -2.6645352591003757e-14,
-	-1.0214051826551440e-14}, /* L397 */
-{4.0634948836006606e+00, 1.7955081865750344e-13,
-	2.2204460492503131e-16, -6.3282712403633923e-14,
-	4.0190073491430667e-14}, /* L398 */
-{4.9250716726849681e+00, 2.1816749795622314e-13,
-	2.2204460492503131e-16, -1.7252865802674933e-13,
-	-4.8994142076708158e-13}, /* L399 */
-{4.0388023524696903e+00, 1.7935652962819404e-13,
-	2.2204460492503131e-16, -1.3622436512150671e-13,
-	-2.2204460492503131e-14}, /* L400 */
-{4.0948161708129209e+00, 1.8229862064345070e-13,
-	2.2204460492503131e-16, -4.4408920985006262e-15,
-	1.6209256159527285e-14}, /* L401 */
-{3.4204423470072500e+00, 1.5265566588595902e-13,
-	2.2204460492503131e-16, -1.4865886299730846e-13,
-	-3.8635761256955448e-14}, /* L402 */
-{4.2047547470537951e+00, 1.8812729152273278e-13,
-	2.2204460492503131e-16, -5.6843418860808015e-14,
-	-1.7985612998927536e-14}, /* L403 */
-{4.9356906432090160e+00, 2.2137847111025621e-13,
-	2.2204460492503131e-16, 2.2648549702353193e-14,
-	-4.0523140398818214e-14}, /* L404 */
-{3.6728745397139617e+00, 1.6514567491299204e-13,
-	2.2204460492503131e-16, -1.5210055437364645e-14,
-	-9.0705221111875289e-14}, /* L405 */
-{5.7106456037293754e+00, 2.5740520825934254e-13,
-	2.2204460492503131e-16, -2.2759572004815709e-14,
-	-7.5273121069585613e-14}, /* L406 */
-{4.5406606327450438e+00, 2.0517268439768088e-13,
-	2.2204460492503131e-16, 1.0569323194431490e-13,
-	-4.3742787170231168e-14}, /* L407 */
-{6.8180797398126272e+00, 3.0883628987510292e-13,
-	2.2204460492503131e-16, 6.6835426082434424e-14,
-	-2.0572432646304151e-13}, /* L408 */
-{4.5782832785419769e+00, 2.0788926136106056e-13,
-	2.2204460492503131e-16, -1.5654144647214707e-14,
-	-6.2283511681471282e-14}, /* L409 */
-{6.5378672391802688e+00, 2.9759528175077321e-13,
-	2.2204460492503131e-16, 1.8762769116165146e-13,
-	3.4949820815199928e-13}, /* L410 */
-{6.8796276647996475e+00, 3.1391556021276301e-13,
-	2.2204460492503131e-16, 9.7699626167013776e-15,
-	7.3496764230185363e-14}, /* L411 */
-{4.7991962623446414e+00, 2.1951884754400908e-13,
-	2.2204460492503131e-16, 5.5733195836182858e-14,
-	4.5963233219481481e-14}, /* L412 */
-{4.9649383989915412e+00, 2.2765123119938835e-13,
-	2.2204460492503131e-16, -2.1482815526496779e-13,
-	3.9523939676655573e-14}, /* L413 */
-{6.1099616612194732e+00, 2.8083091407893335e-13,
-	2.2204460492503131e-16, 3.4594549447319878e-13,
-	1.5609735726229701e-13}, /* L414 */
-{6.7193412005537780e+00, 3.0958569041672490e-13,
-	2.2204460492503131e-16, -2.7422508708241367e-14,
-	3.7081449022480228e-14}, /* L415 */
-{3.5348894866075398e+00, 1.6325829577112927e-13,
-	2.2204460492503131e-16, 1.1679546219056647e-13,
-	6.6613381477509392e-15}, /* L416 */
-{5.6703178750180285e+00, 2.6251223417261826e-13,
-	2.2204460492503131e-16, 6.8900440908237215e-13,
-	-8.1257223172315207e-13}, /* L417 */
-{4.6029147180674830e+00, 2.1360690993788012e-13,
-	2.2204460492503131e-16, -9.6223029544262317e-13,
-	-1.2267964422107980e-13}, /* L418 */
-{4.7816685214150239e+00, 2.2243318298365011e-13,
-	2.2204460492503131e-16, 4.6629367034256575e-14,
-	-4.3298697960381105e-14}, /* L419 */
-{4.9369518527870602e+00, 2.3020474415602621e-13,
-	2.2204460492503131e-16, 1.8096635301390052e-13,
-	3.5971225997855072e-14}, /* L420 */
-{5.8682269951850978e+00, 2.7428059823364492e-13,
-	2.2204460492503131e-16, 1.6209256159527285e-14,
-	3.5749181392930041e-14}, /* L421 */
-{5.6795565438470428e+00, 2.6609270342703439e-13,
-	2.2204460492503131e-16, -1.9684254226604025e-13,
-	1.4521717162097048e-13}, /* L422 */
-{3.9988561098035849e+00, 1.8779422461534523e-13,
-	2.2204460492503131e-16, 2.2715163083830703e-13,
-	1.5099033134902129e-14}, /* L423 */
-{4.7016957903000263e+00, 2.2132295995902496e-13,
-	2.2204460492503131e-16, 6.8389738316909643e-14,
-	5.1514348342607263e-14}, /* L424 */
-{4.9633561662689969e+00, 2.3419113870382091e-13,
-	2.2204460492503131e-16, 3.7747582837255322e-15,
-	-1.5543122344752192e-14}, /* L425 */
-{3.8627129006434746e+00, 1.8268719870206951e-13,
-	2.2204460492503131e-16, -2.7866597918091429e-14,
-	-4.6740389336719090e-14}, /* L426 */
-{4.6888620547007314e+00, 2.2228052731776415e-13,
-	2.2204460492503131e-16, -3.5527136788005009e-15,
-	-2.4424906541753444e-14}, /* L427 */
-{4.2652275995602578e+00, 2.0267121314532233e-13,
-	2.2204460492503131e-16, 4.6407322429331543e-14,
-	-8.1046280797636427e-14}, /* L428 */
-{5.0105373032567080e+00, 2.3864243914317740e-13,
-	2.2204460492503131e-16, -3.8802294710649221e-13,
-	3.9745984281580604e-14}, /* L429 */
-{4.1128299277090949e+00, 1.9634294190495893e-13,
-	2.2204460492503131e-16, -6.5281113847959205e-14,
-	1.1102230246251565e-13}, /* L430 */
-{4.6961004779885007e+00, 2.2470914018413168e-13,
-	2.2204460492503131e-16, -5.2069459854919842e-14,
-	-6.9166894434147252e-14}, /* L431 */
-{3.9988807357282870e+00, 1.9179102750399579e-13,
-	2.2204460492503131e-16, 1.1102230246251565e-14,
-	-1.6875389974302379e-14}, /* L432 */
-{5.4902822331073837e+00, 2.6392993693336031e-13,
-	2.2204460492503131e-16, -4.7462034302725442e-13,
-	3.5860203695392556e-13}, /* L433 */
-{5.2051187732038846e+00, 2.5079938126282286e-13,
-	2.2204460492503131e-16, 2.9976021664879227e-14,
-	2.2826185386293218e-13}, /* L434 */
-{5.8701709348763282e+00, 2.8349544933803372e-13,
-	2.2204460492503131e-16, -1.0291767438275201e-13,
-	-6.2394533983933798e-14}, /* L435 */
-{5.7400203472427505e+00, 2.7784718970025324e-13,
-	2.2204460492503131e-16, 3.8635761256955448e-13,
-	6.0174087934683484e-14}, /* L436 */
-{6.3956559703342561e+00, 3.1029345759492344e-13,
-	2.2204460492503131e-16, 1.8873791418627661e-13,
-	-1.8141044222375058e-13}, /* L437 */
-{5.9812214351582371e+00, 2.9085067687617538e-13,
-	2.2204460492503131e-16, -3.6481928589182644e-13,
-	-7.7604589421298442e-14}, /* L438 */
-{5.4658835711519105e+00, 2.6639801475880631e-13,
-	2.2204460492503131e-16, -3.2751579226442118e-14,
-	-8.8817841970012523e-14}, /* L439 */
-{3.7221945948830260e+00, 1.8182677585798501e-13,
-	2.2204460492503131e-16, -4.2488235152404741e-13,
-	2.4424906541753444e-14}, /* L440 */
-{4.9609316733542528e+00, 2.4288904221236862e-13,
-	2.2204460492503131e-16, -2.5202062658991053e-14,
-	-1.5043521983670871e-13}, /* L441 */
-{5.5639670987881980e+00, 2.7303159733094162e-13,
-	2.2204460492503131e-16, 2.0206059048177849e-14,
-	2.0428103653102880e-14}, /* L442 */
-{5.2077246172031204e+00, 2.5612845178102361e-13,
-	2.2204460492503131e-16, -1.3544720900426910e-14,
-	3.8635761256955448e-14}, /* L443 */
-{5.0495977148891908e+00, 2.4891200212096010e-13,
-	2.2204460492503131e-16, 1.3278267374516872e-13,
-	-8.1601392309949006e-14}, /* L444 */
-{4.8742037957345268e+00, 2.4080737404119645e-13,
-	2.2204460492503131e-16, 2.6201263381153694e-14,
-	-5.8841820305133297e-15}, /* L445 */
-{5.2870459459341737e+00, 2.6179058920661191e-13,
-	2.2204460492503131e-16, -1.9984014443252818e-15,
-	8.9039886574937555e-14}, /* L446 */
-{4.4846624635429873e+00, 2.2255808307392044e-13,
-	2.2204460492503131e-16, -9.2703622556200571e-14,
-	3.9968028886505635e-14}, /* L447 */
-{4.1663343832417468e+00, 2.0722312754628547e-13,
-	2.2204460492503131e-16, 1.0214051826551440e-14,
-	1.9984014443252818e-14}, /* L448 */
-{4.0807738908624955e+00, 2.0342061368694431e-13,
-	2.2204460492503131e-16, -5.3623772089395061e-14,
-	-6.3726801613483985e-14}, /* L449 */
-{5.8922784254429397e+00, 2.9437563497936026e-13,
-	2.2204460492503131e-16, 1.5765166949677223e-14,
-	1.0746958878371515e-13}, /* L450 */
-{4.2101288499112783e+00, 2.1080359680070160e-13,
-	2.2204460492503131e-16, -5.2291504459844873e-14,
-	8.8151708155237429e-14}, /* L451 */
-{4.9170822995881238e+00, 2.4674706722294104e-13,
-	2.2204460492503131e-16, -5.0071058410594560e-14,
-	-3.0642155479654321e-14}, /* L452 */
-{5.6992817353981957e+00, 2.8663182938259979e-13,
-	2.2204460492503131e-16, -4.2188474935755949e-15,
-	-1.4765966227514582e-14}, /* L453 */
-{4.3998217031750340e+00, 2.2176704916887502e-13,
-	2.2204460492503131e-16, -6.8833827526759706e-15,
-	1.3988810110276972e-14}, /* L454 */
-{3.9555322351529418e+00, 1.9981238885691255e-13,
-	2.2204460492503131e-16, -6.6613381477509392e-16,
-	-3.9968028886505635e-15}, /* L455 */
-{4.4364458255968806e+00, 2.2459811788166917e-13,
-	2.2204460492503131e-16, 2.1516122217235534e-13,
-	2.0428103653102880e-13}, /* L456 */
-{5.7637311258744965e+00, 2.9243274468626623e-13,
-	2.2204460492503131e-16, 5.5067062021407764e-14,
-	-8.4932061383824475e-14}, /* L457 */
-{6.2183999252689537e+00, 3.1619151741324458e-13,
-	2.2204460492503131e-16, -5.6621374255882984e-14,
-	-3.8857805861880479e-15}, /* L458 */
-{6.4918919879658779e+00, 3.3081870576268102e-13,
-	2.2204460492503131e-16, 4.3964831775156199e-14,
-	5.3068660577082483e-14}, /* L459 */
-{5.5163569653182405e+00, 2.8171909249863347e-13,
-	2.2204460492503131e-16, -1.4741541320972829e-12,
-	6.4370730967766576e-13}, /* L460 */
-{4.6958148558768267e+00, 2.4033552925573076e-13,
-	2.2204460492503131e-16, 3.0420110874729289e-14,
-	-1.1768364061026659e-14}, /* L461 */
-{5.5422606567947605e+00, 2.8427260545527133e-13,
-	2.2204460492503131e-16, -7.5828232581898192e-14,
-	3.0064839506849239e-13}, /* L462 */
-{7.9186770438068130e+00, 4.0704245529710192e-13,
-	2.2204460492503131e-16, 4.1744385725905886e-14,
-	2.0206059048177849e-14}, /* L463 */
-{4.3330154681851196e+00, 2.2321033910088772e-13,
-	2.2204460492503131e-16, 6.5769611978794273e-13,
-	7.6827433304060833e-13}, /* L464 */
-{5.0817689023215564e+00, 2.6234570071892449e-13,
-	2.2204460492503131e-16, 6.6613381477509392e-16,
-	-1.8873791418627661e-15}, /* L465 */
-{6.1062814204428140e+00, 3.1591396165708829e-13,
-	2.2204460492503131e-16, -1.8873791418627661e-15,
-	-7.3940853440035426e-14}, /* L466 */
-{4.8565773734848285e+00, 2.5179858198498550e-13,
-	2.2204460492503131e-16, -1.0536016503692736e-13,
-	8.7485574340462335e-14}, /* L467 */
-{5.9017656954216529e+00, 3.0664359940146824e-13,
-	2.2204460492503131e-16, 1.5698553568199713e-13,
-	-1.9739765377835283e-13}, /* L468 */
-{5.5426967919935635e+00, 2.8860247525130944e-13,
-	2.2204460492503131e-16, -2.5979218776228663e-14,
-	-3.2196467714129540e-15}, /* L469 */
-{4.7149385902403589e+00, 2.4602542225693469e-13,
-	2.2204460492503131e-16, -1.0735856648125264e-13,
-	9.5257135512838431e-14}, /* L470 */
-{6.9780389588025447e+00, 3.6488867483086551e-13,
-	2.2204460492503131e-16, 2.1691537455126308e-12,
-	-6.7290617522530738e-13}, /* L471 */
-{7.1300997897814780e+00, 3.7363168114978862e-13,
-	2.2204460492503131e-16, 6.8389738316909643e-14,
-	5.9285909514983359e-14}, /* L472 */
-{6.0666540609903699e+00, 3.1857849691618867e-13,
-	2.2204460492503131e-16, -4.2454928461665986e-13,
-	3.1685765122801968e-13}, /* L473 */
-{7.3562806105741236e+00, 3.8711742145203232e-13,
-	2.2204460492503131e-16, -5.7398530373120593e-14,
-	-1.0669243266647754e-13}, /* L474 */
-{5.9968993063800600e+00, 3.1624702856447584e-13,
-	2.2204460492503131e-16, -1.9728663147589032e-13,
-	3.7059244561987725e-13}, /* L475 */
-{6.5032132910670697e+00, 3.4366953727271721e-13,
-	2.2204460492503131e-16, -1.1952661083114435e-12,
-	2.2630786133959191e-12}, /* L476 */
-{6.7832801108031822e+00, 3.5922306795832526e-13,
-	2.2204460492503131e-16, -8.9483975784787617e-14,
-	5.5511151231257827e-14}, /* L477 */
-{5.2803850947349824e+00, 2.8022029141538951e-13,
-	2.2204460492503131e-16, 1.9473311851925246e-13,
-	-2.0772272790736679e-13}, /* L478 */
-{4.8758293888716402e+00, 2.5929258740120531e-13,
-	2.2204460492503131e-16, -2.2093438190040615e-14,
-	1.2878587085651816e-14}, /* L479 */
-{4.8417128491172807e+00, 2.5801583092288638e-13,
-	2.2204460492503131e-16, -2.1094237467877974e-15,
-	7.4162898044960457e-14}, /* L480 */
-{6.1196009910661093e+00, 3.2679414729841483e-13,
-	2.2204460492503131e-16, 4.0478731477833207e-13,
-	-4.1344705437040830e-13}, /* L481 */
-{4.9346943722537233e+00, 2.6406654640709348e-13,
-	2.2204460492503131e-16, -1.1435297153639112e-14,
-	-5.5955240441107890e-14}, /* L482 */
-{5.8427058338898181e+00, 3.1330493754921918e-13,
-	2.2204460492503131e-16, -2.2593038551121936e-13,
-	5.1070259132757201e-14}, /* L483 */
-{5.6539795500515018e+00, 3.0381253068867409e-13,
-	2.2204460492503131e-16, 7.7937656328685989e-14,
-	-2.4424906541753444e-14}, /* L484 */
-{6.3052147811699006e+00, 3.3950620093037287e-13,
-	2.2204460492503131e-16, 2.4424906541753444e-15,
-	-4.6629367034256575e-14}, /* L485 */
-{5.9905406795849077e+00, 3.2322755583180651e-13,
-	2.2204460492503131e-16, 5.7731597280508140e-15,
-	-2.2759572004815709e-14}, /* L486 */
-{4.2125658487098612e+00, 2.2776225350185086e-13,
-	2.2204460492503131e-16, 1.7386092565629951e-13,
-	-1.0047518372857667e-13}, /* L487 */
-{5.4908310625573691e+00, 2.9748425944831070e-13,
-	2.2204460492503131e-16, 2.5024426975051028e-13,
-	-3.2562841312255841e-13}, /* L488 */
-{5.1012756521416138e+00, 2.7694513349274530e-13,
-	2.2204460492503131e-16, 1.9251267247000214e-13,
-	1.7963408538435033e-13}, /* L489 */
-{4.9888230958546691e+00, 2.7139401836961952e-13,
-	2.2204460492503131e-16, -3.0497826486453050e-13,
-	-3.2107649872159527e-13}, /* L490 */
-{4.3951539392620198e+00, 2.3958612871410878e-13,
-	2.2204460492503131e-16, 4.2188474935755949e-15,
-	1.3922196728799463e-13}, /* L491 */
-{6.6284931036044803e+00, 3.6206454501197527e-13,
-	2.2204460492503131e-16, -1.3917755836700962e-12,
-	6.5702998597316764e-13}, /* L492 */
-{5.9371763069329377e+00, 3.2496227930778332e-13,
-	2.2204460492503131e-16, -4.5408121707168903e-14,
-	4.7961634663806763e-14}, /* L493 */
-{5.0091570913409829e+00, 2.7472468744349499e-13,
-	2.2204460492503131e-16, 5.2269299999352370e-13,
-	-7.3174799553044068e-13}, /* L494 */
-{3.8909462045156582e+00, 2.1382895454280515e-13,
-	2.2204460492503131e-16, -9.0816243414337805e-14,
-	8.5709217501062085e-14}, /* L495 */
-{4.6049456377668729e+00, 2.5357840827133771e-13,
-	2.2204460492503131e-16, -3.2973623831367149e-14,
-	-5.1403326040144748e-14}, /* L496 */
-{7.3793460414674348e+00, 4.0717429428127616e-13,
-	2.2204460492503131e-16, 8.9928064994637680e-14,
-	2.4424906541753444e-15}, /* L497 */
-{7.2026289428969541e+00, 3.9822312114523584e-13,
-	2.2204460492503131e-16, -1.1524114995609125e-13,
-	-3.3628655415895992e-13}, /* L498 */
-{4.7064577179742040e+00, 2.6073587733321801e-13,
-	2.2204460492503131e-16, 4.6629367034256575e-15,
-	7.7715611723760958e-15}, /* L499 */
-{5.8175554904793847e+00, 3.2293612228784241e-13,
-	2.2204460492503131e-16, -1.3322676295501878e-13,
-	9.4368957093138306e-14}, /* L500 */
-{4.3124163832796452e+00, 2.3986368447026507e-13,
-	2.2204460492503131e-16, 3.5682568011452531e-13,
-	-2.3003821070233244e-13}, /* L501 */
-{6.2236649418112178e+00, 3.4686142846851453e-13,
-	2.2204460492503131e-16, 1.1546319456101628e-13,
-	7.6161299489285739e-13}, /* L502 */
-{4.5849716659338560e+00, 2.5604171560722477e-13,
-	2.2204460492503131e-16, -1.0007550343971161e-12,
-	1.9961809982760315e-13}, /* L503 */
-{5.3819957803580101e+00, 3.0114799542957371e-13,
-	2.2204460492503131e-16, -8.1823436914874037e-14,
-	-3.8746783559417963e-14}, /* L504 */
-{4.9626710985811560e+00, 2.7823576775887204e-13,
-	2.2204460492503131e-16, -1.6542323066914832e-14,
-	-2.3980817331903381e-14}, /* L505 */
-{4.9852254169498611e+00, 2.8005375796169574e-13,
-	2.2204460492503131e-16, 2.3403501359098300e-13,
-	-1.7541523789077473e-14}, /* L506 */
-{4.6546301967872390e+00, 2.6199875602372913e-13,
-	2.2204460492503131e-16, 1.5165646516379638e-13,
-	6.6835426082434424e-14}, /* L507 */
-{5.2569399068437530e+00, 2.9648505872614805e-13,
-	2.2204460492503131e-16, 6.6568972556524386e-13,
-	-1.0703660180411134e-12}, /* L508 */
-{5.0599696788202966e+00, 2.8593793999220907e-13,
-	2.2204460492503131e-16, -6.9055872131684737e-14,
-	7.7493567118835927e-14}, /* L509 */
-{5.4588755986386763e+00, 3.0908609005564358e-13,
-	2.2204460492503131e-16, -2.5890400934258651e-13,
-	5.0182080713057076e-14}, /* L510 */
-{7.5137702998815419e+00, 4.2627013030482885e-13,
-	2.2204460492503131e-16, 3.1752378504279477e-14,
-	-8.5598195198599569e-14}, /* L511 */
-{5.7515197043496258e+00, 3.2693292517649297e-13,
-	2.2204460492503131e-16, 8.8817841970012523e-16,
-	1.2390088954816747e-13}, /* L512 */
-{5.3109668377417059e+00, 3.0248026305912390e-13,
-	2.2204460492503131e-16, -1.3078427230084344e-13,
-	1.3100631690576847e-14}, /* L513 */
-{8.3347098504314516e+00, 4.7561954374941706e-13,
-	2.2204460492503131e-16, -1.9928503292021560e-13,
-	2.0428103653102880e-14}, /* L514 */
-{4.9697075974963569e+00, 2.8414770536500100e-13,
-	2.2204460492503131e-16, -3.0753177782116836e-14,
-	2.2204460492503131e-15}, /* L515 */
-{6.7558783941152347e+00, 3.8702374638432957e-13,
-	2.2204460492503131e-16, 1.4743761767022079e-13,
-	-1.5343282200319663e-13}, /* L516 */
-{5.1697978082638567e+00, 2.9673832835364067e-13,
-	2.2204460492503131e-16, 2.4424906541753444e-14,
-	-2.3181456754173269e-13}, /* L517 */
-{5.8330207858098602e+00, 3.3545388689049105e-13,
-	2.2204460492503131e-16, -3.6970426720017713e-14,
-	8.4376949871511897e-15}, /* L518 */
-{6.9951940806813111e+00, 4.0306646909016308e-13,
-	2.2204460492503131e-16, -2.3536728122053319e-14,
-	-1.3766765505351941e-14}, /* L519 */
-{4.8105845127706477e+00, 2.7772228960998291e-13,
-	2.2204460492503131e-16, 1.2878587085651816e-14,
-	-5.4733995114020217e-14}, /* L520 */
-{6.0983781434855482e+00, 3.5274561049902786e-13,
-	2.2204460492503131e-16, -1.2988499165089706e-12,
-	5.2136073236397351e-13}, /* L521 */
-{4.9166744237375424e+00, 2.8493873927004643e-13,
-	2.2204460492503131e-16, 7.2386541205560206e-14,
-	1.4677148385544569e-13}, /* L522 */
-{6.0353823710121270e+00, 3.5044189772293066e-13,
-	2.2204460492503131e-16, -4.3742787170231168e-13,
-	-5.0726089995123402e-13}, /* L523 */
-{7.6040196304893746e+00, 4.4236836416189362e-13,
-	2.2204460492503131e-16, -8.2345241736447861e-13,
-	3.0286884111774270e-13}, /* L524 */
-{5.7352471437763413e+00, 3.3428815271463463e-13,
-	2.2204460492503131e-16, 1.3966605649784469e-13,
-	1.2123635428906709e-13}, /* L525 */
-{5.6330887352735486e+00, 3.2895908219643388e-13,
-	2.2204460492503131e-16, 1.5543122344752192e-14,
-	5.3512749786932545e-14}, /* L526 */
-{5.0047517290455383e+00, 2.9282132274488504e-13,
-	2.2204460492503131e-16, -1.3278267374516872e-13,
-	-1.3633538742396922e-13}, /* L527 */
-{6.4479268396057261e+00, 3.7797542873363454e-13,
-	2.2204460492503131e-16, -7.9269923958236177e-14,
-	-3.7303493627405260e-14}, /* L528 */
-{4.7554422853043672e+00, 2.7929047963226594e-13,
-	2.2204460492503131e-16, 1.2545520178264269e-13,
-	6.7279515292284486e-14}, /* L529 */
-{7.0207657936939389e+00, 4.1311398746302075e-13,
-	2.2204460492503131e-16, -8.5487172896137054e-14,
-	-1.0047518372857667e-13}, /* L530 */
-{5.2208180297221620e+00, 3.0778157800170902e-13,
-	2.2204460492503131e-16, 4.8021586707136521e-12,
-	3.5007552412480436e-12}, /* L531 */
-{7.2932445893095963e+00, 4.3076653355456074e-13,
-	2.2204460492503131e-16, -1.9317880628477724e-14,
-	-1.3555823130673161e-13}, /* L532 */
-{4.4953166607724802e+00, 2.6600943670018751e-13,
-	2.2204460492503131e-16, 4.3032244434471068e-13,
-	2.0916601783937949e-13}, /* L533 */
-{7.3173102337090583e+00, 4.3381270797837601e-13,
-	2.2204460492503131e-16, -1.1046719095020308e-13,
-	-2.4791280139879746e-13}, /* L534 */
-{6.7958051143131240e+00, 4.0364933617809129e-13,
-	2.2204460492503131e-16, -1.1546319456101628e-14,
-	7.5051076464660582e-14}, /* L535 */
-{6.8348988431670623e+00, 4.0673020507142610e-13,
-	2.2204460492503131e-16, -5.2069459854919842e-14,
-	-6.3504757008558954e-14}, /* L536 */
-{7.1326928175160100e+00, 4.2524317400705058e-13,
-	2.2204460492503131e-16, 1.2607692667643278e-12,
-	-1.5206724768290769e-12}, /* L537 */
-{5.8020537636069527e+00, 3.4655611713674261e-13,
-	2.2204460492503131e-16, 1.1590728377086634e-13,
-	7.3274719625260332e-14}, /* L538 */
-{5.5904540891157524e+00, 3.3453795289517529e-13,
-	2.2204460492503131e-16, 6.0396132539608516e-14,
-	7.2608585810485238e-14}, /* L539 */
-{5.5375087365670526e+00, 3.3198443993853743e-13,
-	2.2204460492503131e-16, -2.5535129566378600e-14,
-	3.3084646133829665e-14}, /* L540 */
-{5.5785670268502638e+00, 3.3506530883187224e-13,
-	2.2204460492503131e-16, -1.4321877017664519e-14,
-	-3.2784885917180873e-13}, /* L541 */
-{4.4271287559290471e+00, 2.6639801475880631e-13,
-	2.2204460492503131e-16, 3.3306690738754696e-15,
-	-9.6145313932538556e-14}, /* L542 */
-{4.3361026053221225e+00, 2.6140201114799311e-13,
-	2.2204460492503131e-16, 3.4952041261249178e-12,
-	-3.2902569557791139e-12}, /* L543 */
-{6.7867754133880798e+00, 4.0989434069160779e-13,
-	2.2204460492503131e-16, -3.1863400806741993e-12,
-	1.3513634655737405e-12}, /* L544 */
-{4.8403746091693245e+00, 2.9287683389611630e-13,
-	2.2204460492503131e-16, -9.5479180117763462e-15,
-	-3.2895908219643388e-13}, /* L545 */
-{5.1694220752481739e+00, 3.1336044870045043e-13,
-	2.2204460492503131e-16, -4.2299497238218464e-14,
-	9.3480778673438181e-14}, /* L546 */
-{7.8501037928372215e+00, 4.7672976677404222e-13,
-	2.2204460492503131e-16, 1.6675549829869851e-13,
-	1.4166445794216997e-13}, /* L547 */
-{5.9124180871872989e+00, 3.5971225997855072e-13,
-	2.2204460492503131e-16, 3.6859404417555197e-14,
-	1.0946799022804043e-13}, /* L548 */
-{6.2488998862544776e+00, 3.8087762110894374e-13,
-	2.2204460492503131e-16, 5.2402526762307389e-14,
-	-8.5043083686286991e-14}, /* L549 */
-{4.9372805168553153e+00, 3.0148106233696126e-13,
-	2.2204460492503131e-16, -9.0039087297100195e-14,
-	-3.9079850466805510e-14}, /* L550 */
-{7.0245119900629867e+00, 4.2971182168116684e-13,
-	2.2204460492503131e-16, 9.1260332624187868e-14,
-	9.3036689463588118e-14}, /* L551 */
-{4.8342467574573700e+00, 2.9626301412122302e-13,
-	2.2204460492503131e-16, -1.1912693054227930e-13,
-	3.9368508453208051e-13}, /* L552 */
-{7.7079687612789165e+00, 4.7323256424647298e-13,
-	2.2204460492503131e-16, -6.6835426082434424e-14,
-	-9.5035090907913400e-14}, /* L553 */
-{5.6173373823674746e+00, 3.4550140526334872e-13,
-	2.2204460492503131e-16, -9.2814644858663087e-14,
-	5.4178883601707639e-14}, /* L554 */
-{5.8234326110914427e+00, 3.5882408155885059e-13,
-	2.2204460492503131e-16, -3.4749980670767400e-13,
-	-4.7417625381740436e-13}, /* L555 */
-{8.7814886747606220e+00, 5.4206639177323268e-13,
-	2.2204460492503131e-16, -6.9944050551384862e-15,
-	2.1249668691325496e-13}, /* L556 */
-{6.0781065374043051e+00, 3.7586600498684675e-13,
-	2.2204460492503131e-16, -2.9254376698872875e-13,
-	6.1062266354383610e-14}, /* L557 */
-{5.1926605222452942e+00, 3.2168712138513911e-13,
-	2.2204460492503131e-16, -1.7852386235972517e-13,
-	2.5179858198498550e-13}, /* L558 */
-{5.3902142286877179e+00, 3.3452407510736748e-13,
-	2.2204460492503131e-16, 2.9976021664879227e-14,
-	-4.9182879990894435e-14}, /* L559 */
-{6.3218849740797296e+00, 3.9304670629292104e-13,
-	2.2204460492503131e-16, -3.8002934132919108e-13,
-	-8.4821039081361960e-14}, /* L560 */
-{6.2923450433403856e+00, 3.9190872769268026e-13,
-	2.2204460492503131e-16, 1.1701750679549150e-13,
-	-1.8096635301390052e-13}, /* L561 */
-{5.3211827724904852e+00, 3.3201219551415306e-13,
-	2.2204460492503131e-16, 1.7763568394002505e-13,
-	-2.8821389719269064e-13}, /* L562 */
-{5.1563136413664887e+00, 3.2229774404868294e-13,
-	2.2204460492503131e-16, -2.3969715101657130e-13,
-	2.5557334026871104e-13}, /* L563 */
-{6.9164005397024022e+00, 4.3308065467151380e-13,
-	2.2204460492503131e-16, -2.9487523534044158e-13,
-	-6.8389738316909643e-13}, /* L564 */
-{6.5474660821762898e+00, 4.1070619127836494e-13,
-	2.2204460492503131e-16, -2.0550228185811648e-13,
-	-4.0178971261184415e-13}, /* L565 */
-{5.9209457372623602e+00, 3.7206349112750559e-13,
-	2.2204460492503131e-16, -1.7541523789077473e-14,
-	6.8167693711984612e-14}, /* L566 */
-{6.5926029937818518e+00, 4.1500136660488351e-13,
-	2.2204460492503131e-16, 2.9487523534044158e-13,
-	-8.3488771451811772e-14}, /* L567 */
-{8.6569238693572377e+00, 5.4591053899599729e-13,
-	2.2204460492503131e-16, -3.1419311596891930e-14,
-	-1.0769163338864018e-13}, /* L568 */
-{8.2205753598151468e+00, 5.1930681976841697e-13,
-	2.2204460492503131e-16, 2.6956215037898801e-13,
-	-1.9251267247000214e-13}, /* L569 */
-{5.4280787393564784e+00, 3.4350300381902343e-13,
-	2.2204460492503131e-16, 1.1746159600534156e-13,
-	-1.1324274851176597e-13}, /* L570 */
-{6.3888016733530666e+00, 4.0500935938325711e-13,
-	2.2204460492503131e-16, -1.7097434579227411e-14,
-	1.2367884494324244e-13}, /* L571 */
-{6.7701155763631542e+00, 4.2993386628609187e-13,
-	2.2204460492503131e-16, 1.0325074129013956e-13,
-	3.6859404417555197e-14}, /* L572 */
-{4.7793487271334687e+00, 3.0404151418750303e-13,
-	2.2204460492503131e-16, -1.5620837956475953e-12,
-	-3.9357406222961799e-13}, /* L573 */
-{6.7238782041244392e+00, 4.2849057635407917e-13,
-	2.2204460492503131e-16, 1.8673951274195133e-13,
-	1.7585932710062480e-13}, /* L574 */
-{5.6508784806491095e+00, 3.6073921627632899e-13,
-	2.2204460492503131e-16, 4.2410519540680980e-14,
-	8.6597395920762210e-15}, /* L575 */
-{9.2014034059440135e+00, 5.8841820305133297e-13,
-	2.2204460492503131e-16, 2.5512925105886097e-13,
-	3.0087043967341742e-13}, /* L576 */
-{5.0520010381648124e+00, 3.2363001167823313e-13,
-	2.2204460492503131e-16, -2.8343993818680246e-13,
-	-4.0045744498229396e-13}, /* L577 */
-{7.3666854978796872e+00, 4.7272602499148775e-13,
-	2.2204460492503131e-16, -1.2102541191438831e-12,
-	-6.1606275636449936e-13}, /* L578 */
-{5.7046722127352201e+00, 3.6670666503368921e-13,
-	2.2204460492503131e-16, 3.6193270602780103e-14,
-	1.1945999744966684e-13}, /* L579 */
-{6.1241475931459428e+00, 3.9435121834685560e-13,
-	2.2204460492503131e-16, -4.4408920985006262e-14,
-	-1.2967404927621828e-13}, /* L580 */
-{7.0361556793020208e+00, 4.5385917246676399e-13,
-	2.2204460492503131e-16, -1.2023715356690445e-13,
-	-3.4749980670767400e-14}, /* L581 */
-{6.5438985868107347e+00, 4.2283320941804980e-13,
-	2.2204460492503131e-16, 9.7921670771938807e-14,
-	-1.3222756223285614e-13}, /* L582 */
-{7.4942228013883874e+00, 4.8507031724653871e-13,
-	2.2204460492503131e-16, 1.7608137170554983e-13,
-	2.2803980925800715e-13}, /* L583 */
-{7.4533508002780744e+00, 4.8325232704371501e-13,
-	2.2204460492503131e-16, 8.5087492607271997e-13,
-	1.3287149158713873e-12}, /* L584 */
-{7.5396486474910454e+00, 4.8968468169263701e-13,
-	2.2204460492503131e-16, -1.8807178037150152e-13,
-	4.2144066014770942e-13}, /* L585 */
-{7.5891757960216486e+00, 4.9374393462642274e-13,
-	2.2204460492503131e-16, 1.3322676295501878e-15,
-	1.3211653993039363e-13}, /* L586 */
-{8.6499284681761086e+00, 5.6371574075342323e-13,
-	2.2204460492503131e-16, -4.0301095793893182e-14,
-	1.3122836151069350e-13}, /* L587 */
-{7.0263716297740473e+00, 4.5868864262388342e-13,
-	2.2204460492503131e-16, 5.3734794391857577e-14,
-	-2.6645352591003757e-15}, /* L588 */
-{7.1697905987563058e+00, 4.6884718329920361e-13,
-	2.2204460492503131e-16, -1.7164047960704920e-13,
-	5.9952043329758453e-14}, /* L589 */
-{6.7330614702568390e+00, 4.4103609653234344e-13,
-	2.2204460492503131e-16, -9.8587804586713901e-14,
-	-7.9047879353311146e-14}, /* L590 */
-{5.0772076719376891e+00, 3.3313629632658603e-13,
-	2.2204460492503131e-16, -9.0705221111875289e-14,
-	9.5701224722688494e-14}, /* L591 */
-{5.2973056548945658e+00, 3.4816594052244909e-13,
-	2.2204460492503131e-16, 2.9976021664879227e-14,
-	4.4408920985006262e-15}, /* L592 */
-{7.9696584422515322e+00, 5.2469140143784898e-13,
-	2.2204460492503131e-16, 5.5511151231257827e-15,
-	-6.7057470687359455e-14}, /* L593 */
-{7.2693717383005367e+00, 4.7939430203314259e-13,
-	2.2204460492503131e-16, 1.6653345369377348e-14,
-	5.9507954119908391e-14}, /* L594 */
-{6.6260608741476643e+00, 4.3770542745846797e-13,
-	2.2204460492503131e-16, -4.3232084578903596e-13,
-	-3.9113157157544265e-13}, /* L595 */
-{7.4924614853196800e+00, 4.9577009164636365e-13,
-	2.2204460492503131e-16, 7.1653794009307603e-13,
-	-7.7438055967604669e-13}, /* L596 */
-{8.3073832908340481e+00, 5.5061510906284639e-13,
-	2.2204460492503131e-16, -1.7337242752546445e-12,
-	-9.2392760109305527e-13}, /* L597 */
-{6.8474188299759522e+00, 4.5460857300838597e-13,
-	2.2204460492503131e-16, 9.2592600253738055e-14,
-	7.1276318180935050e-14}, /* L598 */
-{6.6068551649127851e+00, 4.3937076199540570e-13,
-	2.2204460492503131e-16, 1.7452705947107461e-13,
-	-2.6623148130511254e-13}, /* L599 */
-{5.7943841415440849e+00, 3.8598291229874349e-13,
-	2.2204460492503131e-16, 2.1194379584699163e-11,
-	2.3312463071079037e-12}, /* L600 */
-{7.3793793629617079e+00, 4.9238391142125693e-13,
-	2.2204460492503131e-16, -7.4829031859735551e-14,
-	1.4033219031261979e-13}, /* L601 */
-{5.6079822696747463e+00, 3.7481129311345285e-13,
-	2.2204460492503131e-16, -7.5495165674510645e-15,
-	9.7277741417656216e-13}, /* L602 */
-{5.6011696992360323e+00, 3.7497782656714662e-13,
-	2.2204460492503131e-16, 1.9650947535865271e-12,
-	-4.3345327327415362e-12}, /* L603 */
-{8.2901620860081202e+00, 5.5591642400543151e-13,
-	2.2204460492503131e-16, 2.9327651418498135e-12,
-	-1.3200551762793111e-13}, /* L604 */
-{5.8450505440887328e+00, 3.9260261708307098e-13,
-	2.2204460492503131e-16, 2.3581137043038325e-13,
-	-3.1175062531474396e-13}, /* L605 */
-{7.0618923296561054e+00, 4.7511994338833574e-13,
-	2.2204460492503131e-16, 3.1068481121110381e-12,
-	-2.1924684290297591e-12}, /* L606 */
-{6.5856776060858495e+00, 4.4381165409390633e-13,
-	2.2204460492503131e-16, 1.5920598173124745e-13,
-	4.7739590058881731e-14}, /* L607 */
-{7.4070840546171866e+00, 4.9998893913993925e-13,
-	2.2204460492503131e-16, -3.1086244689504383e-14,
-	-4.9071857688431919e-14}, /* L608 */
-{6.1239833892743363e+00, 4.1405767703395213e-13,
-	2.2204460492503131e-16, -1.5232259897857148e-13,
-	3.8635761256955448e-14}, /* L609 */
-{6.5303381718135123e+00, 4.4225734185943111e-13,
-	2.2204460492503131e-16, 3.0864200084579352e-14,
-	2.2204460492503131e-14}, /* L610 */
-{5.9310650039648740e+00, 4.0233094633634892e-13,
-	2.2204460492503131e-16, 1.8696155734687636e-13,
-	-6.5281113847959205e-14}, /* L611 */
-{5.6560546752283836e+00, 3.8430369997399794e-13,
-	2.2204460492503131e-16, -1.9440005161186491e-13,
-	-1.7763568394002505e-15}, /* L612 */
-{1.0236557748975780e+01, 6.9666494795228573e-13,
-	2.2204460492503131e-16, 5.7331916991643084e-13,
-	7.2897243796887778e-13}, /* L613 */
-{8.6482221134177912e+00, 5.8952842607595812e-13,
-	2.2204460492503131e-16, -1.6320278461989801e-14,
-	3.8191672047105385e-14}, /* L614 */
-{7.8032643437780260e+00, 5.3279602951761262e-13,
-	2.2204460492503131e-16, 5.1603166184577276e-13,
-	-2.9565239145767919e-13}, /* L615 */
-{7.1018780877954510e+00, 4.8569481769789036e-13,
-	2.2204460492503131e-16, 5.5333515547317802e-13,
-	4.7761794519374234e-13}, /* L616 */
-{7.7779701319708030e+00, 5.3279602951761262e-13,
-	2.2204460492503131e-16, -4.3098857815948577e-13,
-	-1.9484414082171497e-13}, /* L617 */
-{6.7707428828944307e+00, 4.6455200797268503e-13,
-	2.2204460492503131e-16, -2.3869795029440866e-14,
-	1.3655743202889425e-13}, /* L618 */
-{6.0416088856672232e+00, 4.1519565563419292e-13,
-	2.2204460492503131e-16, 3.0397906414236786e-13,
-	6.6080474425689317e-13}, /* L619 */
-{6.4225907781135954e+00, 4.4209080840573733e-13,
-	2.2204460492503131e-16, 8.5642604119584576e-13,
-	1.2507772595427014e-12}, /* L620 */
-{6.5773050630469632e+00, 4.5347059440814519e-13,
-	2.2204460492503131e-16, -3.7014835641002719e-13,
-	-2.8765878568037806e-13}, /* L621 */
-{6.6953481831277335e+00, 4.6235237860514644e-13,
-	2.2204460492503131e-16, -3.0169977627281241e-11,
-	2.6100455130517730e-11}, /* L622 */
-{5.1911448273359717e+00, 3.5905479978115551e-13,
-	2.2204460492503131e-16, 8.7108098512089782e-13,
-	-5.3523852017178797e-13}, /* L623 */
-{6.1614680543235520e+00, 4.2685299739275706e-13,
-	2.2204460492503131e-16, -6.6613381477509392e-15,
-	1.7874590696465020e-13}, /* L624 */
-{5.7187090224479169e+00, 3.9681452568274267e-13,
-	2.2204460492503131e-16, -1.6653345369377348e-13,
-	-2.0539125955565396e-14}, /* L625 */
-{7.5676037924973532e+00, 5.2594734123445619e-13,
-	2.2204460492503131e-16, -1.3411494137471891e-13,
-	1.0147438445073931e-13}, /* L626 */
-{6.4609352333051344e+00, 4.4975134727565091e-13,
-	2.2204460492503131e-16, -3.9923619965520629e-13,
-	2.3669954885008337e-13}, /* L627 */
-{5.8503277014394026e+00, 4.0789593924728251e-13,
-	2.2204460492503131e-16, 6.8833827526759706e-15,
-	-1.2956302697375577e-13}, /* L628 */
-{7.2327220628888975e+00, 5.0508208726540715e-13,
-	2.2204460492503131e-16, -1.8729462425426391e-13,
-	6.3060667798708891e-14}, /* L629 */
-{6.8861219753515543e+00, 4.8164250365800854e-13,
-	2.2204460492503131e-16, 1.6937562463681388e-12,
-	1.2156942119645464e-12}, /* L630 */
-{6.1283773391454526e+00, 4.2932324362254803e-13,
-	2.2204460492503131e-16, -4.1833203567875898e-13,
-	-4.9182879990894435e-14}, /* L631 */
-{7.7291953431401188e+00, 5.4232660029462920e-13,
-	2.2204460492503131e-16, -1.3478107518949400e-13,
-	6.0174087934683484e-14}, /* L632 */
-{5.7866402512666113e+00, 4.0666775502629093e-13,
-	2.2204460492503131e-16, -1.7985612998927536e-14,
-	-3.2862601528904634e-14}, /* L633 */
-{1.0499030759977416e+01, 7.3900607855392764e-13,
-	2.2204460492503131e-16, 1.9984014443252818e-13,
-	7.6827433304060833e-14}, /* L634 */
-{8.4905645767254967e+00, 5.9857674372665315e-13,
-	2.2204460492503131e-16, 1.5987211554602254e-14,
-	-2.5368596112684827e-13}, /* L635 */
-{9.0853130761015439e+00, 6.4151461920403108e-13,
-	2.2204460492503131e-16, 7.9047879353311146e-14,
-	-6.8389738316909643e-14}, /* L636 */
-{7.2260710552487275e+00, 5.1103565823495956e-13,
-	2.2204460492503131e-16, -1.2645440250480533e-13,
-	4.6784798257704097e-13}, /* L637 */
-{6.0995394038308097e+00, 4.3204329003287967e-13,
-	2.2204460492503131e-16, 6.1994853695068741e-13,
-	2.3780977187470853e-13}, /* L638 */
-{6.5750299352832959e+00, 4.6645326490235561e-13,
-	2.2204460492503131e-16, 4.3098857815948577e-13,
-	-9.7699626167013776e-15}, /* L639 */
-{6.5437359100296488e+00, 4.6495966798953958e-13,
-	2.2204460492503131e-16, -8.9817042692175164e-14,
-	-6.1062266354383610e-14}, /* L640 */
-{6.0606569878389926e+00, 4.3130776727906550e-13,
-	2.2204460492503131e-16, -4.1078251911130792e-15,
-	2.7533531010703882e-14}, /* L641 */
-{8.4517267299685273e+00, 6.0240701316160994e-13,
-	2.2204460492503131e-16, 9.7055696812731185e-13,
-	1.7643664307342988e-12}, /* L642 */
-{6.2900565801635153e+00, 4.4902970230964456e-13,
-	2.2204460492503131e-16, 1.6253665080512292e-13,
-	-2.9753977059954195e-14}, /* L643 */
-{6.0773581907758221e+00, 4.3452047515657455e-13,
-	2.2204460492503131e-16, 1.7097434579227411e-13,
-	-7.5384143372048129e-14}, /* L644 */
-{7.7069889035575114e+00, 5.5189186554116532e-13,
-	2.2204460492503131e-16, -9.6811447747313650e-14,
-	-2.9976021664879227e-15}, /* L645 */
-{6.7335632551656612e+00, 4.8293313792413528e-13,
-	2.2204460492503131e-16, 2.2204460492503131e-16,
-	1.7230661342182430e-13}, /* L646 */
-{9.4259229084370713e+00, 6.7707645046155562e-13,
-	2.2204460492503131e-16, 3.7947422981687851e-13,
-	-2.3803181647963356e-13}, /* L647 */
-{6.6983130371100614e+00, 4.8189230383854920e-13,
-	2.2204460492503131e-16, -2.8532731732866523e-14,
-	3.1086244689504383e-15}, /* L648 */
-{7.7958520530350359e+00, 5.6171733930909795e-13,
-	2.2204460492503131e-16, 1.8496315590255108e-13,
-	1.0214051826551440e-13}, /* L649 */
-{7.0023187399134255e+00, 5.0531800965814000e-13,
-	2.2204460492503131e-16, -1.9417800700693988e-13,
-	-4.2144066014770942e-13}, /* L650 */
-{5.9005469437386679e+00, 4.2646441933413826e-13,
-	2.2204460492503131e-16, -6.4837024638109142e-14,
-	4.5563552930616424e-13}, /* L651 */
-{8.8922686306168384e+00, 6.4367955410205013e-13,
-	2.2204460492503131e-16, 4.5119463720766362e-13,
-	1.2922996006636822e-13}, /* L652 */
-{6.9984796479817293e+00, 5.0737192225369654e-13,
-	2.2204460492503131e-16, 1.5054624213917123e-13,
-	-3.9857006584043120e-14}, /* L653 */
-{5.8084954026368036e+00, 4.2174597147948134e-13,
-	2.2204460492503131e-16, -8.2156503822261584e-15,
-	8.9928064994637680e-14}, /* L654 */
-{5.8606962693522844e+00, 4.2618686357798197e-13,
-	2.2204460492503131e-16, -4.9649173661237000e-13,
-	-2.3547830352299570e-13}, /* L655 */
-{5.5228745671368511e+00, 4.0223380182169421e-13,
-	2.2204460492503131e-16, 1.0902390101819037e-13,
-	-9.7699626167013776e-14}, /* L656 */
-{7.4376068637415207e+00, 5.4251048098308274e-13,
-	2.2204460492503131e-16, 6.2172489379008766e-14,
-	6.0618177144533547e-14}, /* L657 */
-{6.6117125590043040e+00, 4.8300252686317435e-13,
-	2.2204460492503131e-16, 1.4432899320127035e-13,
-	8.2822637637036678e-14}, /* L658 */
-{6.9233796635805414e+00, 5.0653925498522767e-13,
-	2.2204460492503131e-16, -9.3036689463588118e-14,
-	-1.3877787807814457e-14}, /* L659 */
-{7.8170577875722520e+00, 5.7279181397973389e-13,
-	2.2204460492503131e-16, -2.1660451210436804e-13,
-	1.0902390101819037e-13}, /* L660 */
-{8.5446428304138173e+00, 6.2705396430828841e-13,
-	2.2204460492503131e-16, -8.9706020389712648e-14,
-	-9.5923269327613525e-14}, /* L661 */
-{6.1004627969488165e+00, 4.4836356849486947e-13,
-	2.2204460492503131e-16, -1.4943601911454607e-13,
-	-1.5543122344752192e-14}, /* L662 */
-{8.4215819142241255e+00, 6.1989302579945615e-13,
-	2.2204460492503131e-16, 8.4754425699884450e-13,
-	7.0743411129114975e-13}, /* L663 */
-{6.2628110856984094e+00, 4.6168624479037135e-13,
-	2.2204460492503131e-16, -9.2148511043887993e-15,
-	4.0190073491430667e-14}, /* L664 */
-{7.3422108319780888e+00, 5.4207333066713659e-13,
-	2.2204460492503131e-16, 9.4813046302988369e-14,
-	6.0174087934683484e-14}, /* L665 */
-{6.2239212309291796e+00, 4.6020132149493520e-13,
-	2.2204460492503131e-16, -1.4954704141700859e-13,
-	-5.6454840802189210e-13}, /* L666 */
-{7.1293215928052787e+00, 5.2793880378487756e-13,
-	2.2204460492503131e-16, 4.9604764740251994e-13,
-	1.8962609260597674e-13}, /* L667 */
-{7.9007422554708429e+00, 5.8594101792763809e-13,
-	2.2204460492503131e-16, 1.8096635301390052e-13,
-	-2.2015722578316854e-13}, /* L668 */
-{5.5744202297784016e+00, 4.1403339090528846e-13,
-	2.2204460492503131e-16, -2.1860291354869332e-13,
-	-8.6264329013374663e-14}, /* L669 */
-{5.5298594707635198e+00, 4.1133763062362050e-13,
-	2.2204460492503131e-16, -7.6938455606523348e-14,
-	-3.7359004778636518e-13}, /* L670 */
-{8.0108174076235912e+00, 5.9677263131163727e-13,
-	2.2204460492503131e-16, 2.3581137043038325e-13,
-	-2.5732749264761878e-12}, /* L671 */
-{7.0269828127116059e+00, 5.2426119001580673e-13,
-	2.2204460492503131e-16, 7.7049477908985864e-14,
-	-1.0302869668521453e-13}, /* L672 */
-{8.6129407803702200e+00, 6.4354077622397199e-13,
-	2.2204460492503131e-16, 3.6415315207705135e-13,
-	-1.3722356584366935e-13}, /* L673 */
-{8.5460075483744991e+00, 6.3948846218409017e-13,
-	2.2204460492503131e-16, 1.4144241333724494e-13,
-	-7.3496764230185363e-14}, /* L674 */
-{6.7000105706516360e+00, 5.0209836288672705e-13,
-	2.2204460492503131e-16, 6.9277916736609768e-14,
-	1.0724754417879012e-13}, /* L675 */
-{7.0488276890308095e+00, 5.2902127123388709e-13,
-	2.2204460492503131e-16, 2.5091040356528538e-14,
-	-2.6700863742235015e-13}, /* L676 */
-{6.9328026661452666e+00, 5.2108317660781722e-13,
-	2.2204460492503131e-16, 8.8151708155237429e-14,
-	-8.7485574340462335e-14}, /* L677 */
-{7.0951439374143641e+00, 5.3407278599593155e-13,
-	2.2204460492503131e-16, 4.4408920985006262e-13,
-	-5.5511151231257827e-14}, /* L678 */
-{8.4204845663392245e+00, 6.3477001432943325e-13,
-	2.2204460492503131e-16, -4.1189274213593308e-13,
-	-5.7376325912628090e-13}, /* L679 */
-{9.6331034335098256e+00, 7.2725159228070879e-13,
-	2.2204460492503131e-16, -5.6732396558345499e-14,
-	1.8207657603852567e-14}, /* L680 */
-{8.9434796021111094e+00, 6.7618133314795159e-13,
-	2.2204460492503131e-16, -3.4439118223872356e-13,
-	6.1062266354383610e-14}, /* L681 */
-{8.1081506221971527e+00, 6.1392557704209594e-13,
-	2.2204460492503131e-16, 3.0087043967341742e-13,
-	3.1175062531474396e-13}, /* L682 */
-{6.9915922898306571e+00, 5.3015924983412788e-13,
-	2.2204460492503131e-16, -3.4094949086238557e-13,
-	1.7763568394002505e-14}, /* L683 */
-{7.8587477789173938e+00, 5.9678650909944508e-13,
-	2.2204460492503131e-16, 2.9198865547641617e-13,
-	-1.3200551762793111e-13}, /* L684 */
-{5.4576728441824622e+00, 4.1505687775611477e-13,
-	2.2204460492503131e-16, 3.1130653610489389e-13,
-	-1.6409096303959814e-13}, /* L685 */
-{6.9690343187097543e+00, 5.3076987249767171e-13,
-	2.2204460492503131e-16, -1.2079226507921703e-13,
-	1.4233059175694507e-13}, /* L686 */
-{6.4126738727756809e+00, 4.8910875349861271e-13,
-	2.2204460492503131e-16, -1.3078427230084344e-13,
-	1.7985612998927536e-14}, /* L687 */
-{7.7438348919166877e+00, 5.9149907194466778e-13,
-	2.2204460492503131e-16, -1.6853185513809876e-13,
-	-5.0837112297585918e-13}, /* L688 */
-{8.7460225069273996e+00, 6.6902039463911933e-13,
-	2.2204460492503131e-16, -4.1144865292608301e-13,
-	-2.3758772726978350e-14}, /* L689 */
-{8.7283652200259443e+00, 6.6863875547440443e-13,
-	2.2204460492503131e-16, 4.5428105721612155e-12,
-	1.1601830607332886e-12}, /* L690 */
-{9.2050615561653295e+00, 7.0617817149454254e-13,
-	2.2204460492503131e-16, 9.2770235937678081e-13,
-	3.4305891460917337e-13}, /* L691 */
-{8.2188081258286392e+00, 6.3142893691470192e-13,
-	2.2204460492503131e-16, -4.8516746176119341e-14,
-	1.6475709685437323e-13}, /* L692 */
-{7.9924368521490514e+00, 6.1492477776425858e-13,
-	2.2204460492503131e-16, -1.3322676295501878e-14,
-	7.3274719625260332e-14}, /* L693 */
-{7.7374041381322156e+00, 5.9616200864809343e-13,
-	2.2204460492503131e-16, 4.5901060730102472e-12,
-	2.7537971902802383e-12}, /* L694 */
-{7.7777101126509907e+00, 6.0013105596112837e-13,
-	2.2204460492503131e-16, 6.8767214145282196e-13,
-	-9.3591800975900696e-13}, /* L695 */
-{6.9978558681507224e+00, 5.4073412414368249e-13,
-	2.2204460492503131e-16, -8.3877349510430577e-13,
-	9.5479180117763462e-14}, /* L696 */
-{6.1832952647551380e+00, 4.7847836803782684e-13,
-	2.2204460492503131e-16, 2.5979218776228663e-14,
-	3.1086244689504383e-15}, /* L697 */
-{6.2944225382050609e+00, 4.8777648586906253e-13,
-	2.2204460492503131e-16, 7.2386541205560206e-14,
-	3.1974423109204508e-14}, /* L698 */
-{6.2618124544072487e+00, 4.8594461787843102e-13,
-	2.2204460492503131e-16, 3.0953017926549364e-13,
-	-4.4653170050423796e-13}, /* L699 */
-{8.5525134933600828e+00, 6.6466276926746559e-13,
-	2.2204460492503131e-16, -1.0214051826551440e-13,
-	2.6534330288541241e-13}, /* L700 */
-{1.0350943577539496e+01, 8.0557782666801359e-13,
-	2.2204460492503131e-16, -3.3240077357277187e-13,
-	-9.1260332624187868e-14}, /* L701 */
-{5.5078434475941354e+00, 4.2926773247131678e-13,
-	2.2204460492503131e-16, 8.0824236192711396e-14,
-	5.2868820432649954e-13}, /* L702 */
-{7.8349163441299137e+00, 6.1150390306963232e-13,
-	2.2204460492503131e-16, 7.9714013168086240e-14,
-	-3.5804692544161298e-13}, /* L703 */
-{7.4936197772816788e+00, 5.8569815664100133e-13,
-	2.2204460492503131e-16, 1.5076828674409626e-13,
-	-1.4310774787418268e-13}, /* L704 */
-{6.7546205858901578e+00, 5.2868820432649954e-13,
-	2.2204460492503131e-16, -1.2312373343092986e-13,
-	1.5387691121304670e-13}, /* L705 */
-{7.5389637356321009e+00, 5.9091620485673957e-13,
-	2.2204460492503131e-16, 3.1752378504279477e-14,
-	-7.2608585810485238e-14}, /* L706 */
-{8.6004378971111883e+00, 6.7507111012332643e-13,
-	2.2204460492503131e-16, 1.8163248682867561e-13,
-	7.9958262233503774e-13}, /* L707 */
-{8.1666795512948696e+00, 6.4193095283826551e-13,
-	2.2204460492503131e-16, 9.1038288019262836e-15,
-	-6.5170091545496689e-14}, /* L708 */
-{7.0249581919299278e+00, 5.5296739409627094e-13,
-	2.2204460492503131e-16, -2.2204460492503131e-16,
-	4.1966430330830917e-14}, /* L709 */
-{6.2838127309141720e+00, 4.9532600243651359e-13,
-	2.2204460492503131e-16, -3.6026737149086330e-13,
-	-3.6848302187308946e-13}, /* L710 */
-{7.7493089912493005e+00, 6.1170513099284562e-13,
-	2.2204460492503131e-16, -6.9610983643997315e-14,
-	-1.1876055694415300e-12}, /* L711 */
-{7.7356161371159704e+00, 6.1148308638792059e-13,
-	2.2204460492503131e-16, 1.1723955140041653e-13,
-	-4.7262194158292914e-13}, /* L712 */
-{8.2843749216477036e+00, 6.5578098507046434e-13,
-	2.2204460492503131e-16, 1.2012613126444194e-13,
-	-7.7826634026223473e-14}, /* L713 */
-{5.5336221757895148e+00, 4.3864911702939935e-13,
-	2.2204460492503131e-16, -4.8250292650209303e-13,
-	1.2008172234345693e-12}, /* L714 */
-{7.6115504703326300e+00, 6.0421112557662582e-13,
-	2.2204460492503131e-16, -9.9920072216264089e-14,
-	1.3744561044859438e-13}, /* L715 */
-{8.4057395187759969e+00, 6.6818772737065046e-13,
-	2.2204460492503131e-16, 8.0824236192711396e-14,
-	8.3044682241961709e-14}, /* L716 */
-{7.3961065084995274e+00, 5.8875126995872051e-13,
-	2.2204460492503131e-16, 7.5051076464660582e-14,
-	1.9095836023552692e-14}, /* L717 */
-{6.5821830867037550e+00, 5.2469140143784898e-13,
-	2.2204460492503131e-16, -3.1108449149996886e-13,
-	2.2959412149248237e-13}, /* L718 */
-{8.7976494851194857e+00, 7.0227157422664277e-13,
-	2.2204460492503131e-16, -8.1379347705023974e-14,
-	9.6811447747313650e-14}, /* L719 */
-{8.4708466978478913e+00, 6.7712502271888297e-13,
-	2.2204460492503131e-16, 3.1086244689504383e-14,
-	3.3661962106634746e-13}, /* L720 */
-{1.1503225499560960e+01, 9.2079815994239311e-13,
-	2.2204460492503131e-16, 1.2334577803585489e-12,
-	1.3737899706711687e-12}, /* L721 */
-{5.4653825839906460e+00, 4.3809400551708677e-13,
-	2.2204460492503131e-16, 8.4376949871511897e-14,
-	7.1498362785860081e-14}, /* L722 */
-{6.5083090233911456e+00, 5.2241544423736741e-13,
-	2.2204460492503131e-16, 5.9952043329758453e-15,
-	-1.5420997812043424e-13}, /* L723 */
-{5.8280478689837913e+00, 4.6845860524058480e-13,
-	2.2204460492503131e-16, -1.8507417820501360e-13,
-	3.1086244689504383e-13}, /* L724 */
-{7.3427702054282129e+00, 5.9102722715920208e-13,
-	2.2204460492503131e-16, 1.8651746813702630e-14,
-	6.5503158452884236e-14}, /* L725 */
-{7.6088274314888045e+00, 6.1328719880293647e-13,
-	2.2204460492503131e-16, -3.3750779948604759e-13,
-	-8.3377749149349256e-14}, /* L726 */
-{7.1224321449377488e+00, 5.7487348215090606e-13,
-	2.2204460492503131e-16, -2.1094237467877974e-15,
-	4.9116266609416925e-13}, /* L727 */
-{8.0061939501100916e+00, 6.4709348990277249e-13,
-	2.2204460492503131e-16, -1.9073631563060189e-13,
-	2.3137047833188262e-13}, /* L728 */
-{8.7458985721268974e+00, 7.0785044492538418e-13,
-	2.2204460492503131e-16, 1.9340085088970227e-13,
-	-9.1482377229112899e-14}, /* L729 */
-{7.2287785281826453e+00, 5.8586469009469511e-13,
-	2.2204460492503131e-16, 9.1926466438962962e-14,
-	-1.0791367799356522e-13}, /* L730 */
-{8.8379072404787671e+00, 7.1725958505908238e-13,
-	2.2204460492503131e-16, 5.3557158707917552e-13,
-	-2.9864999362416711e-13}, /* L731 */
-{6.0538005347254558e+00, 4.9198145557483031e-13,
-	2.2204460492503131e-16, 3.4749980670767400e-13,
-	2.0650148258027912e-14}, /* L732 */
-{6.8258549028931919e+00, 5.5548274313643731e-13,
-	2.2204460492503131e-16, -5.9396931817445875e-14,
-	-3.7159164634203989e-13}, /* L733 */
-{6.4216722568547180e+00, 5.2330362265706754e-13,
-	2.2204460492503131e-16, 1.1635137298071641e-13,
-	-4.7462034302725442e-13}, /* L734 */
-{1.0262601225346939e+01, 8.3744122747475558e-13,
-	2.2204460492503131e-16, -6.0595972684041044e-13,
-	-7.5539574595495651e-13}, /* L735 */
-{1.0395226998437057e+01, 8.4941775835289945e-13,
-	2.2204460492503131e-16, -3.6270986214503864e-13,
-	2.5268676040468563e-13}, /* L736 */
-{7.5413958872491786e+00, 6.1706195708666201e-13,
-	2.2204460492503131e-16, 2.7533531010703882e-13,
-	1.5099033134902129e-14}, /* L737 */
-{7.2007227427401128e+00, 5.8998639307361600e-13,
-	2.2204460492503131e-16, -1.5365486660812167e-13,
-	-1.1457501614131615e-13}, /* L738 */
-{9.0822200124200876e+00, 7.4515393855278944e-13,
-	2.2204460492503131e-16, 2.4047430713380891e-13,
-	4.6074255521943996e-13}, /* L739 */
-{8.6040676287455984e+00, 7.0687899977883717e-13,
-	2.2204460492503131e-16, 2.1938006966593093e-13,
-	4.1722181265413383e-13}, /* L740 */
-{6.9959624545842134e+00, 5.7553961596568115e-13,
-	2.2204460492503131e-16, -4.9960036108132044e-15,
-	5.4400928206632670e-14}, /* L741 */
-{8.6270351742669185e+00, 7.1068151363817833e-13,
-	2.2204460492503131e-16, 2.9776181520446698e-13,
-	1.1879386363489175e-13}, /* L742 */
-{7.6675760271790914e+00, 6.3249405712895168e-13,
-	2.2204460492503131e-16, -8.4354745411019394e-13,
-	1.2543299732215019e-12}, /* L743 */
-{9.0858835804938423e+00, 7.5049818790140499e-13,
-	2.2204460492503131e-16, -7.2164496600635175e-14,
-	1.6076029396572267e-13}, /* L744 */
-{9.7399482526783014e+00, 8.0560558224362921e-13,
-	2.2204460492503131e-16, 1.7030821197749901e-13,
-	-2.4980018054066022e-14}, /* L745 */
-{8.5598325397587587e+00, 7.0894679016220152e-13,
-	2.2204460492503131e-16, -4.9071857688431919e-14,
-	9.1926466438962962e-14}, /* L746 */
-{1.1687434771339559e+01, 9.6928021164899292e-13,
-	2.2204460492503131e-16, 1.5543122344752192e-15,
-	-4.3176573427672338e-13}, /* L747 */
-{6.8028182194832372e+00, 5.6493698608051091e-13,
-	2.2204460492503131e-16, 2.6201263381153694e-14,
-	-1.7363888105137448e-13}, /* L748 */
-{7.7927359261637479e+00, 6.4800942389808824e-13,
-	2.2204460492503131e-16, -5.9507954119908391e-14,
-	-4.6740389336719090e-14}, /* L749 */
-{7.2618447903933889e+00, 6.0466909257428370e-13,
-	2.2204460492503131e-16, -1.0158540675320182e-13,
-	-2.3170354523927017e-13}, /* L750 */
-{7.0465324222738541e+00, 5.8752308573772893e-13,
-	2.2204460492503131e-16, -1.5143442055887135e-13,
-	1.0103029524088925e-12}, /* L751 */
-{7.4288681035552342e+00, 6.2022609270684370e-13,
-	2.2204460492503131e-16, -2.6978419498391304e-14,
-	-4.0523140398818214e-14}, /* L752 */
-{6.0969551703366998e+00, 5.0970339060540937e-13,
-	2.2204460492503131e-16, -1.4999113062685865e-13,
-	1.7874590696465020e-13}, /* L753 */
-{9.0424960303177233e+00, 7.5695352763638368e-13,
-	2.2204460492503131e-16, -5.3479443096193791e-13,
-	-3.5726976932437537e-13}, /* L754 */
-{7.9940523473722598e+00, 6.7007510651251323e-13,
-	2.2204460492503131e-16, 8.1934459217336553e-14,
-	4.0412118096355698e-14}, /* L755 */
-{6.6620475477928052e+00, 5.5916382635246009e-13,
-	2.2204460492503131e-16, -7.5717210279435676e-14,
-	4.7406523151494184e-13}, /* L756 */
-{7.7549659999264753e+00, 6.5175642660619815e-13,
-	2.2204460492503131e-16, -7.7715611723760958e-15,
-	-4.7184478546569153e-14}, /* L757 */
-{9.0560828894288310e+00, 7.6211259525393871e-13,
-	2.2204460492503131e-16, -1.3322676295501878e-15,
-	1.0680345496894006e-13}, /* L758 */
-{6.3583763030377494e+00, 5.3579363168410055e-13,
-	2.2204460492503131e-16, 1.7319479184152442e-13,
-	-1.2244649738590851e-12}, /* L759 */
-{8.3960658781100452e+00, 7.0843331201331239e-13,
-	2.2204460492503131e-16, -1.8562928971732617e-13,
-	1.8718360195180139e-13}, /* L760 */
-{8.7283317733465964e+00, 7.3743788853164460e-13,
-	2.2204460492503131e-16, 3.0087043967341742e-13,
-	-6.1606275636449936e-13}, /* L761 */
-{6.8687772411105019e+00, 5.8109073108880693e-13,
-	2.2204460492503131e-16, -6.5214500466481695e-13,
-	2.3758772726978350e-13}, /* L762 */
-{8.3381520804556502e+00, 7.0632388826652459e-13,
-	2.2204460492503131e-16, -4.9182879990894435e-14,
-	-7.6161299489285739e-14}, /* L763 */
-{7.9737118602828865e+00, 6.7633745826078950e-13,
-	2.2204460492503131e-16, -1.6209256159527285e-13,
-	1.8229862064345070e-13}, /* L764 */
-{7.5882472660224449e+00, 6.4448446579490337e-13,
-	2.2204460492503131e-16, 3.7614356074300304e-13,
-	-1.7479351299698465e-12}, /* L765 */
-{7.5969033042218879e+00, 6.4606306415804227e-13,
-	2.2204460492503131e-16, 6.1373128801278654e-13,
-	-2.4225066397320916e-13}, /* L766 */
-{9.1678762634182505e+00, 7.8068107534079445e-13,
-	2.2204460492503131e-16, -8.4598994476436928e-13,
-	-5.0270898555027088e-13}, /* L767 */
-{7.6718871039843828e+00, 6.5414340610914223e-13,
-	2.2204460492503131e-16, 2.6867397195928788e-13,
-	-6.4526162191214098e-13}, /* L768 */
-{9.2566791036726297e+00, 7.9029838229160987e-13,
-	2.2204460492503131e-16, -3.4727776210274897e-13,
-	5.2402526762307389e-13}, /* L769 */
-{8.4545587933612047e+00, 7.2275518903097691e-13,
-	2.2204460492503131e-16, -1.2689849171465539e-13,
-	-1.9506618542664000e-13}, /* L770 */
-{7.7814649357450358e+00, 6.6607830362386267e-13,
-	2.2204460492503131e-16, -9.6611607602881122e-13,
-	4.4453329905991268e-13}, /* L771 */
-{6.6179670474313426e+00, 5.6721988217489638e-13,
-	2.2204460492503131e-16, 6.1062266354383610e-14,
-	-8.8817841970012523e-15}, /* L772 */
-{6.3903318802437727e+00, 5.4841894914225975e-13,
-	2.2204460492503131e-16, -1.2414513861358500e-12,
-	1.2274625760255731e-12}, /* L773 */
-{7.0969104216449486e+00, 6.0984550742659849e-13,
-	2.2204460492503131e-16, -1.0824674490095276e-13,
-	5.5289106626332796e-14}, /* L774 */
-{7.4942053720480040e+00, 6.4481753270229092e-13,
-	2.2204460492503131e-16, 7.9047879353311146e-14,
-	2.6867397195928788e-14}, /* L775 */
-{7.1404751830966342e+00, 6.1517457794479924e-13,
-	2.2204460492503131e-16, -7.1465056095121327e-13,
-	-6.4170890823334048e-13}, /* L776 */
-{6.7709244534465682e+00, 5.8408833325529486e-13,
-	2.2204460492503131e-16, 2.9976021664879227e-14,
-	-1.2334577803585489e-13}, /* L777 */
-{6.9003964909081583e+00, 5.9602323077001529e-13,
-	2.2204460492503131e-16, -5.9752203185325925e-13,
-	1.5232259897857148e-13}, /* L778 */
-{9.0038652966024024e+00, 7.7871042947208480e-13,
-	2.2204460492503131e-16, 1.2856382625159313e-13,
-	-9.4924068605450884e-14}, /* L779 */
-{9.8480924604817446e+00, 8.5281781636581400e-13,
-	2.2204460492503131e-16, 2.6756374893466273e-13,
-	-7.6050277186823223e-14}, /* L780 */
-{9.6677489276500168e+00, 8.3827389474322445e-13,
-	2.2204460492503131e-16, -1.2589929099249275e-13,
-	-2.5879298704012399e-13}, /* L781 */
-{7.6934264602151936e+00, 6.6793792719010980e-13,
-	2.2204460492503131e-16, -3.9168668308775523e-13,
-	6.2416738444426301e-13}, /* L782 */
-{8.2496937307983238e+00, 7.1714856275661987e-13,
-	2.2204460492503131e-16, -1.3544720900426910e-14,
-	-7.9714013168086240e-14}, /* L783 */
-{7.9387880352840954e+00, 6.9100281052669743e-13,
-	2.2204460492503131e-16, 3.8635761256955448e-14,
-	-1.0214051826551440e-14}, /* L784 */
-{9.0694410605034239e+00, 7.9042328238188020e-13,
-	2.2204460492503131e-16, -4.3753889400477419e-13,
-	8.7929663550312398e-14}, /* L785 */
-{8.0280024877199399e+00, 7.0055072853847378e-13,
-	2.2204460492503131e-16, 1.0369483049998962e-13,
-	8.7929663550312398e-14}, /* L786 */
-{7.5162126207708928e+00, 6.5672467464139572e-13,
-	2.2204460492503131e-16, -3.2085445411667024e-14,
-	-3.3195668436292181e-14}, /* L787 */
-{7.6900105462848316e+00, 6.7276392790027728e-13,
-	2.2204460492503131e-16, 3.2462921240039577e-13,
-	-3.3506530883187224e-13}, /* L788 */
-{8.9271370248006132e+00, 7.8198558739472901e-13,
-	2.2204460492503131e-16, -7.0077277314339881e-13,
-	1.9717560917342780e-13}, /* L789 */
-{8.6107730789452379e+00, 7.5522921250126274e-13,
-	2.2204460492503131e-16, -6.2283511681471282e-14,
-	1.7541523789077473e-14}, /* L790 */
-{9.3672714159779389e+00, 8.2261975009600974e-13,
-	2.2204460492503131e-16, -1.9950707752514063e-13,
-	-1.0680345496894006e-13}, /* L791 */
-{1.1636381995105930e+01, 1.0231815394945443e-12,
-	2.2204460492503131e-16, 7.9758422089071246e-13,
-	-8.6264329013374663e-13}, /* L792 */
-{8.6513377350153711e+00, 7.6166850604408864e-13,
-	2.2204460492503131e-16, -3.4383607072641098e-13,
-	-1.8651746813702630e-13}, /* L793 */
-{8.4949756191999839e+00, 7.4884543010966809e-13,
-	2.2204460492503131e-16, -2.1405099914773018e-13,
-	4.6473935810809053e-13}, /* L794 */
-{9.3371216494801264e+00, 8.2411855117925370e-13,
-	2.2204460492503131e-16, -7.5495165674510645e-14,
-	2.6512125828048738e-13}, /* L795 */
-{7.7054141669061869e+00, 6.8095529215383976e-13,
-	2.2204460492503131e-16, -2.8965718712470334e-13,
-	4.5186077102243871e-13}, /* L796 */
-{9.8544697507287324e+00, 8.7196916354059795e-13,
-	2.2204460492503131e-16, -3.0864200084579352e-14,
-	-1.2934098236883074e-13}, /* L797 */
-{1.0341181728889325e+01, 9.1618379549629481e-13,
-	2.2204460492503131e-16, -1.5987211554602254e-14,
-	-1.4721557306529576e-13}, /* L798 */
-{1.1460124463608130e+01, 1.0165895902858324e-12,
-	2.2204460492503131e-16, -4.7056802898737260e-12,
-	-4.7528647684202951e-13}, /* L799 */
-{8.3106381117514339e+00, 7.3813177792203533e-13,
-	2.2204460492503131e-16, -1.1424194923392861e-13,
-	-1.5698553568199713e-13}, /* L800 */
-{1.1316341199668525e+01, 1.0063477828836653e-12,
-	2.2204460492503131e-16, -7.4940054162198066e-13,
-	4.8161474808239291e-13}, /* L801 */
-{1.0457934205284054e+01, 9.3117180632873442e-13,
-	2.2204460492503131e-16, -8.7263529735537304e-14,
-	1.2745360322696797e-13}, /* L802 */
-{7.4234239162229985e+00, 6.6180394497905581e-13,
-	2.2204460492503131e-16, -1.6986412276764895e-14,
-	-7.0166095156309893e-14}, /* L803 */
-{9.3289948179225330e+00, 8.3272277962009866e-13,
-	2.2204460492503131e-16, 6.1062266354383610e-14,
-	2.3758772726978350e-14}, /* L804 */
-{9.4795180614745913e+00, 8.4721119009145696e-13,
-	2.2204460492503131e-16, -7.8825834748386114e-14,
-	-5.5622173533720343e-14}, /* L805 */
-{1.1582369390209212e+01, 1.0364348268510071e-12,
-	2.2204460492503131e-16, -7.2608585810485238e-14,
-	1.5765166949677223e-14}, /* L806 */
-{8.1790711445648014e+00, 7.3280270740383457e-13,
-	2.2204460492503131e-16, 6.7412742055239505e-13,
-	-8.4598994476436928e-14}, /* L807 */
-{8.6791597327766912e+00, 7.7857165159400665e-13,
-	2.2204460492503131e-16, -1.0658141036401503e-14,
-	5.1070259132757201e-14}, /* L808 */
-{1.1482249265191783e+01, 1.0313000453621157e-12,
-	2.2204460492503131e-16, 1.3211653993039363e-13,
-	3.1086244689504383e-15}, /* L809 */
-{6.6429117151353250e+00, 5.9738325397518111e-13,
-	2.2204460492503131e-16, 1.9984014443252818e-14,
-	-3.8669067947694202e-13}, /* L810 */
-{9.4815192747112285e+00, 8.5370599478551412e-13,
-	2.2204460492503131e-16, 1.8118839761882555e-13,
-	2.8244073746463982e-13}, /* L811 */
-{8.2974268840057537e+00, 7.4801276284119922e-13,
-	2.2204460492503131e-16, -9.5257135512838431e-14,
-	2.9420910152566648e-13}, /* L812 */
-{9.2247993018775283e+00, 8.3263951289325178e-13,
-	2.2204460492503131e-16, 3.3972824553529790e-14,
-	-3.4305891460917337e-14}, /* L813 */
-{9.1501987115111945e+00, 8.2692186431643222e-13,
-	2.2204460492503131e-16, 4.8316906031686813e-13,
-	-4.2266190547479709e-13}, /* L814 */
-{1.0571182322398188e+01, 9.5651264686580362e-13,
-	2.2204460492503131e-16, 1.4321877017664519e-13,
-	-3.4916514124461173e-13}, /* L815 */
-{8.0995838572011785e+00, 7.3377415255038159e-13,
-	2.2204460492503131e-16, 2.5845992013273644e-13,
-	-8.0380146982861334e-14}, /* L816 */
-{1.2937596911125187e+01, 1.1735057370287905e-12,
-	2.2204460492503131e-16, -8.3488771451811772e-14,
-	1.4876988529977098e-14}, /* L817 */
-{9.3747091670684828e+00, 8.5137452643380129e-13,
-	2.2204460492503131e-16, -1.6731060981101109e-13,
-	1.6497914145929826e-13}, /* L818 */
-{1.0133105120159168e+01, 9.2137408813641741e-13,
-	2.2204460492503131e-16, -2.7977620220553945e-14,
-	8.5487172896137054e-14}, /* L819 */
-{9.6176981007353373e+00, 8.7557738837062971e-13,
-	2.2204460492503131e-16, 2.6600943670018751e-13,
-	-1.1779466291272911e-13}, /* L820 */
-{7.5706574984819293e+00, 6.9005912095576605e-13,
-	2.2204460492503131e-16, -1.0769163338864018e-14,
-	5.0182080713057076e-14}, /* L821 */
-{7.8771413815912839e+00, 7.1886940844478886e-13,
-	2.2204460492503131e-16, 2.4336088699783431e-13,
-	2.2515322939398175e-13}, /* L822 */
-{8.9735864541618575e+00, 8.1992745926129373e-13,
-	2.2204460492503131e-16, 4.9849013805669529e-13,
-	2.6934010577406298e-13}, /* L823 */
-{9.6201608088612041e+00, 8.8007379162036159e-13,
-	2.2204460492503131e-16, 2.1249668691325496e-13,
-	1.4144241333724494e-13}, /* L824 */
-{7.5872846977823265e+00, 6.9494410226411674e-13,
-	2.2204460492503131e-16, 3.1308289294429414e-14,
-	-1.7885692926711272e-13}, /* L825 */
-{8.7701409553574123e+00, 8.0425943682627121e-13,
-	2.2204460492503131e-16, -8.9817042692175164e-14,
-	-1.1102230246251565e-14}, /* L826 */
-{9.0553961262370191e+00, 8.3142390541746103e-13,
-	2.2204460492503131e-16, 7.7715611723760958e-14,
-	-3.0953017926549364e-13}, /* L827 */
-{9.3656548728269193e+00, 8.6095020002119327e-13,
-	2.2204460492503131e-16, -6.0862426209951082e-13,
-	-5.3068660577082483e-13}, /* L828 */
-{8.7724052757155917e+00, 8.0738887797693337e-13,
-	2.2204460492503131e-16, 1.8489654252107357e-12,
-	-2.0968782266095332e-12}, /* L829 */
-{8.3819409350819853e+00, 7.7238215823172141e-13,
-	2.2204460492503131e-16, -7.1831429693247628e-14,
-	1.1857181902996672e-13}, /* L830 */
-{9.6928552443259086e+00, 8.9425689075994796e-13,
-	2.2204460492503131e-16, 1.6131540547803525e-12,
-	9.0438767585965252e-13}, /* L831 */
-{6.9979076752612190e+00, 6.4639960051238177e-13,
-	2.2204460492503131e-16, 2.6134649999676185e-13,
-	2.1516122217235534e-13}, /* L832 */
-{7.5765425658090262e+00, 7.0068950641655192e-13,
-	2.2204460492503131e-16, 1.6231460620019789e-13,
-	2.3558932582545822e-13}, /* L833 */
-{9.3100416668638211e+00, 8.6203960636410670e-13,
-	2.2204460492503131e-16, -2.0347057372305244e-12,
-	4.3063330679160572e-12}, /* L834 */
-{1.2552115611940454e+01, 1.1636247521096266e-12,
-	2.2204460492503131e-16, 2.5579538487363607e-13,
-	-1.7341683644644945e-13}, /* L835 */
-{7.3474996304779925e+00, 6.8195449287600240e-13,
-	2.2204460492503131e-16, 2.3536728122053319e-14,
-	6.7945649107059580e-14}, /* L836 */
-{1.3074692073667933e+01, 1.2149725669985401e-12,
-	2.2204460492503131e-16, 9.6811447747313650e-14,
-	1.8385293287792592e-13}, /* L837 */
-{6.9516816121039309e+00, 6.4676042299538494e-13,
-	2.2204460492503131e-16, -3.5749181392930041e-14,
-	-5.8730798002670781e-14}, /* L838 */
-{9.6113083700242505e+00, 8.9526996926991842e-13,
-	2.2204460492503131e-16, -8.0491169285323849e-14,
-	-1.2811973704174306e-13}, /* L839 */
-{1.1201208148413031e+01, 1.0446088438698098e-12,
-	2.2204460492503131e-16, -4.7672976677404222e-13,
-	2.1938006966593093e-13}, /* L840 */
-{9.3466259234016533e+00, 8.7269080850660430e-13,
-	2.2204460492503131e-16, -6.1417537722263660e-13,
-	4.3010039973978564e-13}, /* L841 */
-{8.6829115613024843e+00, 8.1168405330345195e-13,
-	2.2204460492503131e-16, 1.5476508963274682e-13,
-	-5.0293103015519591e-14}, /* L842 */
-{7.8339388127985128e+00, 7.3319128546245338e-13,
-	2.2204460492503131e-16, 3.7014835641002719e-13,
-	-5.4756199574512721e-13}, /* L843 */
-{8.0438515534001027e+00, 7.5373041141801878e-13,
-	2.2204460492503131e-16, 2.3092638912203256e-13,
-	-3.2196467714129540e-14}, /* L844 */
-{7.7745684790091882e+00, 7.2936101602749659e-13,
-	2.2204460492503131e-16, 3.8857805861880479e-14,
-	-1.1968204205459188e-13}, /* L845 */
-{9.1867757233528238e+00, 8.6286533473867166e-13,
-	2.2204460492503131e-16, 1.3256062914024369e-13,
-	3.9968028886505635e-15}, /* L846 */
-{7.3208498028103328e+00, 6.8842154199444394e-13,
-	2.2204460492503131e-16, 2.1316282072803006e-14,
-	4.7961634663806763e-14}, /* L847 */
-{9.3156102161628223e+00, 8.7703455609045022e-13,
-	2.2204460492503131e-16, -5.5067062021407764e-13,
-	-4.8749893011290624e-13}, /* L848 */
-{8.6384117443105168e+00, 8.1423756626008981e-13,
-	2.2204460492503131e-16, -1.1979306435705439e-13,
-	-1.9528823003156504e-13}, /* L849 */
-{8.6311900880780392e+00, 8.1451512201624610e-13,
-	2.2204460492503131e-16, -7.6494366396673286e-14,
-	-7.2386541205560206e-14}, /* L850 */
-{9.4524238437647128e+00, 8.9306340100847592e-13,
-	2.2204460492503131e-16, 3.5345060211966484e-12,
-	-2.3018253969553371e-12}, /* L851 */
-{1.0380884922594200e+01, 9.8193675412971970e-13,
-	2.2204460492503131e-16, -3.0919711235810610e-13,
-	-1.5487611193520934e-13}, /* L852 */
-{7.7922162797596206e+00, 7.3793748889272592e-13,
-	2.2204460492503131e-16, 8.5331741672689532e-13,
-	-4.5508041779385167e-13}, /* L853 */
-{7.9159960956777988e+00, 7.5053852022222145e-13,
-	2.2204460492503131e-16, -2.1360690993788012e-13,
-	-4.1855408028368402e-14}, /* L854 */
-{9.3924124791664294e+00, 8.9156459992523196e-13,
-	2.2204460492503131e-16, 1.0347278589506459e-12,
-	6.9380057254875283e-12}, /* L855 */
-{1.0174081472279928e+01, 9.6689323214604883e-13,
-	2.2204460492503131e-16, 1.2545520178264269e-13,
-	-8.8040685852774914e-14}, /* L856 */
-{9.4755108655652815e+00, 9.0155660714685837e-13,
-	2.2204460492503131e-16, -1.2656542480726785e-14,
-	5.1514348342607263e-14}, /* L857 */
-{1.0995646718379708e+01, 1.0474121570069883e-12,
-	2.2204460492503131e-16, 2.8359536941024999e-12,
-	7.0328187717905166e-12}, /* L858 */
-{7.0884861544324318e+00, 6.7601479969425782e-13,
-	2.2204460492503131e-16, 3.2063240951174521e-13,
-	-4.4664272280670048e-13}, /* L859 */
-{1.1190715329791459e+01, 1.0684786388992507e-12,
-	2.2204460492503131e-16, -6.4894756235389650e-12,
-	-1.3474776849875525e-12}, /* L860 */
-{9.2468206282597958e+00, 8.8390406105531838e-13,
-	2.2204460492503131e-16, -8.8928864272475039e-14,
-	9.0150109599562711e-14}, /* L861 */
-{1.0117185335504043e+01, 9.6822549977559902e-13,
-	2.2204460492503131e-16, 7.9491968563161208e-14,
-	9.3924867883288243e-14}, /* L862 */
-{1.0208011470247856e+01, 9.7805097354353165e-13,
-	2.2204460492503131e-16, -1.3422596367718143e-13,
-	-1.6153745008296028e-13}, /* L863 */
-{9.9809185247304129e+00, 9.5740082528550374e-13,
-	2.2204460492503131e-16, 2.0472512574087887e-13,
-	-3.3184566206045929e-13}, /* L864 */
-{8.9398984976029592e+00, 8.5853546494263355e-13,
-	2.2204460492503131e-16, 3.1086244689504383e-14,
-	-1.6853185513809876e-13}, /* L865 */
-{9.7477059101764763e+00, 9.3719476623732589e-13,
-	2.2204460492503131e-16, -2.5213164889237305e-13,
-	-8.4265927569049381e-13}, /* L866 */
-{9.3483423152636096e+00, 8.9983576145868938e-13,
-	2.2204460492503131e-16, 1.9095836023552692e-13,
-	-2.3092638912203256e-14}, /* L867 */
-{7.4683297551855281e+00, 7.1970207571325773e-13,
-	2.2204460492503131e-16, 1.5321077739827160e-13,
-	-1.4310774787418268e-13}, /* L868 */
-{8.6553646337650854e+00, 8.3505424797181149e-13,
-	2.2204460492503131e-16, 6.2172489379008766e-14,
-	3.3750779948604759e-14}, /* L869 */
-{8.3734327509362476e+00, 8.0878359565161873e-13,
-	2.2204460492503131e-16, 1.7088552795030409e-12,
-	-2.3353541322990168e-12}, /* L870 */
-{1.1551395951467281e+01, 1.1170231406509856e-12,
-	2.2204460492503131e-16, -5.6177285046032921e-14,
-	-1.8285373215576328e-13}, /* L871 */
-{6.8655498226503484e+00, 6.6466276926746559e-13,
-	2.2204460492503131e-16, 2.9976021664879227e-13,
-	4.5963233219481481e-14}, /* L872 */
-{1.0369432167485062e+01, 1.0050293930419230e-12,
-	2.2204460492503131e-16, -1.8984813721090177e-14,
-	-5.1181281435219717e-14}, /* L873 */
-{8.6479684494530975e+00, 8.3914125648121285e-13,
-	2.2204460492503131e-16, -1.1690648449302898e-13,
-	-2.8643754035329039e-14}, /* L874 */
-{9.3988719714651765e+00, 9.1304741545172874e-13,
-	2.2204460492503131e-16, 1.7013057629355899e-12,
-	1.4468426456915040e-12}, /* L875 */
-{8.4763261585318315e+00, 8.2436835135979436e-13,
-	2.2204460492503131e-16, 8.4021678503631847e-13,
-	2.2051249715104859e-12}, /* L876 */
-{9.3814287121972892e+00, 9.1343599351034754e-13,
-	2.2204460492503131e-16, -1.6531220836668581e-13,
-	7.0987660194532509e-13}, /* L877 */
-{8.5948313277667729e+00, 8.3780204995775875e-13,
-	2.2204460492503131e-16, -7.0443650912466182e-13,
-	-1.0113021531310551e-12}, /* L878 */
-{1.0610084998985544e+01, 1.0354217483410366e-12,
-	2.2204460492503131e-16, -2.3880897259687117e-13,
-	4.3298697960381105e-14}, /* L879 */
-{1.0010527157235810e+01, 9.7802321796791603e-13,
-	2.2204460492503131e-16, -3.0967450825869491e-12,
-	-1.2501111257279263e-12}, /* L880 */
-{7.6895694530491729e+00, 7.5212058803231230e-13,
-	2.2204460492503131e-16, -7.1220807029703792e-13,
-	-2.2426505097428162e-13}, /* L881 */
-{8.3095369195311957e+00, 8.1368245474777723e-13,
-	2.2204460492503131e-16, 8.7929663550312398e-14,
-	2.4691360067663481e-13}, /* L882 */
-{9.8895965768349257e+00, 9.6950225625391795e-13,
-	2.2204460492503131e-16, -6.0729199446996063e-14,
-	-2.6789681584205027e-13}, /* L883 */
-{8.6442444073142859e+00, 8.4837692426731337e-13,
-	2.2204460492503131e-16, 7.5495165674510645e-14,
-	3.7081449022480228e-13}, /* L884 */
-{9.6960604952784930e+00, 9.5268237743084683e-13,
-	2.2204460492503131e-16, -5.0504045390198371e-13,
-	9.7699626167013776e-14}, /* L885 */
-{1.1052006714471835e+01, 1.0871373246068572e-12,
-	2.2204460492503131e-16, -1.3411494137471891e-13,
-	2.4225066397320916e-13}, /* L886 */
-{1.0251425418372760e+01, 1.0095257962916548e-12,
-	2.2204460492503131e-16, 1.0167422459517184e-12,
-	2.0472512574087887e-13}, /* L887 */
-{1.1583351608466337e+01, 1.1419754031294360e-12,
-	2.2204460492503131e-16, 2.0516921495072893e-13,
-	-2.3103741142449508e-13}, /* L888 */
-{1.1014640549975708e+01, 1.0871303857129533e-12,
-	2.2204460492503131e-16, -6.7945649107059580e-14,
-	-1.5387691121304670e-13}, /* L889 */
-{9.7702401336730880e+00, 9.6539443106280487e-13,
-	2.2204460492503131e-16, 1.8829382497642655e-13,
-	-2.0106138975961585e-13}, /* L890 */
-{1.0715785705451658e+01, 1.0600131883364838e-12,
-	2.2204460492503131e-16, -2.9620750296999176e-13,
-	9.5101704289390909e-13}, /* L891 */
-{7.6076353210017702e+00, 7.5339734451063123e-13,
-	2.2204460492503131e-16, 3.8569147875477938e-13,
-	-1.8440804439023850e-13}, /* L892 */
-{8.3379190898436502e+00, 8.2664430856027593e-13,
-	2.2204460492503131e-16, -7.1609385088322597e-14,
-	3.1086244689504383e-15}, /* L893 */
-{8.7883597826723321e+00, 8.7227794431932182e-13,
-	2.2204460492503131e-16, 3.1530333899354446e-13,
-	-1.1468603844377867e-12}, /* L894 */
-{7.8765487397153047e+00, 7.8265172120950410e-13,
-	2.2204460492503131e-16, -2.1834756225302954e-12,
-	9.0549789888427767e-13}, /* L895 */
-{7.3091633174309161e+00, 7.2708505882701502e-13,
-	2.2204460492503131e-16, -2.8410607200157756e-13,
-	-1.5332179970073412e-13}, /* L896 */
-{1.6333359102583998e+01, 1.6265877533783168e-12,
-	2.2204460492503131e-16, -1.4244161405940758e-13,
-	-3.3328895199247199e-13}, /* L897 */
-{9.1506269091671584e+00, 9.1229801491010676e-13,
-	2.2204460492503131e-16, -4.4297898682543746e-14,
-	3.1086244689504383e-14}, /* L898 */
-{9.5895590672040569e+00, 9.5712326952934745e-13,
-	2.2204460492503131e-16, -5.4023452378260117e-13,
-	-1.0524914273446484e-13}, /* L899 */
-{1.0686127970684332e+01, 1.0677569939332443e-12,
-	2.2204460492503131e-16, 9.5701224722688494e-14,
-	6.7723604502134549e-14}, /* L900 */
-{1.2051073397037014e+01, 1.2054801601379950e-12,
-	2.2204460492503131e-16, 1.4588330543574557e-12,
-	1.1164402735630574e-12}, /* L901 */
-{8.2533389636897816e+00, 8.2650553068219779e-13,
-	2.2204460492503131e-16, -3.3639757646142243e-14,
-	3.4794389591752406e-13}, /* L902 */
-{1.0995587668965866e+01, 1.1023404411503179e-12,
-	2.2204460492503131e-16, 1.1968204205459188e-13,
-	-1.2922996006636822e-13}, /* L903 */
-{1.1445814518305125e+01, 1.1487477635796495e-12,
-	2.2204460492503131e-16, 8.8906659811982536e-13,
-	2.1604940059205546e-13}, /* L904 */
-{1.0947703736355882e+01, 1.0999708088821336e-12,
-	2.2204460492503131e-16, 9.6367358537463588e-14,
-	1.0147438445073931e-13}, /* L905 */
-{1.1483461826144907e+01, 1.1550760348200129e-12,
-	2.2204460492503131e-16, -5.7731597280508140e-14,
-	-8.8373752760162461e-14}, /* L906 */
-{1.0890590500790017e+01, 1.0966505481491140e-12,
-	2.2204460492503131e-16, 1.0969003483296547e-13,
-	3.6792791036077688e-13}, /* L907 */
-{1.1563894896316020e+01, 1.1657341758564144e-12,
-	2.2204460492503131e-16, -9.9742436532324064e-13,
-	2.8526070394718772e-12}, /* L908 */
-{9.2915438122499463e+00, 9.3769436659840721e-13,
-	2.2204460492503131e-16, -2.3425705819590803e-14,
-	6.4614980033184111e-14}, /* L909 */
-{9.9934223600767460e+00, 1.0096368185941174e-12,
-	2.2204460492503131e-16, -4.4175774149834979e-13,
-	-6.3349325785111432e-13}, /* L910 */
-{8.4440308851593695e+00, 8.5403906169290167e-13,
-	2.2204460492503131e-16, 7.0567995891224200e-12,
-	5.3539395139523549e-12}, /* L911 */
-{8.8489722943209141e+00, 8.9597773644811696e-13,
-	2.2204460492503131e-16, 4.5785597535541456e-12,
-	6.2172489379008766e-15}, /* L912 */
-{9.0720296470633119e+00, 9.1956997572140153e-13,
-	2.2204460492503131e-16, 1.1302070390684094e-13,
-	4.7761794519374234e-13}, /* L913 */
-{9.7401685399985833e+00, 9.8837604767254561e-13,
-	2.2204460492503131e-16, 9.4591001698063337e-14,
-	-3.2862601528904634e-14}, /* L914 */
-{9.9557534121727329e+00, 1.0113576642822864e-12,
-	2.2204460492503131e-16, 4.6074255521943996e-13,
-	-1.2623235789988030e-13}, /* L915 */
-{9.9339676377992436e+00, 1.0102474412576612e-12,
-	2.2204460492503131e-16, -3.8113956435381624e-13,
-	4.3411940708892871e-12}, /* L916 */
-{9.8583852373942786e+00, 1.0036554920489493e-12,
-	2.2204460492503131e-16, 8.7707618945387367e-14,
-	1.6520118606422329e-13}, /* L917 */
-{6.9150435895278655e+00, 7.0476957603204937e-13,
-	2.2204460492503131e-16, 3.7541081354675043e-12,
-	9.8039354412549073e-12}, /* L918 */
-{9.1409284586791273e+00, 9.3264285183636275e-13,
-	2.2204460492503131e-16, -3.5293989952833726e-13,
-	6.0329519158131006e-13}, /* L919 */
-{8.2440347457951333e+00, 8.4204865302694998e-13,
-	2.2204460492503131e-16, -1.9317880628477724e-14,
-	5.9219296133505850e-13}, /* L920 */
-{8.7665719200691949e+00, 8.9639407008235139e-13,
-	2.2204460492503131e-16, 7.6805228843568329e-13,
-	-1.5285550603039155e-12}, /* L921 */
-{1.3183046829353204e+01, 1.3494483308562621e-12,
-	2.2204460492503131e-16, -1.7175150190951172e-13,
-	-2.4069635173873394e-13}, /* L922 */
-{7.8840861115702161e+00, 8.0790929501972641e-13,
-	2.2204460492503131e-16, 4.6296300126869028e-13,
-	8.7574392182432348e-13}, /* L923 */
-{1.0159648063539786e+01, 1.0422218643668657e-12,
-	2.2204460492503131e-16, 1.7035262089848402e-12,
-	1.9646506643766770e-12}, /* L924 */
-{9.3373627045941827e+00, 9.5890483053917563e-13,
-	2.2204460492503131e-16, -1.4432899320127035e-15,
-	3.0908609005564358e-13}, /* L925 */
-{1.1461141192473828e+01, 1.1782796960346786e-12,
-	2.2204460492503131e-16, -2.9198865547641617e-14,
-	-1.6209256159527285e-14}, /* L926 */
-{8.1553526725774024e+00, 8.3932860661661834e-13,
-	2.2204460492503131e-16, 2.7600144392181392e-13,
-	-1.5198953207118393e-13}, /* L927 */
-{1.1797432405991961e+01, 1.2154721673596214e-12,
-	2.2204460492503131e-16, 4.4408920985006262e-16,
-	2.7378099787256360e-13}, /* L928 */
-{1.2446601983679299e+01, 1.2837370055862607e-12,
-	2.2204460492503131e-16, 1.2194689702482719e-12,
-	-5.8930638147103309e-13}, /* L929 */
-{1.0972597956641225e+01, 1.1329270854787410e-12,
-	2.2204460492503131e-16, -6.4726002335646626e-14,
-	-3.8413716652030416e-14}, /* L930 */
-{8.4867212305868307e+00, 8.7720108954414400e-13,
-	2.2204460492503131e-16, 2.1338486533295509e-13,
-	1.6608936448392342e-13}, /* L931 */
-{8.2976257519751879e+00, 8.5857709830605700e-13,
-	2.2204460492503131e-16, -2.8654856265575290e-13,
-	3.1539215683551447e-12}, /* L932 */
-{8.4158760859262802e+00, 8.7174711893567292e-13,
-	2.2204460492503131e-16, -3.3262281817769690e-13,
-	-6.9277916736609768e-14}, /* L933 */
-{7.8434277921854898e+00, 8.1332163226477405e-13,
-	2.2204460492503131e-16, -3.5282887722587475e-13,
-	1.7541523789077473e-14}, /* L934 */
-{9.0887843929102257e+00, 9.4346752632645803e-13,
-	2.2204460492503131e-16, -3.2751579226442118e-14,
-	-2.2726265314076954e-13}, /* L935 */
-{1.0544354242370568e+01, 1.0957346141537982e-12,
-	2.2204460492503131e-16, -1.5971668432257502e-12,
-	9.5525809484797719e-12}, /* L936 */
-{1.2002153407532481e+01, 1.2485568134934510e-12,
-	2.2204460492503131e-16, -2.7677860003905153e-13,
-	1.9140244944537699e-13}, /* L937 */
-{1.0679121326131190e+01, 1.1121104037670193e-12,
-	2.2204460492503131e-16, 4.5630166312093934e-13,
-	-9.1038288019262836e-15}, /* L938 */
-{8.6105034677008874e+00, 8.9764307098505469e-13,
-	2.2204460492503131e-16, -2.7955415760061442e-13,
-	7.9714013168086240e-14}, /* L939 */
-{1.1961986957574991e+01, 1.2483625244641416e-12,
-	2.2204460492503131e-16, 8.3333340228364250e-13,
-	7.0343730840249918e-13}, /* L940 */
-{9.7957115227728142e+00, 1.0233758285238537e-12,
-	2.2204460492503131e-16, 0.0000000000000000e+00,
-	1.8429702208777599e-13}, /* L941 */
-{9.6942828106406189e+00, 1.0138556660876930e-12,
-	2.2204460492503131e-16, 1.2727596754302795e-12,
-	3.7503333771837788e-13}, /* L942 */
-{1.1678438361510514e+01, 1.2226608614440693e-12,
-	2.2204460492503131e-16, 4.9293902293356950e-13,
-	-9.4368957093138306e-15}, /* L943 */
-{1.1382962874235105e+01, 1.1929901511109620e-12,
-	2.2204460492503131e-16, -7.1165295878472534e-14,
-	-6.9499961341534799e-14}, /* L944 */
-{1.0870122969975602e+01, 1.1404488464705764e-12,
-	2.2204460492503131e-16, -1.3544720900426910e-14,
-	-5.6177285046032921e-14}, /* L945 */
-{9.2796002062085865e+00, 9.7460928216719367e-13,
-	2.2204460492503131e-16, -8.7707618945387367e-14,
-	8.5487172896137054e-14}, /* L946 */
-{1.0106126670570916e+01, 1.0625389457175061e-12,
-	2.2204460492503131e-16, 3.6415315207705135e-14,
-	2.8643754035329039e-14}, /* L947 */
-{1.1722839949838484e+01, 1.2338186028415521e-12,
-	2.2204460492503131e-16, -1.5605294834131200e-12,
-	-6.5569771834361745e-13}, /* L948 */
-{9.6217090275652115e+00, 1.0137446437852304e-12,
-	2.2204460492503131e-16, -2.0650148258027912e-14,
-	-4.3742787170231168e-13}, /* L949 */
-{9.8484230664083778e+00, 1.0387246618392965e-12,
-	2.2204460492503131e-16, -4.6036507939106741e-12,
-	7.0070615976192130e-12}, /* L950 */
-{1.0046794904055520e+01, 1.0607625888781058e-12,
-	2.2204460492503131e-16, -1.5165646516379638e-13,
-	-2.0738966099997924e-13}, /* L951 */
-{1.0820380363868004e+01, 1.1436407376663738e-12,
-	2.2204460492503131e-16, 3.6415315207705135e-13,
-	6.2350125062948791e-13}, /* L952 */
-{9.1112295650738790e+00, 9.6400665228202342e-13,
-	2.2204460492503131e-16, 1.9020340857878182e-12,
-	-4.5363712786183896e-13}, /* L953 */
-{9.4846062371189124e+00, 1.0045644871503612e-12,
-	2.2204460492503131e-16, -4.2077452633293433e-13,
-	1.4934720127257606e-12}, /* L954 */
-{1.1103667191997831e+01, 1.1772804953125160e-12,
-	2.2204460492503131e-16, 8.0380146982861334e-14,
-	1.3287149158713873e-12}, /* L955 */
-{8.7175750043242175e+00, 9.2525986872260546e-13,
-	2.2204460492503131e-16, -3.1419311596891930e-12,
-	1.1222134332911082e-12}, /* L956 */
-{1.0557473423221234e+01, 1.1217138329300269e-12,
-	2.2204460492503131e-16, -6.6613381477509392e-16,
-	4.1966430330830917e-14}, /* L957 */
-{9.7466095086920035e+00, 1.0366429936681243e-12,
-	2.2204460492503131e-16, -9.4146912488213275e-14,
-	5.9441340738430881e-13}, /* L958 */
-{9.0328485624150652e+00, 9.6173069508154185e-13,
-	2.2204460492503131e-16, -2.6578739209526248e-13,
-	-1.8540724511240114e-14}, /* L959 */
-{1.3895315341380449e+01, 1.4809820036987276e-12,
-	2.2204460492503131e-16, 2.5313084961453569e-14,
-	-8.1934459217336553e-13}, /* L960 */
-{9.0323849033783770e+00, 9.6368692106135745e-13,
-	2.2204460492503131e-16, -8.1379347705023974e-14,
-	-1.5543122344752192e-14}, /* L961 */
-{1.0350833717431327e+01, 1.1055045767704996e-12,
-	2.2204460492503131e-16, 2.2470914018413168e-13,
-	3.4638958368304884e-14}, /* L962 */
-{1.0921406698471406e+01, 1.1676562494677967e-12,
-	2.2204460492503131e-16, -2.1549428907974288e-13,
-	-1.4588330543574557e-13}, /* L963 */
-{1.2189317845236090e+01, 1.3045675650857902e-12,
-	2.2204460492503131e-16, -1.8274270985330077e-13,
-	-9.3591800975900696e-14}, /* L964 */
-{7.9318669069267802e+00, 8.4979245862371044e-13,
-	2.2204460492503131e-16, -2.4513724383723456e-13,
-	-6.4392935428259079e-15}, /* L965 */
-{1.1130954656834399e+01, 1.1937673072281996e-12,
-	2.2204460492503131e-16, 2.9378721677630892e-12,
-	2.2382096176443156e-13}, /* L966 */
-{9.2362997170224350e+00, 9.9159569444395856e-13,
-	2.2204460492503131e-16, -2.5746071941057380e-13,
-	-2.8288482667448989e-13}, /* L967 */
-{9.4284626717711593e+00, 1.0132727989997647e-12,
-	2.2204460492503131e-16, -6.6058269965196814e-14,
-	-2.2026824808563106e-13}, /* L968 */
-{1.3707054208983855e+01, 1.4746129664566787e-12,
-	2.2204460492503131e-16, -1.5765166949677223e-14,
-	-1.6686652060116103e-13}, /* L969 */
-{1.1446909557221781e+01, 1.2327361353925426e-12,
-	2.2204460492503131e-16, 2.9087843245179101e-13,
-	-9.3924867883288243e-14}, /* L970 */
-{9.8254557939041192e+00, 1.0592100113671066e-12,
-	2.2204460492503131e-16, -2.3414603589344551e-13,
-	-5.8053561957649435e-13}, /* L971 */
-{1.3618315541931494e+01, 1.4696022176963197e-12,
-	2.2204460492503131e-16, -5.4212190292446394e-13,
-	8.7885254629327392e-13}, /* L972 */
-{9.6459423629827103e+00, 1.0419998197619407e-12,
-	2.2204460492503131e-16, 5.7265303610165574e-13,
-	1.1057821325266559e-13}, /* L973 */
-{1.0501157178135733e+01, 1.1355499873744179e-12,
-	2.2204460492503131e-16, -5.5877524829384129e-13,
-	-1.0202949596305189e-13}, /* L974 */
-{1.0316412365958021e+01, 1.1167178293192137e-12,
-	2.2204460492503131e-16, -8.0202511298921308e-13,
-	-1.6386891843467311e-13}, /* L975 */
-{1.0151641420129716e+01, 1.1000089727986051e-12,
-	2.2204460492503131e-16, 6.5281113847959205e-14,
-	-4.3853809472693683e-14}, /* L976 */
-{8.7379751747128793e+00, 9.4779739612249614e-13,
-	2.2204460492503131e-16, 1.3944401189291966e-13,
-	-1.5021317523178368e-13}, /* L977 */
-{9.8126298184019856e+00, 1.0654532811571471e-12,
-	2.2204460492503131e-16, -1.7419399256368706e-13,
-	5.8841820305133297e-14}, /* L978 */
-{1.3239532840079457e+01, 1.4390155733678966e-12,
-	2.2204460492503131e-16, 1.7763568394002505e-14,
-	-6.1384231031524905e-13}, /* L979 */
-{1.1041838992514464e+01, 1.2013723349468819e-12,
-	2.2204460492503131e-16, -2.6681989950816387e-12,
-	3.2820413053968878e-12}, /* L980 */
-{1.1217127676006534e+01, 1.2216894162975223e-12,
-	2.2204460492503131e-16, 1.1501910535116622e-13,
-	1.3478107518949400e-13}, /* L981 */
-{8.4791259700988419e+00, 9.2442720145413659e-13,
-	2.2204460492503131e-16, -5.9985350020497208e-13,
-	-1.2619905120914154e-12}, /* L982 */
-{1.1448628994182879e+01, 1.2494449919131512e-12,
-	2.2204460492503131e-16, -1.1202150318467829e-13,
-	1.7430501486614958e-13}, /* L983 */
-{1.1029981930261446e+01, 1.2049805597769137e-12,
-	2.2204460492503131e-16, -1.2145839889399213e-13,
-	3.9146463848283020e-13}, /* L984 */
-{1.0919799187059123e+01, 1.1941558852868184e-12,
-	2.2204460492503131e-16, -8.9867002728283296e-12,
-	1.9659829320062272e-12}, /* L985 */
-{1.0241064467376354e+01, 1.1210685157969635e-12,
-	2.2204460492503131e-16, 1.0524914273446484e-13,
-	1.5543122344752192e-15}, /* L986 */
-{8.4549156093491824e+00, 9.2648111404969313e-13,
-	2.2204460492503131e-16, 2.2204460492503131e-14,
-	2.9642954757491680e-13}, /* L987 */
-{8.8208520061643405e+00, 9.6755936596082392e-13,
-	2.2204460492503131e-16, -1.5387691121304670e-13,
-	-1.0547118733938987e-13}, /* L988 */
-{1.2405652182886818e+01, 1.3621534455943163e-12,
-	2.2204460492503131e-16, 2.3092638912203256e-13,
-	-3.3317792969000948e-13}, /* L989 */
-{1.1107578028891034e+01, 1.2208567490290534e-12,
-	2.2204460492503131e-16, 9.7477581562088744e-14,
-	1.2891909761947318e-12}, /* L990 */
-{9.0343106263842223e+00, 9.9398267394690265e-13,
-	2.2204460492503131e-16, 1.0991207943789050e-13,
-	-7.0699002208129968e-13}, /* L991 */
-{1.0284024280353442e+01, 1.1326217741469691e-12,
-	2.2204460492503131e-16, 2.0206059048177849e-14,
-	-9.2814644858663087e-14}, /* L992 */
-{8.8851981913937248e+00, 9.7954977462677562e-13,
-	2.2204460492503131e-16, 7.1187500338965037e-12,
-	-1.6326939800137552e-12}, /* L993 */
-{1.4001260408274808e+01, 1.5451251389464460e-12,
-	2.2204460492503131e-16, -1.1400880239875733e-12,
-	2.9931612743894220e-13}, /* L994 */
-{1.0292841300706829e+01, 1.1370210328820463e-12,
-	2.2204460492503131e-16, 4.5785597535541456e-13,
-	6.2683191970336338e-13}, /* L995 */
-{1.3936749837815491e+01, 1.5411005804821798e-12,
-	2.2204460492503131e-16, 8.9039886574937555e-14,
-	-1.4277468096679513e-13}, /* L996 */
-{1.1541251106258247e+01, 1.2774920010727442e-12,
-	2.2204460492503131e-16, -6.0063065632220969e-13,
-	1.4388490399142029e-13}, /* L997 */
-{9.9814649669206350e+00, 1.1059486659803497e-12,
-	2.2204460492503131e-16, -1.7119639039719914e-13,
-	1.5809575870662229e-13}, /* L998 */
-{1.0939629364123027e+01, 1.2133280491433140e-12,
-	2.2204460492503131e-16, -9.5368157815300947e-14,
-	3.7747582837255322e-15}, /* L999 */
-{7.8078765965996340e+00, 8.6684825983951441e-13,
-	2.2204460492503131e-16, 7.5495165674510645e-15,
-	1.6742163211347361e-13}, /* L1000 */
-{2.3549019000387378e+01, 5.2289318708265142e-12,
-	2.2204460492503131e-16, -8.9506180245280120e-12,
-	4.1280312501612570e-12}, /* L1001 */
-{2.6398000009078743e+01, 8.7923002212164647e-12,
-	2.2204460492503131e-16, -1.3117951169761000e-11,
-	4.6029846600958990e-13}, /* L1002 */
-{3.7420692245374873e+01, 1.6684598147520546e-11,
-	2.2204460492503131e-16, 1.1437517599688363e-12,
-	-5.7873705827660160e-12}, /* L1003 */
-{5.0393900018547960e+01, 2.7974234040328838e-11,
-	2.2204460492503131e-16, -3.7119196605317484e-12,
-	-3.6116665214080967e-12}, /* L1004 */
-{6.4066354190196932e+01, 4.2676764899773900e-11,
-	2.2204460492503131e-16, 1.0669243266647754e-11,
-	7.3929751209789174e-12}, /* L1005 */
-{6.9029432745783822e+01, 5.3769266816772188e-11,
-	2.2204460492503131e-16, -3.2964631024867685e-11,
-	-2.3945401217417839e-11}, /* L1006 */
-{6.0884428697543100e+01, 5.4306059649178451e-11,
-	2.2204460492503131e-16, 1.2041700969689373e-11,
-	-7.6226802647738623e-12}, /* L1007 */
-{8.9131121164442703e+01, 8.9059880997721663e-11,
-	2.2204460492503131e-16, -8.1148754382809329e-11,
-	8.6431484191962227e-10}, /* L1008 */
-{1.0694525002117500e+02, 1.1873307892429352e-10,
-	2.2204460492503131e-16, -4.3724246445719928e-11,
-	2.0131674105527964e-11}, /* L1009 */
-
-#else  /* }  { */
-
-/* Start of SP golden values */
-
-
-{0.0000000000000000e+00, 0.0000000000000000e+00,
-	0.0000000000000000e+00, 0.0000000000000000e+00,
-	0.0000000000000000e+00}, /* L1010 */
-{0.0000000000000000e+00, 0.0000000000000000e+00,
-	1.1920928955078125e-07, 0.0000000000000000e+00,
-	0.0000000000000000e+00}, /* L1011 */
-{0.0000000000000000e+00, 0.0000000000000000e+00,
-	1.1920928955078125e-07, 0.0000000000000000e+00,
-	0.0000000000000000e+00}, /* L1012 */
-{6.8018096685409546e-01, 1.1920928955078125e-07,
-	1.1920928955078125e-07, -5.9604644775390625e-08,
-	-1.1920928955078125e-07}, /* L1013 */
-{8.9273703098297119e-01, 2.0861625671386719e-07,
-	1.1920928955078125e-07, -1.1920928955078125e-07,
-	-2.3841857910156250e-07}, /* L1014 */
-{7.1418994665145874e-01, 2.0861625671386719e-07,
-	1.1920928955078125e-07, -5.9604644775390625e-08,
-	1.1920928955078125e-07}, /* L1015 */
-{3.6134567856788635e-01, 1.2665987014770508e-07,
-	1.1920928955078125e-07, 2.3841857910156250e-07,
-	7.1525573730468750e-07}, /* L1016 */
-{4.3648514151573181e-01, 1.7881393432617188e-07,
-	1.1920928955078125e-07, -5.9604644775390625e-08,
-	3.5762786865234375e-07}, /* L1017 */
-{4.7549185156822205e-01, 2.2351741790771484e-07,
-	1.1920928955078125e-07, 3.6954879760742188e-06,
-	-5.9604644775390625e-07}, /* L1018 */
-{4.2266038060188293e-01, 2.2351741790771484e-07,
-	1.1920928955078125e-07, 4.7683715820312500e-07,
-	8.3446502685546875e-07}, /* L1019 */
-{4.0575435757637024e-01, 2.3841857910156250e-07,
-	1.1920928955078125e-07, 3.5762786865234375e-07,
-	3.5762786865234375e-07}, /* L1020 */
-{3.2275927066802979e-01, 2.0861625671386719e-07,
-	1.1920928955078125e-07, -1.1920928955078125e-07,
-	1.1920928955078125e-07}, /* L1021 */
-{2.9586255550384521e-01, 2.0861625671386719e-07,
-	1.1920928955078125e-07, -1.1920928955078125e-07,
-	-2.3841857910156250e-07}, /* L1022 */
-{7.8410917520523071e-01, 6.0349702835083008e-07,
-	1.1920928955078125e-07, 7.1525573730468750e-07,
-	-7.1525573730468750e-07}, /* L1023 */
-{3.5955643653869629e-01, 2.9802322387695312e-07,
-	1.1920928955078125e-07, -3.5762786865234375e-07,
-	-3.5762786865234375e-07}, /* L1024 */
-{4.0270313620567322e-01, 3.5762786865234375e-07,
-	1.1920928955078125e-07, -2.3841857910156250e-07,
-	3.5762786865234375e-07}, /* L1025 */
-{2.9888099431991577e-01, 2.8312206268310547e-07,
-	1.1920928955078125e-07, -7.1525573730468750e-07,
-	-1.1920928955078125e-07}, /* L1026 */
-{5.8850812911987305e-01, 5.9232115745544434e-07,
-	1.1920928955078125e-07, -1.7285346984863281e-06,
-	3.5762786865234375e-07}, /* L1027 */
-{5.0337857007980347e-01, 5.3644180297851562e-07,
-	1.1920928955078125e-07, -4.7683715820312500e-07,
-	-4.7683715820312500e-07}, /* L1028 */
-{4.5867058634757996e-01, 5.1595270633697510e-07,
-	1.1920928955078125e-07, 7.1525573730468750e-07,
-	-1.2516975402832031e-06}, /* L1029 */
-{4.7820881009101868e-01, 5.6624412536621094e-07,
-	1.1920928955078125e-07, 0.0000000000000000e+00,
-	-1.0728836059570312e-06}, /* L1030 */
-{9.7883027791976929e-01, 1.2218952178955078e-06,
-	1.1920928955078125e-07, 8.3446502685546875e-07,
-	2.3841857910156250e-07}, /* L1031 */
-{4.2159116268157959e-01, 5.5134296417236328e-07,
-	1.1920928955078125e-07, -2.6822090148925781e-06,
-	-8.9406967163085938e-07}, /* L1032 */
-{5.0135254859924316e-01, 6.8545341491699219e-07,
-	1.1920928955078125e-07, 1.1920928955078125e-07,
-	-1.7881393432617188e-07}, /* L1033 */
-{1.0027021169662476e+00, 1.4305114746093750e-06,
-	1.1920928955078125e-07, -3.6954879760742188e-06,
-	-2.3841857910156250e-07}, /* L1034 */
-{7.2194659709930420e-01, 1.0728836059570312e-06,
-	1.1920928955078125e-07, -5.3644180297851562e-07,
-	4.7683715820312500e-07}, /* L1035 */
-{3.9529633522033691e-01, 6.1094760894775391e-07,
-	1.1920928955078125e-07, -1.6093254089355469e-06,
-	1.1920928955078125e-07}, /* L1036 */
-{5.9419322013854980e-01, 9.5367431640625000e-07,
-	1.1920928955078125e-07, 2.2649765014648438e-06,
-	0.0000000000000000e+00}, /* L1037 */
-{5.9087789058685303e-01, 9.8347663879394531e-07,
-	1.1920928955078125e-07, 2.2649765014648438e-06,
-	-2.9802322387695312e-06}, /* L1038 */
-{6.3101136684417725e-01, 1.0877847671508789e-06,
-	1.1920928955078125e-07, 2.3841857910156250e-07,
-	1.1920928955078125e-06}, /* L1039 */
-{1.1363973617553711e+00, 2.0265579223632812e-06,
-	1.1920928955078125e-07, -5.9604644775390625e-07,
-	2.3841857910156250e-07}, /* L1040 */
-{5.0943696498870850e-01, 9.3877315521240234e-07,
-	1.1920928955078125e-07, 2.8610229492187500e-06,
-	-3.1590461730957031e-06}, /* L1041 */
-{9.7332048416137695e-01, 1.8514692783355713e-06,
-	1.1920928955078125e-07, -5.9604644775390625e-07,
-	7.2717666625976562e-06}, /* L1042 */
-{8.8116312026977539e-01, 1.7285346984863281e-06,
-	1.1920928955078125e-07, 1.0728836059570312e-06,
-	-1.0132789611816406e-06}, /* L1043 */
-{1.0469392538070679e+00, 2.1159648895263672e-06,
-	1.1920928955078125e-07, 0.0000000000000000e+00,
-	-1.7285346984863281e-06}, /* L1044 */
-{6.3979321718215942e-01, 1.3336539268493652e-06,
-	1.1920928955078125e-07, -1.1920928955078125e-07,
-	1.4305114746093750e-06}, /* L1045 */
-{1.0980664491653442e+00, 2.3543834686279297e-06,
-	1.1920928955078125e-07, 2.6583671569824219e-05,
-	-2.1398067474365234e-05}, /* L1046 */
-{7.8947657346725464e-01, 1.7397105693817139e-06,
-	1.1920928955078125e-07, 3.3378601074218750e-06,
-	-1.5497207641601562e-06}, /* L1047 */
-{1.1061322689056396e+00, 2.5033950805664062e-06,
-	1.1920928955078125e-07, 3.0994415283203125e-06,
-	1.1920928955078125e-07}, /* L1048 */
-{1.2958996295928955e+00, 3.0100345611572266e-06,
-	1.1920928955078125e-07, -5.9604644775390625e-08,
-	-1.6689300537109375e-06}, /* L1049 */
-{6.1920803785324097e-01, 1.4752149581909180e-06,
-	1.1920928955078125e-07, -1.9490718841552734e-05,
-	4.4703483581542969e-05}, /* L1050 */
-{9.3974453210830688e-01, 2.2947788238525391e-06,
-	1.1920928955078125e-07, -1.4066696166992188e-05,
-	-1.3649463653564453e-05}, /* L1051 */
-{5.5696403980255127e-01, 1.3932585716247559e-06,
-	1.1920928955078125e-07, -5.9604644775390625e-06,
-	7.5101852416992188e-06}, /* L1052 */
-{5.8767557144165039e-01, 1.5050172805786133e-06,
-	1.1920928955078125e-07, 2.7418136596679688e-06,
-	-1.3113021850585938e-06}, /* L1053 */
-{9.4389802217483521e-01, 2.4735927581787109e-06,
-	1.1920928955078125e-07, -1.6808509826660156e-05,
-	9.0599060058593750e-06}, /* L1054 */
-{9.3407374620437622e-01, 2.5033950805664062e-06,
-	1.1920928955078125e-07, -7.7486038208007812e-07,
-	-6.1392784118652344e-06}, /* L1055 */
-{1.6670787334442139e+00, 4.5672059059143066e-06,
-	1.1920928955078125e-07, -3.7550926208496094e-06,
-	-2.0265579223632812e-06}, /* L1056 */
-{6.6008597612380981e-01, 1.8477439880371094e-06,
-	1.1920928955078125e-07, 0.0000000000000000e+00,
-	5.9604644775390625e-07}, /* L1057 */
-{9.2781543731689453e-01, 2.6524066925048828e-06,
-	1.1920928955078125e-07, -4.8875808715820312e-06,
-	-1.0728836059570312e-06}, /* L1058 */
-{8.6735057830810547e-01, 2.5331974029541016e-06,
-	1.1920928955078125e-07, 6.6757202148437500e-06,
-	-1.1324882507324219e-06}, /* L1059 */
-{8.6625766754150391e-01, 2.5816261768341064e-06,
-	1.1920928955078125e-07, -1.7881393432617188e-06,
-	-3.2186508178710938e-06}, /* L1060 */
-{1.0391687154769897e+00, 3.1590461730957031e-06,
-	1.1920928955078125e-07, 7.2717666625976562e-06,
-	-2.1994113922119141e-05}, /* L1061 */
-{1.0913528203964233e+00, 3.3825635910034180e-06,
-	1.1920928955078125e-07, 4.7683715820312500e-07,
-	3.5762786865234375e-07}, /* L1062 */
-{1.2523679733276367e+00, 3.9562582969665527e-06,
-	1.1920928955078125e-07, -5.1856040954589844e-06,
-	1.9073486328125000e-06}, /* L1063 */
-{6.2963581085205078e-01, 2.0265579223632812e-06,
-	1.1920928955078125e-07, 9.5367431640625000e-07,
-	4.7683715820312500e-07}, /* L1064 */
-{5.0682407617568970e-01, 1.6614794731140137e-06,
-	1.1920928955078125e-07, 4.7683715820312500e-07,
-	9.5367431640625000e-07}, /* L1065 */
-{1.0089418888092041e+00, 3.3676624298095703e-06,
-	1.1920928955078125e-07, -5.9604644775390625e-08,
-	-1.0132789611816406e-06}, /* L1066 */
-{1.5701940059661865e+00, 5.3346157073974609e-06,
-	1.1920928955078125e-07, 1.4305114746093750e-06,
-	-3.3378601074218750e-06}, /* L1067 */
-{1.4263415336608887e+00, 4.9322843551635742e-06,
-	1.1920928955078125e-07, -1.3816356658935547e-04,
-	-7.9035758972167969e-05}, /* L1068 */
-{1.3898396492004395e+00, 4.8875808715820312e-06,
-	1.1920928955078125e-07, -8.0466270446777344e-06,
-	-4.9471855163574219e-06}, /* L1069 */
-{9.5001077651977539e-01, 3.3974647521972656e-06,
-	1.1920928955078125e-07, 9.5367431640625000e-07,
-	1.5497207641601562e-06}, /* L1070 */
-{1.0409712791442871e+00, 3.7848949432373047e-06,
-	1.1920928955078125e-07, 1.4543533325195312e-05,
-	2.7179718017578125e-05}, /* L1071 */
-{1.2903363704681396e+00, 4.7683715820312500e-06,
-	1.1920928955078125e-07, -4.7683715820312500e-07,
-	-8.3446502685546875e-07}, /* L1072 */
-{7.7579402923583984e-01, 2.9131770133972168e-06,
-	1.1920928955078125e-07, -2.2053718566894531e-06,
-	1.9073486328125000e-06}, /* L1073 */
-{1.9140597581863403e+00, 7.3015689849853516e-06,
-	1.1920928955078125e-07, 4.7683715820312500e-06,
-	-1.1086463928222656e-05}, /* L1074 */
-{1.0586640834808350e+00, 4.1015446186065674e-06,
-	1.1920928955078125e-07, 1.1920928955078125e-06,
-	-4.7683715820312500e-07}, /* L1075 */
-{1.0454654693603516e+00, 4.1127204895019531e-06,
-	1.1920928955078125e-07, -2.4437904357910156e-06,
-	1.9073486328125000e-06}, /* L1076 */
-{9.0949100255966187e-01, 3.6321580410003662e-06,
-	1.1920928955078125e-07, 1.0251998901367188e-05,
-	-4.5299530029296875e-06}, /* L1077 */
-{8.6765336990356445e-01, 3.5166740417480469e-06,
-	1.1920928955078125e-07, -1.7881393432617188e-07,
-	1.1920928955078125e-06}, /* L1078 */
-{1.6591906547546387e+00, 6.8247318267822266e-06,
-	1.1920928955078125e-07, -6.3300132751464844e-05,
-	-1.5711784362792969e-04}, /* L1079 */
-{1.5803515911102295e+00, 6.5937638282775879e-06,
-	1.1920928955078125e-07, 6.4373016357421875e-06,
-	3.5762786865234375e-07}, /* L1080 */
-{1.5871639251708984e+00, 6.7166984081268311e-06,
-	1.1920928955078125e-07, -8.3446502685546875e-07,
-	-1.0728836059570312e-06}, /* L1081 */
-{1.5208110809326172e+00, 6.5267086029052734e-06,
-	1.1920928955078125e-07, -1.9907951354980469e-05,
-	-1.5854835510253906e-05}, /* L1082 */
-{1.4109665155410767e+00, 6.1392784118652344e-06,
-	1.1920928955078125e-07, -5.9604644775390625e-07,
-	4.7683715820312500e-07}, /* L1083 */
-{1.6604399681091309e+00, 7.3239207267761230e-06,
-	1.1920928955078125e-07, -8.6426734924316406e-06,
-	-1.0132789611816406e-05}, /* L1084 */
-{1.6600131988525391e+00, 7.4207782745361328e-06,
-	1.1920928955078125e-07, 1.5497207641601562e-06,
-	2.3841857910156250e-07}, /* L1085 */
-{1.0657552480697632e+00, 4.8279762268066406e-06,
-	1.1920928955078125e-07, -2.7596950531005859e-05,
-	-2.5689601898193359e-05}, /* L1086 */
-{9.7807997465133667e-01, 4.4889748096466064e-06,
-	1.1920928955078125e-07, -7.7486038208007812e-07,
-	-1.1920928955078125e-07}, /* L1087 */
-{1.1570127010345459e+00, 5.3793191909790039e-06,
-	1.1920928955078125e-07, 3.0994415283203125e-06,
-	-2.9563903808593750e-05}, /* L1088 */
-{1.4557089805603027e+00, 6.8545341491699219e-06,
-	1.1920928955078125e-07, 3.5762786865234375e-07,
-	4.7683715820312500e-07}, /* L1089 */
-{1.1683254241943359e+00, 5.5730342864990234e-06,
-	1.1920928955078125e-07, -1.6516447067260742e-04,
-	-4.8935413360595703e-05}, /* L1090 */
-{1.2592644691467285e+00, 6.0796737670898438e-06,
-	1.1920928955078125e-07, -4.1723251342773438e-07,
-	7.1525573730468750e-07}, /* L1091 */
-{1.0975710153579712e+00, 5.3644180297851562e-06,
-	1.1920928955078125e-07, -1.6689300537109375e-06,
-	-3.7550926208496094e-06}, /* L1092 */
-{2.2108526229858398e+00, 1.0937452316284180e-05,
-	1.1920928955078125e-07, -1.1324882507324219e-06,
-	-1.2516975402832031e-06}, /* L1093 */
-{2.0297622680664062e+00, 1.0162591934204102e-05,
-	1.1920928955078125e-07, 1.5139579772949219e-05,
-	-4.1723251342773438e-06}, /* L1094 */
-{1.5676014423370361e+00, 7.9423189163208008e-06,
-	1.1920928955078125e-07, 4.8875808715820312e-06,
-	1.5497207641601562e-06}, /* L1095 */
-{1.3372215032577515e+00, 6.8545341491699219e-06,
-	1.1920928955078125e-07, -7.7486038208007812e-07,
-	4.7683715820312500e-06}, /* L1096 */
-{1.4568958282470703e+00, 7.5548887252807617e-06,
-	1.1920928955078125e-07, 1.9073486328125000e-06,
-	3.9339065551757812e-06}, /* L1097 */
-{1.2471650838851929e+00, 6.5416097640991211e-06,
-	1.1920928955078125e-07, -5.3644180297851562e-07,
-	-2.9802322387695312e-07}, /* L1098 */
-{1.0786615610122681e+00, 5.7220458984375000e-06,
-	1.1920928955078125e-07, -2.6822090148925781e-06,
-	0.0000000000000000e+00}, /* L1099 */
-{1.4416582584381104e+00, 7.7337026596069336e-06,
-	1.1920928955078125e-07, 1.7404556274414062e-05,
-	8.8214874267578125e-06}, /* L1100 */
-{1.2912023067474365e+00, 7.0035457611083984e-06,
-	1.1920928955078125e-07, 6.0796737670898438e-06,
-	1.4543533325195312e-05}, /* L1101 */
-{1.4266119003295898e+00, 7.8231096267700195e-06,
-	1.1920928955078125e-07, -1.8596649169921875e-05,
-	-5.9604644775390625e-08}, /* L1102 */
-{1.0443524122238159e+00, 5.7891011238098145e-06,
-	1.1920928955078125e-07, 9.0599060058593750e-06,
-	1.9073486328125000e-06}, /* L1103 */
-{8.7233221530914307e-01, 4.8875808715820312e-06,
-	1.1920928955078125e-07, -6.9737434387207031e-06,
-	2.2649765014648438e-06}, /* L1104 */
-{1.5466986894607544e+00, 8.7581574916839600e-06,
-	1.1920928955078125e-07, -1.6450881958007812e-05,
-	1.1801719665527344e-05}, /* L1105 */
-{1.8489117622375488e+00, 1.0579824447631836e-05,
-	1.1920928955078125e-07, 1.0013580322265625e-05,
-	2.3841857910156250e-07}, /* L1106 */
-{2.1134092807769775e+00, 1.2218952178955078e-05,
-	1.1920928955078125e-07, -1.3113021850585938e-06,
-	1.1920928955078125e-06}, /* L1107 */
-{1.0867348909378052e+00, 6.3478946685791016e-06,
-	1.1920928955078125e-07, -1.8477439880371094e-06,
-	-7.2717666625976562e-06}, /* L1108 */
-{1.6565171480178833e+00, 9.7751617431640625e-06,
-	1.1920928955078125e-07, -6.5565109252929688e-06,
-	7.2717666625976562e-06}, /* L1109 */
-{1.5700103044509888e+00, 9.3579292297363281e-06,
-	1.1920928955078125e-07, -3.7550926208496094e-06,
-	1.9073486328125000e-06}, /* L1110 */
-{9.6533346176147461e-01, 5.8114528656005859e-06,
-	1.1920928955078125e-07, -1.9669532775878906e-05,
-	-3.8146972656250000e-06}, /* L1111 */
-{1.4190838336944580e+00, 8.6277723312377930e-06,
-	1.1920928955078125e-07, -9.5367431640625000e-07,
-	2.2649765014648438e-06}, /* L1112 */
-{1.1650413274765015e+00, 7.1525573730468750e-06,
-	1.1920928955078125e-07, -4.7683715820312500e-07,
-	1.3113021850585938e-06}, /* L1113 */
-{1.6706761121749878e+00, 1.0356307029724121e-05,
-	1.1920928955078125e-07, 1.1920928955078125e-06,
-	3.3378601074218750e-06}, /* L1114 */
-{1.8690253496170044e+00, 1.1697411537170410e-05,
-	1.1920928955078125e-07, -1.3530254364013672e-05,
-	-5.1259994506835938e-06}, /* L1115 */
-{1.2451384067535400e+00, 7.8678131103515625e-06,
-	1.1920928955078125e-07, 1.6689300537109375e-05,
-	-3.8266181945800781e-05}, /* L1116 */
-{1.4018733501434326e+00, 8.9406967163085938e-06,
-	1.1920928955078125e-07, -5.0663948059082031e-06,
-	0.0000000000000000e+00}, /* L1117 */
-{2.1110765933990479e+00, 1.3589859008789062e-05,
-	1.1920928955078125e-07, -1.6450881958007812e-05,
-	-1.9550323486328125e-05}, /* L1118 */
-{1.7178971767425537e+00, 1.1160969734191895e-05,
-	1.1920928955078125e-07, 5.6028366088867188e-06,
-	2.2649765014648438e-06}, /* L1119 */
-{1.3181906938552856e+00, 8.6426734924316406e-06,
-	1.1920928955078125e-07, 8.3446502685546875e-07,
-	1.3113021850585938e-06}, /* L1120 */
-{1.2252202033996582e+00, 8.1062316894531250e-06,
-	1.1920928955078125e-07, 1.7881393432617188e-06,
-	8.5830688476562500e-06}, /* L1121 */
-{1.6874964237213135e+00, 1.1265277862548828e-05,
-	1.1920928955078125e-07, -3.0994415283203125e-06,
-	4.7683715820312500e-06}, /* L1122 */
-{2.1283390522003174e+00, 1.4334917068481445e-05,
-	1.1920928955078125e-07, 1.3113021850585938e-06,
-	-3.9339065551757812e-06}, /* L1123 */
-{1.2017642259597778e+00, 8.1658363342285156e-06,
-	1.1920928955078125e-07, -1.6689300537109375e-06,
-	-2.0265579223632812e-06}, /* L1124 */
-{1.8911085128784180e+00, 1.2964010238647461e-05,
-	1.1920928955078125e-07, -5.1081180572509766e-05,
-	1.7404556274414062e-05}, /* L1125 */
-{1.6616483926773071e+00, 1.1488795280456543e-05,
-	1.1920928955078125e-07, -2.9206275939941406e-06,
-	-6.9737434387207031e-06}, /* L1126 */
-{1.4078015089035034e+00, 9.8198652267456055e-06,
-	1.1920928955078125e-07, 6.8426132202148438e-05,
-	5.9723854064941406e-05}, /* L1127 */
-{1.5084152221679688e+00, 1.0609626770019531e-05,
-	1.1920928955078125e-07, -5.9604644775390625e-07,
-	-5.5551528930664062e-05}, /* L1128 */
-{1.5756088495254517e+00, 1.1175870895385742e-05,
-	1.1920928955078125e-07, 8.3446502685546875e-07,
-	-3.0398368835449219e-06}, /* L1129 */
-{2.3708157539367676e+00, 1.6957521438598633e-05,
-	1.1920928955078125e-07, -7.7486038208007812e-07,
-	2.1457672119140625e-06}, /* L1130 */
-{1.5120798349380493e+00, 1.0907649993896484e-05,
-	1.1920928955078125e-07, -8.5651874542236328e-05,
-	2.5272369384765625e-05}, /* L1131 */
-{2.7950906753540039e+00, 2.0325183868408203e-05,
-	1.1920928955078125e-07, -5.1856040954589844e-06,
-	-7.4505805969238281e-06}, /* L1132 */
-{1.3575928211212158e+00, 9.9539756774902344e-06,
-	1.1920928955078125e-07, -1.6272068023681641e-05,
-	-1.3530254364013672e-05}, /* L1133 */
-{1.8224974870681763e+00, 1.3470649719238281e-05,
-	1.1920928955078125e-07, -2.4855136871337891e-05,
-	-2.3782253265380859e-05}, /* L1134 */
-{1.3239212036132812e+00, 9.8645687103271484e-06,
-	1.1920928955078125e-07, 2.0384788513183594e-05,
-	-9.1195106506347656e-06}, /* L1135 */
-{2.3055584430694580e+00, 1.7315149307250977e-05,
-	1.1920928955078125e-07, 1.5497207641601562e-06,
-	-6.5565109252929688e-07}, /* L1136 */
-{1.6377103328704834e+00, 1.2397766113281250e-05,
-	1.1920928955078125e-07, 2.3841857910156250e-06,
-	-3.2424926757812500e-05}, /* L1137 */
-{2.5683627128601074e+00, 1.9595026969909668e-05,
-	1.1920928955078125e-07, 4.4107437133789062e-06,
-	-1.2516975402832031e-06}, /* L1138 */
-{1.9767295122146606e+00, 1.5199184417724609e-05,
-	1.1920928955078125e-07, -8.9406967163085938e-06,
-	-5.4836273193359375e-06}, /* L1139 */
-{1.6994286775588989e+00, 1.3168901205062866e-05,
-	1.1920928955078125e-07, 1.6450881958007812e-05,
-	6.3180923461914062e-06}, /* L1140 */
-{1.8375978469848633e+00, 1.4349818229675293e-05,
-	1.1920928955078125e-07, -1.6570091247558594e-05,
-	-2.0921230316162109e-05}, /* L1141 */
-{1.8105823993682861e+00, 1.4245510101318359e-05,
-	1.1920928955078125e-07, 2.0384788513183594e-05,
-	1.2159347534179688e-05}, /* L1142 */
-{2.3307569026947021e+00, 1.8477439880371094e-05,
-	1.1920928955078125e-07, -7.3313713073730469e-06,
-	-2.1517276763916016e-05}, /* L1143 */
-{1.3041013479232788e+00, 1.0415911674499512e-05,
-	1.1920928955078125e-07, 3.3378601074218750e-06,
-	-4.5299530029296875e-06}, /* L1144 */
-{2.1185142993927002e+00, 1.7046928405761719e-05,
-	1.1920928955078125e-07, -1.9073486328125000e-06,
-	-5.3644180297851562e-06}, /* L1145 */
-{1.6652044057846069e+00, 1.3500452041625977e-05,
-	1.1920928955078125e-07, -3.2246112823486328e-05,
-	-2.2947788238525391e-05}, /* L1146 */
-{3.0401215553283691e+00, 2.4825334548950195e-05,
-	1.1920928955078125e-07, 7.5101852416992188e-06,
-	1.0609626770019531e-05}, /* L1147 */
-{1.8043446540832520e+00, 1.4841556549072266e-05,
-	1.1920928955078125e-07, -1.0132789611816406e-05,
-	-1.1742115020751953e-05}, /* L1148 */
-{2.1798567771911621e+00, 1.8060207366943359e-05,
-	1.1920928955078125e-07, -5.0067901611328125e-06,
-	3.8146972656250000e-06}, /* L1149 */
-{1.5401673316955566e+00, 1.2852251529693604e-05,
-	1.1920928955078125e-07, -5.0663948059082031e-06,
-	1.7881393432617188e-06}, /* L1150 */
-{2.5070142745971680e+00, 2.1070241928100586e-05,
-	1.1920928955078125e-07, 1.3828277587890625e-05,
-	1.8954277038574219e-05}, /* L1151 */
-{1.6487674713134766e+00, 1.3954937458038330e-05,
-	1.1920928955078125e-07, -9.8347663879394531e-06,
-	-5.4240226745605469e-06}, /* L1152 */
-{1.4859261512756348e+00, 1.2665987014770508e-05,
-	1.1920928955078125e-07, 2.9802322387695312e-06,
-	3.9935111999511719e-05}, /* L1153 */
-{1.6457158327102661e+00, 1.4126300811767578e-05,
-	1.1920928955078125e-07, -1.6212463378906250e-05,
-	1.3589859008789062e-05}, /* L1154 */
-{1.8611181974411011e+00, 1.6085803508758545e-05,
-	1.1920928955078125e-07, -1.1622905731201172e-05,
-	-1.1682510375976562e-05}, /* L1155 */
-{1.8321113586425781e+00, 1.5944242477416992e-05,
-	1.1920928955078125e-07, -2.2232532501220703e-05,
-	3.1352043151855469e-05}, /* L1156 */
-{2.2074513435363770e+00, 1.9341707229614258e-05,
-	1.1920928955078125e-07, -2.6404857635498047e-05,
-	-2.7418136596679688e-06}, /* L1157 */
-{2.0101280212402344e+00, 1.7732381820678711e-05,
-	1.1920928955078125e-07, -3.1590461730957031e-06,
-	-6.9141387939453125e-06}, /* L1158 */
-{3.4258801937103271e+00, 3.0428171157836914e-05,
-	1.1920928955078125e-07, -1.4126300811767578e-05,
-	-1.9788742065429688e-05}, /* L1159 */
-{1.8116010427474976e+00, 1.6197562217712402e-05,
-	1.1920928955078125e-07, -1.6093254089355469e-06,
-	7.6293945312500000e-06}, /* L1160 */
-{2.0053453445434570e+00, 1.8049031496047974e-05,
-	1.1920928955078125e-07, -3.2126903533935547e-05,
-	-1.7106533050537109e-05}, /* L1161 */
-{2.2388551235198975e+00, 2.0284205675125122e-05,
-	1.1920928955078125e-07, -4.6491622924804688e-06,
-	-1.3589859008789062e-05}, /* L1162 */
-{1.6697667837142944e+00, 1.5228986740112305e-05,
-	1.1920928955078125e-07, -1.5079975128173828e-05,
-	-4.3272972106933594e-05}, /* L1163 */
-{2.2406351566314697e+00, 2.0567327737808228e-05,
-	1.1920928955078125e-07, 1.5735626220703125e-05,
-	-9.5367431640625000e-06}, /* L1164 */
-{2.2467515468597412e+00, 2.0757317543029785e-05,
-	1.1920928955078125e-07, -1.4305114746093750e-06,
-	5.1259994506835938e-06}, /* L1165 */
-{2.3745467662811279e+00, 2.2079795598983765e-05,
-	1.1920928955078125e-07, 3.7431716918945312e-05,
-	-3.6358833312988281e-06}, /* L1166 */
-{2.0955083370208740e+00, 1.9609928131103516e-05,
-	1.1920928955078125e-07, 9.5367431640625000e-07,
-	-2.7298927307128906e-05}, /* L1167 */
-{1.7495329380035400e+00, 1.6480684280395508e-05,
-	1.1920928955078125e-07, -1.4305114746093750e-05,
-	-4.9769878387451172e-05}, /* L1168 */
-{2.1758046150207520e+00, 2.0623207092285156e-05,
-	1.1920928955078125e-07, 6.1154365539550781e-05,
-	-3.0517578125000000e-05}, /* L1169 */
-{2.2445225715637207e+00, 2.1405518054962158e-05,
-	1.1920928955078125e-07, -8.4638595581054688e-06,
-	-4.5299530029296875e-06}, /* L1170 */
-{1.6459550857543945e+00, 1.5795230865478516e-05,
-	1.1920928955078125e-07, 3.5762786865234375e-07,
-	7.0333480834960938e-06}, /* L1171 */
-{2.4256405830383301e+00, 2.3423694074153900e-05,
-	1.1920928955078125e-07, 3.2901763916015625e-05,
-	4.0531158447265625e-06}, /* L1172 */
-{1.8588899374008179e+00, 1.8060207366943359e-05,
-	1.1920928955078125e-07, -1.6927719116210938e-05,
-	-7.7486038208007812e-07}, /* L1173 */
-{2.1371707916259766e+00, 2.0891427993774414e-05,
-	1.1920928955078125e-07, -5.3644180297851562e-06,
-	-1.3709068298339844e-06}, /* L1174 */
-{2.0060150623321533e+00, 1.9729137420654297e-05,
-	1.1920928955078125e-07, -2.3782253265380859e-05,
-	1.1920928955078125e-06}, /* L1175 */
-{2.0059118270874023e+00, 1.9848346710205078e-05,
-	1.1920928955078125e-07, -2.8014183044433594e-05,
-	-3.5166740417480469e-05}, /* L1176 */
-{2.0755820274353027e+00, 2.0660459995269775e-05,
-	1.1920928955078125e-07, 4.1723251342773438e-06,
-	7.1525573730468750e-07}, /* L1177 */
-{3.0146615505218506e+00, 3.0189752578735352e-05,
-	1.1920928955078125e-07, 3.5405158996582031e-05,
-	-1.8298625946044922e-05}, /* L1178 */
-{3.9156386852264404e+00, 3.9443373680114746e-05,
-	1.1920928955078125e-07, -2.9802322387695312e-07,
-	1.0251998901367188e-05}, /* L1179 */
-{2.4558520317077637e+00, 2.4884939193725586e-05,
-	1.1920928955078125e-07, 8.3446502685546875e-06,
-	-5.3048133850097656e-06}, /* L1180 */
-{2.8026320934295654e+00, 2.8565526008605957e-05,
-	1.1920928955078125e-07, -1.9669532775878906e-06,
-	-1.0848045349121094e-05}, /* L1181 */
-{2.3371465206146240e+00, 2.3961067199707031e-05,
-	1.1920928955078125e-07, 2.3841857910156250e-07,
-	1.9073486328125000e-06}, /* L1182 */
-{2.1054863929748535e+00, 2.1710991859436035e-05,
-	1.1920928955078125e-07, 4.5299530029296875e-06,
-	-3.8146972656250000e-06}, /* L1183 */
-{2.3062880039215088e+00, 2.3931264877319336e-05,
-	1.1920928955078125e-07, 1.1324882507324219e-04,
-	-1.0037422180175781e-04}, /* L1184 */
-{2.5199549198150635e+00, 2.6285648345947266e-05,
-	1.1920928955078125e-07, -1.6748905181884766e-05,
-	2.2053718566894531e-05}, /* L1185 */
-{1.5906770229339600e+00, 1.6689300537109375e-05,
-	1.1920928955078125e-07, 4.4107437133789062e-05,
-	-1.6510486602783203e-05}, /* L1186 */
-{2.2541122436523438e+00, 2.3782253265380859e-05,
-	1.1920928955078125e-07, -3.5464763641357422e-05,
-	-6.1392784118652344e-06}, /* L1187 */
-{1.9265031814575195e+00, 2.0444393157958984e-05,
-	1.1920928955078125e-07, -3.2544136047363281e-05,
-	-4.9293041229248047e-05}, /* L1188 */
-{2.2580652236938477e+00, 2.4095177650451660e-05,
-	1.1920928955078125e-07, 1.0728836059570312e-05,
-	-5.9962272644042969e-05}, /* L1189 */
-{1.8595248460769653e+00, 1.9952654838562012e-05,
-	1.1920928955078125e-07, -2.0265579223632812e-06,
-	4.0411949157714844e-05}, /* L1190 */
-{2.6842482089996338e+00, 2.8960406780242920e-05,
-	1.1920928955078125e-07, -2.8252601623535156e-05,
-	-1.4364719390869141e-05}, /* L1191 */
-{2.4145283699035645e+00, 2.6196241378784180e-05,
-	1.1920928955078125e-07, 6.4373016357421875e-06,
-	-1.0728836059570312e-05}, /* L1192 */
-{2.0791890621185303e+00, 2.2679567337036133e-05,
-	1.1920928955078125e-07, -7.5697898864746094e-06,
-	1.8835067749023438e-05}, /* L1193 */
-{2.7559175491333008e+00, 3.0225142836570740e-05,
-	1.1920928955078125e-07, -4.2915344238281250e-06,
-	-8.3446502685546875e-07}, /* L1194 */
-{2.5566635131835938e+00, 2.8196722269058228e-05,
-	1.1920928955078125e-07, -9.7632408142089844e-05,
-	3.1471252441406250e-05}, /* L1195 */
-{3.8623738288879395e+00, 4.2855739593505859e-05,
-	1.1920928955078125e-07, 3.3819675445556641e-04,
-	2.2149085998535156e-04}, /* L1196 */
-{2.4945464134216309e+00, 2.7805566787719727e-05,
-	1.1920928955078125e-07, -1.3232231140136719e-05,
-	-3.5762786865234375e-07}, /* L1197 */
-{2.3874394893646240e+00, 2.6755034923553467e-05,
-	1.1920928955078125e-07, 2.1457672119140625e-05,
-	5.8412551879882812e-06}, /* L1198 */
-{3.1719310283660889e+00, 3.5732984542846680e-05,
-	1.1920928955078125e-07, -5.9604644775390625e-08,
-	-5.6624412536621094e-06}, /* L1199 */
-{2.5210285186767578e+00, 2.8550624847412109e-05,
-	1.1920928955078125e-07, -4.7683715820312500e-06,
-	1.0490417480468750e-05}, /* L1200 */
-{3.5811295509338379e+00, 4.0769577026367188e-05,
-	1.1920928955078125e-07, 4.7683715820312500e-06,
-	1.8119812011718750e-05}, /* L1201 */
-{2.6432023048400879e+00, 3.0249357223510742e-05,
-	1.1920928955078125e-07, 1.9669532775878906e-05,
-	7.0333480834960938e-06}, /* L1202 */
-{2.3445589542388916e+00, 2.6971101760864258e-05,
-	1.1920928955078125e-07, 1.2874603271484375e-05,
-	-3.3378601074218750e-06}, /* L1203 */
-{1.9561572074890137e+00, 2.2619962692260742e-05,
-	1.1920928955078125e-07, 2.6226043701171875e-06,
-	3.5762786865234375e-07}, /* L1204 */
-{2.0115103721618652e+00, 2.3379921913146973e-05,
-	1.1920928955078125e-07, 8.1062316894531250e-06,
-	2.4199485778808594e-05}, /* L1205 */
-{2.6887228488922119e+00, 3.1411647796630859e-05,
-	1.1920928955078125e-07, -4.1723251342773438e-07,
-	2.1457672119140625e-06}, /* L1206 */
-{2.2429711818695068e+00, 2.6345252990722656e-05,
-	1.1920928955078125e-07, 1.4436244964599609e-04,
-	-5.9545040130615234e-05}, /* L1207 */
-{2.2017180919647217e+00, 2.5987625122070312e-05,
-	1.1920928955078125e-07, 8.4519386291503906e-05,
-	-2.4557113647460938e-05}, /* L1208 */
-{2.1833324432373047e+00, 2.5898218154907227e-05,
-	1.1920928955078125e-07, -4.7147274017333984e-05,
-	1.9073486328125000e-05}, /* L1209 */
-{2.7066788673400879e+00, 3.2275915145874023e-05,
-	1.1920928955078125e-07, 9.6917152404785156e-05,
-	3.7431716918945312e-05}, /* L1210 */
-{2.2679762840270996e+00, 2.7172267436981201e-05,
-	1.1920928955078125e-07, -2.0503997802734375e-05,
-	-8.4042549133300781e-06}, /* L1211 */
-{2.2597937583923340e+00, 2.7209520339965820e-05,
-	1.1920928955078125e-07, -2.0682811737060547e-05,
-	-3.0577182769775391e-05}, /* L1212 */
-{2.4088115692138672e+00, 2.9146671295166016e-05,
-	1.1920928955078125e-07, 1.5497207641601562e-05,
-	-4.5895576477050781e-06}, /* L1213 */
-{2.9950757026672363e+00, 3.6418437957763672e-05,
-	1.1920928955078125e-07, -1.2636184692382812e-05,
-	-1.7046928405761719e-05}, /* L1214 */
-{2.5846471786499023e+00, 3.1664967536926270e-05,
-	1.1920928955078125e-07, 1.7772912979125977e-03,
-	-2.7197599411010742e-04}, /* L1215 */
-{2.6067717075347900e+00, 3.2007694244384766e-05,
-	1.1920928955078125e-07, 1.5258789062500000e-05,
-	-6.2584877014160156e-06}, /* L1216 */
-{2.1771912574768066e+00, 2.6863068342208862e-05,
-	1.1920928955078125e-07, -2.2053718566894531e-06,
-	1.3709068298339844e-05}, /* L1217 */
-{3.1068594455718994e+00, 3.8519501686096191e-05,
-	1.1920928955078125e-07, 1.5497207641601562e-05,
-	-6.7353248596191406e-06}, /* L1218 */
-{2.5741207599639893e+00, 3.2067298889160156e-05,
-	1.1920928955078125e-07, -8.5830688476562500e-06,
-	1.5974044799804688e-05}, /* L1219 */
-{3.2612531185150146e+00, 4.0821731090545654e-05,
-	1.1920928955078125e-07, -6.0200691223144531e-06,
-	-2.6702880859375000e-05}, /* L1220 */
-{3.1061952114105225e+00, 3.9067119359970093e-05,
-	1.1920928955078125e-07, 1.5139579772949219e-05,
-	-3.5762786865234375e-07}, /* L1221 */
-{3.9090692996978760e+00, 4.9397349357604980e-05,
-	1.1920928955078125e-07, -8.5830688476562500e-06,
-	-2.5033950805664062e-06}, /* L1222 */
-{2.9082803726196289e+00, 3.6925077438354492e-05,
-	1.1920928955078125e-07, -2.3841857910156250e-07,
-	-6.5565109252929688e-07}, /* L1223 */
-{2.2300553321838379e+00, 2.8446316719055176e-05,
-	1.1920928955078125e-07, -1.8239021301269531e-05,
-	-3.7372112274169922e-05}, /* L1224 */
-{3.8737306594848633e+00, 4.9658119678497314e-05,
-	1.1920928955078125e-07, -5.2392482757568359e-05,
-	-1.5497207641601562e-05}, /* L1225 */
-{2.3996686935424805e+00, 3.0897557735443115e-05,
-	1.1920928955078125e-07, -7.5757503509521484e-05,
-	-2.1457672119140625e-05}, /* L1226 */
-{3.0302970409393311e+00, 3.9309263229370117e-05,
-	1.1920928955078125e-07, 1.3022422790527344e-03,
-	-4.0930509567260742e-04}, /* L1227 */
-{2.0802607536315918e+00, 2.7030706405639648e-05,
-	1.1920928955078125e-07, 5.4836273193359375e-06,
-	5.8412551879882812e-06}, /* L1228 */
-{3.0661604404449463e+00, 4.0024518966674805e-05,
-	1.1920928955078125e-07, 1.5497207641601562e-06,
-	8.7022781372070312e-06}, /* L1229 */
-{2.2863128185272217e+00, 2.9981136322021484e-05,
-	1.1920928955078125e-07, 1.6331672668457031e-05,
-	-7.5697898864746094e-06}, /* L1230 */
-{3.1289212703704834e+00, 4.1216611862182617e-05,
-	1.1920928955078125e-07, 2.6226043701171875e-06,
-	1.0728836059570312e-05}, /* L1231 */
-{2.9346113204956055e+00, 3.8832426071166992e-05,
-	1.1920928955078125e-07, -5.3644180297851562e-06,
-	-1.4662742614746094e-05}, /* L1232 */
-{2.3267719745635986e+00, 3.0927360057830811e-05,
-	1.1920928955078125e-07, -1.1086463928222656e-05,
-	8.1062316894531250e-06}, /* L1233 */
-{2.2917885780334473e+00, 3.0666589736938477e-05,
-	1.1920928955078125e-07, -5.5700540542602539e-04,
-	-1.0199546813964844e-03}, /* L1234 */
-{2.6463797092437744e+00, 3.5494565963745117e-05,
-	1.1920928955078125e-07, -9.2387199401855469e-05,
-	2.7060508728027344e-05}, /* L1235 */
-{3.1678485870361328e+00, 4.2676925659179688e-05,
-	1.1920928955078125e-07, -6.3180923461914062e-06,
-	-2.4437904357910156e-06}, /* L1236 */
-{3.2464599609375000e+00, 4.3928623199462891e-05,
-	1.1920928955078125e-07, -1.5497207641601562e-05,
-	3.7074089050292969e-05}, /* L1237 */
-{3.2306761741638184e+00, 4.3913722038269043e-05,
-	1.1920928955078125e-07, -7.1525573730468750e-06,
-	2.9206275939941406e-05}, /* L1238 */
-{2.3965263366699219e+00, 3.2735988497734070e-05,
-	1.1920928955078125e-07, -2.4777650833129883e-04,
-	1.2147426605224609e-04}, /* L1239 */
-{3.2906377315521240e+00, 4.5120716094970703e-05,
-	1.1920928955078125e-07, -3.4153461456298828e-05,
-	-2.9683113098144531e-05}, /* L1240 */
-{3.3776614665985107e+00, 4.6506524085998535e-05,
-	1.1920928955078125e-07, -3.5166740417480469e-06,
-	1.7881393432617188e-06}, /* L1241 */
-{2.7369720935821533e+00, 3.7848949432373047e-05,
-	1.1920928955078125e-07, -1.0728836059570312e-06,
-	-1.0132789611816406e-05}, /* L1242 */
-{4.4909911155700684e+00, 6.2376260757446289e-05,
-	1.1920928955078125e-07, 1.1205673217773438e-05,
-	-2.4378299713134766e-05}, /* L1243 */
-{2.6878952980041504e+00, 3.7491321563720703e-05,
-	1.1920928955078125e-07, -4.3272972106933594e-05,
-	-4.2140483856201172e-05}, /* L1244 */
-{2.1084623336791992e+00, 2.9534101486206055e-05,
-	1.1920928955078125e-07, -1.0192394256591797e-05,
-	1.3828277587890625e-05}, /* L1245 */
-{2.8241481781005859e+00, 3.9726495742797852e-05,
-	1.1920928955078125e-07, 2.8610229492187500e-06,
-	-3.1590461730957031e-06}, /* L1246 */
-{3.9472033977508545e+00, 5.5767595767974854e-05,
-	1.1920928955078125e-07, 8.8214874267578125e-06,
-	4.2200088500976562e-05}, /* L1247 */
-{2.7856087684631348e+00, 3.9517879486083984e-05,
-	1.1920928955078125e-07, 2.7418136596679688e-06,
-	-2.5153160095214844e-05}, /* L1248 */
-{3.1797544956207275e+00, 4.5299530029296875e-05,
-	1.1920928955078125e-07, 4.0054321289062500e-05,
-	4.0769577026367188e-05}, /* L1249 */
-{3.2002224922180176e+00, 4.5806169509887695e-05,
-	1.1920928955078125e-07, 3.5643577575683594e-05,
-	1.0037422180175781e-04}, /* L1250 */
-{2.9428439140319824e+00, 4.2289495468139648e-05,
-	1.1920928955078125e-07, -5.0783157348632812e-05,
-	3.9577484130859375e-05}, /* L1251 */
-{3.3541893959045410e+00, 4.8384070396423340e-05,
-	1.1920928955078125e-07, -2.4616718292236328e-05,
-	-5.4121017456054688e-05}, /* L1252 */
-{3.0121967792510986e+00, 4.3645501136779785e-05,
-	1.1920928955078125e-07, -2.5999546051025391e-04,
-	-1.1211633682250977e-04}, /* L1253 */
-{2.7211909294128418e+00, 3.9577484130859375e-05,
-	1.1920928955078125e-07, -1.9967555999755859e-05,
-	1.7881393432617188e-06}, /* L1254 */
-{2.6671855449676514e+00, 3.8951635360717773e-05,
-	1.1920928955078125e-07, 4.1365623474121094e-05,
-	9.5367431640625000e-07}, /* L1255 */
-{3.5121285915374756e+00, 5.1498413085937500e-05,
-	1.1920928955078125e-07, 1.6093254089355469e-05,
-	3.4570693969726562e-06}, /* L1256 */
-{2.9267933368682861e+00, 4.3094158172607422e-05,
-	1.1920928955078125e-07, -7.1227550506591797e-05,
-	-6.4253807067871094e-05}, /* L1257 */
-{2.5106649398803711e+00, 3.7118792533874512e-05,
-	1.1920928955078125e-07, 2.5391578674316406e-05,
-	1.5211105346679688e-04}, /* L1258 */
-{2.4577031135559082e+00, 3.6492943763732910e-05,
-	1.1920928955078125e-07, -4.3272972106933594e-05,
-	-3.0696392059326172e-05}, /* L1259 */
-{3.2924635410308838e+00, 4.9069523811340332e-05,
-	1.1920928955078125e-07, -6.5565109252929688e-05,
-	-1.0550022125244141e-05}, /* L1260 */
-{3.1647403240203857e+00, 4.7355890274047852e-05,
-	1.1920928955078125e-07, 2.5033950805664062e-06,
-	5.3405761718750000e-05}, /* L1261 */
-{2.5652899742126465e+00, 3.8534402847290039e-05,
-	1.1920928955078125e-07, 1.5497207641601562e-05,
-	-7.1525573730468750e-06}, /* L1262 */
-{3.0589282512664795e+00, 4.6133995056152344e-05,
-	1.1920928955078125e-07, -1.3053417205810547e-05,
-	-6.1035156250000000e-05}, /* L1263 */
-{3.4289965629577637e+00, 5.1915645599365234e-05,
-	1.1920928955078125e-07, -3.9935111999511719e-06,
-	3.8862228393554688e-05}, /* L1264 */
-{3.9899127483367920e+00, 6.0647726058959961e-05,
-	1.1920928955078125e-07, -2.8550624847412109e-05,
-	-3.5762786865234375e-07}, /* L1265 */
-{2.8133091926574707e+00, 4.2930245399475098e-05,
-	1.1920928955078125e-07, 1.9907951354980469e-05,
-	-2.7418136596679688e-06}, /* L1266 */
-{3.9885497093200684e+00, 6.1154365539550781e-05,
-	1.1920928955078125e-07, -1.3113021850585938e-05,
-	-1.2624263763427734e-04}, /* L1267 */
-{3.0203218460083008e+00, 4.6454370021820068e-05,
-	1.1920928955078125e-07, -1.1920928955078125e-05,
-	-7.1287155151367188e-05}, /* L1268 */
-{2.6234917640686035e+00, 4.0501356124877930e-05,
-	1.1920928955078125e-07, -1.1265277862548828e-05,
-	-8.7022781372070312e-06}, /* L1269 */
-{3.4784512519836426e+00, 5.3912401199340820e-05,
-	1.1920928955078125e-07, 1.5974044799804688e-05,
-	-4.1723251342773438e-06}, /* L1270 */
-{5.2191519737243652e+00, 8.1203877925872803e-05,
-	1.1920928955078125e-07, 3.8146972656250000e-05,
-	3.6478042602539062e-05}, /* L1271 */
-{3.7924778461456299e+00, 5.9247016906738281e-05,
-	1.1920928955078125e-07, 2.7549266815185547e-04,
-	-3.7968158721923828e-05}, /* L1272 */
-{3.3542623519897461e+00, 5.2586197853088379e-05,
-	1.1920928955078125e-07, 4.5776367187500000e-05,
-	-6.7532062530517578e-05}, /* L1273 */
-{3.5926158428192139e+00, 5.6535005569458008e-05,
-	1.1920928955078125e-07, -5.6028366088867188e-06,
-	2.7656555175781250e-05}, /* L1274 */
-{3.5994863510131836e+00, 5.6862831115722656e-05,
-	1.1920928955078125e-07, -6.7114830017089844e-05,
-	-6.7353248596191406e-05}, /* L1275 */
-{3.8888278007507324e+00, 6.1661005020141602e-05,
-	1.1920928955078125e-07, 3.2663345336914062e-05,
-	3.3378601074218750e-05}, /* L1276 */
-{3.9306416511535645e+00, 6.2577426433563232e-05,
-	1.1920928955078125e-07, -8.1419944763183594e-05,
-	-2.8014183044433594e-05}, /* L1277 */
-{2.8954002857208252e+00, 4.6253204345703125e-05,
-	1.1920928955078125e-07, 1.6450881958007812e-05,
-	-9.8943710327148438e-06}, /* L1278 */
-{2.8672094345092773e+00, 4.5999884605407715e-05,
-	1.1920928955078125e-07, 7.4505805969238281e-05,
-	-4.9054622650146484e-05}, /* L1279 */
-{2.3275427818298340e+00, 3.7461519241333008e-05,
-	1.1920928955078125e-07, -5.2809715270996094e-05,
-	-3.3557415008544922e-05}, /* L1280 */
-{2.8670883178710938e+00, 4.6312808990478516e-05,
-	1.1920928955078125e-07, -1.8060207366943359e-05,
-	-1.4662742614746094e-05}, /* L1281 */
-{3.5310692787170410e+00, 5.7250261306762695e-05,
-	1.1920928955078125e-07, -4.3511390686035156e-06,
-	1.8477439880371094e-05}, /* L1282 */
-{3.8918013572692871e+00, 6.3329935073852539e-05,
-	1.1920928955078125e-07, 7.3909759521484375e-06,
-	-1.0848045349121094e-05}, /* L1283 */
-{3.1068062782287598e+00, 5.0749629735946655e-05,
-	1.1920928955078125e-07, -5.3644180297851562e-05,
-	-2.7418136596679688e-05}, /* L1284 */
-{2.8671267032623291e+00, 4.6998262405395508e-05,
-	1.1920928955078125e-07, -9.5367431640625000e-07,
-	1.3351440429687500e-05}, /* L1285 */
-{3.5216612815856934e+00, 5.7935714721679688e-05,
-	1.1920928955078125e-07, -1.4781951904296875e-05,
-	-8.7022781372070312e-06}, /* L1286 */
-{2.7244505882263184e+00, 4.5001506805419922e-05,
-	1.1920928955078125e-07, 1.8489360809326172e-04,
-	-1.6993284225463867e-04}, /* L1287 */
-{3.3593361377716064e+00, 5.5670738220214844e-05,
-	1.1920928955078125e-07, -3.6418437957763672e-05,
-	2.0742416381835938e-05}, /* L1288 */
-{2.6397724151611328e+00, 4.3898820877075195e-05,
-	1.1920928955078125e-07, -1.1086463928222656e-05,
-	8.3446502685546875e-07}, /* L1289 */
-{3.2254927158355713e+00, 5.3852796554565430e-05,
-	1.1920928955078125e-07, -3.0815601348876953e-05,
-	1.1920928955078125e-07}, /* L1290 */
-{3.3631930351257324e+00, 5.6341290473937988e-05,
-	1.1920928955078125e-07, -6.7949295043945312e-06,
-	5.9962272644042969e-05}, /* L1291 */
-{3.4079694747924805e+00, 5.7285651564598083e-05,
-	1.1920928955078125e-07, -3.6001205444335938e-05,
-	2.8610229492187500e-06}, /* L1292 */
-{2.8880021572113037e+00, 4.8749148845672607e-05,
-	1.1920928955078125e-07, -5.7220458984375000e-06,
-	-1.2904405593872070e-04}, /* L1293 */
-{3.8768889904022217e+00, 6.5632164478302002e-05,
-	1.1920928955078125e-07, -4.0531158447265625e-06,
-	3.4093856811523438e-05}, /* L1294 */
-{3.2189145088195801e+00, 5.4687261581420898e-05,
-	1.1920928955078125e-07, -2.3305416107177734e-05,
-	-1.7583370208740234e-05}, /* L1295 */
-{2.7826395034790039e+00, 4.7439709305763245e-05,
-	1.1920928955078125e-07, -8.6188316345214844e-05,
-	-1.3828277587890625e-05}, /* L1296 */
-{2.9319143295288086e+00, 5.0157308578491211e-05,
-	1.1920928955078125e-07, 1.3709068298339844e-05,
-	-2.3841857910156250e-07}, /* L1297 */
-{4.1965179443359375e+00, 7.2211027145385742e-05,
-	1.1920928955078125e-07, -2.0766258239746094e-04,
-	3.7491321563720703e-04}, /* L1298 */
-{3.0189342498779297e+00, 5.2005052566528320e-05,
-	1.1920928955078125e-07, 8.4638595581054688e-06,
-	4.5299530029296875e-06}, /* L1299 */
-{2.9598660469055176e+00, 5.1163136959075928e-05,
-	1.1920928955078125e-07, -2.9206275939941406e-06,
-	-2.3841857910156250e-06}, /* L1300 */
-{4.8141779899597168e+00, 8.3506107330322266e-05,
-	1.1920928955078125e-07, 2.9206275939941406e-05,
-	-1.7285346984863281e-06}, /* L1301 */
-{3.1006553173065186e+00, 5.3977011702954769e-05,
-	1.1920928955078125e-07, 7.7128410339355469e-05,
-	-1.2838840484619141e-04}, /* L1302 */
-{2.6993238925933838e+00, 4.7147274017333984e-05,
-	1.1920928955078125e-07, 4.4345855712890625e-05,
-	-1.0132789611816406e-06}, /* L1303 */
-{4.3526625633239746e+00, 7.6293945312500000e-05,
-	1.1920928955078125e-07, 7.2121620178222656e-05,
-	-2.3025274276733398e-04}, /* L1304 */
-{4.0632801055908203e+00, 7.1555376052856445e-05,
-	1.1920928955078125e-07, 1.8525123596191406e-04,
-	4.5967102050781250e-04}, /* L1305 */
-{6.7649230957031250e+00, 1.1935830116271973e-04,
-	1.1920928955078125e-07, 1.1682510375976562e-05,
-	1.9550323486328125e-05}, /* L1306 */
-{4.0029668807983398e+00, 7.0869922637939453e-05,
-	1.1920928955078125e-07, -1.7702579498291016e-05,
-	-7.0333480834960938e-06}, /* L1307 */
-{5.3224954605102539e+00, 9.4577670097351074e-05,
-	1.1920928955078125e-07, 4.6491622924804688e-05,
-	1.4436244964599609e-04}, /* L1308 */
-{3.4629216194152832e+00, 6.1720609664916992e-05,
-	1.1920928955078125e-07, 2.2411346435546875e-05,
-	-2.9981136322021484e-05}, /* L1309 */
-{3.6836194992065430e+00, 6.5892934799194336e-05,
-	1.1920928955078125e-07, 1.6975402832031250e-04,
-	-2.0557641983032227e-04}, /* L1310 */
-{3.7666192054748535e+00, 6.7591667175292969e-05,
-	1.1920928955078125e-07, -1.2642145156860352e-04,
-	-3.4868717193603516e-05}, /* L1311 */
-{3.0687901973724365e+00, 5.5253505706787109e-05,
-	1.1920928955078125e-07, -2.9146671295166016e-05,
-	2.9563903808593750e-05}, /* L1312 */
-{2.6712586879730225e+00, 4.8249959945678711e-05,
-	1.1920928955078125e-07, 3.4928321838378906e-05,
-	-5.0127506256103516e-05}, /* L1313 */
-{3.4850175380706787e+00, 6.3151121139526367e-05,
-	1.1920928955078125e-07, 2.9563903808593750e-05,
-	-3.0398368835449219e-06}, /* L1314 */
-{3.4851601123809814e+00, 6.3360668718814850e-05,
-	1.1920928955078125e-07, 3.4570693969726562e-06,
-	-9.7155570983886719e-06}, /* L1315 */
-{3.3319339752197266e+00, 6.0796737670898438e-05,
-	1.1920928955078125e-07, 1.0681152343750000e-04,
-	1.6474723815917969e-04}, /* L1316 */
-{5.1887230873107910e+00, 9.4980001449584961e-05,
-	1.1920928955078125e-07, -4.0411949157714844e-05,
-	3.7908554077148438e-05}, /* L1317 */
-{5.3918108940124512e+00, 9.8999589681625366e-05,
-	1.1920928955078125e-07, 2.6702880859375000e-05,
-	-4.9293041229248047e-05}, /* L1318 */
-{3.7143328189849854e+00, 6.8426132202148438e-05,
-	1.1920928955078125e-07, 2.7656555175781250e-05,
-	-5.5789947509765625e-05}, /* L1319 */
-{3.5686254501342773e+00, 6.5952539443969727e-05,
-	1.1920928955078125e-07, -1.0555982589721680e-04,
-	-1.0311603546142578e-05}, /* L1320 */
-{4.0656347274780273e+00, 7.5370073318481445e-05,
-	1.1920928955078125e-07, -2.6106834411621094e-05,
-	2.5153160095214844e-05}, /* L1321 */
-{4.2824273109436035e+00, 7.9661607742309570e-05,
-	1.1920928955078125e-07, -1.9639730453491211e-04,
-	-1.2457370758056641e-05}, /* L1322 */
-{3.5407865047454834e+00, 6.6071748733520508e-05,
-	1.1920928955078125e-07, 1.6641616821289062e-04,
-	1.1157989501953125e-04}, /* L1323 */
-{3.4998750686645508e+00, 6.5505504608154297e-05,
-	1.1920928955078125e-07, -1.4424324035644531e-05,
-	2.6583671569824219e-05}, /* L1324 */
-{3.6763875484466553e+00, 6.9029629230499268e-05,
-	1.1920928955078125e-07, 4.1007995605468750e-05,
-	-2.9802322387695312e-06}, /* L1325 */
-{5.0139293670654297e+00, 9.4443559646606445e-05,
-	1.1920928955078125e-07, -7.1465969085693359e-05,
-	-2.9385089874267578e-05}, /* L1326 */
-{4.4658980369567871e+00, 8.4385275840759277e-05,
-	1.1920928955078125e-07, 1.3113021850585938e-05,
-	-1.7285346984863281e-06}, /* L1327 */
-{3.1854162216186523e+00, 6.0379505157470703e-05,
-	1.1920928955078125e-07, -1.7583370208740234e-05,
-	1.8835067749023438e-05}, /* L1328 */
-{3.8384883403778076e+00, 7.2985887527465820e-05,
-	1.1920928955078125e-07, 2.1815299987792969e-05,
-	-1.2397766113281250e-05}, /* L1329 */
-{3.4356751441955566e+00, 6.5535306930541992e-05,
-	1.1920928955078125e-07, -1.2516975402832031e-06,
-	2.8729438781738281e-05}, /* L1330 */
-{2.9541642665863037e+00, 5.6564807891845703e-05,
-	1.1920928955078125e-07, 7.5137615203857422e-04,
-	-2.8008222579956055e-04}, /* L1331 */
-{3.7685103416442871e+00, 7.2330236434936523e-05,
-	1.1920928955078125e-07, -1.6391277313232422e-05,
-	-2.3543834686279297e-05}, /* L1332 */
-{3.7530016899108887e+00, 7.2270631790161133e-05,
-	1.1920928955078125e-07, 1.9073486328125000e-06,
-	-3.3736228942871094e-05}, /* L1333 */
-{3.2955565452575684e+00, 6.3657760620117188e-05,
-	1.1920928955078125e-07, 2.4437904357910156e-05,
-	1.7166137695312500e-05}, /* L1334 */
-{4.7795829772949219e+00, 9.2595815658569336e-05,
-	1.1920928955078125e-07, -1.2874603271484375e-05,
-	-8.3446502685546875e-07}, /* L1335 */
-{3.7617290019989014e+00, 7.3105096817016602e-05,
-	1.1920928955078125e-07, 5.3763389587402344e-05,
-	-3.1888484954833984e-05}, /* L1336 */
-{3.8056991100311279e+00, 7.4177980422973633e-05,
-	1.1920928955078125e-07, 3.4570693969726562e-06,
-	-1.3113021850585938e-06}, /* L1337 */
-{4.3724923133850098e+00, 8.5502862930297852e-05,
-	1.1920928955078125e-07, -8.7857246398925781e-05,
-	-2.7942657470703125e-04}, /* L1338 */
-{3.7000031471252441e+00, 7.2583556175231934e-05,
-	1.1920928955078125e-07, 2.2530555725097656e-05,
-	-3.5464763641357422e-05}, /* L1339 */
-{3.9001255035400391e+00, 7.6718628406524658e-05,
-	1.1920928955078125e-07, -8.7797641754150391e-05,
-	-1.4483928680419922e-05}, /* L1340 */
-{4.4363026618957520e+00, 8.7529420852661133e-05,
-	1.1920928955078125e-07, 7.1525573730468750e-07,
-	3.8146972656250000e-06}, /* L1341 */
-{4.4184427261352539e+00, 8.7440013885498047e-05,
-	1.1920928955078125e-07, 2.4437904357910156e-05,
-	2.3245811462402344e-05}, /* L1342 */
-{3.0645101070404053e+00, 6.0901045799255371e-05,
-	1.1920928955078125e-07, 2.5093555450439453e-04,
-	5.7590007781982422e-04}, /* L1343 */
-{3.2422950267791748e+00, 6.4581632614135742e-05,
-	1.1920928955078125e-07, 1.7821788787841797e-04,
-	5.9723854064941406e-05}, /* L1344 */
-{3.6899039745330811e+00, 7.3730945587158203e-05,
-	1.1920928955078125e-07, 1.9395351409912109e-04,
-	9.5248222351074219e-05}, /* L1345 */
-{3.9974186420440674e+00, 8.0078840255737305e-05,
-	1.1920928955078125e-07, 4.6491622924804688e-05,
-	-1.2278556823730469e-05}, /* L1346 */
-{3.4381773471832275e+00, 6.9111585617065430e-05,
-	1.1920928955078125e-07, -9.4294548034667969e-05,
-	1.8656253814697266e-04}, /* L1347 */
-{3.3473718166351318e+00, 6.7442655563354492e-05,
-	1.1920928955078125e-07, 9.3460083007812500e-05,
-	1.1563301086425781e-05}, /* L1348 */
-{4.7897124290466309e+00, 9.6812844276428223e-05,
-	1.1920928955078125e-07, -2.9861927032470703e-05,
-	4.1842460632324219e-05}, /* L1349 */
-{4.7768397331237793e+00, 9.6887350082397461e-05,
-	1.1920928955078125e-07, 1.5878677368164062e-04,
-	2.6476383209228516e-04}, /* L1350 */
-{4.2064580917358398e+00, 8.5502862930297852e-05,
-	1.1920928955078125e-07, 5.4001808166503906e-05,
-	4.6372413635253906e-05}, /* L1351 */
-{3.8003456592559814e+00, 7.7471137046813965e-05,
-	1.1920928955078125e-07, 7.5101852416992188e-06,
-	1.2636184692382812e-05}, /* L1352 */
-{3.1709525585174561e+00, 6.4849853515625000e-05,
-	1.1920928955078125e-07, 1.5330314636230469e-04,
-	4.6968460083007812e-05}, /* L1353 */
-{4.8793897628784180e+00, 1.0005198419094086e-04,
-	1.1920928955078125e-07, 3.0994415283203125e-06,
-	-2.5868415832519531e-05}, /* L1354 */
-{4.4213376045227051e+00, 9.0926885604858398e-05,
-	1.1920928955078125e-07, -1.3351440429687500e-05,
-	-6.2227249145507812e-05}, /* L1355 */
-{3.8869545459747314e+00, 8.0168247222900391e-05,
-	1.1920928955078125e-07, 3.6239624023437500e-05,
-	1.4305114746093750e-05}, /* L1356 */
-{4.4384484291076660e+00, 9.1813504695892334e-05,
-	1.1920928955078125e-07, 5.1379203796386719e-05,
-	3.9458274841308594e-05}, /* L1357 */
-{3.3497838973999023e+00, 6.9588422775268555e-05,
-	1.1920928955078125e-07, 1.0526180267333984e-04,
-	-4.7951936721801758e-04}, /* L1358 */
-{4.2968616485595703e+00, 8.9406967163085938e-05,
-	1.1920928955078125e-07, -5.0067901611328125e-06,
-	-1.2087821960449219e-04}, /* L1359 */
-{3.2734379768371582e+00, 6.8306922912597656e-05,
-	1.1920928955078125e-07, 4.7683715820312500e-05,
-	5.4121017456054688e-05}, /* L1360 */
-{3.7476680278778076e+00, 7.8409910202026367e-05,
-	1.1920928955078125e-07, -5.9604644775390625e-08,
-	-2.1874904632568359e-05}, /* L1361 */
-{2.6689467430114746e+00, 5.5998563766479492e-05,
-	1.1920928955078125e-07, 1.8835067749023438e-05,
-	6.7949295043945312e-06}, /* L1362 */
-{4.1301960945129395e+00, 8.6911022663116455e-05,
-	1.1920928955078125e-07, -8.0823898315429688e-05,
-	-5.5909156799316406e-05}, /* L1363 */
-{3.7226531505584717e+00, 7.8558921813964844e-05,
-	1.1920928955078125e-07, -8.6426734924316406e-06,
-	-1.4024972915649414e-04}, /* L1364 */
-{4.2799062728881836e+00, 9.0651214122772217e-05,
-	1.1920928955078125e-07, 1.0025501251220703e-04,
-	9.7906589508056641e-04}, /* L1365 */
-{4.6442990303039551e+00, 9.8556280136108398e-05,
-	1.1920928955078125e-07, -5.0663948059082031e-06,
-	3.0994415283203125e-06}, /* L1366 */
-{4.7994618415832520e+00, 1.0213255882263184e-04,
-	1.1920928955078125e-07, -4.9412250518798828e-05,
-	1.4543533325195312e-05}, /* L1367 */
-{3.9578948020935059e+00, 8.4459781646728516e-05,
-	1.1920928955078125e-07, -3.6954879760742188e-05,
-	-1.0728836059570312e-05}, /* L1368 */
-{4.7142872810363770e+00, 1.0088086128234863e-04,
-	1.1920928955078125e-07, 2.0503997802734375e-05,
-	-3.2603740692138672e-05}, /* L1369 */
-{5.0617432594299316e+00, 1.0862946510314941e-04,
-	1.1920928955078125e-07, -1.1181831359863281e-04,
-	4.1246414184570312e-05}, /* L1370 */
-{5.4651422500610352e+00, 1.1759996414184570e-04,
-	1.1920928955078125e-07, -2.6047229766845703e-05,
-	1.0728836059570312e-05}, /* L1371 */
-{4.6017537117004395e+00, 9.9293887615203857e-05,
-	1.1920928955078125e-07, 1.2516975402832031e-05,
-	-3.6478042602539062e-05}, /* L1372 */
-{4.5816631317138672e+00, 9.9137425422668457e-05,
-	1.1920928955078125e-07, 3.6954879760742188e-06,
-	2.1100044250488281e-05}, /* L1373 */
-{4.7823390960693359e+00, 1.0377168655395508e-04,
-	1.1920928955078125e-07, -1.3709068298339844e-05,
-	-1.1742115020751953e-05}, /* L1374 */
-{4.1994113922119141e+00, 9.1386958956718445e-05,
-	1.1920928955078125e-07, -6.6399574279785156e-05,
-	9.4413757324218750e-05}, /* L1375 */
-{4.8262686729431152e+00, 1.0529160499572754e-04,
-	1.1920928955078125e-07, 2.7537345886230469e-05,
-	7.2717666625976562e-06}, /* L1376 */
-{3.3819701671600342e+00, 7.3999166488647461e-05,
-	1.1920928955078125e-07, 7.6889991760253906e-05,
-	1.5044212341308594e-04}, /* L1377 */
-{3.3624505996704102e+00, 7.3760747909545898e-05,
-	1.1920928955078125e-07, -3.3974647521972656e-05,
-	2.9444694519042969e-05}, /* L1378 */
-{4.9617981910705566e+00, 1.0913610458374023e-04,
-	1.1920928955078125e-07, -1.7285346984863281e-06,
-	-2.4974346160888672e-05}, /* L1379 */
-{3.5646283626556396e+00, 7.8618526458740234e-05,
-	1.1920928955078125e-07, 1.1563301086425781e-05,
-	-1.9013881683349609e-05}, /* L1380 */
-{3.5102624893188477e+00, 7.7642500400543213e-05,
-	1.1920928955078125e-07, -3.1173229217529297e-05,
-	9.8705291748046875e-05}, /* L1381 */
-{6.0708155632019043e+00, 1.3461709022521973e-04,
-	1.1920928955078125e-07, 5.2452087402343750e-06,
-	2.3245811462402344e-05}, /* L1382 */
-{5.0780024528503418e+00, 1.1290609836578369e-04,
-	1.1920928955078125e-07, -2.0861625671386719e-05,
-	-1.4662742614746094e-05}, /* L1383 */
-{4.7435007095336914e+00, 1.0645389556884766e-04,
-	1.1920928955078125e-07, 3.3431053161621094e-03,
-	3.3942461013793945e-03}, /* L1384 */
-{4.6372504234313965e+00, 1.0368227958679199e-04,
-	1.1920928955078125e-07, -3.0100345611572266e-05,
-	8.4877014160156250e-05}, /* L1385 */
-{4.3456716537475586e+00, 9.7418669611215591e-05,
-	1.1920928955078125e-07, 2.8550624847412109e-04,
-	1.4424324035644531e-05}, /* L1386 */
-{4.2961630821228027e+00, 9.6589326858520508e-05,
-	1.1920928955078125e-07, 6.7949295043945312e-05,
-	3.3974647521972656e-05}, /* L1387 */
-{4.9144001007080078e+00, 1.1077523231506348e-04,
-	1.1920928955078125e-07, 1.0597705841064453e-04,
-	-6.3776969909667969e-06}, /* L1388 */
-{4.4230256080627441e+00, 9.9927186965942383e-05,
-	1.1920928955078125e-07, 2.7418136596679688e-05,
-	-4.2319297790527344e-06}, /* L1389 */
-{4.6450762748718262e+00, 1.0521709918975830e-04,
-	1.1920928955078125e-07, 5.8412551879882812e-05,
-	6.1631202697753906e-05}, /* L1390 */
-{3.1887686252593994e+00, 7.2419643402099609e-05,
-	1.1920928955078125e-07, 1.9311904907226562e-05,
-	1.5497207641601562e-05}, /* L1391 */
-{6.2474112510681152e+00, 1.4239549636840820e-04,
-	1.1920928955078125e-07, -1.8680095672607422e-04,
-	3.9577484130859375e-04}, /* L1392 */
-{4.5461459159851074e+00, 1.0380148887634277e-04,
-	1.1920928955078125e-07, -4.9412250518798828e-05,
-	1.2040138244628906e-05}, /* L1393 */
-{5.0377044677734375e+00, 1.1539459228515625e-04,
-	1.1920928955078125e-07, -4.3505430221557617e-04,
-	-8.9287757873535156e-05}, /* L1394 */
-{6.0852775573730469e+00, 1.3966858386993408e-04,
-	1.1920928955078125e-07, 1.6927719116210938e-05,
-	4.3869018554687500e-05}, /* L1395 */
-{4.5087976455688477e+00, 1.0374188423156738e-04,
-	1.1920928955078125e-07, 2.1219253540039062e-05,
-	7.1525573730468750e-06}, /* L1396 */
-{5.5137805938720703e+00, 1.2719631195068359e-04,
-	1.1920928955078125e-07, -1.8596649169921875e-05,
-	-1.7404556274414062e-05}, /* L1397 */
-{3.8598725795745850e+00, 8.9272856712341309e-05,
-	1.1920928955078125e-07, 2.0146369934082031e-05,
-	-1.8179416656494141e-05}, /* L1398 */
-{3.4021766185760498e+00, 7.8886747360229492e-05,
-	1.1920928955078125e-07, 2.3961067199707031e-05,
-	3.1590461730957031e-05}, /* L1399 */
-{5.9166455268859863e+00, 1.3754516839981079e-04,
-	1.1920928955078125e-07, 1.0609626770019531e-05,
-	-1.8179416656494141e-05}, /* L1400 */
-{3.1801805496215820e+00, 7.4118375778198242e-05,
-	1.1920928955078125e-07, -7.0333480834960938e-06,
-	-7.0929527282714844e-06}, /* L1401 */
-{4.5846505165100098e+00, 1.0737776756286621e-04,
-	1.1920928955078125e-07, -2.8544664382934570e-04,
-	1.0683536529541016e-03}, /* L1402 */
-{6.6109290122985840e+00, 1.5487521886825562e-04,
-	1.1920928955078125e-07, 7.2717666625976562e-06,
-	-7.2121620178222656e-06}, /* L1403 */
-{4.8248658180236816e+00, 1.1331588029861450e-04,
-	1.1920928955078125e-07, -1.2457370758056641e-05,
-	2.3961067199707031e-05}, /* L1404 */
-{5.3237805366516113e+00, 1.2554973363876343e-04,
-	1.1920928955078125e-07, -3.0612945556640625e-04,
-	2.4306774139404297e-04}, /* L1405 */
-{4.9872794151306152e+00, 1.1783838272094727e-04,
-	1.1920928955078125e-07, -2.5516748428344727e-04,
-	2.8669834136962891e-04}, /* L1406 */
-{4.0393199920654297e+00, 9.5590949058532715e-05,
-	1.1920928955078125e-07, -1.1384487152099609e-05,
-	-4.3869018554687500e-05}, /* L1407 */
-{3.8832790851593018e+00, 9.2133879661560059e-05,
-	1.1920928955078125e-07, -2.1874904632568359e-05,
-	6.3776969909667969e-05}, /* L1408 */
-{5.4100017547607422e+00, 1.2868829071521759e-04,
-	1.1920928955078125e-07, 1.7285346984863281e-05,
-	-2.9802322387695312e-05}, /* L1409 */
-{4.4211664199829102e+00, 1.0542571544647217e-04,
-	1.1920928955078125e-07, 5.5551528930664062e-05,
-	3.5881996154785156e-05}, /* L1410 */
-{3.2668707370758057e+00, 7.8089535236358643e-05,
-	1.1920928955078125e-07, 4.8637390136718750e-05,
-	-4.0173530578613281e-05}, /* L1411 */
-{6.1488976478576660e+00, 1.4734268188476562e-04,
-	1.1920928955078125e-07, 2.3245811462402344e-05,
-	1.5020370483398438e-05}, /* L1412 */
-{5.3101110458374023e+00, 1.2756884098052979e-04,
-	1.1920928955078125e-07, 2.7537345886230469e-05,
-	-5.4538249969482422e-05}, /* L1413 */
-{5.2199330329895020e+00, 1.2570619583129883e-04,
-	1.1920928955078125e-07, -1.7344951629638672e-05,
-	-2.4914741516113281e-05}, /* L1414 */
-{4.4799566268920898e+00, 1.0815262794494629e-04,
-	1.1920928955078125e-07, 1.3589859008789062e-05,
-	6.7591667175292969e-05}, /* L1415 */
-{5.8589501380920410e+00, 1.4179944992065430e-04,
-	1.1920928955078125e-07, -7.7068805694580078e-05,
-	3.6120414733886719e-05}, /* L1416 */
-{3.6312186717987061e+00, 8.8095664978027344e-05,
-	1.1920928955078125e-07, 2.5153160095214844e-05,
-	7.9870223999023438e-06}, /* L1417 */
-{4.9162602424621582e+00, 1.1957436800003052e-04,
-	1.1920928955078125e-07, -4.2915344238281250e-06,
-	-7.6234340667724609e-05}, /* L1418 */
-{4.8697094917297363e+00, 1.1873245239257812e-04,
-	1.1920928955078125e-07, -3.2007694244384766e-05,
-	-1.1289119720458984e-04}, /* L1419 */
-{5.6039214134216309e+00, 1.3706088066101074e-04,
-	1.1920928955078125e-07, -8.9526176452636719e-05,
-	-1.2260675430297852e-04}, /* L1420 */
-{6.0624976158142090e+00, 1.4853477478027344e-04,
-	1.1920928955078125e-07, -9.6559524536132812e-06,
-	5.6385993957519531e-05}, /* L1421 */
-{5.2167501449584961e+00, 1.2812018394470215e-04,
-	1.1920928955078125e-07, -1.0073184967041016e-05,
-	1.4543533325195312e-05}, /* L1422 */
-{4.6749162673950195e+00, 1.1511531192809343e-04,
-	1.1920928955078125e-07, -2.1779537200927734e-04,
-	9.8466873168945312e-05}, /* L1423 */
-{4.3700361251831055e+00, 1.0785460472106934e-04,
-	1.1920928955078125e-07, 5.8531761169433594e-05,
-	-1.4722347259521484e-05}, /* L1424 */
-{4.4332079887390137e+00, 1.0967254638671875e-04,
-	1.1920928955078125e-07, 1.7166137695312500e-05,
-	1.8596649169921875e-05}, /* L1425 */
-{5.1984019279479980e+00, 1.2895464897155762e-04,
-	1.1920928955078125e-07, 1.5163421630859375e-04,
-	-6.1392784118652344e-06}, /* L1426 */
-{4.1160373687744141e+00, 1.0234117507934570e-04,
-	1.1920928955078125e-07, -1.2093782424926758e-04,
-	2.0217895507812500e-04}, /* L1427 */
-{4.6941976547241211e+00, 1.1697411537170410e-04,
-	1.1920928955078125e-07, 9.5486640930175781e-05,
-	1.6212463378906250e-05}, /* L1428 */
-{4.7335615158081055e+00, 1.1822581291198730e-04,
-	1.1920928955078125e-07, -2.1815299987792969e-05,
-	6.8664550781250000e-05}, /* L1429 */
-{5.0993728637695312e+00, 1.2767314910888672e-04,
-	1.1920928955078125e-07, -5.8770179748535156e-05,
-	-2.1100044250488281e-05}, /* L1430 */
-{6.7603044509887695e+00, 1.6964972019195557e-04,
-	1.1920928955078125e-07, 6.4373016357421875e-06,
-	2.3841857910156250e-07}, /* L1431 */
-{3.6456432342529297e+00, 9.1709196567535400e-05,
-	1.1920928955078125e-07, -3.5166740417480469e-05,
-	2.4676322937011719e-05}, /* L1432 */
-{3.6505048274993896e+00, 9.2049129307270050e-05,
-	1.1920928955078125e-07, -4.0769577026367188e-05,
-	1.8000602722167969e-05}, /* L1433 */
-{4.8351521492004395e+00, 1.2222677469253540e-04,
-	1.1920928955078125e-07, -2.5051832199096680e-04,
-	-1.1861324310302734e-05}, /* L1434 */
-{4.3703279495239258e+00, 1.1071562767028809e-04,
-	1.1920928955078125e-07, 4.8398971557617188e-05,
-	-2.6881694793701172e-05}, /* L1435 */
-{6.1353759765625000e+00, 1.5580654144287109e-04,
-	1.1920928955078125e-07, -8.7022781372070312e-06,
-	-5.8114528656005859e-05}, /* L1436 */
-{5.5625419616699219e+00, 1.4159083366394043e-04,
-	1.1920928955078125e-07, -3.4868717193603516e-05,
-	5.0902366638183594e-05}, /* L1437 */
-{3.5406966209411621e+00, 9.0330839157104492e-05,
-	1.1920928955078125e-07, -3.9935111999511719e-06,
-	4.5299530029296875e-06}, /* L1438 */
-{4.2404432296752930e+00, 1.0858476161956787e-04,
-	1.1920928955078125e-07, 1.5187263488769531e-04,
-	4.1961669921875000e-05}, /* L1439 */
-{4.8489222526550293e+00, 1.2429058551788330e-04,
-	1.1920928955078125e-07, 4.5895576477050781e-05,
-	-2.3126602172851562e-05}, /* L1440 */
-{4.3888530731201172e+00, 1.1283159255981445e-04,
-	1.1920928955078125e-07, -2.3812055587768555e-04,
-	-1.8435716629028320e-04}, /* L1441 */
-{4.5411114692687988e+00, 1.1694431304931641e-04,
-	1.1920928955078125e-07, 2.1696090698242188e-05,
-	-1.0073184967041016e-05}, /* L1442 */
-{4.7393536567687988e+00, 1.2253224849700928e-04,
-	1.1920928955078125e-07, -4.2486190795898438e-04,
-	2.0360946655273438e-04}, /* L1443 */
-{4.0770010948181152e+00, 1.0547041893005371e-04,
-	1.1920928955078125e-07, -9.0599060058593750e-06,
-	-5.7220458984375000e-06}, /* L1444 */
-{5.0433492660522461e+00, 1.3077259063720703e-04,
-	1.1920928955078125e-07, 1.3470649719238281e-05,
-	2.6106834411621094e-05}, /* L1445 */
-{5.1698369979858398e+00, 1.3439357280731201e-04,
-	1.1920928955078125e-07, -1.8024444580078125e-04,
-	-2.6166439056396484e-05}, /* L1446 */
-{3.8861188888549805e+00, 1.0123848915100098e-04,
-	1.1920928955078125e-07, 3.3617019653320312e-05,
-	5.4836273193359375e-05}, /* L1447 */
-{4.3704109191894531e+00, 1.1411309242248535e-04,
-	1.1920928955078125e-07, -4.1127204895019531e-05,
-	-7.5101852416992188e-06}, /* L1448 */
-{4.8980259895324707e+00, 1.2817978858947754e-04,
-	1.1920928955078125e-07, -4.9412250518798828e-05,
-	2.5391578674316406e-05}, /* L1449 */
-{4.3612704277038574e+00, 1.1438317596912384e-04,
-	1.1920928955078125e-07, 0.0000000000000000e+00,
-	1.4185905456542969e-05}, /* L1450 */
-{5.7527580261230469e+00, 1.5124678611755371e-04,
-	1.1920928955078125e-07, 8.9406967163085938e-06,
-	-1.2487173080444336e-04}, /* L1451 */
-{5.5650038719177246e+00, 1.4662742614746094e-04,
-	1.1920928955078125e-07, -4.2080879211425781e-05,
-	3.1709671020507812e-05}, /* L1452 */
-{4.2241549491882324e+00, 1.1154264211654663e-04,
-	1.1920928955078125e-07, 2.3007392883300781e-05,
-	1.7762184143066406e-05}, /* L1453 */
-{4.0936546325683594e+00, 1.0834634304046631e-04,
-	1.1920928955078125e-07, -6.5565109252929688e-06,
-	2.9683113098144531e-05}, /* L1454 */
-{4.0500717163085938e+00, 1.0743737220764160e-04,
-	1.1920928955078125e-07, -4.4107437133789062e-06,
-	-3.3736228942871094e-05}, /* L1455 */
-{5.9028835296630859e+00, 1.5693157911300659e-04,
-	1.1920928955078125e-07, 1.1444091796875000e-05,
-	1.7285346984863281e-05}, /* L1456 */
-{6.6958923339843750e+00, 1.7845630645751953e-04,
-	1.1920928955078125e-07, 1.3744831085205078e-04,
-	-2.1684169769287109e-04}, /* L1457 */
-{4.7673230171203613e+00, 1.2730807065963745e-04,
-	1.1920928955078125e-07, 1.3828277587890625e-05,
-	2.1934509277343750e-05}, /* L1458 */
-{6.1993622779846191e+00, 1.6592442989349365e-04,
-	1.1920928955078125e-07, 3.0159950256347656e-05,
-	4.1604042053222656e-05}, /* L1459 */
-{4.9040460586547852e+00, 1.3155117630958557e-04,
-	1.1920928955078125e-07, 4.6491622924804688e-05,
-	5.9723854064941406e-05}, /* L1460 */
-{4.4135026931762695e+00, 1.1867284774780273e-04,
-	1.1920928955078125e-07, 6.8306922912597656e-05,
-	-2.8371810913085938e-05}, /* L1461 */
-{6.3232822418212891e+00, 1.7037242650985718e-04,
-	1.1920928955078125e-07, 3.7789344787597656e-05,
-	1.7881393432617188e-05}, /* L1462 */
-{4.7820315361022949e+00, 1.2913346290588379e-04,
-	1.1920928955078125e-07, -3.0994415283203125e-06,
-	3.1590461730957031e-05}, /* L1463 */
-{5.8575887680053711e+00, 1.5854835510253906e-04,
-	1.1920928955078125e-07, 6.6757202148437500e-06,
-	-9.7751617431640625e-05}, /* L1464 */
-{4.6069049835205078e+00, 1.2494623661041260e-04,
-	1.1920928955078125e-07, -2.0802021026611328e-05,
-	-5.0187110900878906e-05}, /* L1465 */
-{3.6946730613708496e+00, 1.0044500231742859e-04,
-	1.1920928955078125e-07, -4.3690204620361328e-05,
-	-7.5519084930419922e-05}, /* L1466 */
-{4.4400382041931152e+00, 1.2096762657165527e-04,
-	1.1920928955078125e-07, 2.5391578674316406e-05,
-	-7.5161457061767578e-05}, /* L1467 */
-{5.6785926818847656e+00, 1.5506148338317871e-04,
-	1.1920928955078125e-07, 5.2690505981445312e-05,
-	9.2983245849609375e-06}, /* L1468 */
-{5.9646377563476562e+00, 1.6320496797561646e-04,
-	1.1920928955078125e-07, -4.9471855163574219e-05,
-	-8.1062316894531250e-05}, /* L1469 */
-{4.9088644981384277e+00, 1.3473629951477051e-04,
-	1.1920928955078125e-07, 6.3097476959228516e-04,
-	8.0823898315429688e-05}, /* L1470 */
-{3.7326440811157227e+00, 1.0259449481964111e-04,
-	1.1920928955078125e-07, -1.1503696441650391e-05,
-	2.7418136596679688e-06}, /* L1471 */
-{4.1820335388183594e+00, 1.1519342660903931e-04,
-	1.1920928955078125e-07, -9.2387199401855469e-06,
-	-3.1769275665283203e-05}, /* L1472 */
-{6.7988538742065430e+00, 1.8766522407531738e-04,
-	1.1920928955078125e-07, -1.7344951629638672e-05,
-	3.9458274841308594e-05}, /* L1473 */
-{4.0071740150451660e+00, 1.1090934276580811e-04,
-	1.1920928955078125e-07, 2.1839141845703125e-04,
-	2.2232532501220703e-04}, /* L1474 */
-{5.1238522529602051e+00, 1.4203786849975586e-04,
-	1.1920928955078125e-07, 1.1086463928222656e-05,
-	-6.0200691223144531e-06}, /* L1475 */
-{5.8487634658813477e+00, 1.6246736049652100e-04,
-	1.1920928955078125e-07, -4.4465065002441406e-05,
-	1.9788742065429688e-05}, /* L1476 */
-{5.4141168594360352e+00, 1.5072524547576904e-04,
-	1.1920928955078125e-07, 1.3029575347900391e-04,
-	-3.1292438507080078e-05}, /* L1477 */
-{4.7024874687194824e+00, 1.3121962547302246e-04,
-	1.1920928955078125e-07, -5.6087970733642578e-05,
-	1.2695789337158203e-04}, /* L1478 */
-{5.0653290748596191e+00, 1.4161411672830582e-04,
-	1.1920928955078125e-07, 7.1167945861816406e-05,
-	3.8862228393554688e-05}, /* L1479 */
-{3.9772584438323975e+00, 1.1143088340759277e-04,
-	1.1920928955078125e-07, 1.7881393432617188e-05,
-	-3.5047531127929688e-05}, /* L1480 */
-{5.0348796844482422e+00, 1.4251470565795898e-04,
-	1.1920928955078125e-07, -2.3993849754333496e-03,
-	8.5771083831787109e-04}, /* L1481 */
-{5.5807471275329590e+00, 1.5701353549957275e-04,
-	1.1920928955078125e-07, 2.5629997253417969e-05,
-	2.0623207092285156e-05}, /* L1482 */
-{5.0025205612182617e+00, 1.4105439186096191e-04,
-	1.1920928955078125e-07, -2.1874904632568359e-05,
-	6.1511993408203125e-05}, /* L1483 */
-{7.4436874389648438e+00, 2.1032989025115967e-04,
-	1.1920928955078125e-07, 2.1457672119140625e-05,
-	1.8596649169921875e-05}, /* L1484 */
-{4.9420204162597656e+00, 1.4011561870574951e-04,
-	1.1920928955078125e-07, -7.4684619903564453e-05,
-	1.5759468078613281e-04}, /* L1485 */
-{5.3286194801330566e+00, 1.5120953321456909e-04,
-	1.1920928955078125e-07, -3.9160251617431641e-05,
-	5.3644180297851562e-05}, /* L1486 */
-{4.9017491340637207e+00, 1.3938546180725098e-04,
-	1.1920928955078125e-07, -4.1306018829345703e-05,
-	3.4570693969726562e-06}, /* L1487 */
-{6.1502108573913574e+00, 1.7523765563964844e-04,
-	1.1920928955078125e-07, 2.8967857360839844e-05,
-	1.8119812011718750e-05}, /* L1488 */
-{5.3834056854248047e+00, 1.5372037887573242e-04,
-	1.1920928955078125e-07, 1.9907951354980469e-05,
-	-3.3378601074218750e-06}, /* L1489 */
-{6.0058851242065430e+00, 1.7184019088745117e-04,
-	1.1920928955078125e-07, -3.1232833862304688e-05,
-	-4.7624111175537109e-05}, /* L1490 */
-{6.1604924201965332e+00, 1.7675757408142090e-04,
-	1.1920928955078125e-07, 4.7647953033447266e-04,
-	-5.6785345077514648e-04}, /* L1491 */
-{8.0020484924316406e+00, 2.2995471954345703e-04,
-	1.1920928955078125e-07, 3.5762786865234375e-07,
-	7.2240829467773438e-05}, /* L1492 */
-{4.7145266532897949e+00, 1.3586878776550293e-04,
-	1.1920928955078125e-07, -2.6023387908935547e-04,
-	9.5605850219726562e-05}, /* L1493 */
-{5.4914135932922363e+00, 1.5843100845813751e-04,
-	1.1920928955078125e-07, -3.8325786590576172e-05,
-	-1.2159347534179688e-05}, /* L1494 */
-{6.3612146377563477e+00, 1.8393993377685547e-04,
-	1.1920928955078125e-07, 1.9311904907226562e-05,
-	-9.0897083282470703e-05}, /* L1495 */
-{7.1484522819519043e+00, 2.0709633827209473e-04,
-	1.1920928955078125e-07, 2.3841857910156250e-06,
-	-8.2850456237792969e-06}, /* L1496 */
-{4.1670236587524414e+00, 1.2096762657165527e-04,
-	1.1920928955078125e-07, 2.4914741516113281e-05,
-	-4.2498111724853516e-05}, /* L1497 */
-{6.0602579116821289e+00, 1.7634034156799316e-04,
-	1.1920928955078125e-07, 3.1590461730957031e-04,
-	-2.3967027664184570e-04}, /* L1498 */
-{4.9270291328430176e+00, 1.4361739158630371e-04,
-	1.1920928955078125e-07, -1.6152858734130859e-05,
-	1.8596649169921875e-05}, /* L1499 */
-{6.3606724739074707e+00, 1.8579498282633722e-04,
-	1.1920928955078125e-07, 4.8637390136718750e-05,
-	7.9512596130371094e-05}, /* L1500 */
-{5.2753887176513672e+00, 1.5440583229064941e-04,
-	1.1920928955078125e-07, -1.5079975128173828e-05,
-	-2.3424625396728516e-05}, /* L1501 */
-{7.3513460159301758e+00, 2.1563470363616943e-04,
-	1.1920928955078125e-07, -1.2916326522827148e-04,
-	4.0173530578613281e-05}, /* L1502 */
-{3.9155988693237305e+00, 1.1506676673889160e-04,
-	1.1920928955078125e-07, -1.3768672943115234e-05,
-	3.1232833862304688e-05}, /* L1503 */
-{5.1235876083374023e+00, 1.5094876289367676e-04,
-	1.1920928955078125e-07, 1.2397766113281250e-04,
-	-2.0122528076171875e-04}, /* L1504 */
-{5.6760935783386230e+00, 1.6748905181884766e-04,
-	1.1920928955078125e-07, 3.5285949707031250e-05,
-	4.6730041503906250e-05}, /* L1505 */
-{5.1203889846801758e+00, 1.5139579772949219e-04,
-	1.1920928955078125e-07, 9.5367431640625000e-07,
-	-1.8715858459472656e-05}, /* L1506 */
-{6.8399348258972168e+00, 2.0264089107513428e-04,
-	1.1920928955078125e-07, -5.3763389587402344e-05,
-	-4.9471855163574219e-06}, /* L1507 */
-{5.9234356880187988e+00, 1.7586350440979004e-04,
-	1.1920928955078125e-07, -3.7848949432373047e-05,
-	-9.7155570983886719e-05}, /* L1508 */
-{4.6010227203369141e+00, 1.3689696788787842e-04,
-	1.1920928955078125e-07, -2.4139881134033203e-05,
-	3.8146972656250000e-06}, /* L1509 */
-{7.3738422393798828e+00, 2.1979212760925293e-04,
-	1.1920928955078125e-07, -6.5326690673828125e-05,
-	-1.6331672668457031e-05}, /* L1510 */
-{5.5350818634033203e+00, 1.6538798809051514e-04,
-	1.1920928955078125e-07, -3.0404329299926758e-04,
-	2.0647048950195312e-04}, /* L1511 */
-{5.2993330955505371e+00, 1.5858560800552368e-04,
-	1.1920928955078125e-07, 3.6954879760742188e-05,
-	9.0122222900390625e-05}, /* L1512 */
-{5.4391717910766602e+00, 1.6328692436218262e-04,
-	1.1920928955078125e-07, -6.0027837753295898e-04,
-	-8.7380409240722656e-05}, /* L1513 */
-{5.0555434226989746e+00, 1.5190243721008301e-04,
-	1.1920928955078125e-07, -2.1755695343017578e-05,
-	-1.6450881958007812e-05}, /* L1514 */
-{5.5656056404113770e+00, 1.6754865646362305e-04,
-	1.1920928955078125e-07, 1.5020370483398438e-05,
-	-8.2910060882568359e-05}, /* L1515 */
-{4.3916397094726562e+00, 1.3250112533569336e-04,
-	1.1920928955078125e-07, -2.6518106460571289e-04,
-	1.9311904907226562e-05}, /* L1516 */
-{5.4428820610046387e+00, 1.6465783119201660e-04,
-	1.1920928955078125e-07, 6.9522857666015625e-04,
-	3.1399726867675781e-04}, /* L1517 */
-{5.6694173812866211e+00, 1.7234683036804199e-04,
-	1.1920928955078125e-07, 1.0383129119873047e-03,
-	-1.8698573112487793e-03}, /* L1518 */
-{6.7812099456787109e+00, 2.0582973957061768e-04,
-	1.1920928955078125e-07, -9.0956687927246094e-05,
-	7.0929527282714844e-05}, /* L1519 */
-{5.1436595916748047e+00, 1.5643239021301270e-04,
-	1.1920928955078125e-07, -2.0134449005126953e-04,
-	2.5510787963867188e-05}, /* L1520 */
-{6.1056780815124512e+00, 1.8599629402160645e-04,
-	1.1920928955078125e-07, 6.8306922912597656e-05,
-	2.9921531677246094e-05}, /* L1521 */
-{4.7902460098266602e+00, 1.4621019363403320e-04,
-	1.1920928955078125e-07, -3.4213066101074219e-05,
-	3.3140182495117188e-05}, /* L1522 */
-{6.3455085754394531e+00, 1.9407272338867188e-04,
-	1.1920928955078125e-07, -4.2200088500976562e-05,
-	-6.5565109252929688e-07}, /* L1523 */
-{6.3733029365539551e+00, 1.9529461860656738e-04,
-	1.1920928955078125e-07, -1.9907951354980469e-05,
-	1.4424324035644531e-05}, /* L1524 */
-{4.5927534103393555e+00, 1.4099478721618652e-04,
-	1.1920928955078125e-07, -5.5789947509765625e-05,
-	4.9710273742675781e-05}, /* L1525 */
-{4.8711824417114258e+00, 1.4984607696533203e-04,
-	1.1920928955078125e-07, -8.3088874816894531e-05,
-	5.7816505432128906e-05}, /* L1526 */
-{4.6142587661743164e+00, 1.4230608940124512e-04,
-	1.1920928955078125e-07, 2.7179718017578125e-05,
-	6.6399574279785156e-05}, /* L1527 */
-{6.0828628540039062e+00, 1.8784403800964355e-04,
-	1.1920928955078125e-07, -2.3841857910156250e-06,
-	-1.7046928405761719e-05}, /* L1528 */
-{5.3480257987976074e+00, 1.6564130783081055e-04,
-	1.1920928955078125e-07, -6.1213970184326172e-05,
-	6.2704086303710938e-05}, /* L1529 */
-{6.4968309402465820e+00, 2.0140409469604492e-04,
-	1.1920928955078125e-07, 2.0265579223632812e-05,
-	-6.1094760894775391e-05}, /* L1530 */
-{5.8082156181335449e+00, 1.8048286437988281e-04,
-	1.1920928955078125e-07, -1.3518333435058594e-04,
-	7.6174736022949219e-05}, /* L1531 */
-{4.8875293731689453e+00, 1.5209615230560303e-04,
-	1.1920928955078125e-07, -5.5491924285888672e-05,
-	2.2649765014648438e-06}, /* L1532 */
-{5.4844498634338379e+00, 1.7100572586059570e-04,
-	1.1920928955078125e-07, -1.0466575622558594e-04,
-	-2.1237134933471680e-04}, /* L1533 */
-{5.9610209465026855e+00, 1.8626451492309570e-04,
-	1.1920928955078125e-07, 1.3041496276855469e-04,
-	-1.2099742889404297e-04}, /* L1534 */
-{6.3852038383483887e+00, 1.9989907741546631e-04,
-	1.1920928955078125e-07, 1.1587142944335938e-04,
-	1.4650821685791016e-04}, /* L1535 */
-{5.1573905944824219e+00, 1.6170740127563477e-04,
-	1.1920928955078125e-07, -5.2452087402343750e-06,
-	-1.7404556274414062e-05}, /* L1536 */
-{5.2878279685974121e+00, 1.6614794731140137e-04,
-	1.1920928955078125e-07, -3.0696392059326172e-05,
-	-1.9669532775878906e-05}, /* L1537 */
-{4.7292981147766113e+00, 1.4895200729370117e-04,
-	1.1920928955078125e-07, 1.8131732940673828e-04,
-	2.7060508728027344e-04}, /* L1538 */
-{6.5145025253295898e+00, 2.0543485879898071e-04,
-	1.1920928955078125e-07, -1.3470649719238281e-05,
-	8.8691711425781250e-05}, /* L1539 */
-{6.9765748977661133e+00, 2.2053718566894531e-04,
-	1.1920928955078125e-07, 2.3961067199707031e-04,
-	4.4476985931396484e-04}, /* L1540 */
-{6.5441446304321289e+00, 2.0727515220642090e-04,
-	1.1920928955078125e-07, 4.3499469757080078e-04,
-	3.5548210144042969e-04}, /* L1541 */
-{9.2936744689941406e+00, 2.9498338699340820e-04,
-	1.1920928955078125e-07, 1.1360645294189453e-04,
-	-7.9751014709472656e-05}, /* L1542 */
-{6.6832408905029297e+00, 2.1445751190185547e-04,
-	1.1920928955078125e-07, -5.4982304573059082e-03,
-	-1.7100572586059570e-03}, /* L1543 */
-{1.1340641975402832e+01, 3.6099553108215332e-04,
-	1.1920928955078125e-07, 3.2782554626464844e-05,
-	2.3245811462402344e-05}, /* L1544 */
-{6.6539411544799805e+00, 2.1223723888397217e-04,
-	1.1920928955078125e-07, 5.1259994506835938e-05,
-	1.4948844909667969e-04}, /* L1545 */
-{5.7673397064208984e+00, 1.8435716629028320e-04,
-	1.1920928955078125e-07, -4.8041343688964844e-05,
-	2.5868415832519531e-05}, /* L1546 */
-{6.4843931198120117e+00, 2.0821392536163330e-04,
-	1.1920928955078125e-07, -6.9642066955566406e-04,
-	7.7426433563232422e-04}, /* L1547 */
-{4.9204277992248535e+00, 1.5781819820404053e-04,
-	1.1920928955078125e-07, -2.1934509277343750e-05,
-	2.7298927307128906e-05}, /* L1548 */
-{5.7416129112243652e+00, 1.8447637557983398e-04,
-	1.1920928955078125e-07, -1.0371208190917969e-05,
-	2.1457672119140625e-06}, /* L1549 */
-{6.9889173507690430e+00, 2.2497773170471191e-04,
-	1.1920928955078125e-07, -3.7491321563720703e-05,
-	4.1246414184570312e-05}, /* L1550 */
-{6.9942154884338379e+00, 2.2555887699127197e-04,
-	1.1920928955078125e-07, 2.7775764465332031e-05,
-	6.6757202148437500e-06}, /* L1551 */
-{5.9428272247314453e+00, 1.9200146198272705e-04,
-	1.1920928955078125e-07, -1.2576580047607422e-05,
-	2.3126602172851562e-05}, /* L1552 */
-{5.5200729370117188e+00, 1.8015503883361816e-04,
-	1.1920928955078125e-07, -2.5536417961120605e-03,
-	2.4120807647705078e-03}, /* L1553 */
-{5.9261970520019531e+00, 1.9228458404541016e-04,
-	1.1920928955078125e-07, 4.0280818939208984e-04,
-	-2.1648406982421875e-04}, /* L1554 */
-{4.9420609474182129e+00, 1.6057491302490234e-04,
-	1.1920928955078125e-07, 7.2598457336425781e-05,
-	-9.4294548034667969e-05}, /* L1555 */
-{5.7787709236145020e+00, 1.8808245658874512e-04,
-	1.1920928955078125e-07, 6.6518783569335938e-05,
-	-3.5405158996582031e-05}, /* L1556 */
-{6.7051978111267090e+00, 2.1863728761672974e-04,
-	1.1920928955078125e-07, 3.0994415283203125e-06,
-	-7.3313713073730469e-06}, /* L1557 */
-{7.6644401550292969e+00, 2.5036931037902832e-04,
-	1.1920928955078125e-07, 1.7642974853515625e-05,
-	-8.9406967163085938e-07}, /* L1558 */
-{5.3232679367065430e+00, 1.7424672842025757e-04,
-	1.1920928955078125e-07, 5.1140785217285156e-05,
-	-1.8960237503051758e-04}, /* L1559 */
-{5.1175212860107422e+00, 1.6778707504272461e-04,
-	1.1920928955078125e-07, -5.2273273468017578e-05,
-	-2.4735927581787109e-05}, /* L1560 */
-{7.2600560188293457e+00, 2.3847073316574097e-04,
-	1.1920928955078125e-07, -1.1980533599853516e-05,
-	-2.9206275939941406e-05}, /* L1561 */
-{4.8857469558715820e+00, 1.6079843044281006e-04,
-	1.1920928955078125e-07, -7.2598457336425781e-05,
-	1.4972686767578125e-04}, /* L1562 */
-{5.7856483459472656e+00, 1.9073486328125000e-04,
-	1.1920928955078125e-07, -8.1121921539306641e-05,
-	4.5895576477050781e-05}, /* L1563 */
-{6.1987195014953613e+00, 2.0474568009376526e-04,
-	1.1920928955078125e-07, 3.4451484680175781e-05,
-	-3.4451484680175781e-05}, /* L1564 */
-{5.5280623435974121e+00, 1.8292665481567383e-04,
-	1.1920928955078125e-07, 4.3630599975585938e-05,
-	1.1086463928222656e-04}, /* L1565 */
-{5.2719717025756836e+00, 1.7476081848144531e-04,
-	1.1920928955078125e-07, 2.7418136596679688e-06,
-	1.2278556823730469e-05}, /* L1566 */
-{5.8493833541870117e+00, 1.9428133964538574e-04,
-	1.1920928955078125e-07, -8.6963176727294922e-05,
-	-8.7559223175048828e-05}, /* L1567 */
-{7.4994993209838867e+00, 2.4946220219135284e-04,
-	1.1920928955078125e-07, -3.8743019104003906e-05,
-	6.1750411987304688e-05}, /* L1568 */
-{8.0564422607421875e+00, 2.6848539710044861e-04,
-	1.1920928955078125e-07, 7.8320503234863281e-05,
-	1.3828277587890625e-05}, /* L1569 */
-{8.2448787689208984e+00, 2.7525424957275391e-04,
-	1.1920928955078125e-07, 1.8954277038574219e-04,
-	4.0173530578613281e-05}, /* L1570 */
-{6.3698124885559082e+00, 2.1308660507202148e-04,
-	1.1920928955078125e-07, 8.7261199951171875e-05,
-	-1.3130903244018555e-04}, /* L1571 */
-{7.7860383987426758e+00, 2.6084296405315399e-04,
-	1.1920928955078125e-07, -4.9710273742675781e-05,
-	1.8358230590820312e-05}, /* L1572 */
-{6.2749595642089844e+00, 2.1065771579742432e-04,
-	1.1920928955078125e-07, 2.1064281463623047e-04,
-	-1.5228986740112305e-04}, /* L1573 */
-{7.0988192558288574e+00, 2.3871660232543945e-04,
-	1.1920928955078125e-07, 5.4597854614257812e-05,
-	1.0812282562255859e-04}, /* L1574 */
-{6.1754641532897949e+00, 2.0840764045715332e-04,
-	1.1920928955078125e-07, 2.3710727691650391e-04,
-	3.8146972656250000e-04}, /* L1575 */
-{6.0608286857604980e+00, 2.0477175712585449e-04,
-	1.1920928955078125e-07, -1.1539459228515625e-04,
-	-2.9015541076660156e-04}, /* L1576 */
-{7.0008625984191895e+00, 2.3673474788665771e-04,
-	1.1920928955078125e-07, -1.1914968490600586e-04,
-	1.4185905456542969e-04}, /* L1577 */
-{6.7248425483703613e+00, 2.2769719362258911e-04,
-	1.1920928955078125e-07, 3.3855438232421875e-05,
-	3.6358833312988281e-05}, /* L1578 */
-{6.7595577239990234e+00, 2.2929906845092773e-04,
-	1.1920928955078125e-07, 6.0796737670898438e-05,
-	-7.1167945861816406e-05}, /* L1579 */
-{5.9898591041564941e+00, 2.0356476306915283e-04,
-	1.1920928955078125e-07, 6.1988830566406250e-05,
-	5.8412551879882812e-06}, /* L1580 */
-{6.8751063346862793e+00, 2.3401901125907898e-04,
-	1.1920928955078125e-07, -8.5234642028808594e-06,
-	6.5803527832031250e-05}, /* L1581 */
-{7.3971276283264160e+00, 2.5224685668945312e-04,
-	1.1920928955078125e-07, 6.4134597778320312e-05,
-	-1.3709068298339844e-05}, /* L1582 */
-{6.3223195075988770e+00, 2.1603703498840332e-04,
-	1.1920928955078125e-07, 8.7261199951171875e-05,
-	1.8715858459472656e-05}, /* L1583 */
-{5.6579871177673340e+00, 1.9365549087524414e-04,
-	1.1920928955078125e-07, -8.6307525634765625e-05,
-	-1.8417835235595703e-05}, /* L1584 */
-{7.4046993255615234e+00, 2.5379657745361328e-04,
-	1.1920928955078125e-07, -5.1140785217285156e-05,
-	1.1444091796875000e-05}, /* L1585 */
-{6.0522208213806152e+00, 2.0798295736312866e-04,
-	1.1920928955078125e-07, -3.1769275665283203e-05,
-	-8.6307525634765625e-05}, /* L1586 */
-{5.4351930618286133e+00, 1.8714368343353271e-04,
-	1.1920928955078125e-07, 4.3511390686035156e-04,
-	4.6527385711669922e-04}, /* L1587 */
-{9.4351921081542969e+00, 3.2550096511840820e-04,
-	1.1920928955078125e-07, -4.7796964645385742e-04,
-	-2.5969743728637695e-04}, /* L1588 */
-{5.0385971069335938e+00, 1.7394125461578369e-04,
-	1.1920928955078125e-07, -3.4928321838378906e-05,
-	3.6716461181640625e-05}, /* L1589 */
-{6.3993549346923828e+00, 2.2125244140625000e-04,
-	1.1920928955078125e-07, -1.0251998901367188e-05,
-	1.3113021850585938e-06}, /* L1590 */
-{7.2028784751892090e+00, 2.4959444999694824e-04,
-	1.1920928955078125e-07, 9.9897384643554688e-05,
-	7.2598457336425781e-05}, /* L1591 */
-{6.3808298110961914e+00, 2.2146757692098618e-04,
-	1.1920928955078125e-07, 3.6787986755371094e-04,
-	-6.9081783294677734e-05}, /* L1592 */
-{8.0772647857666016e+00, 2.8081052005290985e-04,
-	1.1920928955078125e-07, 1.6140937805175781e-04,
-	2.1207332611083984e-04}, /* L1593 */
-{6.4131917953491211e+00, 2.2350251674652100e-04,
-	1.1920928955078125e-07, -1.4680624008178711e-04,
-	-4.6044588088989258e-04}, /* L1594 */
-{6.4220824241638184e+00, 2.2399425506591797e-04,
-	1.1920928955078125e-07, 5.4955482482910156e-05,
-	-1.9073486328125000e-04}, /* L1595 */
-{6.0896100997924805e+00, 2.1272432059049606e-04,
-	1.1920928955078125e-07, 1.1062622070312500e-04,
-	1.3709068298339844e-05}, /* L1596 */
-{6.5197033882141113e+00, 2.2843480110168457e-04,
-	1.1920928955078125e-07, -3.8433074951171875e-04,
-	2.2113323211669922e-04}, /* L1597 */
-{6.2656197547912598e+00, 2.1961331367492676e-04,
-	1.1920928955078125e-07, 5.9604644775390625e-07,
-	7.3909759521484375e-06}, /* L1598 */
-{5.9526052474975586e+00, 2.0903348922729492e-04,
-	1.1920928955078125e-07, 1.2767314910888672e-04,
-	1.3089179992675781e-04}, /* L1599 */
-{5.3630847930908203e+00, 1.8861889839172363e-04,
-	1.1920928955078125e-07, -3.6954879760742188e-05,
-	3.2186508178710938e-06}, /* L1600 */
-{5.8160314559936523e+00, 2.0493566989898682e-04,
-	1.1920928955078125e-07, 8.9287757873535156e-05,
-	-5.2988529205322266e-05}, /* L1601 */
-{5.7849211692810059e+00, 2.0414590835571289e-04,
-	1.1920928955078125e-07, 1.9192695617675781e-05,
-	2.9325485229492188e-05}, /* L1602 */
-{7.3695979118347168e+00, 2.6057288050651550e-04,
-	1.1920928955078125e-07, -8.8214874267578125e-05,
-	1.0168552398681641e-04}, /* L1603 */
-{5.8746728897094727e+00, 2.0802021026611328e-04,
-	1.1920928955078125e-07, 1.2874603271484375e-05,
-	3.9339065551757812e-06}, /* L1604 */
-{7.6387066841125488e+00, 2.7126073837280273e-04,
-	1.1920928955078125e-07, 5.3381919860839844e-04,
-	6.3467025756835938e-04}, /* L1605 */
-{6.6640315055847168e+00, 2.3685395717620850e-04,
-	1.1920928955078125e-07, 1.4805793762207031e-04,
-	-1.2105703353881836e-04}, /* L1606 */
-{7.4180846214294434e+00, 2.6440620422363281e-04,
-	1.1920928955078125e-07, 7.5030326843261719e-04,
-	3.3307075500488281e-04}, /* L1607 */
-{6.1843800544738770e+00, 2.2045196965336800e-04,
-	1.1920928955078125e-07, 6.1154365539550781e-05,
-	-3.1888484954833984e-05}, /* L1608 */
-{8.0226764678955078e+00, 2.8651952743530273e-04,
-	1.1920928955078125e-07, -3.0696392059326172e-05,
-	-1.5497207641601562e-05}, /* L1609 */
-{6.4083571434020996e+00, 2.3349747061729431e-04,
-	1.1920928955078125e-07, 7.7294111251831055e-03,
-	8.8059902191162109e-04}, /* L1610 */
-{6.6084260940551758e+00, 2.3680925369262695e-04,
-	1.1920928955078125e-07, 1.3136863708496094e-04,
-	8.0347061157226562e-05}, /* L1611 */
-{5.6835446357727051e+00, 2.0396709442138672e-04,
-	1.1920928955078125e-07, -3.3855438232421875e-05,
-	-1.3530254364013672e-05}, /* L1612 */
-{7.0634860992431641e+00, 2.6224553585052490e-04,
-	1.1920928955078125e-07, 2.8293132781982422e-03,
-	-6.3961744308471680e-03}, /* L1613 */
-{8.3286542892456055e+00, 3.0000880360603333e-04,
-	1.1920928955078125e-07, -1.8060207366943359e-04,
-	7.6293945312500000e-06}, /* L1614 */
-{6.0193595886230469e+00, 2.1710991859436035e-04,
-	1.1920928955078125e-07, -7.6889991760253906e-06,
-	-2.2649765014648438e-06}, /* L1615 */
-{8.2057666778564453e+00, 2.9712915420532227e-04,
-	1.1920928955078125e-07, -9.3710422515869141e-04,
-	6.3157081604003906e-04}, /* L1616 */
-{7.5656437873840332e+00, 2.7377344667911530e-04,
-	1.1920928955078125e-07, 3.9339065551757812e-05,
-	6.0796737670898438e-05}, /* L1617 */
-{8.0642127990722656e+00, 2.9236078262329102e-04,
-	1.1920928955078125e-07, -5.9366226196289062e-05,
-	7.9870223999023438e-06}, /* L1618 */
-{6.5877547264099121e+00, 2.3916363716125488e-04,
-	1.1920928955078125e-07, 8.4757804870605469e-05,
-	2.3603439331054688e-05}, /* L1619 */
-{6.5712537765502930e+00, 2.3898482322692871e-04,
-	1.1920928955078125e-07, -2.0802021026611328e-05,
-	9.9897384643554688e-05}, /* L1620 */
-{8.6658744812011719e+00, 3.1563639640808105e-04,
-	1.1920928955078125e-07, -6.9141387939453125e-06,
-	-4.5359134674072266e-05}, /* L1621 */
-{6.7469592094421387e+00, 2.4625658988952637e-04,
-	1.1920928955078125e-07, 1.2993812561035156e-04,
-	4.3511390686035156e-05}, /* L1622 */
-{7.2914371490478516e+00, 2.6673451066017151e-04,
-	1.1920928955078125e-07, -8.1598758697509766e-04,
-	-5.4031610488891602e-04}, /* L1623 */
-{9.4930953979492188e+00, 3.4746527671813965e-04,
-	1.1920928955078125e-07, 1.4543533325195312e-05,
-	-4.3272972106933594e-05}, /* L1624 */
-{5.7312974929809570e+00, 2.1012010984122753e-04,
-	1.1920928955078125e-07, -5.6982040405273438e-05,
-	9.1195106506347656e-05}, /* L1625 */
-{5.9745678901672363e+00, 2.1940469741821289e-04,
-	1.1920928955078125e-07, -4.5120716094970703e-05,
-	-2.6881694793701172e-05}, /* L1626 */
-{4.7506341934204102e+00, 1.7473101615905762e-04,
-	1.1920928955078125e-07, -5.3107738494873047e-05,
-	-2.4914741516113281e-05}, /* L1627 */
-{7.3024945259094238e+00, 2.6917457580566406e-04,
-	1.1920928955078125e-07, 1.3470649719238281e-04,
-	-1.7821788787841797e-05}, /* L1628 */
-{7.3836154937744141e+00, 2.7278065681457520e-04,
-	1.1920928955078125e-07, 5.6147575378417969e-05,
-	2.3281574249267578e-04}, /* L1629 */
-{6.6289205551147461e+00, 2.4520978331565857e-04,
-	1.1920928955078125e-07, 2.5522708892822266e-04,
-	3.9613246917724609e-04}, /* L1630 */
-{5.9359660148620605e+00, 2.1988153457641602e-04,
-	1.1920928955078125e-07, -2.9522180557250977e-04,
-	-2.6547908782958984e-04}, /* L1631 */
-{6.3866081237792969e+00, 2.7644634246826172e-04,
-	1.1920928955078125e-07, 4.7813892364501953e-02,
-	-4.1634857654571533e-02}, /* L1632 */
-{6.7924633026123047e+00, 2.5237351655960083e-04,
-	1.1920928955078125e-07, -2.8592348098754883e-04,
-	1.0669231414794922e-04}, /* L1633 */
-{5.8325419425964355e+00, 2.1696090698242188e-04,
-	1.1920928955078125e-07, -2.2530555725097656e-05,
-	-3.9517879486083984e-05}, /* L1634 */
-{8.8326196670532227e+00, 3.2913684844970703e-04,
-	1.1920928955078125e-07, -1.5616416931152344e-05,
-	1.9073486328125000e-06}, /* L1635 */
-{7.7967424392700195e+00, 2.9098987579345703e-04,
-	1.1920928955078125e-07, -3.0457973480224609e-05,
-	6.8068504333496094e-05}, /* L1636 */
-{7.0446209907531738e+00, 2.6366114616394043e-04,
-	1.1920928955078125e-07, 5.5193901062011719e-05,
-	-1.2505054473876953e-04}, /* L1637 */
-{5.8722696304321289e+00, 2.1991133689880371e-04,
-	1.1920928955078125e-07, 9.0599060058593750e-06,
-	2.4461746215820312e-04}, /* L1638 */
-{6.7226681709289551e+00, 2.5242567062377930e-04,
-	1.1920928955078125e-07, 2.3245811462402344e-05,
-	-1.6927719116210938e-05}, /* L1639 */
-{7.3555049896240234e+00, 2.7644634246826172e-04,
-	1.1920928955078125e-07, 2.7585029602050781e-04,
-	1.1384487152099609e-04}, /* L1640 */
-{7.1646018028259277e+00, 2.6959180831909180e-04,
-	1.1920928955078125e-07, -1.8101930618286133e-04,
-	-4.3749809265136719e-05}, /* L1641 */
-{6.6215577125549316e+00, 2.4950504302978516e-04,
-	1.1920928955078125e-07, 1.6331672668457031e-05,
-	5.8174133300781250e-05}, /* L1642 */
-{5.8195476531982422e+00, 2.1961331367492676e-04,
-	1.1920928955078125e-07, 5.7458877563476562e-05,
-	9.1791152954101562e-05}, /* L1643 */
-{6.3836760520935059e+00, 2.4129450321197510e-04,
-	1.1920928955078125e-07, 2.5033950805664062e-06,
-	-2.5093555450439453e-05}, /* L1644 */
-{9.0051755905151367e+00, 3.4102797508239746e-04,
-	1.1920928955078125e-07, -3.5703182220458984e-05,
-	-2.2363662719726562e-04}, /* L1645 */
-{6.8281569480895996e+00, 2.5889277458190918e-04,
-	1.1920928955078125e-07, 9.7036361694335938e-05,
-	-2.4855136871337891e-05}, /* L1646 */
-{8.8414764404296875e+00, 3.3578276634216309e-04,
-	1.1920928955078125e-07, -1.4364719390869141e-05,
-	1.1956691741943359e-04}, /* L1647 */
-{9.4787073135375977e+00, 3.6081671714782715e-04,
-	1.1920928955078125e-07, -2.1374225616455078e-04,
-	-8.2969665527343750e-05}, /* L1648 */
-{7.4477825164794922e+00, 2.8382986783981323e-04,
-	1.1920928955078125e-07, -4.5675039291381836e-04,
-	1.7809867858886719e-04}, /* L1649 */
-{7.4903297424316406e+00, 2.8580427169799805e-04,
-	1.1920928955078125e-07, 2.8610229492187500e-05,
-	-8.5353851318359375e-05}, /* L1650 */
-{7.1923398971557617e+00, 2.7483701705932617e-04,
-	1.1920928955078125e-07, -5.8114528656005859e-05,
-	-5.0842761993408203e-05}, /* L1651 */
-{9.4947175979614258e+00, 3.6343932151794434e-04,
-	1.1920928955078125e-07, -1.2582540512084961e-04,
-	-1.3440847396850586e-04}, /* L1652 */
-{5.4654045104980469e+00, 2.0959973335266113e-04,
-	1.1920928955078125e-07, -1.1622905731201172e-05,
-	-1.9204616546630859e-04}, /* L1653 */
-{7.8130364418029785e+00, 2.9996037483215332e-04,
-	1.1920928955078125e-07, 1.4662742614746094e-05,
-	0.0000000000000000e+00}, /* L1654 */
-{8.8489961624145508e+00, 3.4028291702270508e-04,
-	1.1920928955078125e-07, -2.6226043701171875e-06,
-	-2.9146671295166016e-05}, /* L1655 */
-{6.8574461936950684e+00, 2.6428699493408203e-04,
-	1.1920928955078125e-07, -1.2308359146118164e-04,
-	-1.9216537475585938e-04}, /* L1656 */
-{7.4716701507568359e+00, 2.8818845748901367e-04,
-	1.1920928955078125e-07, 7.0571899414062500e-05,
-	-8.6009502410888672e-05}, /* L1657 */
-{6.2409458160400391e+00, 2.4127960205078125e-04,
-	1.1920928955078125e-07, -4.3451786041259766e-05,
-	-4.4167041778564453e-05}, /* L1658 */
-{5.7782907485961914e+00, 2.2360682487487793e-04,
-	1.1920928955078125e-07, -2.9188394546508789e-04,
-	-1.1426210403442383e-04}, /* L1659 */
-{7.1288127899169922e+00, 2.7626752853393555e-04,
-	1.1920928955078125e-07, -5.8948993682861328e-05,
-	-1.5914440155029297e-04}, /* L1660 */
-{7.3286099433898926e+00, 2.8458237648010254e-04,
-	1.1920928955078125e-07, -1.0550022125244141e-04,
-	2.7155876159667969e-04}, /* L1661 */
-{8.6960897445678711e+00, 3.3807754516601562e-04,
-	1.1920928955078125e-07, -2.8473138809204102e-04,
-	-5.3167343139648438e-05}, /* L1662 */
-{8.4404230117797852e+00, 3.2868376001715660e-04,
-	1.1920928955078125e-07, 1.7619132995605469e-04,
-	1.0645389556884766e-04}, /* L1663 */
-{7.0070075988769531e+00, 2.7343630790710449e-04,
-	1.1920928955078125e-07, -2.8640031814575195e-04,
-	-3.0982494354248047e-04}, /* L1664 */
-{7.1653118133544922e+00, 2.8052553534507751e-04,
-	1.1920928955078125e-07, 6.7937374114990234e-04,
-	3.9863586425781250e-04}, /* L1665 */
-{5.4770722389221191e+00, 2.1421909332275391e-04,
-	1.1920928955078125e-07, 1.8715858459472656e-05,
-	-6.4015388488769531e-05}, /* L1666 */
-{6.1754908561706543e+00, 2.4187564849853516e-04,
-	1.1920928955078125e-07, -1.0854005813598633e-04,
-	1.5854835510253906e-05}, /* L1667 */
-{8.1684961318969727e+00, 3.2046437263488770e-04,
-	1.1920928955078125e-07, -3.6835670471191406e-05,
-	3.3617019653320312e-05}, /* L1668 */
-{7.9395952224731445e+00, 3.1191110610961914e-04,
-	1.1920928955078125e-07, -6.3598155975341797e-05,
-	-5.2452087402343750e-06}, /* L1669 */
-{7.2965555191040039e+00, 2.8708763420581818e-04,
-	1.1920928955078125e-07, 8.9526176452636719e-05,
-	-9.6619129180908203e-05}, /* L1670 */
-{6.1464676856994629e+00, 2.4226307868957520e-04,
-	1.1920928955078125e-07, -5.8472156524658203e-05,
-	-6.0796737670898438e-06}, /* L1671 */
-{6.9402055740356445e+00, 2.7392804622650146e-04,
-	1.1920928955078125e-07, -1.2093782424926758e-04,
-	-4.6730041503906250e-05}, /* L1672 */
-{7.8485608100891113e+00, 3.1125545501708984e-04,
-	1.1920928955078125e-07, 1.1475086212158203e-03,
-	1.1372566223144531e-03}, /* L1673 */
-{8.3945627212524414e+00, 3.3235549926757812e-04,
-	1.1920928955078125e-07, 7.0691108703613281e-05,
-	5.4121017456054688e-05}, /* L1674 */
-{9.3921451568603516e+00, 3.7246942520141602e-04,
-	1.1920928955078125e-07, 2.6106834411621094e-05,
-	-4.9412250518798828e-05}, /* L1675 */
-{6.4424710273742676e+00, 2.5579333305358887e-04,
-	1.1920928955078125e-07, -9.2983245849609375e-06,
-	-9.1791152954101562e-05}, /* L1676 */
-{6.0105714797973633e+00, 2.3901462554931641e-04,
-	1.1920928955078125e-07, 7.7009201049804688e-05,
-	4.6133995056152344e-05}, /* L1677 */
-{1.0094603538513184e+01, 4.0227174758911133e-04,
-	1.1920928955078125e-07, 2.1934509277343750e-05,
-	-2.5600194931030273e-04}, /* L1678 */
-{7.4718470573425293e+00, 2.9796361923217773e-04,
-	1.1920928955078125e-07, 4.2915344238281250e-06,
-	8.5830688476562500e-06}, /* L1679 */
-{7.1870899200439453e+00, 2.8711557388305664e-04,
-	1.1920928955078125e-07, 1.5366077423095703e-04,
-	1.6105175018310547e-04}, /* L1680 */
-{8.6702060699462891e+00, 3.5549700260162354e-04,
-	1.1920928955078125e-07, 4.1091442108154297e-04,
-	-4.9638748168945312e-03}, /* L1681 */
-{9.6852750778198242e+00, 3.8848072290420532e-04,
-	1.1920928955078125e-07, -3.4344196319580078e-04,
-	-5.3715705871582031e-04}, /* L1682 */
-{8.0611362457275391e+00, 3.2350420951843262e-04,
-	1.1920928955078125e-07, 1.0108947753906250e-04,
-	6.6518783569335938e-05}, /* L1683 */
-{8.0878114700317383e+00, 3.2500922679901123e-04,
-	1.1920928955078125e-07, -9.2327594757080078e-05,
-	3.4332275390625000e-05}, /* L1684 */
-{6.6700811386108398e+00, 2.6844441890716553e-04,
-	1.1920928955078125e-07, -6.6220760345458984e-05,
-	-1.1324882507324219e-06}, /* L1685 */
-{8.7757596969604492e+00, 3.5375356674194336e-04,
-	1.1920928955078125e-07, -8.9049339294433594e-05,
-	2.2053718566894531e-05}, /* L1686 */
-{7.8898215293884277e+00, 3.1843781471252441e-04,
-	1.1920928955078125e-07, 5.6147575378417969e-05,
-	-3.8206577301025391e-05}, /* L1687 */
-{7.8435001373291016e+00, 3.1750649213790894e-04,
-	1.1920928955078125e-07, -4.9018859863281250e-04,
-	2.4139881134033203e-04}, /* L1688 */
-{6.8878722190856934e+00, 2.7962028980255127e-04,
-	1.1920928955078125e-07, 5.3644180297851562e-04,
-	9.1743469238281250e-04}, /* L1689 */
-{8.0054874420166016e+00, 3.2514333724975586e-04,
-	1.1920928955078125e-07, -3.1340122222900391e-04,
-	-2.7525424957275391e-04}, /* L1690 */
-{6.1898012161254883e+00, 2.5136768817901611e-04,
-	1.1920928955078125e-07, -2.5087594985961914e-04,
-	6.8426132202148438e-05}, /* L1691 */
-{8.3880691528320312e+00, 3.4102052450180054e-04,
-	1.1920928955078125e-07, 6.9260597229003906e-05,
-	5.9247016906738281e-05}, /* L1692 */
-{7.6392235755920410e+00, 3.1103193759918213e-04,
-	1.1920928955078125e-07, 8.7022781372070312e-06,
-	4.0531158447265625e-06}, /* L1693 */
-{5.9234805107116699e+00, 2.4158135056495667e-04,
-	1.1920928955078125e-07, 7.2479248046875000e-05,
-	-1.3524293899536133e-04}, /* L1694 */
-{7.1599431037902832e+00, 2.9253959655761719e-04,
-	1.1920928955078125e-07, 2.6094913482666016e-04,
-	-5.3107738494873047e-05}, /* L1695 */
-{6.9457530975341797e+00, 2.8434395790100098e-04,
-	1.1920928955078125e-07, -3.8725137710571289e-04,
-	4.7433376312255859e-04}, /* L1696 */
-{7.5628337860107422e+00, 3.0997209250926971e-04,
-	1.1920928955078125e-07, 3.4880638122558594e-04,
-	-1.6421079635620117e-04}, /* L1697 */
-{8.9344701766967773e+00, 3.6644935607910156e-04,
-	1.1920928955078125e-07, -2.6404857635498047e-05,
-	3.8146972656250000e-05}, /* L1698 */
-{8.3928050994873047e+00, 3.4471787512302399e-04,
-	1.1920928955078125e-07, 8.5592269897460938e-05,
-	2.8729438781738281e-05}, /* L1699 */
-{7.4448008537292480e+00, 3.0811131000518799e-04,
-	1.1920928955078125e-07, 4.2700767517089844e-03,
-	1.3093948364257812e-03}, /* L1700 */
-{7.5336132049560547e+00, 3.1045079231262207e-04,
-	1.1920928955078125e-07, -3.9225816726684570e-04,
-	-1.7702579498291016e-04}, /* L1701 */
-{8.3356781005859375e+00, 3.4401565790176392e-04,
-	1.1920928955078125e-07, -9.5546245574951172e-05,
-	1.1432170867919922e-04}, /* L1702 */
-{7.3213653564453125e+00, 3.0249357223510742e-04,
-	1.1920928955078125e-07, 7.4625015258789062e-05,
-	3.0994415283203125e-06}, /* L1703 */
-{8.3764381408691406e+00, 3.4719705581665039e-04,
-	1.1920928955078125e-07, 1.1534690856933594e-03,
-	7.1549415588378906e-04}, /* L1704 */
-{8.1920614242553711e+00, 3.3940374851226807e-04,
-	1.1920928955078125e-07, -3.0159950256347656e-05,
-	7.0929527282714844e-05}, /* L1705 */
-{6.5224223136901855e+00, 2.7072429656982422e-04,
-	1.1920928955078125e-07, 5.2893161773681641e-04,
-	-6.4909458160400391e-05}, /* L1706 */
-{7.5301632881164551e+00, 3.1288713216781616e-04,
-	1.1920928955078125e-07, -1.6272068023681641e-05,
-	-6.8664550781250000e-05}, /* L1707 */
-{6.9484806060791016e+00, 2.8948485851287842e-04,
-	1.1920928955078125e-07, 4.6479701995849609e-04,
-	7.6484680175781250e-04}, /* L1708 */
-{8.4858427047729492e+00, 3.5366415977478027e-04,
-	1.1920928955078125e-07, 1.1384487152099609e-04,
-	5.6028366088867188e-05}, /* L1709 */
-{8.1798229217529297e+00, 3.4136325120925903e-04,
-	1.1920928955078125e-07, -3.2961368560791016e-05,
-	-1.5985965728759766e-04}, /* L1710 */
-{8.0417051315307617e+00, 3.3633410930633545e-04,
-	1.1920928955078125e-07, 3.1614303588867188e-04,
-	2.0956993103027344e-04}, /* L1711 */
-{6.3120932579040527e+00, 2.6422739028930664e-04,
-	1.1920928955078125e-07, 2.5510787963867188e-05,
-	2.5308132171630859e-04}, /* L1712 */
-{7.5596413612365723e+00, 3.1697191298007965e-04,
-	1.1920928955078125e-07, -1.7523765563964844e-05,
-	2.9826164245605469e-04}, /* L1713 */
-{8.9704370498657227e+00, 3.7647783756256104e-04,
-	1.1920928955078125e-07, 2.9087066650390625e-05,
-	-4.6610832214355469e-05}, /* L1714 */
-{7.8447594642639160e+00, 3.2970309257507324e-04,
-	1.1920928955078125e-07, -1.6093254089355469e-05,
-	6.9141387939453125e-05}, /* L1715 */
-{8.7568292617797852e+00, 3.6856532096862793e-04,
-	1.1920928955078125e-07, -7.0333480834960938e-06,
-	5.1736831665039062e-05}, /* L1716 */
-{7.1848812103271484e+00, 3.0285865068435669e-04,
-	1.1920928955078125e-07, -9.7155570983886719e-06,
-	-1.5765428543090820e-04}, /* L1717 */
-{6.2608566284179688e+00, 2.6431679725646973e-04,
-	1.1920928955078125e-07, -5.8889389038085938e-05,
-	1.3959407806396484e-04}, /* L1718 */
-{7.1052174568176270e+00, 3.0028820037841797e-04,
-	1.1920928955078125e-07, -6.5267086029052734e-05,
-	3.0994415283203125e-06}, /* L1719 */
-{8.1239242553710938e+00, 3.4400448203086853e-04,
-	1.1920928955078125e-07, -1.6486644744873047e-04,
-	-2.2834539413452148e-04}, /* L1720 */
-{7.3886308670043945e+00, 3.1322240829467773e-04,
-	1.1920928955078125e-07, 2.7298927307128906e-05,
-	1.8274784088134766e-04}, /* L1721 */
-{6.5135970115661621e+00, 2.7655065059661865e-04,
-	1.1920928955078125e-07, -1.0621547698974609e-04,
-	1.3160705566406250e-04}, /* L1722 */
-{7.9292917251586914e+00, 3.3712387084960938e-04,
-	1.1920928955078125e-07, -6.6161155700683594e-05,
-	1.1408329010009766e-04}, /* L1723 */
-{6.8155994415283203e+00, 2.9048323631286621e-04,
-	1.1920928955078125e-07, -1.8739700317382812e-04,
-	3.0899047851562500e-04}, /* L1724 */
-{1.2214772224426270e+01, 5.2075088024139404e-04,
-	1.1920928955078125e-07, 1.6331672668457031e-05,
-	1.2993812561035156e-05}, /* L1725 */
-{8.2308912277221680e+00, 3.5136938095092773e-04,
-	1.1920928955078125e-07, -9.0539455413818359e-05,
-	-5.1736831665039062e-05}, /* L1726 */
-{7.8772892951965332e+00, 3.3681560307741165e-04,
-	1.1920928955078125e-07, 7.2717666625976562e-05,
-	1.1563301086425781e-05}, /* L1727 */
-{7.1280322074890137e+00, 3.0514597892761230e-04,
-	1.1920928955078125e-07, 9.5725059509277344e-05,
-	-7.9214572906494141e-05}, /* L1728 */
-{6.7140235900878906e+00, 2.8777122497558594e-04,
-	1.1920928955078125e-07, -2.1398067474365234e-05,
-	2.8729438781738281e-05}, /* L1729 */
-{9.4931888580322266e+00, 4.0748715400695801e-04,
-	1.1920928955078125e-07, -3.7074089050292969e-05,
-	-2.0051002502441406e-04}, /* L1730 */
-{8.0390768051147461e+00, 3.4582614898681641e-04,
-	1.1920928955078125e-07, 2.6059150695800781e-04,
-	1.9061565399169922e-04}, /* L1731 */
-{8.4637918472290039e+00, 3.6428309977054596e-04,
-	1.1920928955078125e-07, 4.8875808715820312e-06,
-	-6.5565109252929688e-06}, /* L1732 */
-{6.7536096572875977e+00, 2.9107183218002319e-04,
-	1.1920928955078125e-07, 2.0742416381835938e-05,
-	2.9325485229492188e-05}, /* L1733 */
-{7.7602891921997070e+00, 3.3496320247650146e-04,
-	1.1920928955078125e-07, -4.4286251068115234e-05,
-	-1.0490417480468750e-04}, /* L1734 */
-{8.2205200195312500e+00, 3.5539269447326660e-04,
-	1.1920928955078125e-07, 4.4465065002441406e-05,
-	-1.1539459228515625e-04}, /* L1735 */
-{9.7931032180786133e+00, 4.2398273944854736e-04,
-	1.1920928955078125e-07, -1.1318922042846680e-04,
-	-7.0571899414062500e-05}, /* L1736 */
-{9.1870574951171875e+00, 3.9863586425781250e-04,
-	1.1920928955078125e-07, 1.8012523651123047e-04,
-	-4.4214725494384766e-04}, /* L1737 */
-{6.1563978195190430e+00, 2.6717782020568848e-04,
-	1.1920928955078125e-07, -3.3855438232421875e-05,
-	3.3855438232421875e-05}, /* L1738 */
-{6.8462176322937012e+00, 2.9757618904113770e-04,
-	1.1920928955078125e-07, -1.4549493789672852e-04,
-	6.2823295593261719e-05}, /* L1739 */
-{1.1501506805419922e+01, 5.0055235624313354e-04,
-	1.1920928955078125e-07, -3.1471252441406250e-05,
-	-6.5267086029052734e-05}, /* L1740 */
-{8.1276788711547852e+00, 3.5434588789939880e-04,
-	1.1920928955078125e-07, -2.8783082962036133e-04,
-	2.7835369110107422e-04}, /* L1741 */
-{8.9012432098388672e+00, 3.8963556289672852e-04,
-	1.1920928955078125e-07, 6.5410137176513672e-04,
-	2.0003318786621094e-04}, /* L1742 */
-{8.9505472183227539e+00, 3.9109587669372559e-04,
-	1.1920928955078125e-07, -9.0599060058593750e-06,
-	-3.4928321838378906e-05}, /* L1743 */
-{6.8560595512390137e+00, 3.0006840825080872e-04,
-	1.1920928955078125e-07, 4.6968460083007812e-05,
-	-1.9645690917968750e-04}, /* L1744 */
-{7.6387114524841309e+00, 3.3494830131530762e-04,
-	1.1920928955078125e-07, 1.8584728240966797e-04,
-	2.1016597747802734e-04}, /* L1745 */
-{1.3856999397277832e+01, 6.0841441154479980e-04,
-	1.1920928955078125e-07, 1.8370151519775391e-04,
-	-1.0305643081665039e-04}, /* L1746 */
-{9.5806503295898438e+00, 4.2113661766052246e-04,
-	1.1920928955078125e-07, 1.6701221466064453e-04,
-	-2.7120113372802734e-05}, /* L1747 */
-{9.3762521743774414e+00, 4.1258335113525391e-04,
-	1.1920928955078125e-07, 9.2983245849609375e-06,
-	-2.7179718017578125e-05}, /* L1748 */
-{7.1638541221618652e+00, 3.1572580337524414e-04,
-	1.1920928955078125e-07, 9.1433525085449219e-05,
-	6.5803527832031250e-05}, /* L1749 */
-{1.0060608863830566e+01, 4.4420361518859863e-04,
-	1.1920928955078125e-07, 9.4652175903320312e-05,
-	2.0051002502441406e-04}, /* L1750 */
-{1.0392632484436035e+01, 4.5907497406005859e-04,
-	1.1920928955078125e-07, -6.9022178649902344e-05,
-	-3.6299228668212891e-05}, /* L1751 */
-{1.0086337089538574e+01, 4.4629722833633423e-04,
-	1.1920928955078125e-07, -1.9544363021850586e-04,
-	2.3961067199707031e-05}, /* L1752 */
-{6.8485445976257324e+00, 3.0413269996643066e-04,
-	1.1920928955078125e-07, 3.1352043151855469e-04,
-	-1.0773539543151855e-03}, /* L1753 */
-{7.3182778358459473e+00, 3.2487511634826660e-04,
-	1.1920928955078125e-07, 1.4674663543701172e-04,
-	3.5083293914794922e-04}, /* L1754 */
-{1.1382732391357422e+01, 5.0559639930725098e-04,
-	1.1920928955078125e-07, 1.1527538299560547e-04,
-	-1.7821788787841797e-05}, /* L1755 */
-{1.1784219741821289e+01, 5.2417814731597900e-04,
-	1.1920928955078125e-07, -2.4318695068359375e-05,
-	1.4448165893554688e-04}, /* L1756 */
-{1.0092412948608398e+01, 4.4946372509002686e-04,
-	1.1920928955078125e-07, -3.5822391510009766e-05,
-	-1.7285346984863281e-06}, /* L1757 */
-{8.1610031127929688e+00, 3.6394596099853516e-04,
-	1.1920928955078125e-07, -3.4093856811523438e-05,
-	-9.8705291748046875e-05}, /* L1758 */
-{7.2934813499450684e+00, 3.2569468021392822e-04,
-	1.1920928955078125e-07, -2.9087066650390625e-05,
-	4.2796134948730469e-05}, /* L1759 */
-{8.9696063995361328e+00, 4.0209293365478516e-04,
-	1.1920928955078125e-07, 3.5285949707031250e-05,
-	6.9642066955566406e-04}, /* L1760 */
-{7.7596564292907715e+00, 3.4902349580079317e-04,
-	1.1920928955078125e-07, -3.0612945556640625e-04,
-	1.8527507781982422e-03}, /* L1761 */
-{7.5170044898986816e+00, 3.3697485923767090e-04,
-	1.1920928955078125e-07, -5.7280063629150391e-05,
-	3.1471252441406250e-05}, /* L1762 */
-{7.3801550865173340e+00, 3.3152103424072266e-04,
-	1.1920928955078125e-07, 3.1113624572753906e-04,
-	-3.6716461181640625e-05}, /* L1763 */
-{7.7326264381408691e+00, 3.4764409065246582e-04,
-	1.1920928955078125e-07, -1.4668703079223633e-04,
-	1.5175342559814453e-04}, /* L1764 */
-{9.9847259521484375e+00, 4.4937431812286377e-04,
-	1.1920928955078125e-07, 5.2332878112792969e-05,
-	2.6941299438476562e-05}, /* L1765 */
-{7.6198606491088867e+00, 3.4343823790550232e-04,
-	1.1920928955078125e-07, -4.8339366912841797e-05,
-	6.9141387939453125e-05}, /* L1766 */
-{9.3424644470214844e+00, 4.2179226875305176e-04,
-	1.1920928955078125e-07, 9.6797943115234375e-05,
-	8.2492828369140625e-05}, /* L1767 */
-{1.0122292518615723e+01, 4.5834481716156006e-04,
-	1.1920928955078125e-07, 1.8191337585449219e-04,
-	3.9446353912353516e-04}, /* L1768 */
-{7.8261585235595703e+00, 3.5451352596282959e-04,
-	1.1920928955078125e-07, 2.7298927307128906e-05,
-	-3.4487247467041016e-04}, /* L1769 */
-{6.3397402763366699e+00, 2.8729438781738281e-04,
-	1.1920928955078125e-07, 6.1154365539550781e-05,
-	-7.3611736297607422e-05}, /* L1770 */
-{8.0116338729858398e+00, 3.6415457725524902e-04,
-	1.1920928955078125e-07, 2.9325485229492188e-05,
-	-2.3478269577026367e-04}, /* L1771 */
-{6.4598374366760254e+00, 2.9349327087402344e-04,
-	1.1920928955078125e-07, -5.3763389587402344e-05,
-	1.1920928955078125e-06}, /* L1772 */
-{7.8836803436279297e+00, 3.5864114761352539e-04,
-	1.1920928955078125e-07, 1.6093254089355469e-05,
-	2.2649765014648438e-06}, /* L1773 */
-{7.3308377265930176e+00, 3.3399462699890137e-04,
-	1.1920928955078125e-07, 9.0599060058593750e-06,
-	-5.1498413085937500e-05}, /* L1774 */
-{8.9430446624755859e+00, 4.0802359580993652e-04,
-	1.1920928955078125e-07, -2.8252601623535156e-05,
-	7.9989433288574219e-05}, /* L1775 */
-{7.7559614181518555e+00, 3.5418570041656494e-04,
-	1.1920928955078125e-07, -6.0677528381347656e-05,
-	1.2338161468505859e-04}, /* L1776 */
-{8.5532112121582031e+00, 3.9142370223999023e-04,
-	1.1920928955078125e-07, 3.3950805664062500e-04,
-	2.3829936981201172e-04}, /* L1777 */
-{8.1330900192260742e+00, 3.7238001823425293e-04,
-	1.1920928955078125e-07, 8.1658363342285156e-05,
-	-4.2259693145751953e-05}, /* L1778 */
-{7.8867855072021484e+00, 3.6156177520751953e-04,
-	1.1920928955078125e-07, 5.8531761169433594e-05,
-	-3.3974647521972656e-05}, /* L1779 */
-{9.2829980850219727e+00, 4.2662024497985840e-04,
-	1.1920928955078125e-07, -7.8797340393066406e-05,
-	-2.9522180557250977e-04}, /* L1780 */
-{7.8920426368713379e+00, 3.6305189132690430e-04,
-	1.1920928955078125e-07, -2.1296739578247070e-04,
-	2.3496150970458984e-04}, /* L1781 */
-{5.2652087211608887e+00, 2.4230778217315674e-04,
-	1.1920928955078125e-07, -1.9311904907226562e-05,
-	8.9406967163085938e-06}, /* L1782 */
-{6.5016040802001953e+00, 2.9963254928588867e-04,
-	1.1920928955078125e-07, 1.9443035125732422e-04,
-	-1.8566846847534180e-04}, /* L1783 */
-{9.1465921401977539e+00, 4.2220950126647949e-04,
-	1.1920928955078125e-07, -2.5057792663574219e-04,
-	8.3446502685546875e-05}, /* L1784 */
-{7.5987195968627930e+00, 3.5110116004943848e-04,
-	1.1920928955078125e-07, -7.4267387390136719e-05,
-	-1.7285346984863281e-05}, /* L1785 */
-{1.1630291938781738e+01, 5.3809583187103271e-04,
-	1.1920928955078125e-07, 2.2125244140625000e-04,
-	-6.9677829742431641e-05}, /* L1786 */
-{7.4712214469909668e+00, 3.4604966640472412e-04,
-	1.1920928955078125e-07, -1.1742115020751953e-05,
-	-1.1265277862548828e-05}, /* L1787 */
-{9.6669740676879883e+00, 4.4859945774078369e-04,
-	1.1920928955078125e-07, 1.4150142669677734e-04,
-	-5.3405761718750000e-05}, /* L1788 */
-{8.1722412109375000e+00, 3.7953257560729980e-04,
-	1.1920928955078125e-07, -3.0994415283203125e-06,
-	-8.7618827819824219e-05}, /* L1789 */
-{8.9006671905517578e+00, 4.1392445564270020e-04,
-	1.1920928955078125e-07, -1.6689300537109375e-05,
-	-4.3511390686035156e-06}, /* L1790 */
-{7.6381330490112305e+00, 3.5577919334173203e-04,
-	1.1920928955078125e-07, 2.3305416107177734e-04,
-	3.1912326812744141e-04}, /* L1791 */
-{8.4448270797729492e+00, 3.9374083280563354e-04,
-	1.1920928955078125e-07, 1.0299682617187500e-04,
-	-8.8632106781005859e-05}, /* L1792 */
-{6.0394244194030762e+00, 2.8195232152938843e-04,
-	1.1920928955078125e-07, -6.4432621002197266e-05,
-	-2.7418136596679688e-05}, /* L1793 */
-{8.4957714080810547e+00, 3.9707217365503311e-04,
-	1.1920928955078125e-07, 6.4015388488769531e-05,
-	-4.6670436859130859e-05}, /* L1794 */
-{8.2524023056030273e+00, 3.8620829582214355e-04,
-	1.1920928955078125e-07, 4.1007995605468750e-05,
-	-2.1517276763916016e-05}, /* L1795 */
-{8.9413251876831055e+00, 4.1896104812622070e-04,
-	1.1920928955078125e-07, -2.0027160644531250e-05,
-	-2.0265579223632812e-06}, /* L1796 */
-{7.5875697135925293e+00, 3.5599619150161743e-04,
-	1.1920928955078125e-07, -3.0398368835449219e-06,
-	2.2053718566894531e-05}, /* L1797 */
-{9.3489646911621094e+00, 4.3928623199462891e-04,
-	1.1920928955078125e-07, 7.7486038208007812e-06,
-	5.7220458984375000e-05}, /* L1798 */
-{9.4379720687866211e+00, 4.4991075992584229e-04,
-	1.1920928955078125e-07, -1.2984871864318848e-03,
-	4.7528743743896484e-04}, /* L1799 */
-{8.9030637741088867e+00, 4.1933357715606689e-04,
-	1.1920928955078125e-07, 4.7206878662109375e-05,
-	5.2809715270996094e-05}, /* L1800 */
-{9.6848850250244141e+00, 4.5676529407501221e-04,
-	1.1920928955078125e-07, 1.4591217041015625e-04,
-	-3.2186508178710938e-06}, /* L1801 */
-{8.3598384857177734e+00, 3.9549171924591064e-04,
-	1.1920928955078125e-07, 4.7934055328369141e-04,
-	-3.0088424682617188e-04}, /* L1802 */
-{8.4960269927978516e+00, 4.0179770439863205e-04,
-	1.1920928955078125e-07, -1.6629695892333984e-05,
-	1.5556812286376953e-04}, /* L1803 */
-{9.2985544204711914e+00, 4.4021688518114388e-04,
-	1.1920928955078125e-07, 1.9252300262451172e-04,
-	-2.1517276763916016e-04}, /* L1804 */
-{9.7057590484619141e+00, 4.6023726463317871e-04,
-	1.1920928955078125e-07, 2.8359889984130859e-04,
-	-3.3080577850341797e-04}, /* L1805 */
-{7.9213466644287109e+00, 3.7634372711181641e-04,
-	1.1920928955078125e-07, -8.3565711975097656e-05,
-	1.5676021575927734e-04}, /* L1806 */
-{9.6130933761596680e+00, 4.5680999755859375e-04,
-	1.1920928955078125e-07, 5.4717063903808594e-05,
-	-3.5881996154785156e-05}, /* L1807 */
-{7.3325204849243164e+00, 3.4882128238677979e-04,
-	1.1920928955078125e-07, -6.3180923461914062e-05,
-	9.5367431640625000e-07}, /* L1808 */
-{1.3709208488464355e+01, 6.5575912594795227e-04,
-	1.1920928955078125e-07, -1.9404292106628418e-03,
-	2.8967857360839844e-05}, /* L1809 */
-{8.5193071365356445e+00, 4.0632486343383789e-04,
-	1.1920928955078125e-07, 1.9073486328125000e-04,
-	2.9683113098144531e-05}, /* L1810 */
-{9.9353561401367188e+00, 4.7567486763000488e-04,
-	1.1920928955078125e-07, -6.5171718597412109e-04,
-	5.9115886688232422e-04}, /* L1811 */
-{8.1408920288085938e+00, 3.8932263851165771e-04,
-	1.1920928955078125e-07, 8.8214874267578125e-05,
-	-2.1833181381225586e-04}, /* L1812 */
-{8.4855289459228516e+00, 4.0661357343196869e-04,
-	1.1920928955078125e-07, 3.1280517578125000e-04,
-	3.6406517028808594e-04}, /* L1813 */
-{9.4413423538208008e+00, 4.5257806777954102e-04,
-	1.1920928955078125e-07, 7.8797340393066406e-05,
-	-1.3589859008789062e-05}, /* L1814 */
-{8.0692148208618164e+00, 3.8731098175048828e-04,
-	1.1920928955078125e-07, -6.3240528106689453e-05,
-	-1.4781951904296875e-05}, /* L1815 */
-{1.0032471656799316e+01, 4.8217177391052246e-04,
-	1.1920928955078125e-07, 7.5101852416992188e-05,
-	7.8201293945312500e-05}, /* L1816 */
-{1.0497788429260254e+01, 5.0520896911621094e-04,
-	1.1920928955078125e-07, 2.0062923431396484e-04,
-	-1.1920928955078125e-07}, /* L1817 */
-{8.5386505126953125e+00, 4.1130185127258301e-04,
-	1.1920928955078125e-07, -4.8279762268066406e-05,
-	5.9723854064941406e-05}, /* L1818 */
-{6.9657130241394043e+00, 3.3596158027648926e-04,
-	1.1920928955078125e-07, -5.9485435485839844e-05,
-	8.4638595581054688e-06}, /* L1819 */
-{6.6829357147216797e+00, 3.2269954681396484e-04,
-	1.1920928955078125e-07, 2.9563903808593750e-05,
-	2.8610229492187500e-05}, /* L1820 */
-{9.6015148162841797e+00, 4.6496093273162842e-04,
-	1.1920928955078125e-07, -1.8113851547241211e-04,
-	-1.8864870071411133e-04}, /* L1821 */
-{7.5750684738159180e+00, 3.6722421646118164e-04,
-	1.1920928955078125e-07, 1.2636184692382812e-04,
-	-3.3521652221679688e-04}, /* L1822 */
-{8.1503810882568359e+00, 3.9502978324890137e-04,
-	1.1920928955078125e-07, 2.3245811462402344e-05,
-	1.1205673217773438e-05}, /* L1823 */
-{9.1790513992309570e+00, 4.4545531272888184e-04,
-	1.1920928955078125e-07, 1.5497207641601562e-05,
-	-2.4437904357910156e-05}, /* L1824 */
-{1.0218440055847168e+01, 4.9647688865661621e-04,
-	1.1920928955078125e-07, -1.0848045349121094e-05,
-	-1.1682510375976562e-05}, /* L1825 */
-{1.0018550872802734e+01, 4.8764050006866455e-04,
-	1.1920928955078125e-07, 3.7276744842529297e-04,
-	-2.6851892471313477e-04}, /* L1826 */
-{1.1475614547729492e+01, 5.5900216102600098e-04,
-	1.1920928955078125e-07, -1.0490417480468750e-05,
-	8.7022781372070312e-06}, /* L1827 */
-{7.5149459838867188e+00, 3.6661699414253235e-04,
-	1.1920928955078125e-07, 2.0074844360351562e-04,
-	-1.8823146820068359e-04}, /* L1828 */
-{8.7518529891967773e+00, 4.2748451232910156e-04,
-	1.1920928955078125e-07, -1.0424852371215820e-04,
-	-5.0067901611328125e-05}, /* L1829 */
-{9.5794782638549805e+00, 4.6828389167785645e-04,
-	1.1920928955078125e-07, 6.3180923461914062e-06,
-	1.1920928955078125e-05}, /* L1830 */
-{7.7948117256164551e+00, 3.8161873817443848e-04,
-	1.1920928955078125e-07, 5.9127807617187500e-05,
-	-2.4259090423583984e-05}, /* L1831 */
-{6.8610491752624512e+00, 3.3641606569290161e-04,
-	1.1920928955078125e-07, -2.8663873672485352e-04,
-	-2.2703409194946289e-04}, /* L1832 */
-{1.1438397407531738e+01, 5.6164711713790894e-04,
-	1.1920928955078125e-07, -5.7816505432128906e-04,
-	-3.6299228668212891e-04}, /* L1833 */
-{9.0859918594360352e+00, 4.4649466872215271e-04,
-	1.1920928955078125e-07, -2.4306774139404297e-04,
-	2.6357173919677734e-04}, /* L1834 */
-{9.2801256179809570e+00, 4.5673549175262451e-04,
-	1.1920928955078125e-07, 2.9206275939941406e-05,
-	-2.4962425231933594e-04}, /* L1835 */
-{7.4274253845214844e+00, 3.6585330963134766e-04,
-	1.1920928955078125e-07, 3.7789344787597656e-05,
-	-1.9091367721557617e-04}, /* L1836 */
-{1.1450325012207031e+01, 5.6454539299011230e-04,
-	1.1920928955078125e-07, -3.2007694244384766e-05,
-	6.1988830566406250e-06}, /* L1837 */
-{8.5475053787231445e+00, 4.2253732681274414e-04,
-	1.1920928955078125e-07, 3.9100646972656250e-04,
-	2.8538703918457031e-04}, /* L1838 */
-{7.4893050193786621e+00, 3.7036836147308350e-04,
-	1.1920928955078125e-07, -3.2490491867065430e-04,
-	4.2247772216796875e-04}, /* L1839 */
-{1.1874397277832031e+01, 5.8771669864654541e-04,
-	1.1920928955078125e-07, 1.9013881683349609e-04,
-	1.1134147644042969e-04}, /* L1840 */
-{9.4951753616333008e+00, 4.7510862350463867e-04,
-	1.1920928955078125e-07, -4.7467350959777832e-03,
-	-3.1897425651550293e-03}, /* L1841 */
-{6.9518699645996094e+00, 3.4487247467041016e-04,
-	1.1920928955078125e-07, -1.4883279800415039e-04,
-	7.2121620178222656e-05}, /* L1842 */
-{7.0681729316711426e+00, 3.5104155540466309e-04,
-	1.1920928955078125e-07, 2.0813941955566406e-04,
-	1.1444091796875000e-05}, /* L1843 */
-{1.0756000518798828e+01, 5.3673237562179565e-04,
-	1.1920928955078125e-07, 1.0007619857788086e-03,
-	-1.9377470016479492e-03}, /* L1844 */
-{8.8895196914672852e+00, 4.4274330139160156e-04,
-	1.1920928955078125e-07, 2.7668476104736328e-04,
-	-1.0246038436889648e-04}, /* L1845 */
-{7.7958626747131348e+00, 3.8865208625793457e-04,
-	1.1920928955078125e-07, 2.7418136596679688e-06,
-	1.0967254638671875e-05}, /* L1846 */
-{7.6057376861572266e+00, 3.7956237792968750e-04,
-	1.1920928955078125e-07, 9.7751617431640625e-05,
-	3.9935111999511719e-05}, /* L1847 */
-{6.5784082412719727e+00, 3.2880157232284546e-04,
-	1.1920928955078125e-07, 1.9431114196777344e-05,
-	-3.0541419982910156e-04}, /* L1848 */
-{8.9543466567993164e+00, 4.4825673103332520e-04,
-	1.1920928955078125e-07, 2.4735927581787109e-04,
-	-2.1570920944213867e-04}, /* L1849 */
-{9.0601425170898438e+00, 4.5377761125564575e-04,
-	1.1920928955078125e-07, 2.7298927307128906e-05,
-	-8.4877014160156250e-05}, /* L1850 */
-{1.0608367919921875e+01, 5.3188204765319824e-04,
-	1.1920928955078125e-07, -4.9352645874023438e-05,
-	-3.2126903533935547e-05}, /* L1851 */
-{8.4174890518188477e+00, 4.2295455932617188e-04,
-	1.1920928955078125e-07, -2.1207332611083984e-04,
-	5.1617622375488281e-05}, /* L1852 */
-{8.9814271926879883e+00, 4.5187771320343018e-04,
-	1.1920928955078125e-07, -5.4836273193359375e-04,
-	8.9180469512939453e-04}, /* L1853 */
-{8.0059556961059570e+00, 4.0289759635925293e-04,
-	1.1920928955078125e-07, -1.9848346710205078e-05,
-	1.0836124420166016e-04}, /* L1854 */
-{8.2595949172973633e+00, 4.1610747575759888e-04,
-	1.1920928955078125e-07, -8.3506107330322266e-05,
-	-1.3887882232666016e-05}, /* L1855 */
-{9.0352134704589844e+00, 4.5570731163024902e-04,
-	1.1920928955078125e-07, -3.3378601074218750e-05,
-	3.0040740966796875e-05}, /* L1856 */
-{8.3262290954589844e+00, 4.2049586772918701e-04,
-	1.1920928955078125e-07, -8.8095664978027344e-05,
-	-5.7816505432128906e-06}, /* L1857 */
-{9.2682580947875977e+00, 4.6864151954650879e-04,
-	1.1920928955078125e-07, -2.8300285339355469e-04,
-	-8.7916851043701172e-05}, /* L1858 */
-{9.8189849853515625e+00, 4.9709901213645935e-04,
-	1.1920928955078125e-07, -1.1974573135375977e-04,
-	-9.4830989837646484e-05}, /* L1859 */
-{1.0359735488891602e+01, 5.2499771118164062e-04,
-	1.1920928955078125e-07, 1.9323825836181641e-04,
-	-2.0384788513183594e-05}, /* L1860 */
-{6.5773878097534180e+00, 3.3459067344665527e-04,
-	1.1920928955078125e-07, -1.4141798019409180e-03,
-	8.0692768096923828e-04}, /* L1861 */
-{8.6505784988403320e+00, 4.3940544128417969e-04,
-	1.1920928955078125e-07, 9.0479850769042969e-05,
-	3.2305717468261719e-05}, /* L1862 */
-{6.9849939346313477e+00, 3.5546859726309776e-04,
-	1.1920928955078125e-07, 5.6743621826171875e-04,
-	-2.5689601898193359e-04}, /* L1863 */
-{9.3527984619140625e+00, 4.7633051872253418e-04,
-	1.1920928955078125e-07, 4.5061111450195312e-05,
-	-8.8810920715332031e-06}, /* L1864 */
-{8.6561861038208008e+00, 4.4298171997070312e-04,
-	1.1920928955078125e-07, -5.4836273193359375e-04,
-	-2.4150609970092773e-03}, /* L1865 */
-{8.7005128860473633e+00, 4.4403225183486938e-04,
-	1.1920928955078125e-07, -2.2590160369873047e-05,
-	-3.5524368286132812e-05}, /* L1866 */
-{7.5531415939331055e+00, 3.8588047027587891e-04,
-	1.1920928955078125e-07, 2.9802322387695312e-05,
-	-6.0737133026123047e-05}, /* L1867 */
-{8.7230911254882812e+00, 4.4808536767959595e-04,
-	1.1920928955078125e-07, -8.9961290359497070e-04,
-	-2.3205280303955078e-03}, /* L1868 */
-{8.5916881561279297e+00, 4.4009089469909668e-04,
-	1.1920928955078125e-07, 1.0716915130615234e-04,
-	-2.9814243316650391e-04}, /* L1869 */
-{9.1893367767333984e+00, 4.7269463539123535e-04,
-	1.1920928955078125e-07, 8.4483623504638672e-04,
-	2.0468235015869141e-04}, /* L1870 */
-{7.6518578529357910e+00, 3.9274990558624268e-04,
-	1.1920928955078125e-07, 1.4424324035644531e-05,
-	-4.1127204895019531e-06}, /* L1871 */
-{1.2129143714904785e+01, 6.2337517738342285e-04,
-	1.1920928955078125e-07, 1.0108947753906250e-04,
-	-9.4175338745117188e-06}, /* L1872 */
-{8.4717893600463867e+00, 4.3584406375885010e-04,
-	1.1920928955078125e-07, 2.9087066650390625e-05,
-	-5.7816505432128906e-06}, /* L1873 */
-{8.3352432250976562e+00, 4.2951107025146484e-04,
-	1.1920928955078125e-07, -2.9802322387695312e-06,
-	-8.1658363342285156e-05}, /* L1874 */
-{9.2474269866943359e+00, 4.7698616981506348e-04,
-	1.1920928955078125e-07, -2.6881694793701172e-05,
-	-8.8512897491455078e-05}, /* L1875 */
-{9.2441177368164062e+00, 4.7749280929565430e-04,
-	1.1920928955078125e-07, -1.6427040100097656e-04,
-	1.6307830810546875e-04}, /* L1876 */
-{9.9934844970703125e+00, 5.1665306091308594e-04,
-	1.1920928955078125e-07, 4.7326087951660156e-05,
-	1.1026859283447266e-04}, /* L1877 */
-{1.1417752265930176e+01, 5.9089064598083496e-04,
-	1.1920928955078125e-07, 5.2332878112792969e-05,
-	-3.3318996429443359e-05}, /* L1878 */
-{7.9370808601379395e+00, 4.1124224662780762e-04,
-	1.1920928955078125e-07, 1.7428398132324219e-04,
-	6.7710876464843750e-05}, /* L1879 */
-{9.8608522415161133e+00, 5.1711872220039368e-04,
-	1.1920928955078125e-07, -1.4584660530090332e-03,
-	1.9093751907348633e-03}, /* L1880 */
-{8.2230386734008789e+00, 4.2715668678283691e-04,
-	1.1920928955078125e-07, 1.6713142395019531e-04,
-	1.9180774688720703e-04}, /* L1881 */
-{7.4083065986633301e+00, 3.8517266511917114e-04,
-	1.1920928955078125e-07, 2.6941299438476562e-05,
-	8.3327293395996094e-05}, /* L1882 */
-{9.2573480606079102e+00, 4.8185419291257858e-04,
-	1.1920928955078125e-07, -3.5166740417480469e-06,
-	4.1961669921875000e-05}, /* L1883 */
-{1.0731763839721680e+01, 5.5927038192749023e-04,
-	1.1920928955078125e-07, -2.6583671569824219e-04,
-	4.1246414184570312e-05}, /* L1884 */
-{9.9990072250366211e+00, 5.2294135093688965e-04,
-	1.1920928955078125e-07, -7.5775384902954102e-04,
-	-6.0123205184936523e-04}, /* L1885 */
-{1.0617819786071777e+01, 5.5624544620513916e-04,
-	1.1920928955078125e-07, -1.2918114662170410e-03,
-	-2.8576850891113281e-03}, /* L1886 */
-{7.6358456611633301e+00, 3.9932131767272949e-04,
-	1.1920928955078125e-07, -9.3579292297363281e-06,
-	-5.2213668823242188e-05}, /* L1887 */
-{8.3299045562744141e+00, 4.3621659278869629e-04,
-	1.1920928955078125e-07, 1.8310546875000000e-04,
-	1.8501281738281250e-04}, /* L1888 */
-{9.2889890670776367e+00, 4.8676133155822754e-04,
-	1.1920928955078125e-07, -9.2267990112304688e-05,
-	7.0214271545410156e-05}, /* L1889 */
-{7.5539221763610840e+00, 4.0073692798614502e-04,
-	1.1920928955078125e-07, 4.8210620880126953e-03,
-	1.6785860061645508e-03}, /* L1890 */
-{8.1479606628417969e+00, 4.3424963951110840e-04,
-	1.1920928955078125e-07, -1.3075470924377441e-03,
-	-2.0909309387207031e-04}, /* L1891 */
-{6.6375904083251953e+00, 3.4964084625244141e-04,
-	1.1920928955078125e-07, 7.8320503234863281e-05,
-	3.7717819213867188e-04}, /* L1892 */
-{9.0733795166015625e+00, 4.7793984413146973e-04,
-	1.1920928955078125e-07, -2.3221969604492188e-04,
-	-3.7759542465209961e-04}, /* L1893 */
-{7.9673933982849121e+00, 4.2000412940979004e-04,
-	1.1920928955078125e-07, 6.5565109252929688e-05,
-	8.2015991210937500e-05}, /* L1894 */
-{1.0386767387390137e+01, 5.4809451103210449e-04,
-	1.1920928955078125e-07, -7.5995922088623047e-05,
-	-1.5854835510253906e-05}, /* L1895 */
-{1.0470783233642578e+01, 5.5384635925292969e-04,
-	1.1920928955078125e-07, 8.0704689025878906e-05,
-	1.0120868682861328e-04}, /* L1896 */
-{8.9655103683471680e+00, 4.7418475151062012e-04,
-	1.1920928955078125e-07, 1.5819072723388672e-04,
-	-1.6987323760986328e-05}, /* L1897 */
-{1.0187598228454590e+01, 5.3933262825012207e-04,
-	1.1920928955078125e-07, 6.5922737121582031e-05,
-	3.7670135498046875e-05}, /* L1898 */
-{1.1103092193603516e+01, 5.8859586715698242e-04,
-	1.1920928955078125e-07, 8.8810920715332031e-05,
-	1.5985965728759766e-04}, /* L1899 */
-{1.1348529815673828e+01, 6.0232728719711304e-04,
-	1.1920928955078125e-07, -3.8623809814453125e-05,
-	9.5129013061523438e-05}, /* L1900 */
-{1.0201865196228027e+01, 5.4249167442321777e-04,
-	1.1920928955078125e-07, -1.1128187179565430e-04,
-	5.1534175872802734e-04}, /* L1901 */
-{1.0959078788757324e+01, 5.8294832706451416e-04,
-	1.1920928955078125e-07, -2.4318695068359375e-04,
-	2.3114681243896484e-04}, /* L1902 */
-{9.6982774734497070e+00, 5.1629543304443359e-04,
-	1.1920928955078125e-07, 1.3113021850585938e-05,
-	2.3484230041503906e-05}, /* L1903 */
-{1.1804619789123535e+01, 6.2921643257141113e-04,
-	1.1920928955078125e-07, -2.6643276214599609e-05,
-	2.1123886108398438e-04}, /* L1904 */
-{1.0200138092041016e+01, 5.4486095905303955e-04,
-	1.1920928955078125e-07, 8.7666511535644531e-04,
-	-4.2217969894409180e-04}, /* L1905 */
-{9.2188777923583984e+00, 4.9246102571487427e-04,
-	1.1920928955078125e-07, 2.4676322937011719e-05,
-	2.0623207092285156e-05}, /* L1906 */
-{1.0456287384033203e+01, 5.5949389934539795e-04,
-	1.1920928955078125e-07, -2.7060508728027344e-05,
-	-3.4934282302856445e-04}, /* L1907 */
-{9.0423278808593750e+00, 4.8449635505676270e-04,
-	1.1920928955078125e-07, 7.0929527282714844e-05,
-	-5.6469440460205078e-04}, /* L1908 */
-{1.1014037132263184e+01, 5.9181451797485352e-04,
-	1.1920928955078125e-07, -5.2487850189208984e-04,
-	-6.7114830017089844e-05}, /* L1909 */
-{8.3355932235717773e+00, 4.4730305671691895e-04,
-	1.1920928955078125e-07, -1.0192394256591797e-05,
-	5.1379203796386719e-05}, /* L1910 */
-{1.0213484764099121e+01, 5.4895877838134766e-04,
-	1.1920928955078125e-07, 4.4870376586914062e-04,
-	1.3160705566406250e-04}, /* L1911 */
-{9.5378265380859375e+00, 5.1292777061462402e-04,
-	1.1920928955078125e-07, -7.9393386840820312e-05,
-	7.3909759521484375e-05}, /* L1912 */
-{1.0189579963684082e+01, 5.4869055747985840e-04,
-	1.1920928955078125e-07, -1.3172626495361328e-05,
-	6.8306922912597656e-05}, /* L1913 */
-{1.2732538223266602e+01, 6.8700313568115234e-04,
-	1.1920928955078125e-07, 6.9832801818847656e-04,
-	3.5011768341064453e-04}, /* L1914 */
-{8.5322532653808594e+00, 4.6125426888465881e-04,
-	1.1920928955078125e-07, -1.0893344879150391e-03,
-	-1.1384487152099609e-04}, /* L1915 */
-{9.4907054901123047e+00, 5.1279366016387939e-04,
-	1.1920928955078125e-07, 4.0650367736816406e-05,
-	-2.2530555725097656e-05}, /* L1916 */
-{7.6368107795715332e+00, 4.1300058364868164e-04,
-	1.1920928955078125e-07, -2.1994113922119141e-05,
-	1.7642974853515625e-05}, /* L1917 */
-{8.9430675506591797e+00, 4.8416852951049805e-04,
-	1.1920928955078125e-07, 1.5139579772949219e-05,
-	3.0755996704101562e-05}, /* L1918 */
-{9.6885662078857422e+00, 5.2526593208312988e-04,
-	1.1920928955078125e-07, 2.2149085998535156e-04,
-	9.6082687377929688e-05}, /* L1919 */
-{1.1273062705993652e+01, 6.1184167861938477e-04,
-	1.1920928955078125e-07, 2.1934509277343750e-05,
-	1.4090538024902344e-04}, /* L1920 */
-{8.2396593093872070e+00, 4.4792890548706055e-04,
-	1.1920928955078125e-07, 2.2864341735839844e-04,
-	2.9540061950683594e-04}, /* L1921 */
-{9.3179578781127930e+00, 5.0947070121765137e-04,
-	1.1920928955078125e-07, 2.4203062057495117e-03,
-	-4.7564506530761719e-05}, /* L1922 */
-{9.7452087402343750e+00, 5.3104758262634277e-04,
-	1.1920928955078125e-07, -1.7464160919189453e-05,
-	-7.8511238098144531e-04}, /* L1923 */
-{9.1860475540161133e+00, 5.0061941146850586e-04,
-	1.1920928955078125e-07, 4.9591064453125000e-05,
-	-8.3684921264648438e-05}, /* L1924 */
-{8.4290475845336914e+00, 4.5995414257049561e-04,
-	1.1920928955078125e-07, 1.5830993652343750e-04,
-	-1.2934207916259766e-05}, /* L1925 */
-{9.1229066848754883e+00, 5.0601363182067871e-04,
-	1.1920928955078125e-07, 6.1523914337158203e-04,
-	-4.0934681892395020e-03}, /* L1926 */
-{8.0631389617919922e+00, 4.4082850217819214e-04,
-	1.1920928955078125e-07, -4.8696994781494141e-05,
-	-3.5107135772705078e-05}, /* L1927 */
-{8.6928014755249023e+00, 4.7783553600311279e-04,
-	1.1920928955078125e-07, -9.1612339019775391e-04,
-	-2.5457143783569336e-03}, /* L1928 */
-{9.6367349624633789e+00, 5.2803754806518555e-04,
-	1.1920928955078125e-07, -1.4740228652954102e-04,
-	-2.4133920669555664e-04}, /* L1929 */
-{1.1175786018371582e+01, 6.1327219009399414e-04,
-	1.1920928955078125e-07, 2.1827220916748047e-04,
-	2.4306774139404297e-04}, /* L1930 */
-{1.0167559623718262e+01, 5.5964291095733643e-04,
-	1.1920928955078125e-07, -2.8723478317260742e-04,
-	4.0638446807861328e-04}, /* L1931 */
-{1.0183979988098145e+01, 5.5974721908569336e-04,
-	1.1920928955078125e-07, -3.2603740692138672e-05,
-	2.4437904357910156e-05}, /* L1932 */
-{8.8087539672851562e+00, 4.8625469207763672e-04,
-	1.1920928955078125e-07, -1.1152029037475586e-03,
-	-1.8329024314880371e-03}, /* L1933 */
-{1.4495589256286621e+01, 8.0052018165588379e-04,
-	1.1920928955078125e-07, -1.2446641921997070e-03,
-	-1.2664198875427246e-03}, /* L1934 */
-{1.0585183143615723e+01, 5.8382749557495117e-04,
-	1.1920928955078125e-07, 1.5079975128173828e-04,
-	1.0323524475097656e-04}, /* L1935 */
-{1.0339366912841797e+01, 5.7132169604301453e-04,
-	1.1920928955078125e-07, -4.0733814239501953e-04,
-	-4.0030479431152344e-04}, /* L1936 */
-{1.0962856292724609e+01, 6.0608610510826111e-04,
-	1.1920928955078125e-07, -3.0040740966796875e-05,
-	-2.4819374084472656e-04}, /* L1937 */
-{1.0381913185119629e+01, 5.7502835988998413e-04,
-	1.1920928955078125e-07, -3.5697221755981445e-04,
-	2.5451183319091797e-04}, /* L1938 */
-{1.1519732475280762e+01, 6.3921511173248291e-04,
-	1.1920928955078125e-07, 1.3747215270996094e-03,
-	-7.0559978485107422e-04}, /* L1939 */
-{9.5184192657470703e+00, 5.3052604198455811e-04,
-	1.1920928955078125e-07, -2.7453899383544922e-04,
-	4.1484832763671875e-05}, /* L1940 */
-{8.5668268203735352e+00, 4.7579407691955566e-04,
-	1.1920928955078125e-07, 9.1314315795898438e-05,
-	-2.3722648620605469e-04}, /* L1941 */
-{9.4552268981933594e+00, 5.4079294204711914e-04,
-	1.1920928955078125e-07, 4.3010711669921875e-04,
-	-4.7474503517150879e-03}, /* L1942 */
-{1.1977722167968750e+01, 6.6637992858886719e-04,
-	1.1920928955078125e-07, 3.5047531127929688e-05,
-	5.1021575927734375e-05}, /* L1943 */
-{1.0210963249206543e+01, 5.6863576173782349e-04,
-	1.1920928955078125e-07, -1.4752149581909180e-04,
-	-1.4781951904296875e-05}, /* L1944 */
-{1.2073630332946777e+01, 6.7320466041564941e-04,
-	1.1920928955078125e-07, 5.0902366638183594e-05,
-	7.1763992309570312e-05}, /* L1945 */
-{7.5864367485046387e+00, 4.3940544128417969e-04,
-	1.1920928955078125e-07, 1.1296272277832031e-03,
-	-8.2113146781921387e-03}, /* L1946 */
-{9.6716833114624023e+00, 5.4062157869338989e-04,
-	1.1920928955078125e-07, 1.5103816986083984e-04,
-	1.6689300537109375e-05}, /* L1947 */
-{1.0730534553527832e+01, 6.0021877288818359e-04,
-	1.1920928955078125e-07, -2.5868415832519531e-04,
-	4.1961669921875000e-05}, /* L1948 */
-{8.7035503387451172e+00, 4.8764050006866455e-04,
-	1.1920928955078125e-07, 2.2232532501220703e-04,
-	7.4315071105957031e-04}, /* L1949 */
-{8.5631618499755859e+00, 4.8037990927696228e-04,
-	1.1920928955078125e-07, -2.7400255203247070e-04,
-	-2.9486417770385742e-04}, /* L1950 */
-{8.8643732070922852e+00, 4.9737095832824707e-04,
-	1.1920928955078125e-07, -1.7321109771728516e-04,
-	-2.3066997528076172e-05}, /* L1951 */
-{9.5164451599121094e+00, 5.3486227989196777e-04,
-	1.1920928955078125e-07, 4.4643878936767578e-04,
-	9.8109245300292969e-05}, /* L1952 */
-{1.0712300300598145e+01, 6.0426443815231323e-04,
-	1.1920928955078125e-07, -4.5710802078247070e-04,
-	-7.0732831954956055e-04}, /* L1953 */
-{9.5847721099853516e+00, 5.3951144218444824e-04,
-	1.1920928955078125e-07, 3.0636787414550781e-05,
-	-4.6730041503906250e-05}, /* L1954 */
-{7.9309968948364258e+00, 4.4685602188110352e-04,
-	1.1920928955078125e-07, 7.5221061706542969e-05,
-	1.0347366333007812e-04}, /* L1955 */
-{6.8448896408081055e+00, 3.8608908653259277e-04,
-	1.1920928955078125e-07, -7.3850154876708984e-05,
-	8.9406967163085938e-06}, /* L1956 */
-{8.9013347625732422e+00, 5.0285458564758301e-04,
-	1.1920928955078125e-07, 3.8087368011474609e-04,
-	3.0231475830078125e-04}, /* L1957 */
-{8.0350475311279297e+00, 4.5436620712280273e-04,
-	1.1920928955078125e-07, -1.4233589172363281e-04,
-	-1.1080503463745117e-04}, /* L1958 */
-{1.0773261070251465e+01, 6.0981512069702148e-04,
-	1.1920928955078125e-07, -2.5522708892822266e-04,
-	-1.3500452041625977e-04}, /* L1959 */
-{1.1945131301879883e+01, 6.8248808383941650e-04,
-	1.1920928955078125e-07, -4.3541193008422852e-03,
-	6.8250894546508789e-03}, /* L1960 */
-{9.7029876708984375e+00, 5.5011361837387085e-04,
-	1.1920928955078125e-07, 8.7380409240722656e-05,
-	-1.8835067749023438e-05}, /* L1961 */
-{9.8058280944824219e+00, 5.5676698684692383e-04,
-	1.1920928955078125e-07, -1.3411045074462891e-05,
-	-1.2248754501342773e-04}, /* L1962 */
-{1.3611980438232422e+01, 7.7419006265699863e-04,
-	1.1920928955078125e-07, 3.5655498504638672e-04,
-	-2.2375583648681641e-04}, /* L1963 */
-{8.4177064895629883e+00, 4.7904253005981445e-04,
-	1.1920928955078125e-07, 5.0544738769531250e-05,
-	-2.1189451217651367e-04}, /* L1964 */
-{1.0175786972045898e+01, 5.7952105998992920e-04,
-	1.1920928955078125e-07, -1.3244152069091797e-04,
-	3.6311149597167969e-04}, /* L1965 */
-{8.3086719512939453e+00, 4.7411024570465088e-04,
-	1.1920928955078125e-07, -6.0033798217773438e-04,
-	2.2900104522705078e-04}, /* L1966 */
-{8.6043062210083008e+00, 4.9097090959548950e-04,
-	1.1920928955078125e-07, 8.3446502685546875e-07,
-	-1.5795230865478516e-05}, /* L1967 */
-{1.0641353607177734e+01, 6.0817599296569824e-04,
-	1.1920928955078125e-07, 5.7101249694824219e-05,
-	-3.8707256317138672e-04}, /* L1968 */
-{1.0268855094909668e+01, 5.8725476264953613e-04,
-	1.1920928955078125e-07, -2.1457672119140625e-06,
-	2.7763843536376953e-04}, /* L1969 */
-{1.2710402488708496e+01, 7.2799623012542725e-04,
-	1.1920928955078125e-07, 2.2530555725097656e-05,
-	-5.0431489944458008e-04}, /* L1970 */
-{1.1090595245361328e+01, 6.3568353652954102e-04,
-	1.1920928955078125e-07, 5.5551528930664062e-05,
-	4.3034553527832031e-05}, /* L1971 */
-{1.1624182701110840e+01, 6.6687166690826416e-04,
-	1.1920928955078125e-07, 1.5711784362792969e-04,
-	2.2065639495849609e-04}, /* L1972 */
-{1.0314638137817383e+01, 5.9263408184051514e-04,
-	1.1920928955078125e-07, 2.4759769439697266e-04,
-	4.5609474182128906e-04}, /* L1973 */
-{1.0397470474243164e+01, 5.9762597084045410e-04,
-	1.1920928955078125e-07, 2.0384788513183594e-05,
-	1.8596649169921875e-05}, /* L1974 */
-{7.9526839256286621e+00, 4.5779347419738770e-04,
-	1.1920928955078125e-07, 1.0085105895996094e-04,
-	-7.6770782470703125e-05}, /* L1975 */
-{8.9509191513061523e+00, 5.1692128181457520e-04,
-	1.1920928955078125e-07, 3.5035610198974609e-04,
-	1.5652179718017578e-04}, /* L1976 */
-{9.6313333511352539e+00, 5.5524706840515137e-04,
-	1.1920928955078125e-07, -5.7697296142578125e-05,
-	-6.1631202697753906e-05}, /* L1977 */
-{1.0058417320251465e+01, 5.8156251907348633e-04,
-	1.1920928955078125e-07, 3.1507015228271484e-04,
-	-2.2852420806884766e-04}, /* L1978 */
-{1.0616869926452637e+01, 6.1337649822235107e-04,
-	1.1920928955078125e-07, 1.8596649169921875e-05,
-	-9.7274780273437500e-05}, /* L1979 */
-{9.6551551818847656e+00, 5.5843591690063477e-04,
-	1.1920928955078125e-07, -7.4684619903564453e-05,
-	5.7458877563476562e-05}, /* L1980 */
-{9.6228322982788086e+00, 5.5742263793945312e-04,
-	1.1920928955078125e-07, -1.2600421905517578e-04,
-	2.7525424957275391e-04}, /* L1981 */
-{1.0596381187438965e+01, 6.1428546905517578e-04,
-	1.1920928955078125e-07, -4.6432018280029297e-05,
-	1.3089179992675781e-04}, /* L1982 */
-{1.2365359306335449e+01, 7.1737170219421387e-04,
-	1.1920928955078125e-07, 1.7440319061279297e-04,
-	-2.4855136871337891e-05}, /* L1983 */
-{9.0907354354858398e+00, 5.2788853645324707e-04,
-	1.1920928955078125e-07, 9.0479850769042969e-05,
-	-1.0967254638671875e-05}, /* L1984 */
-{9.0471115112304688e+00, 5.2592158317565918e-04,
-	1.1920928955078125e-07, 8.5949897766113281e-05,
-	1.7762184143066406e-05}, /* L1985 */
-{1.0919524192810059e+01, 6.3553452491760254e-04,
-	1.1920928955078125e-07, 5.7220458984375000e-05,
-	1.1074542999267578e-04}, /* L1986 */
-{9.3615312576293945e+00, 5.4559111595153809e-04,
-	1.1920928955078125e-07, -1.4656782150268555e-04,
-	2.0146369934082031e-04}, /* L1987 */
-{9.8919372558593750e+00, 5.7685188949108124e-04,
-	1.1920928955078125e-07, 1.1503696441650391e-04,
-	-6.2584877014160156e-06}, /* L1988 */
-{9.1773252487182617e+00, 5.3569674491882324e-04,
-	1.1920928955078125e-07, -4.5537948608398438e-05,
-	2.2327899932861328e-04}, /* L1989 */
-{1.0185897827148438e+01, 5.9595331549644470e-04,
-	1.1920928955078125e-07, -6.0927867889404297e-04,
-	6.8533420562744141e-04}, /* L1990 */
-{8.6529941558837891e+00, 5.0607323646545410e-04,
-	1.1920928955078125e-07, -5.1140785217285156e-05,
-	1.9717216491699219e-04}, /* L1991 */
-{9.2955474853515625e+00, 5.4464489221572876e-04,
-	1.1920928955078125e-07, 3.8146972656250000e-06,
-	-1.4382600784301758e-04}, /* L1992 */
-{9.4217214584350586e+00, 5.5211782455444336e-04,
-	1.1920928955078125e-07, -6.5863132476806641e-05,
-	-4.2617321014404297e-05}, /* L1993 */
-{9.1833600997924805e+00, 5.3887069225311279e-04,
-	1.1920928955078125e-07, -5.1856040954589844e-06,
-	-6.4492225646972656e-05}, /* L1994 */
-{1.0723596572875977e+01, 6.3091516494750977e-04,
-	1.1920928955078125e-07, -9.6172094345092773e-04,
-	1.8572807312011719e-04}, /* L1995 */
-{1.4520234107971191e+01, 8.5377693176269531e-04,
-	1.1920928955078125e-07, 1.4865398406982422e-04,
-	7.2598457336425781e-05}, /* L1996 */
-{8.6223506927490234e+00, 5.0773471593856812e-04,
-	1.1920928955078125e-07, 2.6702880859375000e-05,
-	-3.0374526977539062e-04}, /* L1997 */
-{1.2070078849792480e+01, 7.1102380752563477e-04,
-	1.1920928955078125e-07, -1.4424324035644531e-05,
-	-6.3002109527587891e-05}, /* L1998 */
-{1.1777620315551758e+01, 6.9475173950195312e-04,
-	1.1920928955078125e-07, 7.6770782470703125e-05,
-	-1.4966726303100586e-04}, /* L1999 */
-{1.2227584838867188e+01, 7.2187930345535278e-04,
-	1.1920928955078125e-07, 3.4451484680175781e-05,
-	3.6478042602539062e-05}, /* L2000 */
-{8.8412332534790039e+00, 5.2274763584136963e-04,
-	1.1920928955078125e-07, -1.4603137969970703e-04,
-	-7.0863962173461914e-04}, /* L2001 */
-{1.3288765907287598e+01, 7.8594684600830078e-04,
-	1.1920928955078125e-07, 1.0967254638671875e-05,
-	8.1181526184082031e-05}, /* L2002 */
-{1.4326131820678711e+01, 8.4811449050903320e-04,
-	1.1920928955078125e-07, -5.1081180572509766e-05,
-	1.9431114196777344e-05}, /* L2003 */
-{1.0843397140502930e+01, 6.4434111118316650e-04,
-	1.1920928955078125e-07, 9.0384483337402344e-04,
-	-4.3058395385742188e-04}, /* L2004 */
-{1.0322278022766113e+01, 6.1281025409698486e-04,
-	1.1920928955078125e-07, -2.3847818374633789e-04,
-	-3.7145614624023438e-04}, /* L2005 */
-{1.0549732208251953e+01, 6.2641501426696777e-04,
-	1.1920928955078125e-07, 1.6689300537109375e-05,
-	-2.9683113098144531e-05}, /* L2006 */
-{1.1172326087951660e+01, 6.6402554512023926e-04,
-	1.1920928955078125e-07, 4.5418739318847656e-05,
-	3.2782554626464844e-05}, /* L2007 */
-{1.0778042793273926e+01, 6.4164400100708008e-04,
-	1.1920928955078125e-07, -6.8366527557373047e-05,
-	1.2004375457763672e-04}, /* L2008 */
-{1.1256361007690430e+01, 6.7144632339477539e-04,
-	1.1920928955078125e-07, -2.4515390396118164e-04,
-	-1.3053417205810547e-05}, /* L2009 */
-{8.3230304718017578e+00, 4.9619842320680618e-04,
-	1.1920928955078125e-07, -2.8491020202636719e-05,
-	-4.0531158447265625e-05}, /* L2010 */
-{1.9389345169067383e+01, 2.3628771305084229e-03,
-	1.1920928955078125e-07, -8.1286430358886719e-03,
-	3.5625696182250977e-03}, /* L2011 */
-{2.2398042678833008e+01, 4.0780454874038696e-03,
-	1.1920928955078125e-07, -4.2932629585266113e-03,
-	7.0285797119140625e-04}, /* L2012 */
-{3.7127368927001953e+01, 8.9380443096160889e-03,
-	1.1920928955078125e-07, -4.1711330413818359e-04,
-	1.5066862106323242e-03}, /* L2013 */
-{4.4158779144287109e+01, 1.3220252469182014e-02,
-	1.1920928955078125e-07, -1.3178586959838867e-04,
-	5.6421756744384766e-04}, /* L2014 */
-{5.0687767028808594e+01, 1.8235534429550171e-02,
-	1.1920928955078125e-07, 2.0543336868286133e-03,
-	1.3195276260375977e-03}, /* L2015 */
-{6.0456470489501953e+01, 2.5663286447525024e-02,
-	1.1920928955078125e-07, 2.4507045745849609e-03,
-	-4.9054622650146484e-05}, /* L2016 */
-{6.7426277160644531e+01, 3.2831013202667236e-02,
-	1.1920928955078125e-07, -7.8994035720825195e-04,
-	-4.4494867324829102e-03}, /* L2017 */
-{7.1163208007812500e+01, 4.6596020460128784e-02,
-	1.1920928955078125e-07, -6.0402154922485352e-03,
-	4.1137099266052246e-02}, /* L2018 */
-{9.2498748779296875e+01, 5.6218922138214111e-02,
-	1.1920928955078125e-07, -5.7453513145446777e-03,
-	3.6135911941528320e-03}, /* L2019 */
-#endif	/* } */
-
-/* Always the last one. Common to both DP and SP */
-
-{0.0000000000000000e+00, 0.0000000000000000e+00,
-	0.0000000000000000e+00, 0.0000000000000000e+00,
-	0.0000000000000000e+00}, /* L2020 */
-};
-
-#endif	/* LAPACK_V9B_SS13 */
--- a/usr/src/cmd/fs.d/nfs/nfsstat/Makefile	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/cmd/fs.d/nfs/nfsstat/Makefile	Mon Aug 10 10:43:48 2009 -0400
@@ -33,6 +33,14 @@
 OBJS=	nfsstat.o $(COMMON)
 SRCS=	nfsstat.c ../lib/nfs_sec.c
 
+STATCOMMONDIR = $(SRC)/cmd/stat/common
+
+STAT_COMMON_OBJS = timestamp.o
+STAT_COMMON_SRCS = $(STAT_COMMON_OBJS:%.o=$(STATCOMMONDIR)/%.c)
+SRCS += $(STAT_COMMON_SRCS)
+OBJS += $(STAT_COMMON_OBJS)
+
+CPPFLAGS += -I$(STATCOMMONDIR)
 LDLIBS += -lkstat -lnsl
 
 $(PROG):	$(OBJS)
@@ -48,6 +56,9 @@
 nfs_sec.o:	../lib/nfs_sec.c
 		$(COMPILE.c) ../lib/nfs_sec.c
 
+%.o:    $(STATCOMMONDIR)/%.c
+	$(COMPILE.c) $<
+
 install:	all $(ROOTPROG)
 
 lint:
--- a/usr/src/cmd/fs.d/nfs/nfsstat/nfsstat.c	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/cmd/fs.d/nfs/nfsstat/nfsstat.c	Mon Aug 10 10:43:48 2009 -0400
@@ -23,12 +23,10 @@
 /* PROTOLIB1 */
 
 /*
- * Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
+ * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
  * Use is subject to license terms.
  */
 
-#pragma ident	"%Z%%M%	%I%	%E% SMI"
-
 /*
  * nfsstat: Network File System statistics
  *
@@ -65,7 +63,9 @@
 #include <sys/time.h>
 #include <strings.h>
 #include <ctype.h>
+#include <locale.h>
 
+#include "statcommon.h"
 
 static kstat_ctl_t *kc = NULL;		/* libkstat cookie */
 static kstat_t *rpc_clts_client_kstat, *rpc_clts_server_kstat;
@@ -97,14 +97,13 @@
 static void req_print(kstat_t *, kstat_t *, int, int, int);
 static void req_print_v4(kstat_t *, kstat_t *, int, int);
 static void stat_print(const char *, kstat_t *, kstat_t *, int, int);
-static void kstat_sum(kstat_t *, kstat_t *, kstat_t *);
+static void nfsstat_kstat_sum(kstat_t *, kstat_t *, kstat_t *);
 static void stats_timer(int);
 static void safe_zalloc(void **, uint_t, int);
 static int safe_strtoi(char const *, char *);
 
 
-static void kstat_copy(kstat_t *, kstat_t *, int);
-static void fail(int, char *, ...);
+static void nfsstat_kstat_copy(kstat_t *, kstat_t *, int);
 static kid_t safe_kstat_read(kstat_ctl_t *, kstat_t *, void *);
 static kid_t safe_kstat_write(kstat_ctl_t *, kstat_t *, void *);
 
@@ -149,7 +148,11 @@
 static old_kstat_t old_aclproccnt_v2_kstat, old_aclproccnt_v3_kstat;
 static old_kstat_t old_aclreqcnt_v2_kstat, old_aclreqcnt_v3_kstat;
 
+static uint_t timestamp_fmt = NODATE;
 
+#if !defined(TEXT_DOMAIN)		/* Should be defined by cc -D */
+#define	TEXT_DOMAIN "SYS_TEST"		/* Use this only if it isn't */
+#endif
 
 int
 main(int argc, char *argv[])
@@ -170,7 +173,10 @@
 	count = 0;
 	go_forever = 0;
 
-	while ((c = getopt(argc, argv, "cnrsmzav:")) != EOF) {
+	(void) setlocale(LC_ALL, "");
+	(void) textdomain(TEXT_DOMAIN);
+
+	while ((c = getopt(argc, argv, "cnrsmzav:T:")) != EOF) {
 		switch (c) {
 		case 'c':
 			cflag++;
@@ -200,6 +206,18 @@
 			if ((vflag < 2) || (vflag > 4))
 				fail(0, "Invalid version number\n");
 			break;
+		case 'T':
+			if (optarg) {
+				if (*optarg == 'u')
+					timestamp_fmt = UDATE;
+				else if (*optarg == 'd')
+					timestamp_fmt = DDATE;
+				else
+					usage();
+			} else {
+				usage();
+			}
+			break;
 		case '?':
 		default:
 			usage();
@@ -255,6 +273,8 @@
 		if (mflag) {
 			mi_print();
 		} else {
+			if (timestamp_fmt != NODATE)
+				print_timestamp(timestamp_fmt);
 
 			if (sflag &&
 			    (rpc_clts_server_kstat == NULL ||
@@ -619,7 +639,8 @@
 		return;
 
 	if (vflag == 0) {
-		kstat_sum(nfs_client_kstat, nfs4_client_kstat, ksum_kstat);
+		nfsstat_kstat_sum(nfs_client_kstat, nfs4_client_kstat,
+		    ksum_kstat);
 		stat_print("\nClient nfs:", ksum_kstat, &old_ksum_kstat.kst,
 		    field_width, zflag);
 	}
@@ -810,9 +831,9 @@
 			knp[i].value.ui64 = 0;
 	}
 	if (knp_old != NULL)
-		kstat_copy(req, req_old, 1);
+		nfsstat_kstat_copy(req, req_old, 1);
 	else
-		kstat_copy(req, req_old, 0);
+		nfsstat_kstat_copy(req, req_old, 0);
 }
 
 /*
@@ -918,9 +939,9 @@
 			kptr[i].value.ui64 = 0;
 	}
 	if (kptr_old != NULL)
-		kstat_copy(req, req_old, 1);
+		nfsstat_kstat_copy(req, req_old, 1);
 	else
-		kstat_copy(req, req_old, 0);
+		nfsstat_kstat_copy(req, req_old, 0);
 }
 
 static void
@@ -969,13 +990,13 @@
 	}
 
 	if (knp_old != NULL)
-		kstat_copy(req, req_old, 1);
+		nfsstat_kstat_copy(req, req_old, 1);
 	else
-		kstat_copy(req, req_old, 0);
+		nfsstat_kstat_copy(req, req_old, 0);
 }
 
 static void
-kstat_sum(kstat_t *kstat1, kstat_t *kstat2, kstat_t *sum)
+nfsstat_kstat_sum(kstat_t *kstat1, kstat_t *kstat2, kstat_t *sum)
 {
 	int i;
 	kstat_named_t *knp1, *knp2, *knpsum;
@@ -985,7 +1006,7 @@
 	knp1 = KSTAT_NAMED_PTR(kstat1);
 	knp2 = KSTAT_NAMED_PTR(kstat2);
 	if (sum->ks_data == NULL)
-		kstat_copy(kstat1, sum, 0);
+		nfsstat_kstat_copy(kstat1, sum, 0);
 	knpsum = KSTAT_NAMED_PTR(sum);
 
 	for (i = 0; i < (kstat1->ks_ndata); i++)
@@ -1297,12 +1318,12 @@
 usage(void)
 {
 	fprintf(stderr, "Usage: nfsstat [-cnrsza [-v version] "
-	    "[interval [count]]\n");
+	    "[-T d|u] [interval [count]]\n");
 	fprintf(stderr, "Usage: nfsstat -m [pathname..]\n");
 	exit(1);
 }
 
-static void
+void
 fail(int do_perror, char *message, ...)
 {
 	va_list args;
@@ -1385,7 +1406,7 @@
 }
 
 static void
-kstat_copy(kstat_t *src, kstat_t *dst, int fr)
+nfsstat_kstat_copy(kstat_t *src, kstat_t *dst, int fr)
 {
 
 	if (fr)
--- a/usr/src/cmd/intrstat/Makefile.com	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/cmd/intrstat/Makefile.com	Mon Aug 10 10:43:48 2009 -0400
@@ -29,22 +29,33 @@
 
 include ../../Makefile.cmd
 
+STATCOMMONDIR = $(SRC)/cmd/stat/common
+
+STAT_COMMON_OBJS = timestamp.o
+STAT_COMMON_SRCS = $(STAT_COMMON_OBJS:%.o=$(STATCOMMONDIR)/%.c)
+SRCS += $(STAT_COMMON_SRCS)
+
+CPPFLAGS += -I$(STATCOMMONDIR)
 CFLAGS += $(CCVERBOSE)
 CFLAGS64 += $(CCVERBOSE)
 LDLIBS += -ldtrace
 
 FILEMODE = 0555
 
-CLEANFILES += $(OBJS)
+CLEANFILES += $(OBJS) $(STAT_COMMON_OBJS)
 
 .KEEP_STATE:
 
 all: $(PROG)
 
-$(PROG): $(OBJS)
-	$(LINK.c) -o $@ $(OBJS) $(LDLIBS)
+$(PROG): $(OBJS) $(STAT_COMMON_OBJS)
+	$(LINK.c) -o $@ $(OBJS) $(STAT_COMMON_OBJS) $(LDLIBS)
 	$(POST_PROCESS) ; $(STRIP_STABS)
 
+%.o : $(STATCOMMONDIR)/%.c
+	$(COMPILE.c) -o $@ $<
+	$(POST_PROCESS_O)
+
 clean:
 	-$(RM) $(CLEANFILES)
 
--- a/usr/src/cmd/intrstat/intrstat.c	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/cmd/intrstat/intrstat.c	Mon Aug 10 10:43:48 2009 -0400
@@ -34,12 +34,21 @@
 #include <strings.h>
 #include <termio.h>
 #include <signal.h>
+#include <locale.h>
+
+#include "statcommon.h"
 
 #define	INTRSTAT_COLUMN_OFFS		14
 #define	INTRSTAT_COLUMNS_PER_CPU	15
 #define	INTRSTAT_CPUS_PER_LINE(w)	\
 	(((w) - INTRSTAT_COLUMN_OFFS) / INTRSTAT_COLUMNS_PER_CPU)
-#define	INTRSTAT_OPTSTR			"x:c:C:"
+#define	INTRSTAT_OPTSTR			"x:c:C:T:"
+
+static uint_t timestamp_fmt = NODATE;
+
+#if !defined(TEXT_DOMAIN)		/* Should be defined by cc -D */
+#define	TEXT_DOMAIN "SYS_TEST"		/* Use this only if it isn't */
+#endif
 
 static dtrace_hdl_t *g_dtp;
 static int *g_present;
@@ -78,7 +87,7 @@
 {
 	(void) fprintf(stderr,
 	    "usage:  intrstat [ -C psrset | -c cpulist ]  [-x opt[=val]] "
-	    "[interval [ count]]\n");
+	    "[-T d|u] [interval [ count]]\n");
 
 	exit(EXIT_FAILURE);
 }
@@ -358,6 +367,9 @@
 	hrtime_t last, now;
 	dtrace_optval_t statustime;
 
+	(void) setlocale(LC_ALL, "");
+	(void) textdomain(TEXT_DOMAIN);
+
 	(void) sigemptyset(&act.sa_mask);
 	act.sa_flags = 0;
 	act.sa_handler = set_width;
@@ -452,6 +464,19 @@
 			break;
 		}
 
+		case 'T':
+			if (optarg) {
+				if (*optarg == 'u')
+					timestamp_fmt = UDATE;
+				else if (*optarg == 'd')
+					timestamp_fmt = DDATE;
+				else
+					usage();
+			} else {
+				usage();
+			}
+			break;
+
 		default:
 			if (strchr(INTRSTAT_OPTSTR, c) == NULL)
 				usage();
@@ -580,6 +605,9 @@
 
 		g_start = g_end = 0;
 
+		if (timestamp_fmt != NODATE)
+			print_timestamp(timestamp_fmt);
+
 		do {
 			g_header = 1;
 
--- a/usr/src/cmd/mdb/common/kmdb/kctl/kctl_main.c	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/cmd/mdb/common/kmdb/kctl/kctl_main.c	Mon Aug 10 10:43:48 2009 -0400
@@ -19,7 +19,7 @@
  * CDDL HEADER END
  */
 /*
- * Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
+ * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
  * Use is subject to license terms.
  */
 
@@ -41,7 +41,6 @@
 #include <sys/kdi_impl.h>
 #include <sys/ctf_api.h>
 #include <vm/seg_kmem.h>
-#include <vm/hat.h>
 
 kctl_t kctl;
 
@@ -153,9 +152,8 @@
 	if (hat_getpfnum(kas.a_hat, addr) != PFN_INVALID)
 		return (EAGAIN);
 
-	/* Set HAT_ATTR_TEXT to override soft execute mode */
-	if (segkmem_xalloc(NULL, addr, sz, VM_NOSLEEP, HAT_ATTR_TEXT,
-	    segkmem_page_create, NULL) == NULL)
+	if (segkmem_xalloc(NULL, addr, sz, VM_NOSLEEP, 0, segkmem_page_create,
+	    NULL) == NULL)
 		return (ENOMEM);
 
 	return (0);
--- a/usr/src/cmd/mdb/common/kmdb/kmdb_kvm.c	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/cmd/mdb/common/kmdb/kmdb_kvm.c	Mon Aug 10 10:43:48 2009 -0400
@@ -19,7 +19,7 @@
  * CDDL HEADER END
  */
 /*
- * Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
+ * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
  * Use is subject to license terms.
  */
 
@@ -43,7 +43,6 @@
 
 #include <strings.h>
 #include <dlfcn.h>
-#include <sys/kdi_impl.h>
 #include <sys/isa_defs.h>
 #include <sys/kobj.h>
 #include <sys/kobj_impl.h>
@@ -218,7 +217,6 @@
 kmt_writer(void *buf, size_t nbytes, uint64_t addr)
 {
 	kmt_bcopy(buf, (void *)(uintptr_t)addr, nbytes);
-	mdb.m_kdi->kdi_flush_caches();
 	return (nbytes);
 }
 
--- a/usr/src/cmd/picl/plugins/inc/picldefs.h	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/cmd/picl/plugins/inc/picldefs.h	Mon Aug 10 10:43:48 2009 -0400
@@ -129,8 +129,6 @@
 #define	PICL_CLASS_SENSOR		"sensor"
 #define	PICL_CLASS_STACK		"stack"
 #define	PICL_CLASS_UNKNOWN		"unknown"
-#define	PICL_CLASS_HUMIDITY_SENSOR	"humidity-sensor"
-#define	PICL_CLASS_HUMIDITY_INDICATOR	"humidity-indicator"
 
 /*
  * Solaris driver property names
@@ -243,7 +241,6 @@
 #define	PICL_PROP_BASE_UNITS			"BaseUnits"
 #define	PICL_PROP_EXPONENT			"Exponent"
 #define	PICL_PROP_RATE_UNITS			"RateUnits"
-#define	PICL_PROP_HUMIDITY			"Humidity"
 
 /*
  * Various threshold property names
--- a/usr/src/cmd/picl/plugins/sun4v/snmp/snmpplugin.c	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/cmd/picl/plugins/sun4v/snmp/snmpplugin.c	Mon Aug 10 10:43:48 2009 -0400
@@ -865,10 +865,6 @@
 				ADD_NODE(PICL_CLASS_RPM_SENSOR)
 				add_prop(nodeh, &proph, node_name, row,
 				    PP_SPEED, snmp_syserr_p);
-			} else if (sensor_type == SSST_HUMIDITY) {
-				ADD_NODE(PICL_CLASS_HUMIDITY_SENSOR)
-				add_prop(nodeh, &proph, node_name, row,
-				    PP_HUMIDITY, snmp_syserr_p);
 			} else {
 				ADD_NODE(PICL_CLASS_SENSOR)
 				add_prop(nodeh, &proph, node_name, row,
@@ -906,8 +902,6 @@
 				ADD_NODE(PICL_CLASS_RPM_INDICATOR)
 			} else if (sensor_type == SSST_PRESENCE) {
 				ADD_NODE(PICL_CLASS_PRESENCE_INDICATOR)
-			} else if (sensor_type == SSST_HUMIDITY) {
-				ADD_NODE(PICL_CLASS_HUMIDITY_INDICATOR)
 			} else {
 				ADD_NODE(PICL_CLASS_INDICATOR)
 			}
--- a/usr/src/cmd/picl/plugins/sun4v/snmp/snmpplugin.h	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/cmd/picl/plugins/sun4v/snmp/snmpplugin.h	Mon Aug 10 10:43:48 2009 -0400
@@ -111,8 +111,7 @@
 	PP_MFG_NAME,
 	PP_MODEL_NAME,
 	PP_DESCRIPTION,
-	PP_LABEL,
-	PP_HUMIDITY
+	PP_LABEL
 } sp_propid_t;
 
 /*
--- a/usr/src/cmd/pools/poolstat/Makefile	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/cmd/pools/poolstat/Makefile	Mon Aug 10 10:43:48 2009 -0400
@@ -2,9 +2,8 @@
 # CDDL HEADER START
 #
 # The contents of this file are subject to the terms of the
-# Common Development and Distribution License, Version 1.0 only
-# (the "License").  You may not use this file except in compliance
-# with the License.
+# Common Development and Distribution License (the "License").
+# You may not use this file except in compliance with the License.
 #
 # You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
 # or http://www.opensolaris.org/os/licensing.
@@ -20,11 +19,9 @@
 # CDDL HEADER END
 #
 #
-# Copyright 2004 Sun Microsystems, Inc.  All rights reserved.
+# Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
 # Use is subject to license terms.
 #
-#ident	"%Z%%M%	%I%	%E% SMI"
-#
 # cmd/pools/poolstat/Makefile
 
 PROG =		poolstat
@@ -35,30 +32,40 @@
 include ../../Makefile.cmd
 include ../Makefile.pools
 
-CFLAGS +=	-I$(POOLSCOMMONDIR) $(EXTRA_CFLAGS)
+STATCOMMONDIR = $(SRC)/cmd/stat/common
+
+STAT_COMMON_OBJS = timestamp.o
+STAT_COMMON_SRCS = $(STAT_COMMON_OBJS:%.o=$(STATCOMMONDIR)/%.c)
+SRCS += $(STAT_COMMON_SRCS)
+
+CFLAGS +=	-I$(POOLSCOMMONDIR) -I$(STATCOMMONDIR) $(EXTRA_CFLAGS)
 sparc_COPTFLAG=
 LDLIBS +=	-lpool -lkstat
 XGETFLAGS =	-a
 CLOBBERFILES += $(POFILES) 
 
-lint := LINTFLAGS += -I$(POOLSCOMMONDIR)
+lint := LINTFLAGS += -I$(POOLSCOMMONDIR) -I$(STATCOMMONDIR)
 
 .KEEP_STATE:
 
 all: $(PROG)
 
-$(PROG): $(OBJS) $(COMMON_OBJS)
-	$(LINK.c) -o $@ $(OBJS) $(COMMON_OBJS) $(LDLIBS)
+$(PROG): $(OBJS) $(COMMON_OBJS) $(STAT_COMMON_OBJS)
+	$(LINK.c) -o $@ $(OBJS) $(COMMON_OBJS) $(STAT_COMMON_OBJS) $(LDLIBS)
 	$(POST_PROCESS)
 
 %.o : $(POOLSCOMMONDIR)/%.c
 	$(COMPILE.c) -o $@ $<
 	$(POST_PROCESS_O)
 
+%.o : $(STATCOMMONDIR)/%.c
+	$(COMPILE.c) -o $@ $<
+	$(POST_PROCESS_O)
+
 install: all $(ROOTPROG)
 
 clean:
-	$(RM) $(OBJS) $(COMMON_OBJS) $(POFILES)
+	$(RM) $(OBJS) $(COMMON_OBJS) $(STAT_COMMON_OBJS) $(POFILES)
 
 lint: lint_SRCS
 
--- a/usr/src/cmd/pools/poolstat/poolstat.c	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/cmd/pools/poolstat/poolstat.c	Mon Aug 10 10:43:48 2009 -0400
@@ -19,7 +19,7 @@
  * CDDL HEADER END
  */
 /*
- * Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
+ * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
  * Use is subject to license terms.
  */
 
@@ -40,6 +40,7 @@
 #include "utils.h"
 #include "poolstat.h"
 #include "poolstat_utils.h"
+#include "statcommon.h"
 
 #ifndef	TEXT_DOMAIN
 #define	TEXT_DOMAIN	"SYS_TEST"
@@ -55,6 +56,8 @@
 
 typedef int (* formatter) (char *, int, int, poolstat_field_format_t *, char *);
 
+static uint_t timestamp_fmt = NODATE;
+
 /* available field formatters	*/
 static int default_f(char *, int, int, poolstat_field_format_t *, char *);
 static int bigno_f(char *, int, int, poolstat_field_format_t *, char *);
@@ -163,8 +166,8 @@
 {
 	(void) fprintf(stderr, gettext(
 "Usage:\n"
-"poolstat [-p pool-list] [-r rset-list] [interval [count]]\n"
-"poolstat [-p pool-list] [-o format -r rset-list] [interval [count]]\n"
+"poolstat [-p pool-list] [-r rset-list] [-T d|u] [interval [count]]\n"
+"poolstat [-p pool-list] [-o format -r rset-list] [-T d|u] [interval [count]]\n"
 "  \'pool-list\' is a space-separated list of pool IDs or names\n"
 "  \'rset-list\' is \'all\' or \'pset\'\n"
 "  \'format\' for all resource types is one or more of:\n"
@@ -211,7 +214,7 @@
 	/* Don't let buffering interfere with piped output. */
 	(void) setvbuf(stdout, NULL, _IOLBF, 0);
 
-	while ((c = getopt(argc, argv, ":p:r:o:")) != EOF) {
+	while ((c = getopt(argc, argv, ":p:r:o:T:")) != EOF) {
 		switch (c) {
 		case 'p':	/* pool name specification	*/
 			pflag++;
@@ -230,6 +233,18 @@
 				usage();
 			break;
 			}
+		case 'T':
+			if (optarg) {
+				if (*optarg == 'u')
+					timestamp_fmt = UDATE;
+				else if (*optarg == 'd')
+					timestamp_fmt = DDATE;
+				else
+					usage();
+			} else {
+					usage();
+			}
+			break;
 		case ':': {
 			(void) fprintf(stderr,
 			    gettext(ERR_OPTION_ARGS), optopt);
@@ -287,6 +302,8 @@
 	/* collect and print out statistics	*/
 	while (count-- != 0) {
 		sa_update(pool_sbag, SA_REFRESH);
+		if (timestamp_fmt != NODATE)
+			print_timestamp(timestamp_fmt);
 		if (pool_sbag->sb_changed & POU_POOL)
 				(void) printf(
 				"<<State change>>\n");
--- a/usr/src/cmd/rcap/rcapstat/Makefile	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/cmd/rcap/rcapstat/Makefile	Mon Aug 10 10:43:48 2009 -0400
@@ -19,10 +19,9 @@
 # CDDL HEADER END
 #
 #
-# Copyright 2007 Sun Microsystems, Inc.  All rights reserved.
+# Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
 # Use is subject to license terms.
 #
-# ident	"%Z%%M%	%I%	%E% SMI"
 
 .KEEP_STATE:
 .SUFFIXES:
@@ -34,19 +33,25 @@
 		utils.c
 
 LINTSRCS =	$(COMMON_DIR)/utils.c \
-		rcapstat.c
+		rcapstat.c \
+		$(STAT_COMMON_SRCS)
+
+STATCOMMONDIR = $(SRC)/cmd/stat/common
+
+STAT_COMMON_OBJS = timestamp.o
+STAT_COMMON_SRCS = $(STAT_COMMON_OBJS:%.o=$(STATCOMMONDIR)/%.c)
 
 $(NOT_RELEASE_BUILD)CPPFLAGS 	+= -DDEBUG
-CPPFLAGS 			+= -I$(COMMON_DIR)
+CPPFLAGS 			+= -I$(COMMON_DIR) -I$(STATCOMMONDIR)
 LDLIBS 				+= -lumem -lzonecfg -lscf
 LDFLAGS				+= $(MAPFILE.NGB:%=-M%)
 
 LINTFLAGS			+= $(LDLIBS) -mnu
 
 PROG =				rcapstat
-OBJS =				$(SRCS:%.c=%.o) rcapd_conf.o
+OBJS =				$(SRCS:%.c=%.o) rcapd_conf.o $(STAT_COMMON_OBJS)
 
-POFILES =			$(OBJS:%.o=%.po)
+POFILES =			$(OBJS:%.o=%.po) $(STAT_COMMON_OBJS:%.o=%.po)
 POFILE =			p$(PROG).po
 
 CLOBBERFILES += 		rcapd_conf.c $(POFILES) $(POFILE)
@@ -62,10 +67,17 @@
 	$(LINK.c) $(OBJS) -o $@ $(LDLIBS)
 	$(POST_PROCESS)
 
+%.o : $(STATCOMMONDIR)/%.c
+	$(COMPILE.c) -o $@ $<
+	$(POST_PROCESS_O)
+
 $(POFILE): $(POFILES)
 	$(RM) $@
 	$(CAT) $(POFILES) > $@
 
+%.po: $(STATCOMMONDIR)/%.c
+	$(COMPILE.cpp) $< > $<.i
+	$(BUILD.po)
 
 clean:
 	$(RM) $(OBJS)
--- a/usr/src/cmd/rcap/rcapstat/rcapstat.c	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/cmd/rcap/rcapstat/rcapstat.c	Mon Aug 10 10:43:48 2009 -0400
@@ -19,12 +19,10 @@
  * CDDL HEADER END
  */
 /*
- * Copyright 2007 Sun Microsystems, Inc.  All rights reserved.
+ * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
  * Use is subject to license terms.
  */
 
-#pragma ident	"%Z%%M%	%I%	%E% SMI"
-
 #include <sys/types.h>
 #include <sys/stat.h>
 #include <stdlib.h>
@@ -40,6 +38,7 @@
 #include "rcapd.h"
 #include "utils.h"
 #include "rcapd_stat.h"
+#include "statcommon.h"
 
 static char mode[RC_MODE_LEN];
 static rcapd_stat_hdr_t hdr;
@@ -47,6 +46,8 @@
 static int unformatted;
 static time_t stat_mod = 0;
 
+static uint_t timestamp_fmt = NODATE;
+
 typedef struct col {
 	rcid_t		col_id;
 	char		col_name[LC_NAME_LEN];
@@ -119,7 +120,8 @@
 usage()
 {
 	(void) fprintf(stderr,
-	    gettext("usage: rcapstat [-g] [-p | -z] [interval [count]]\n"));
+	    gettext("usage: rcapstat [-g] [-p | -z] [-T d|u] "
+	    "[interval [count]]\n"));
 	exit(E_USAGE);
 }
 
@@ -366,7 +368,7 @@
 	(void) setprogname("rcapstat");
 
 	global = unformatted = 0;
-	while ((opt = getopt(argc, argv, "gpuz")) != (int)EOF) {
+	while ((opt = getopt(argc, argv, "gpuzT:")) != (int)EOF) {
 		switch (opt) {
 		case 'g':
 			global = 1;
@@ -382,6 +384,18 @@
 			stat_type = RCIDT_ZONE;
 			zones = 1;
 			break;
+		case 'T':
+			if (optarg) {
+				if (*optarg == 'u')
+					timestamp_fmt = UDATE;
+				else if (*optarg == 'd')
+					timestamp_fmt = DDATE;
+				else
+					usage();
+			} else {
+				usage();
+			}
+			break;
 		default:
 			usage();
 		}
@@ -401,6 +415,8 @@
 	while (always || count-- > 0) {
 		if (read_stats(stat_type) != E_SUCCESS)
 			return (E_ERROR);
+		if (timestamp_fmt != NODATE)
+			print_timestamp(timestamp_fmt);
 		if (!unformatted) {
 			print_stats(stat_type);
 			(void) fflush(stdout);
--- a/usr/src/cmd/stat/Makefile.stat	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/cmd/stat/Makefile.stat	Mon Aug 10 10:43:48 2009 -0400
@@ -19,15 +19,14 @@
 # CDDL HEADER END
 #
 #
-# Copyright 2007 Sun Microsystems, Inc.  All rights reserved.
+# Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
 # Use is subject to license terms.
 #
-#ident	"%Z%%M%	%I%	%E% SMI"
-#
 # cmd/stat/Makefile.stat
 
 STATSRC = $(SRC)/cmd/stat
 STATCOMMONDIR = $(STATSRC)/common
 
-COMMON_OBJS = acquire.o walkers.o acquire_iodevs.o dsr.o mnt.o common.o
+COMMON_OBJS = acquire.o walkers.o acquire_iodevs.o dsr.o mnt.o common.o \
+	timestamp.o
 COMMON_SRCS = $(COMMON_OBJS:%.o=$(STATCOMMONDIR)/%.c)
--- a/usr/src/cmd/stat/common/common.c	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/cmd/stat/common/common.c	Mon Aug 10 10:43:48 2009 -0400
@@ -30,13 +30,10 @@
 #include <errno.h>
 #include <string.h>
 #include <stdlib.h>
-#include <langinfo.h>
 
 extern char *cmdname;
 extern int caught_cont;
 
-uint_t timestamp_fmt = NODATE;
-
 /*PRINTFLIKE2*/
 void
 fail(int do_perror, char *message, ...)
@@ -128,29 +125,3 @@
 	(void) signal(sig_number, cont_handler);
 	caught_cont = 1;
 }
-
-/*
- * Print timestamp as decimal reprentation of time_t value (-T u was specified)
- * or in date(1) format (-T d was specified).
- */
-void
-print_timestamp(void)
-{
-	time_t t = time(NULL);
-	static char *fmt = NULL;
-
-	/* We only need to retrieve this once per invocation */
-	if (fmt == NULL)
-		fmt = nl_langinfo(_DATE_FMT);
-
-	if (timestamp_fmt == UDATE) {
-		(void) printf("%ld\n", t);
-	} else if (timestamp_fmt == DDATE) {
-		char dstr[64];
-		int len;
-
-		len = strftime(dstr, sizeof (dstr), fmt, localtime(&t));
-		if (len > 0)
-			(void) printf("%s\n", dstr);
-	}
-}
--- a/usr/src/cmd/stat/common/statcommon.h	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/cmd/stat/common/statcommon.h	Mon Aug 10 10:43:48 2009 -0400
@@ -324,7 +324,7 @@
 void cont_handler(int sig_number);
 
 /* Print a timestamp in either Unix or standard format. */
-void print_timestamp(void);
+void print_timestamp(uint_t);
 
 #ifdef __cplusplus
 }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/usr/src/cmd/stat/common/timestamp.c	Mon Aug 10 10:43:48 2009 -0400
@@ -0,0 +1,54 @@
+/*
+ * CDDL HEADER START
+ *
+ * The contents of this file are subject to the terms of the
+ * Common Development and Distribution License (the "License").
+ * You may not use this file except in compliance with the License.
+ *
+ * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+ * or http://www.opensolaris.org/os/licensing.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL HEADER in each
+ * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+ * If applicable, add the following below this CDDL HEADER, with the
+ * fields enclosed by brackets "[]" replaced with your own identifying
+ * information: Portions Copyright [yyyy] [name of copyright owner]
+ *
+ * CDDL HEADER END
+ */
+/*
+ * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
+ * Use is subject to license terms.
+ */
+
+#include "statcommon.h"
+
+#include <langinfo.h>
+
+/*
+ * Print timestamp as decimal reprentation of time_t value (-T u was specified)
+ * or in date(1) format (-T d was specified).
+ */
+void
+print_timestamp(uint_t timestamp_fmt)
+{
+	time_t t = time(NULL);
+	static char *fmt = NULL;
+
+	/* We only need to retrieve this once per invocation */
+	if (fmt == NULL)
+		fmt = nl_langinfo(_DATE_FMT);
+
+	if (timestamp_fmt == UDATE) {
+		(void) printf("%ld\n", t);
+	} else if (timestamp_fmt == DDATE) {
+		char dstr[64];
+		int len;
+
+		len = strftime(dstr, sizeof (dstr), fmt, localtime(&t));
+		if (len > 0)
+			(void) printf("%s\n", dstr);
+	}
+}
--- a/usr/src/cmd/stat/fsstat/Makefile	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/cmd/stat/fsstat/Makefile	Mon Aug 10 10:43:48 2009 -0400
@@ -30,8 +30,7 @@
 include $(SRC)/cmd/Makefile.cmd
 include $(SRC)/cmd/stat/Makefile.stat
 
-# Only want one object
-COMMON_OBJS = common.o
+COMMON_OBJS = common.o timestamp.o
 COMMON_SRCS = $(COMMON_OBJS:%.o=$(STATCOMMONDIR)/%.c)
 
 LDLIBS += -lkstat
--- a/usr/src/cmd/stat/fsstat/fsstat.c	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/cmd/stat/fsstat/fsstat.c	Mon Aug 10 10:43:48 2009 -0400
@@ -117,7 +117,7 @@
 char		*cmdname;	/* name of this command */
 int		caught_cont = 0;	/* have caught a SIGCONT */
 
-extern uint_t	timestamp_fmt;	/* print timestamp with stats */
+static uint_t	timestamp_fmt = NODATE;	/* print timestamp with stats */
 
 static int	vs_i = 0;	/* Index of current vs[] slot */
 
@@ -1001,7 +1001,7 @@
 
 	/* Initial timestamp */
 	if (timestamp_fmt != NODATE) {
-		print_timestamp();
+		print_timestamp(timestamp_fmt);
 		linesout++;
 	}
 
@@ -1062,7 +1062,7 @@
 		sleep_until(&start_n, period_n, forever, &caught_cont);
 
 		if (timestamp_fmt != NODATE) {
-			print_timestamp();
+			print_timestamp(timestamp_fmt);
 			linesout++;
 		}
 
--- a/usr/src/cmd/stat/iostat/iostat.c	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/cmd/stat/iostat/iostat.c	Mon Aug 10 10:43:48 2009 -0400
@@ -126,7 +126,7 @@
 static	uint_t	do_megabytes;		/* display data in MB/sec (-M) */
 static  uint_t	do_controller;		/* display controller info (-C) */
 static  uint_t	do_raw;			/* emit raw format (-r) */
-extern	uint_t	timestamp_fmt;		/* timestamp  each display (-T) */
+static	uint_t	timestamp_fmt = NODATE;	/* timestamp  each display (-T) */
 static	uint_t	do_devid;		/* -E should show devid */
 
 /*
@@ -293,6 +293,10 @@
 		if (formatter_list) {
 			format_t *tmp;
 			tmp = formatter_list;
+
+			if (timestamp_fmt != NODATE)
+				print_timestamp(timestamp_fmt);
+
 			while (tmp) {
 				(tmp->nfunc)();
 				tmp = tmp->next;
@@ -1356,9 +1360,6 @@
 		dh_len = strlen(disk_header) - 2;
 	}
 
-	if (timestamp_fmt != NODATE)
-		setup(print_timestamp);
-
 	/*
 	 * -n *and* (-E *or* -e *or* -x)
 	 */
--- a/usr/src/cmd/stat/mpstat/mpstat.c	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/cmd/stat/mpstat/mpstat.c	Mon Aug 10 10:43:48 2009 -0400
@@ -53,7 +53,7 @@
 char *cmdname = "mpstat";
 int caught_cont = 0;
 
-extern uint_t timestamp_fmt;
+static uint_t timestamp_fmt = NODATE;
 
 static int hz;
 static int display_pset = -1;
@@ -490,7 +490,7 @@
 	snapshot_cb cb = compare_cpu;
 
 	if (timestamp_fmt != NODATE)
-		print_timestamp();
+		print_timestamp(timestamp_fmt);
 
 	if (lines_until_reprint == 0 || nr_active_cpus(new) > 1) {
 		print_header(display_agg, show_set);
--- a/usr/src/cmd/stat/vmstat/vmstat.c	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/cmd/stat/vmstat/vmstat.c	Mon Aug 10 10:43:48 2009 -0400
@@ -31,7 +31,7 @@
 char *cmdname = "vmstat";
 int caught_cont = 0;
 
-extern uint_t timestamp_fmt;
+static uint_t timestamp_fmt = NODATE;
 
 static	int	hz;
 static	int	pagesize;
@@ -279,7 +279,7 @@
 	updates = denom(DELTA(s_sys.ss_sysinfo.updates));
 
 	if (timestamp_fmt != NODATE) {
-		print_timestamp();
+		print_timestamp(timestamp_fmt);
 		lines--;
 	}
 
--- a/usr/src/cmd/zpool/Makefile	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/cmd/zpool/Makefile	Mon Aug 10 10:43:48 2009 -0400
@@ -19,11 +19,9 @@
 # CDDL HEADER END
 #
 #
-# Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
+# Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
 # Use is subject to license terms.
 #
-# ident	"%Z%%M%	%I%	%E% SMI"
-#
 
 PROG= zpool
 OBJS= zpool_main.o zpool_vdev.o zpool_iter.o zpool_util.o
@@ -33,9 +31,17 @@
 
 include ../Makefile.cmd
 
+STATCOMMONDIR = $(SRC)/cmd/stat/common
+
+STAT_COMMON_OBJS = timestamp.o
+STAT_COMMON_SRCS = $(STAT_COMMON_OBJS:%.o=$(STATCOMMONDIR)/%.c)
+STAT_COMMON_POFILES = $(STAT_COMMON_OBJS:%.o=%.po)
+SRCS += $(STAT_COMMON_SRCS)
+POFILES += $(STAT_COMMON_POFILES)
+
 LDLIBS += -lzfs -lnvpair -ldevid -lefi -ldiskmgt -luutil -lumem
 
-INCS += -I../../common/zfs
+INCS += -I../../common/zfs -I$(STATCOMMONDIR)
 
 CPPFLAGS += -D_LARGEFILE64_SOURCE=1 -D_REENTRANT $(INCS)
 $(NOT_RELEASE_BUILD)CPPFLAGS += -DDEBUG
@@ -50,16 +56,24 @@
 
 all: $(PROG)
 
-$(PROG): $(OBJS)
-	$(LINK.c) -o $@ $(OBJS) $(LDLIBS)
+$(PROG): $(OBJS) $(STAT_COMMON_OBJS)
+	$(LINK.c) -o $@ $(OBJS) $(STAT_COMMON_OBJS) $(LDLIBS)
 	$(POST_PROCESS)
 
+%.o:    $(STATCOMMONDIR)/%.c
+	$(COMPILE.c) $<
+	$(POST_PROCESS_O)
+
 install: all $(ROOTSBINPROG) $(ROOTUSRSBINLINKS)
 
 $(POFILE): $(POFILES)
 	$(RM) $@
 	$(CAT) $(POFILES) > $@
 
+%.po: $(STATCOMMONDIR)/%.c
+	$(COMPILE.cpp) $< > $<.i
+	$(BUILD.po)
+
 clean:
 	$(RM) $(OBJS)
 
--- a/usr/src/cmd/zpool/zpool_main.c	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/cmd/zpool/zpool_main.c	Mon Aug 10 10:43:48 2009 -0400
@@ -50,6 +50,8 @@
 #include "zpool_util.h"
 #include "zfs_comutil.h"
 
+#include "statcommon.h"
+
 static int zpool_do_create(int, char **);
 static int zpool_do_destroy(int, char **);
 
@@ -173,6 +175,8 @@
 zpool_command_t *current_command;
 static char history_str[HIS_MAX_RECORD_LEN];
 
+static uint_t timestamp_fmt = NODATE;
+
 static const char *
 get_usage(zpool_help_t idx) {
 	switch (idx) {
@@ -203,7 +207,7 @@
 		    "\t    [-d dir | -c cachefile] [-D] [-f] [-R root] "
 		    "<pool | id> [newpool]\n"));
 	case HELP_IOSTAT:
-		return (gettext("\tiostat [-v] [pool] ... [interval "
+		return (gettext("\tiostat [-v] [-T d|u] [pool] ... [interval "
 		    "[count]]\n"));
 	case HELP_LIST:
 		return (gettext("\tlist [-H] [-o property[,...]] "
@@ -2070,8 +2074,9 @@
 }
 
 /*
- * zpool iostat [-v] [pool] ... [interval [count]]
+ * zpool iostat [-T d|u] [-v] [pool] ... [interval [count]]
  *
+ *	-T	Display a timestamp in date(1) or Unix format
  *	-v	Display statistics for individual vdevs
  *
  * This command can be tricky because we want to be able to deal with pool
@@ -2092,8 +2097,20 @@
 	iostat_cbdata_t cb;
 
 	/* check options */
-	while ((c = getopt(argc, argv, "v")) != -1) {
+	while ((c = getopt(argc, argv, "T:v")) != -1) {
 		switch (c) {
+		case 'T':
+			if (optarg) {
+				if (*optarg == 'u')
+					timestamp_fmt = UDATE;
+				else if (*optarg == 'd')
+					timestamp_fmt = DDATE;
+				else
+					usage(B_FALSE);
+			} else {
+				usage(B_FALSE);
+			}
+			break;
 		case 'v':
 			verbose = B_TRUE;
 			break;
@@ -2210,6 +2227,9 @@
 		cb.cb_namewidth = 0;
 		(void) pool_list_iter(list, B_FALSE, get_namewidth, &cb);
 
+		if (timestamp_fmt != NODATE)
+			print_timestamp(timestamp_fmt);
+
 		/*
 		 * If it's the first time, or verbose mode, print the header.
 		 */
--- a/usr/src/cmd/zpool/zpool_util.c	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/cmd/zpool/zpool_util.c	Mon Aug 10 10:43:48 2009 -0400
@@ -19,12 +19,10 @@
  * CDDL HEADER END
  */
 /*
- * Copyright 2007 Sun Microsystems, Inc.  All rights reserved.
+ * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
  * Use is subject to license terms.
  */
 
-#pragma ident	"%Z%%M%	%I%	%E% SMI"
-
 #include <errno.h>
 #include <libgen.h>
 #include <libintl.h>
@@ -54,7 +52,7 @@
  * Same as above, but for strdup()
  */
 char *
-safe_strdup(const char *str)
+zpool_safe_strdup(const char *str)
 {
 	char *ret;
 
--- a/usr/src/cmd/zpool/zpool_util.h	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/cmd/zpool/zpool_util.h	Mon Aug 10 10:43:48 2009 -0400
@@ -19,7 +19,7 @@
  * CDDL HEADER END
  */
 /*
- * Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
+ * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
  * Use is subject to license terms.
  */
 
@@ -37,7 +37,7 @@
  * Basic utility functions
  */
 void *safe_malloc(size_t);
-char *safe_strdup(const char *);
+char *zpool_safe_strdup(const char *);
 void zpool_no_memory(void);
 uint_t num_logs(nvlist_t *nv);
 
--- a/usr/src/cmd/ztest/ztest.c	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/cmd/ztest/ztest.c	Mon Aug 10 10:43:48 2009 -0400
@@ -1477,7 +1477,7 @@
 	/*
 	 * Verify that we can create a new dataset.
 	 */
-	error = dmu_objset_create(name, DMU_OST_OTHER, NULL, 0,
+	error = dmu_objset_create(name, DMU_OST_OTHER, 0,
 	    ztest_create_cb, NULL);
 	if (error) {
 		if (error == ENOSPC) {
@@ -1533,7 +1533,7 @@
 	/*
 	 * Verify that we cannot create an existing dataset.
 	 */
-	error = dmu_objset_create(name, DMU_OST_OTHER, NULL, 0, NULL, NULL);
+	error = dmu_objset_create(name, DMU_OST_OTHER, 0, NULL, NULL);
 	if (error != EEXIST)
 		fatal(0, "created existing dataset, error = %d", error);
 
@@ -1675,8 +1675,7 @@
 	if (error)
 		fatal(0, "dmu_open_snapshot(%s) = %d", snap1name, error);
 
-	error = dmu_objset_create(clone1name, DMU_OST_OTHER, clone, 0,
-	    NULL, NULL);
+	error = dmu_objset_clone(clone1name, dmu_objset_ds(clone), 0);
 	dmu_objset_close(clone);
 	if (error) {
 		if (error == ENOSPC) {
@@ -1711,8 +1710,7 @@
 	if (error)
 		fatal(0, "dmu_open_snapshot(%s) = %d", snap3name, error);
 
-	error = dmu_objset_create(clone2name, DMU_OST_OTHER, clone, 0,
-	    NULL, NULL);
+	error = dmu_objset_clone(clone2name, dmu_objset_ds(clone), 0);
 	dmu_objset_close(clone);
 	if (error) {
 		if (error == ENOSPC) {
@@ -3796,7 +3794,7 @@
 			int test_future = FALSE;
 			(void) rw_rdlock(&ztest_shared->zs_name_lock);
 			(void) snprintf(name, 100, "%s/%s_%d", pool, pool, d);
-			error = dmu_objset_create(name, DMU_OST_OTHER, NULL, 0,
+			error = dmu_objset_create(name, DMU_OST_OTHER, 0,
 			    ztest_create_cb, NULL);
 			if (error == EEXIST) {
 				test_future = TRUE;
--- a/usr/src/common/atomic/sparcv9/atomic.s	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/common/atomic/sparcv9/atomic.s	Mon Aug 10 10:43:48 2009 -0400
@@ -82,13 +82,6 @@
 	mov	tmp2, %o7	/* restore callee's return address */	; \
 label/**/1:
 
-#ifdef	ATOMIC_SIMPLE_BO_ENABLE
-/*
- * For some processors, simple limit has proved benefical
- */
-#define ATOMIC_BACKOFF_CPU(val, limit, ncpu, cas_cnt, label)		\
-	set	1 << ATOMIC_BO_ENABLE_SHIFT, limit
-#else
 /*
  * For the kernel, we take into consideration of cas failures
  * and also scale the backoff limit w.r.t. the number of cpus.
@@ -111,7 +104,6 @@
 	mov	%g0, cas_cnt						; \
 	mov	1, val							; \
 label/**/1:
-#endif	/* ATOMIC_SIMPLE_BO_ENABLE */
 #endif	/* ATOMIC_BO_ENABLE_SHIFT */
 
 #else	/* _KERNEL */
@@ -137,18 +129,11 @@
  * The cas_cnt counts the cas instruction failure and is
  * initialized to 0.
  */
-#ifdef	ATOMIC_SIMPLE_BO_ENABLE
-#define ATOMIC_BACKOFF_INIT(val, ncpu, cas_cnt)	\
-	mov	1, val
-
-#else /* If not defined ATOMIC_SIMPLE_BO_ENABLE */
 #define ATOMIC_BACKOFF_INIT(val, ncpu, cas_cnt)	\
 	mov	1, val				; \
 	mov	%g0, ncpu			; \
 	mov	%g0, cas_cnt
 
-#endif	/* ATOMIC_SIMPLE_BO_ENABLE */
-
 #define ATOMIC_BACKOFF_BRANCH(cr, backoff, loop) \
 	bne,a,pn cr, backoff
 
--- a/usr/src/common/elfcap/elfcap.c	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/common/elfcap/elfcap.c	Mon Aug 10 10:43:48 2009 -0400
@@ -151,10 +151,7 @@
 		AV_SPARC_FMAF, STRDESC("AV_SPARC_FMAF"),
 		STRDESC("FMAF"), STRDESC("fmaf"),
 	},
-	{						/* 0x00000200 */
-		AV_SPARC_FMAU, STRDESC("AV_SPARC_FMAU"),
-		STRDESC("FMAU"), STRDESC("fmau"),
-	},
+	RESERVED_ELFCAP_DESC,				/* 0x00000200 */
 	{						/* 0x00000400 */
 		AV_SPARC_VIS3, STRDESC("AV_SPARC_VIS3"),
 		STRDESC("VIS3"), STRDESC("vis3"),
--- a/usr/src/lib/brand/native/zone/common.ksh	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/lib/brand/native/zone/common.ksh	Mon Aug 10 10:43:48 2009 -0400
@@ -409,6 +409,15 @@
 	stage1=$1
 	archive=$2
 
+	# Check the first few members of the archive for an absolute path.
+	for i in `$stage1 "$archive" | cpio -it | head | cut -b1`
+	do
+		if [[ "$i" == "/" ]]; then
+			umnt_fs
+			fatal "$e_absolute_archive"
+		fi
+	done
+
 	cpioopts="-idmfE $ipdcpiofile"
 
 	vlog "cd \"$ZONEROOT\" && $stage1 \"$archive\" | cpio $cpioopts"
@@ -428,6 +437,15 @@
 {
 	archive=$1
 
+	# Check the first few members of the archive for an absolute path.
+	for i in `pax -f "$archive" | head | cut -b1`
+	do
+		if [[ "$i" == "/" ]]; then
+			umnt_fs
+			fatal "$e_absolute_archive"
+		fi
+	done
+
 	if [[ -s $ipdpaxfile ]]; then
 		filtopt="-c $(/usr/bin/cat $ipdpaxfile)"
 	fi
@@ -822,6 +840,7 @@
 e_not_readable=$(gettext "Cannot read directory '%s'")
 e_not_dir=$(gettext "Error: must be a directory")
 e_unknown_archive=$(gettext "Error: Unknown archive format. Must be a flash archive, a cpio archive (can also be gzipped or bzipped), a pax XUSTAR archive, or a level 0 ufsdump archive.")
+e_absolute_archive=$(gettext "Error: archive contains absolute paths instead of relative paths.")
 e_tmpfile=$(gettext "Unable to create temporary file")
 e_root_full=$(gettext "Zonepath root %s exists and contains data; remove or move aside prior to install.")
 
--- a/usr/src/lib/hbaapi/common/HBAAPILIB-sun.c	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/lib/hbaapi/common/HBAAPILIB-sun.c	Mon Aug 10 10:43:48 2009 -0400
@@ -18,7 +18,7 @@
  *************************************************************************
  */
 /*
- * 	Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
+ * 	Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
  * 	Use is subject to license terms.
  */
 
@@ -102,7 +102,7 @@
 	}\
     }
 #endif /* WIN32*/
- 
+
 #else /* Not both USESYSLOG and USELOGFILE */
 #if defined(USESYSLOG)
 int _hbaapi_sysloginit = 0;
@@ -142,11 +142,11 @@
 #endif /* WIN32 */
 #endif /* USELOGFILE */
 #endif /* Not both USELOGFILE and USESYSLOG */
- 
+
 #ifdef POSIX_THREADS
 #include <pthread.h>
 /*
- * When multiple mutex's are grabed, they must be always be grabbed in 
+ * When multiple mutex's are grabed, they must be always be grabbed in
  * the same order, or deadlock can result.  There are three levels
  * of mutex's involved in this API.  If LL_mutex is grabbed, always grap
  * it first.  If AL_mutex is grabbed, it may not be grabbed before
@@ -167,11 +167,11 @@
 #define RELEASE_MUTEX(M)
 #define RELEASE_MUTEX_RETURN(M,RET)	return(RET)
 #endif
- 
+
 /*
  * HBA_LIBRARY_STATUS and HBA_LIBRARY_INFO are redefined here.
  * Avoid any change in the common code.
- */ 
+ */
 typedef enum {
     HBA_LIBRARY_UNKNOWN,
     HBA_LIBRARY_LOADED,
@@ -232,6 +232,7 @@
 typedef	HBA_STATUS	(* Sun_HBARegisterForAdapterDeviceEventsFunc)
 			    (void (*)(void *, HBA_WWN, HBA_UINT32, HBA_UINT32),
 			    void *, HBA_HANDLE, HBA_WWN, HBA_CALLBACKHANDLE *);
+typedef	HBA_STATUS	(* Sun_HBADoForceLipFunc)(HBA_HANDLE, int *);
 
 /*
  * Individual adapter (hba) information
@@ -324,7 +325,7 @@
             GetTgtAdapterNameFunc = (Sun_HBAGetTgtAdapterNameFunc)
 		dlsym(lib_infop->hLibrary, "Sun_fcGetTgtAdapterName");
 	    if (GetNumberOfTgtAdaptersFunc == NULL ||
-		GetTgtAdapterNameFunc == NULL)	{	    
+		GetTgtAdapterNameFunc == NULL)	{
 		GetNumberOfTgtAdaptersFunc = GetTgtAdapterNameFunc = NULL;
                 continue;
             }
@@ -334,10 +335,10 @@
 
 	num_adapters = ((GetNumberOfTgtAdaptersFunc)());
 #ifndef WIN32
-	DEBUG(1, "HBAAPI: number of target mode adapters for %s = %d\n", 
+	DEBUG(1, "HBAAPI: number of target mode adapters for %s = %d\n",
 	      lib_infop->LibraryName, num_adapters, 0);
 #else
-	DEBUG(1, "HBAAPI: number of target mode_adapters for %s = %d\n", 
+	DEBUG(1, "HBAAPI: number of target mode_adapters for %s = %d\n",
 	      lib_infop->LibraryPath, num_adapters, 0);
 #endif
 
@@ -380,7 +381,7 @@
 		adapt_infop->name = strdup(adaptername);
 	    } else {
 		char dummyname[512];
-		sprintf(dummyname, "NULLADAPTER-%s-%03d", 
+		sprintf(dummyname, "NULLADAPTER-%s-%03d",
 			lib_infop->LibraryPath, _hbaapi_total_tgtadapter_count);
 		dummyname[255] = '\0';
 		adapt_infop->name = strdup(dummyname);
@@ -421,7 +422,7 @@
 	adapt_infop = adapt_infop->next) {
 
 	if(adapt_infop->index == adapterindex) {
-	    if(adapt_infop->name != NULL && 
+	    if(adapt_infop->name != NULL &&
 	       adapt_infop->GNstatus == HBA_STATUS_OK) {
 		strcpy(adaptername, adapt_infop->name);
 	    } else {
@@ -517,13 +518,13 @@
         OpenTgtAdapterByWWNFunc = (Sun_HBAOpenTgtAdapterByWWNFunc)
 		dlsym(lib_infop->hLibrary, "Sun_fcOpenTgtAdapterByWWN");
 	if (GetNumberOfTgtAdaptersFunc == NULL ||
-		OpenTgtAdapterByWWNFunc == NULL) {	    
+		OpenTgtAdapterByWWNFunc == NULL) {
 		GetNumberOfTgtAdaptersFunc = OpenTgtAdapterByWWNFunc = NULL;
                 continue;
         }
 
 	(void) ((GetNumberOfTgtAdaptersFunc)());
- 
+
 	if((status = (OpenTgtAdapterByWWNFunc)(&handle, nodeWWN))
 	    != HBA_STATUS_OK) {
 	    GetNumberOfTgtAdaptersFunc = OpenTgtAdapterByWWNFunc = NULL;
@@ -842,3 +843,25 @@
 
 	RELEASE_MUTEX_RETURN(&_hbaapi_LL_mutex, HBA_STATUS_OK);
 }
+
+HBA_STATUS
+Sun_HBA_ForceLip(HBA_HANDLE handle, int *rval)
+{
+	HBA_STATUS		status;
+	HBA_LIBRARY_INFO	*lib_infop;
+	HBA_HANDLE		vendorHandle;
+
+	Sun_HBADoForceLipFunc	DoForceLipFunc;
+
+	DEBUG(2, "Sun_HBA_DoForceLip", 0, 0, 0);
+
+	NPIVCHECKLIBRARY();
+	DoForceLipFunc = (Sun_HBADoForceLipFunc)
+		dlsym(lib_infop->hLibrary, "Sun_fcDoForceLip");
+	if (DoForceLipFunc != NULL) {
+		status = ((DoForceLipFunc)(vendorHandle, rval));
+	} else {
+		status = HBA_STATUS_ERROR_NOT_SUPPORTED;
+	}
+	RELEASE_MUTEX_RETURN(&_hbaapi_LL_mutex, status);
+}
--- a/usr/src/lib/hbaapi/common/hbaapi-sun.h	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/lib/hbaapi/common/hbaapi-sun.h	Mon Aug 10 10:43:48 2009 -0400
@@ -20,7 +20,7 @@
  * *******************************************************************************
  */
 /*
- * 	Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
+ * 	Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
  * 	Use is subject to license terms.
  */
 
@@ -140,6 +140,9 @@
     HBA_CALLBACKHANDLE	*callbackHandle
     );
 
+HBA_API HBA_STATUS Sun_HBA_ForceLip(
+    HBA_HANDLE handle,
+    int *rval);
 
 #endif /* HBA_API_SUN_H */
 
--- a/usr/src/lib/hbaapi/common/mapfile-vers	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/lib/hbaapi/common/mapfile-vers	Mon Aug 10 10:43:48 2009 -0400
@@ -113,6 +113,7 @@
 	Sun_HBA_OpenTgtAdapterByWWN;
 	Sun_HBA_AdapterCreateWWN;
 	Sun_HBA_AdapterReturnWWN;
+	Sun_HBA_ForceLip;
 
     local:
 	*;
--- a/usr/src/lib/libbsm/common/adt.xml	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/lib/libbsm/common/adt.xml	Mon Aug 10 10:43:48 2009 -0400
@@ -1891,109 +1891,125 @@
 
 <!-- TPM events recorded by tcsd(8) -->
 
-    <event id="AUE_tpm_takeownership" instance_of="AUE_generic_basic"
+    <event id="AUE_generic_tpm" type="generic" omit="always">
+	<entry id="subject">
+	    <internal token="subject"/>
+	    <external opt="none"/>
+	</entry>
+	<entry id="message">
+		<internal token="text"/>
+		<external opt="optional" type="msg tpm_e"/>
+		<comment>TPM error message</comment>
+	</entry>
+	<entry id="return">
+	    <internal token="return"/>
+	    <external opt="none"/>
+	</entry>
+    </event>
+
+    <event id="AUE_tpm_takeownership" instance_of="AUE_generic_tpm"
 	header="0" idNo="99" omit="JNI">
 	<title>TPM_TakeOwnership</title>
 	<program>/usr/lib/tcsd</program>
 	<see>tcsd(8)</see>
     </event>
-    <event id="AUE_tpm_setoperatorauth" instance_of="AUE_generic_basic"
+    <event id="AUE_tpm_setoperatorauth" instance_of="AUE_generic_tpm"
 	header="0" idNo="100" omit="JNI">
 	<title>TPM_SetOperatorAuth</title>
 	<program>/usr/lib/tcsd</program>
 	<see>tcsd(8)</see>
     </event>
-    <event id="AUE_tpm_setownerinstall" instance_of="AUE_generic_basic"
+    <event id="AUE_tpm_setownerinstall" instance_of="AUE_generic_tpm"
 	header="0" idNo="101" omit="JNI">
 	<title>TPM_SetOwnerInstall</title>
 	<program>/usr/lib/tcsd</program>
 	<see>tcsd(8)</see>
     </event>
-    <event id="AUE_tpm_selftestfull" instance_of="AUE_generic_basic"
+    <event id="AUE_tpm_selftestfull" instance_of="AUE_generic_tpm"
 	header="0" idNo="102" omit="JNI">
 	<title>TPM_SelfTestFull</title>
 	<program>/usr/lib/tcsd</program>
 	<see>tcsd(8)</see>
     </event>
-    <event id="AUE_tpm_certifyselftest" instance_of="AUE_generic_basic"
+    <event id="AUE_tpm_certifyselftest" instance_of="AUE_generic_tpm"
 	header="0" idNo="103" omit="JNI">
 	<title>TPM_CertifySelfTest</title>
 	<program>/usr/lib/tcsd</program>
 	<see>tcsd(8)</see>
     </event>
-    <event id="AUE_tpm_continueselftest" instance_of="AUE_generic_basic"
+    <event id="AUE_tpm_continueselftest" instance_of="AUE_generic_tpm"
 	header="0" idNo="104" omit="JNI">
 	<title>TPM_ContinueSelfTest</title>
 	<program>/usr/lib/tcsd</program>
 	<see>tcsd(8)</see>
     </event>
-    <event id="AUE_tpm_ownersetdisable" instance_of="AUE_generic_basic"
+    <event id="AUE_tpm_ownersetdisable" instance_of="AUE_generic_tpm"
 	header="0" idNo="105" omit="JNI">
 	<title>TPM_OwnerSetDisable</title>
 	<program>/usr/lib/tcsd</program>
 	<see>tcsd(8)</see>
     </event>
-    <event id="AUE_tpm_ownerclear" instance_of="AUE_generic_basic"
+    <event id="AUE_tpm_ownerclear" instance_of="AUE_generic_tpm"
 	header="0" idNo="106" omit="JNI">
 	<title>TPM_OwnerClear</title>
 	<program>/usr/lib/tcsd</program>
 	<see>tcsd(8)</see>
     </event>
-    <event id="AUE_tpm_disableownerclear" instance_of="AUE_generic_basic"
+    <event id="AUE_tpm_disableownerclear" instance_of="AUE_generic_tpm"
 	header="0" idNo="107" omit="JNI">
 	<title>TPM_DisableOwnerClear</title>
 	<program>/usr/lib/tcsd</program>
 	<see>tcsd(8)</see>
     </event>
-    <event id="AUE_tpm_forceclear" instance_of="AUE_generic_basic"
+    <event id="AUE_tpm_forceclear" instance_of="AUE_generic_tpm"
 	header="0" idNo="108" omit="JNI">
 	<title>TPM_ForceClear</title>
 	<program>/usr/lib/tcsd</program>
 	<see>tcsd(8)</see>
     </event>
-    <event id="AUE_tpm_disableforceclear" instance_of="AUE_generic_basic"
+    <event id="AUE_tpm_disableforceclear" instance_of="AUE_generic_tpm"
 	header="0" idNo="109" omit="JNI">
 	<title>TPM_DisableForceClear</title>
 	<program>/usr/lib/tcsd</program>
 	<see>tcsd(8)</see>
     </event>
-    <event id="AUE_tpm_physicaldisable" instance_of="AUE_generic_basic"
+    <event id="AUE_tpm_physicaldisable" instance_of="AUE_generic_tpm"
 	header="0" idNo="110" omit="JNI">
 	<title>TPM_PhysicalDisable</title>
 	<program>/usr/lib/tcsd</program>
 	<see>tcsd(8)</see>
     </event>
-    <event id="AUE_tpm_physicalenable" instance_of="AUE_generic_basic"
+    <event id="AUE_tpm_physicalenable" instance_of="AUE_generic_tpm"
 	header="0" idNo="111" omit="JNI">
 	<title>TPM_PhysicalEnsable</title>
 	<program>/usr/lib/tcsd</program>
 	<see>tcsd(8)</see>
     </event>
-    <event id="AUE_tpm_physicaldeactivate" instance_of="AUE_generic_basic"
+    <event id="AUE_tpm_physicaldeactivate" instance_of="AUE_generic_tpm"
 	header="0" idNo="112" omit="JNI">
 	<title>TPM_PhysicalSetDeactivated</title>
 	<program>/usr/lib/tcsd</program>
 	<see>tcsd(8)</see>
     </event>
-    <event id="AUE_tpm_settempdeactivated" instance_of="AUE_generic_basic"
+    <event id="AUE_tpm_settempdeactivated" instance_of="AUE_generic_tpm"
 	header="0" idNo="113" omit="JNI">
 	<title>TPM_SetTempDeactivated</title>
 	<program>/usr/lib/tcsd</program>
 	<see>tcsd(8)</see>
     </event>
-    <event id="AUE_tpm_physicalpresence" instance_of="AUE_generic_basic"
+    <event id="AUE_tpm_physicalpresence" instance_of="AUE_generic_tpm"
 	header="0" idNo="114" omit="JNI">
 	<title>TPM_PhysicalPresence</title>
 	<program>/usr/lib/tcsd</program>
 	<see>tcsd(8)</see>
     </event>
-    <event id="AUE_tpm_fieldupgrade" instance_of="AUE_generic_basic"
+    <event id="AUE_tpm_fieldupgrade" instance_of="AUE_generic_tpm"
 	header="0" idNo="115" omit="JNI">
 	<title>TPM_FieldUpgrade</title>
 	<program>/usr/lib/tcsd</program>
 	<see>tcsd(8)</see>
     </event>
-    <event id="AUE_tpm_resetlockvalue" instance_of="AUE_generic_basic"
+    <event id="AUE_tpm_resetlockvalue" instance_of="AUE_generic_tpm"
 	header="0" idNo="116" omit="JNI">
 	<title>TPM_ResetLockValue</title>
 	<program>/usr/lib/tcsd</program>
--- a/usr/src/lib/libbsm/common/adt_xlate.h	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/lib/libbsm/common/adt_xlate.h	Mon Aug 10 10:43:48 2009 -0400
@@ -85,7 +85,8 @@
 	ADT_LIST_FAIL_PAM,
 	ADT_LIST_FAIL_VALUE,
 	ADT_LIST_LOGIN_TEXT,
-	ADT_LIST_UADMIN_FCN};
+	ADT_LIST_UADMIN_FCN,
+	ADT_LIST_TPM_E};
 
 enum datatype {ADT_UNDEFINED = 0,
     ADT_DATE,
--- a/usr/src/lib/libc/amd64/Makefile	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/lib/libc/amd64/Makefile	Mon Aug 10 10:43:48 2009 -0400
@@ -947,6 +947,11 @@
 RTLDINFO =	-z rtldinfo=tls_rtldinfo
 DYNFLAGS +=	$(RTLDINFO)
 
+# Force libc's internal references to be resolved immediately upon loading
+# in order to avoid critical region problems.  Since almost all libc symbols
+# are marked 'protected' in the mapfiles, this is a minimal set (15 to 20).
+DYNFLAGS +=	-znow
+
 BUILD.s=	$(AS) $(ASFLAGS) $< -o $@
 
 # Override this top level flag so the compiler builds in its native
--- a/usr/src/lib/libc/i386/Makefile.com	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/lib/libc/i386/Makefile.com	Mon Aug 10 10:43:48 2009 -0400
@@ -994,6 +994,11 @@
 RTLDINFO =	-z rtldinfo=tls_rtldinfo
 DYNFLAGS +=	$(RTLDINFO)
 
+# Force libc's internal references to be resolved immediately upon loading
+# in order to avoid critical region problems.  Since almost all libc symbols
+# are marked 'protected' in the mapfiles, this is a minimal set (15 to 20).
+DYNFLAGS +=	-znow
+
 DYNFLAGS +=	-e __rtboot
 DYNFLAGS +=	$(EXTN_DYNFLAGS)
 
--- a/usr/src/lib/libc/sparc/Makefile.com	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/lib/libc/sparc/Makefile.com	Mon Aug 10 10:43:48 2009 -0400
@@ -1011,6 +1011,11 @@
 RTLDINFO =	-z rtldinfo=tls_rtldinfo
 DYNFLAGS +=	$(RTLDINFO)
 
+# Force libc's internal references to be resolved immediately upon loading
+# in order to avoid critical region problems.  Since almost all libc symbols
+# are marked 'protected' in the mapfiles, this is a minimal set (15 to 20).
+DYNFLAGS +=	-znow
+
 DYNFLAGS +=	-e __rtboot
 DYNFLAGS +=	$(EXTN_DYNFLAGS)
 
--- a/usr/src/lib/libc/sparc_hwcap1/common/gen/memcpy.s	Wed Aug 05 18:08:09 2009 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1704 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License (the "License").
- * You may not use this file except in compliance with the License.
- *
- * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
- * or http://www.opensolaris.org/os/licensing.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information: Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- */
-
-/*
- * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
- * Use is subject to license terms.
- */
-
-	.file	"memcpy.s"
-
-/*
- * memcpy(s1, s2, len)
- *
- * Copy s2 to s1, always copy n bytes.
- * Note: this C code does not work for overlapped copies.
- *       Memmove() and bcopy() do.
- *
- * Added entry __align_cpy_1 is generally for use of the compilers.
- *
- * Fast assembler language version of the following C-program for memcpy
- * which represents the `standard' for the C-library.
- *
- *	void * 
- *	memcpy(void *s, const void *s0, size_t n)
- *	{
- *		if (n != 0) {
- *	   	    char *s1 = s;
- *		    const char *s2 = s0;
- *		    do {
- *			*s1++ = *s2++;
- *		    } while (--n != 0);
- *		}
- *		return (s);
- *	}
- */
-
-#include <sys/asm_linkage.h>
-#include <sys/sun4asi.h>
-#include <sys/trap.h>
-
-#ifdef	__sparcv9
-#define	SAVESIZE	(8 * 1)
-#define	STACK_OFFSET	(STACK_BIAS + MINFRAME)
-#else
-#define	SAVESIZE	(8 * 3)
-#define	STACK_OFFSET	(STACK_BIAS + MINFRAME + 4)
-#endif
-
-#define	scratch_offset	0
-#define	g4_offset	8
-#define	g5_offset	16
-
-#define	ICACHE_LINE_SIZE	64
-#define	BLOCK_SIZE	64
-#define	FPRS_FEF	0x4
-#define	PF_FAR		2048
-#define	PF_NEAR		1024
-
-#define SHORTCOPY	3
-#define	SMALL_MAX	39
-#define	MEDIUM_MAX	255
-#define MED_WMAX	256	/* max copy for medium word-aligned case */
-#define MED_MAX		256	/* max copy for medium longword-aligned case */
-
-#ifndef BSTORE_SIZE
-#define BSTORE_SIZE	256	/* min copy size for block store */
-#endif
-
-/*
- * The LDDs will use the below ASI for performance
- * This ASI minimizes cache pollution.
- */
-#define	ASI_CACHE_SPARING	0xf4
-#define	ASI_CACHE_SPARING_PRIMARY	0xf4
-
-	ANSI_PRAGMA_WEAK(memmove,function)
-	ANSI_PRAGMA_WEAK(memcpy,function)
-
-	ENTRY(memmove)
-	cmp	%o1, %o0	! if from address is >= to use forward copy
-	bgeu	%ncc, .forcpy	! else use backward if ...
-	sub	%o0, %o1, %o4	! get difference of two addresses
-	cmp	%o2, %o4	! compare size and difference of addresses
-	bleu	%ncc, .forcpy	! if size is bigger, do overlapped copy
-	nop
-
-	!
-	! an overlapped copy that must be done "backwards"
-	!
-.ovbc:
-	mov	%o0, %g1		! save dest address for return val
-	add     %o1, %o2, %o1	   ! get to end of source space
-	add     %o0, %o2, %o0	   ! get to end of destination space
-
-	cmp	%o2, 24
-	bgeu,pn	%ncc, .dbalign
-	nop
-	cmp	%o2, 4
-	blt,pn	%ncc, .byte
-	sub	%o2, 3, %o2
-.byte4loop:
-	ldub	[%o1-1], %o3		! load last byte
-	stb	%o3, [%o0-1]		! store last byte
-	sub	%o1, 4, %o1
-	ldub	[%o1+2], %o3		! load 2nd from last byte
-	stb	%o3, [%o0-2]		! store 2nd from last byte
-	sub	%o0, 4, %o0
-	ldub	[%o1+1], %o3		! load 3rd from last byte
-	stb	%o3, [%o0+1]		! store 3rd from last byte
-	subcc	%o2, 4, %o2
-	ldub	[%o1], %o3		! load 4th from last byte
-	bgu,pt	%ncc, .byte4loop
-	stb	%o3, [%o0]		! store 4th from last byte
-.byte:
-	addcc	%o2, 3, %o2
-	bz,pt	%ncc, .exit
-.byteloop:
-	dec	%o1			! decrement src address
-	ldub	[%o1], %o3		! read a byte
-	dec	%o0			! decrement dst address
-	deccc	%o2			! decrement count
-	bgu,pt	%ncc, .byteloop		! loop until done
-	stb	%o3, [%o0]		! write byte
-.exit:
-	retl
-	mov	%g1, %o0
-
-	.align	16
-.dbalign:
-	andcc   %o0, 7, %o5		! bytes till DST 8 byte aligned
-	bz,pt	%ncc, .dbmed
-	sub	%o2, %o5, %o2		! update count
-.dbalign1:
-	dec	%o1			! decrement src address
-	ldub	[%o1], %o3		! read a byte
-	dec	%o0			! decrement dst address
-	deccc	%o5			! decrement count
-	bgu,pt	%ncc, .dbalign1		! loop until done
-	stb	%o3, [%o0]		! store a byte
-
-! check for src long word alignment
-.dbmed:
-	mov	%asi, %g5		! save curr %asi
-	wr	%g0, ASI_CACHE_SPARING, %asi
-	andcc	%o1, 7, %g0		! chk src long word alignment
-	bnz,pn	%ncc, .dbbck
-	nop
-!
-! Following code is for overlapping copies where src and dest
-! are long word aligned
-!
-	cmp	%o2, 4095
-	blt,pn	%ncc, .dbmedl32enter	! go to no prefetch code
-	nop
-	prefetch [%o1 - (1 * BLOCK_SIZE)], #n_reads
-	sub	%o2, 63, %o2		! adjust length to allow cc test
-					! for end of loop
-	prefetch [%o1 - (2 * BLOCK_SIZE)], #n_reads
-	prefetch [%o1 - (3 * BLOCK_SIZE)], #n_reads
-	prefetch [%o1 - (4 * BLOCK_SIZE)], #n_reads
-.dbmedl64:
-	prefetch [%o1 - (5 * BLOCK_SIZE)], #n_reads
-	ldxa	[%o1-8]%asi, %o3	! load
-	subcc	%o2, 64, %o2		! decrement length count
-	stx	%o3, [%o0-8]		! and store
-	ldxa	[%o1-16]%asi, %o3	! a block of 64 bytes
-	sub	%o1, 64, %o1		! decrease src ptr by 64
-	stx	%o3, [%o0-16]
-	sub	%o0, 64, %o0		! decrease dst ptr by 64
-	ldxa	[%o1+40]%asi, %o3
-	ldxa	[%o1+32]%asi, %o4
-	ldxa	[%o1+24]%asi, %o5
-	stx	%o3, [%o0+40]
-	stx	%o4, [%o0+32]
-	stx	%o5, [%o0+24]
-	ldxa	[%o1+16]%asi, %o3
-	ldxa	[%o1+8]%asi, %o4
-	stx	%o3, [%o0+16]
-	stx	%o4, [%o0+8]
-	ldxa	[%o1]%asi, %o5
-	bgu,pt	%ncc, .dbmedl64		! repeat if at least 64 bytes left
-	stx	%o5, [%o0]
-	add	%o2, 63, %o2		! restore offset adjustment
-.dbmedl32enter:
-	subcc	%o2, 31, %o2		! adjust length to allow cc test
-					! for end of loop
-	ble,pt  %ncc, .dbmedl31		! skip big loop if less than 32
-	nop
-.dbmedl32:
-	ldx	[%o1-8], %o4		! load
-	subcc	%o2, 32, %o2		! decrement length count
-	stx	%o4, [%o0-8]		! and store
-	ldx	[%o1-16], %o3		! a block of 32 bytes
-	sub	%o1, 32, %o1		! decrease src ptr by 32
-	stx	%o3, [%o0-16]
-	ldx	[%o1+8], %o4
-	sub	%o0, 32, %o0		! decrease dst ptr by 32
-	stx	%o4, [%o0+8]
-	ldx	[%o1], %o3
-	bgu,pt	%ncc, .dbmedl32		! repeat if at least 32 bytes left
-	stx	%o3, [%o0]
-.dbmedl31:
-	addcc	%o2, 16, %o2		! adjust remaining count
-	ble,pt	%ncc, .dbmedl15		! skip if 15 or fewer bytes left
-	nop				!
-	ldx	[%o1-8], %o4		! load and store 16 bytes
-	sub	%o1, 16, %o1		! decrease src ptr by 16
-	stx	%o4, [%o0-8]		!
-	sub	%o2, 16, %o2		! decrease count by 16
-	ldx	[%o1], %o3		!
-	sub	%o0, 16, %o0		! decrease dst ptr by 16
-	stx	%o3, [%o0]
-.dbmedl15:
-	addcc	%o2, 15, %o2		! restore count
-	bz,pt	%ncc, .dbexit		! exit if finished
-	nop
-	cmp	%o2, 8
-	blt,pt	%ncc, .dbremain		! skip if 7 or fewer bytes left
-	nop
-	ldx	[%o1-8], %o4		! load 8 bytes
-	sub	%o1, 8, %o1		! decrease src ptr by 8
-	stx	%o4, [%o0-8]		! and store 8 bytes
-	subcc	%o2, 8, %o2		! decrease count by 8
-	bnz	%ncc, .dbremain		! exit if finished
-	sub	%o0, 8, %o0		! decrease dst ptr by 8
-	mov	%g5, %asi		! restore %asi
-	retl
-	mov	%g1, %o0
-
-!
-! Following code is for overlapping copies where src and dest
-! are not long word aligned
-!
-	.align	16
-.dbbck:
-	rd	%fprs, %o3		! o3 = fprs
- 
-	! if fprs.fef == 0, set it. Checking it, requires 2 instructions.
-	! So set it anyway, without checking.
-	wr      %g0, FPRS_FEF, %fprs	 ! fprs.fef = 1
-
-	alignaddr %o1, %g0, %o5		! align src
-	ldda	[%o5]%asi, %d0		! get first 8 byte block
-	andn	%o2, 7, %o4		! prepare src ptr for finishup code
-	cmp	%o2, 32
-	blt,pn	%ncc, .dbmv8
-	sub	%o1, %o4, %o1		!
-	cmp	%o2, 4095		! check for short memmoves
-	blt,pn	%ncc, .dbmv32enter	! go to no prefetch code
-.dbmv64:
-	ldda	[%o5-8]%asi, %d2	! load 8 bytes
-	ldda	[%o5-16]%asi, %d4	! load 8 bytes
-	sub	%o5, 64, %o5		!
-	ldda	[%o5+40]%asi, %d6	! load 8 bytes
-	sub	%o0, 64, %o0		!
-	ldda	[%o5+32]%asi, %d8	! load 8 bytes
-	sub	%o2, 64, %o2		! 64 less bytes to copy
-	ldda	[%o5+24]%asi, %d18	! load 8 bytes
-	cmp	%o2, 64			! do we have < 64 bytes remaining
-	ldda	[%o5+16]%asi, %d28	! load 8 bytes
-	ldda	[%o5+8]%asi, %d30	! load 8 bytes
-	prefetch [%o5 - (5 * BLOCK_SIZE)], #n_reads
-	faligndata %d2, %d0, %d10	! extract 8 bytes out
-	ldda	[%o5]%asi, %d0		! load 8 bytes
-	std	%d10, [%o0+56]		! store the current 8 bytes
-	faligndata %d4, %d2, %d12	! extract 8 bytes out
-	std	%d12, [%o0+48]		! store the current 8 bytes
-	faligndata %d6, %d4, %d14	! extract 8 bytes out
-	std	%d14, [%o0+40]		! store the current 8 bytes
-	faligndata %d8, %d6, %d16	! extract 8 bytes out
-	std	%d16, [%o0+32]		! store the current 8 bytes
-	faligndata %d18, %d8, %d20	! extract 8 bytes out
-	std	%d20, [%o0+24]		! store the current 8 bytes
-	faligndata %d28, %d18, %d22	! extract 8 bytes out
-	std	%d22, [%o0+16]		! store the current 8 bytes
-	faligndata %d30, %d28, %d24	! extract 8 bytes out
-	std	%d24, [%o0+8]		! store the current 8 bytes
-	faligndata %d0, %d30, %d26	! extract 8 bytes out
-	bgeu,pt	%ncc, .dbmv64
-	std	%d26, [%o0]		! store the current 8 bytes
-
-	cmp	%o2, 32
-	blt,pn	%ncc, .dbmvx
-	nop
-.dbmv32:
-	ldda	[%o5-8]%asi, %d2	! load 8 bytes
-.dbmv32enter:
-	ldda	[%o5-16]%asi, %d4	! load 8 bytes
-	sub	%o5, 32, %o5		!
-	ldda	[%o5+8]%asi, %d6	! load 8 bytes
-	sub	%o0, 32, %o0		! 
-	faligndata %d2, %d0, %d10	! extract 8 bytes out
-	ldda	[%o5]%asi, %d0		! load 8 bytes
-	sub     %o2,32, %o2		! 32 less bytes to copy
-	std	%d10, [%o0+24]		! store the current 8 bytes
-	cmp	%o2, 32			! do we have < 32 bytes remaining
-	faligndata %d4, %d2, %d12	! extract 8 bytes out
-	std	%d12, [%o0+16]		! store the current 8 bytes
-	faligndata %d6, %d4, %d14	! extract 8 bytes out
-	std	%d14, [%o0+8]		! store the current 8 bytes
-	faligndata %d0, %d6, %d16	! extract 8 bytes out
-	bgeu,pt	%ncc, .dbmv32
-	std	%d16, [%o0]		! store the current 8 bytes
-.dbmvx:
-	cmp	%o2, 8			! do we have < 8 bytes remaining
-	blt,pt	%ncc, .dbmvfinish	! if yes, skip to finish up code
-	nop
-.dbmv8:
-	ldda	[%o5-8]%asi, %d2
-	sub	%o0, 8, %o0		! since we are at the end
-					! when we first enter the loop
-	sub     %o2, 8, %o2		! 8 less bytes to copy
-	sub	%o5, 8, %o5
-	cmp	%o2, 8			! do we have < 8 bytes remaining
-	faligndata %d2, %d0, %d8	! extract 8 bytes out
-	std	%d8, [%o0]		! store the current 8 bytes
-	bgeu,pt	%ncc, .dbmv8
-	fmovd	%d2, %d0
-.dbmvfinish:
-	and	%o3, 0x4, %o3	   ! fprs.du = fprs.dl = 0
-	tst	%o2
-	bz,pt	%ncc, .dbexit
-	wr	%o3, %g0, %fprs	 ! fprs = o3   restore fprs
-
-.dbremain:
-	cmp	%o2, 4
-	blt,pn	%ncc, .dbbyte
-	nop
-	ldub	[%o1-1], %o3		! load last byte
-	stb	%o3, [%o0-1]		! store last byte
-	sub	%o1, 4, %o1
-	ldub	[%o1+2], %o3		! load 2nd from last byte
-	stb	%o3, [%o0-2]		! store 2nd from last byte
-	sub	%o0, 4, %o0
-	ldub	[%o1+1], %o3		! load 3rd from last byte
-	stb	%o3, [%o0+1]		! store 3rd from last byte
-	subcc	%o2, 4, %o2
-	ldub	[%o1], %o3		! load 4th from last byte
-	stb	%o3, [%o0]		! store 4th from last byte	
-	bz,pt	%ncc, .dbexit
-.dbbyte:
-	dec	%o1			! decrement src address
-	ldub	[%o1], %o3		! read a byte
-	dec	%o0			! decrement dst address
-	deccc	%o2			! decrement count
-	bgu,pt	%ncc, .dbbyte		! loop until done
-	stb	%o3, [%o0]		! write byte
-.dbexit:
-	mov	%g5, %asi		! restore %asi
-	retl
-	mov     %g1, %o0
-	SET_SIZE(memmove)
-
-	.align ICACHE_LINE_SIZE
-	ENTRY(memcpy)
-	ENTRY(__align_cpy_1)
-					! adjust instruction alignment
-	nop				! Do not remove, these nops affect
-	nop				! icache alignment and performance
-.forcpy:
-	cmp	%o2, SMALL_MAX		! check for not small case
-	bgu,pn	%ncc, .medium		! go to larger cases
-	mov	%o0, %g1		! save %o0
-	cmp	%o2, SHORTCOPY		! check for really short case
-	ble,pt	%ncc, .smallleft	!
-	or	%o0, %o1, %o3		! prepare alignment check
-	andcc	%o3, 0x3, %g0		! test for alignment
-	bz,pt	%ncc, .smallword	! branch to word aligned case
-	sub	%o2, 3, %o2		! adjust count to allow cc zero test
-.smallnotalign4:
-	ldub	[%o1], %o3		! read byte
-	subcc	%o2, 4, %o2		! reduce count by 4
-	stb	%o3, [%o0]		! write byte
-	ldub	[%o1+1], %o3		! repeat for a total of 4 bytes
-	add	%o1, 4, %o1		! advance SRC by 4
-	stb	%o3, [%o0+1]
-	ldub	[%o1-2], %o3
-	add	%o0, 4, %o0		! advance DST by 4
-	stb	%o3, [%o0-2]
-	ldub	[%o1-1], %o3
-	bgu,pt	%ncc, .smallnotalign4	! loop til 3 or fewer bytes remain
-	stb	%o3, [%o0-1]
-	add	%o2, 3, %o2		! restore count
-.smallleft:
-	tst	%o2
-	bz,pt	%ncc, .smallexit
-	nop
-.smallleft3:				! 1, 2, or 3 bytes remain
-	ldub	[%o1], %o3		! load one byte
-	deccc	%o2			! reduce count for cc test
-	bz,pt	%ncc, .smallexit
-	stb	%o3, [%o0]		! store one byte
-	ldub	[%o1+1], %o3		! load second byte
-	deccc	%o2
-	bz,pt	%ncc, .smallexit
-	stb	%o3, [%o0+1]		! store second byte
-	ldub	[%o1+2], %o3		! load third byte
-	stb	%o3, [%o0+2]		! store third byte
-	retl
-	mov	%g1, %o0		! restore %o0
-
-	.align	16
-	nop				! affects loop icache alignment
-.smallwords:
-	lduw	[%o1], %o3		! read word
-.smallwordx:
-	subcc	%o2, 8, %o2		! update count
-	stw	%o3, [%o0]		! write word
-	add	%o1, 8, %o1		! update SRC
-	lduw	[%o1-4], %o3		! read word
-	add	%o0, 8, %o0		! update DST
-	bgu,pt	%ncc, .smallwords	! loop until done
-	stw	%o3, [%o0-4]		! write word
-	addcc	%o2, 7, %o2		! restore count
-	bz,pt	%ncc, .smallexit	! check for completion
-	nop
-	cmp	%o2, 4			! check for 4 or more bytes left
-	blt	.smallleft3		! if not, go to finish up
-	nop
-	lduw	[%o1], %o3
-	add	%o1, 4, %o1
-	subcc	%o2, 4, %o2
-	stw	%o3, [%o0]
-	add	%o0, 4, %o0
-	bnz,pt	%ncc, .smallleft3
-	nop
-	retl
-	mov	%g1, %o0		! restore %o0
-
-.smallword:
-	subcc	%o2, 4, %o2		! update count
-	bgu,pt	%ncc, .smallwordx
-	lduw	[%o1], %o3		! read word
-	addcc	%o2, 3, %o2		! restore count
-	bz,pt	%ncc, .smallexit
-	stw	%o3, [%o0]		! write word
-	deccc	%o2			! reduce count for cc test
-	ldub	[%o1+4], %o3		! load one byte
-	bz,pt	%ncc, .smallexit
-	stb	%o3, [%o0+4]		! store one byte
-	ldub	[%o1+5], %o3		! load second byte
-	deccc	%o2
-	bz,pt	%ncc, .smallexit
-	stb	%o3, [%o0+5]		! store second byte
-	ldub	[%o1+6], %o3		! load third byte
-	stb	%o3, [%o0+6]		! store third byte
-.smallexit:
-	retl
-	mov	%g1, %o0		! restore %o0
-	.align 16
-.medium:
-	neg	%o0, %o5
-	neg	%o1, %o3	
-	andcc	%o5, 7, %o5	! bytes till DST 8 byte aligned
-	and	%o3, 7, %o3	! bytes till SRC 8 byte aligned
-	cmp	%o5, %o3
-	bne	%ncc, continue
-	sub	%o5, %o3, %o3	! -(bytes till SRC aligned after DST aligned)
-				! o3={-7, -6, ... 7}  o3>0 => SRC overaligned
-	! src and dst are aligned.
-	mov	%o3, %g5		! save %o3
-	andcc	%o1, 7, %o3		! is src buf  aligned on a 8 byte bound
-	brz,pt	%o3, src_dst_aligned_on_8		
-	mov	%o3, %o5
-	mov	8, %o4
-	sub 	%o4, %o3, %o3
-	cmp	%o3, %o2
-	bg,a,pn	%ncc, 1f
-	mov	%o2, %o3	
-1:
-	! %o3 has the bytes to be written in partial store.
-	sub	%o2, %o3, %o2
-	prefetch	[%o1],2
-
-7:
-	deccc	%o3			! byte clearing loop
-	ldub	[%o1], %o4		! load one byte
-	stb	%o4, [%o0]
-	inc	%o1			! increment src
-	bgu,pt	%ncc, 7b
-	inc	%o0			! increment dst
-
-	mov	%g5, %o3		! restore %o3
-src_dst_aligned_on_8:
-	! check  if we are copying 1k or more bytes
-	cmp	%o2, 511
-	bgu,pt	%ncc, copying_ge_512
-	nop
-	ba	.medlword
-	nop
-
-continue:
-	andcc	%o5, 7, %o5	! bytes till DST 8 byte aligned
-	bz	%ncc, 2f
-	nop
-
-	sub	%o2, %o5, %o2	! update count
-
-1:
-	ldub	[%o1], %o4
-	deccc	%o5
-	inc	%o1
-	stb	%o4, [%o0]
-	bgu,pt	%ncc, 1b
-	inc	%o0
-
-	! Now DST is 8-byte aligned.  o0, o1, o2 are current.
-
-2:
-	andcc	%o1, 0x3, %g0		! test alignment
-	bnz,pt	%ncc, .mediumsetup	! branch to skip aligned cases
-					! if src, dst not aligned
-	prefetch [%o1 + (1 * BLOCK_SIZE)], #n_reads
-
-/*
- * Handle all cases where src and dest are aligned on word
- * or long word boundaries.  Use unrolled loops for better
- * performance.  This option wins over standard large data
- * move when source and destination is in cache for medium
- * to short data moves.
- */
-	andcc	%o1, 0x7, %g0		! test word alignment
-	bz,pt	%ncc, src_dst_lword_aligned	! branch to long word aligned case
-	prefetch [%o1 + (2 * BLOCK_SIZE)], #n_reads
-	cmp	%o2, MED_WMAX		! limit to store buffer size
-	bgu,pt	%ncc, .mediumrejoin	! otherwise rejoin main loop
-	nop
-	subcc	%o2, 15, %o2		! adjust length to allow cc test
-					! for end of loop
-	ble,pt	%ncc, .medw15		! skip big loop if less than 16
-	prefetch [%o1 + (3 * BLOCK_SIZE)], #n_reads
-/*
- * no need to put prefetch in loop as prefetches have
- * already been issued for maximum loop size
- */
-.medw16:
-	ld	[%o1], %o4		! load
-	subcc	%o2, 16, %o2		! decrement length count
-	stw	%o4, [%o0]		! and store
-	ld	[%o1+4], %o3		! a block of 16 bytes
-	add	%o1, 16, %o1		! increase src ptr by 16
-	stw	%o3, [%o0+4]
-	ld	[%o1-8], %o4
-	add	%o0, 16, %o0		! increase dst ptr by 16
-	stw	%o4, [%o0-8]
-	ld	[%o1-4], %o3
-	bgu,pt	%ncc, .medw16		! repeat if at least 16 bytes left
-	stw	%o3, [%o0-4]
-.medw15:
-	addcc	%o2, 15, %o2		! restore count
-	bz,pt	%ncc, .medwexit		! exit if finished
-	nop
-	cmp	%o2, 8
-	blt,pt	%ncc, .medw7		! skip if 7 or fewer bytes left
-	nop				!
-	ld	[%o1], %o4		! load 4 bytes
-	subcc	%o2, 8, %o2		! decrease count by 8
-	stw	%o4, [%o0]		! and store 4 bytes
-	add	%o1, 8, %o1		! increase src ptr by 8
-	ld	[%o1-4], %o3		! load 4 bytes
-	add	%o0, 8, %o0		! increase dst ptr by 8
-	stw	%o3, [%o0-4]		! and store 4 bytes
-	bz	%ncc, .medwexit		! exit if finished
-	nop
-.medw7:					! count is ge 1, less than 8
-	cmp	%o2, 3			! check for 4 bytes left
-	ble,pt	%ncc, .medw3		! skip if 3 or fewer bytes left
-	nop				!
-	ld	[%o1], %o4		! load 4 bytes
-	sub	%o2, 4, %o2		! decrease count by 4
-	add	%o1, 4, %o1		! increase src ptr by 4
-	stw	%o4, [%o0]		! and store 4 bytes
-	add	%o0, 4, %o0		! increase dst ptr by 4
-	tst	%o2			! check for zero bytes left
-	bz	%ncc, .medwexit		! exit if finished
-	nop
-.medw3:					! count is known to be 1, 2, or 3
-	deccc	%o2			! reduce count by one
-	ldub	[%o1], %o3		! load one byte
-	bz,pt	%ncc, .medwexit		! exit if last byte
-	stb	%o3, [%o0]		! store one byte
-	ldub	[%o1+1], %o3		! load second byte
-	deccc	%o2			! reduce count by one
-	bz,pt	%ncc, .medwexit		! exit if last byte
-	stb	%o3, [%o0+1]		! store second byte
-	ldub	[%o1+2], %o3		! load third byte
-	stb	%o3, [%o0+2]		! store third byte
-.medwexit:
-	retl
-	mov	%g1, %o0		! restore %o0
-	
-/*
- * Special case for handling when src and dest are both long word aligned
- * and total data to move is between SMALL_MAX and MED_MAX bytes
- */
-
-	.align 16
-	nop
-src_dst_lword_aligned:
-.medlword:				! long word aligned
-	cmp	%o2, MED_MAX		! limit to store buffer size
-	bgu,pt	%ncc, .mediumrejoin	! otherwise rejoin main loop
-	nop
-	subcc	%o2, 31, %o2		! adjust length to allow cc test
-					! for end of loop
-	ble,pt	%ncc, .medl31		! skip big loop if less than 32
-	prefetch [%o1 + (3 * BLOCK_SIZE)], #n_reads ! into the l2 cache
-/*
- * no need to put prefetch in loop as prefetches have
- * already been issued for maximum loop size
- */
-.medl32:
-	ldx	[%o1], %o4		! load
-	subcc	%o2, 32, %o2		! decrement length count
-	stx	%o4, [%o0]		! and store
-	ldx	[%o1+8], %o3		! a block of 32 bytes
-	add	%o1, 32, %o1		! increase src ptr by 32
-	stx	%o3, [%o0+8]
-	ldx	[%o1-16], %o4
-	add	%o0, 32, %o0		! increase dst ptr by 32
-	stx	%o4, [%o0-16]
-	ldx	[%o1-8], %o3
-	bgu,pt	%ncc, .medl32		! repeat if at least 32 bytes left
-	stx	%o3, [%o0-8]
-.medl31:
-	addcc	%o2, 16, %o2		! adjust remaining count
-	ble,pt	%ncc, .medl15		! skip if 15 or fewer bytes left
-	nop				!
-	ldx	[%o1], %o4		! load and store 16 bytes
-	add	%o1, 16, %o1		! increase src ptr by 16
-	stx	%o4, [%o0]		!
-	sub	%o2, 16, %o2		! decrease count by 16
-	ldx	[%o1-8], %o3		!
-	add	%o0, 16, %o0		! increase dst ptr by 16
-	stx	%o3, [%o0-8]
-.medl15:
-	addcc	%o2, 15, %o2		! restore count
-	bz,pt	%ncc, .medwexit		! exit if finished
-	nop
-	cmp	%o2, 8
-	blt,pt	%ncc, .medw7		! skip if 7 or fewer bytes left
-	nop
-	ldx	[%o1], %o4		! load 8 bytes
-	add	%o1, 8, %o1		! increase src ptr by 8
-	stx	%o4, [%o0]		! and store 8 bytes
-	subcc	%o2, 8, %o2		! decrease count by 8
-	bz	%ncc, .medwexit		! exit if finished
-	add	%o0, 8, %o0		! increase dst ptr by 8
-	ba	.medw7
-	nop
-
-	.align 16
-	nop
-	nop
-	nop
-unaligned_src_dst:
-
-.mediumsetup:
-	prefetch [%o1 + (2 * BLOCK_SIZE)], #one_read
-.mediumrejoin:
-	rd	%fprs, %o4		! check for unused fp
-
-	add	%o1, 8, %o1		! prepare to round SRC upward
-
-	sethi	%hi(0x1234567f), %o5	! For GSR.MASK 
-	or	%o5, 0x67f, %o5
-	andcc	%o4, FPRS_FEF, %o4	! test FEF, fprs.du = fprs.dl = 0
-	bz,a	%ncc, 3f
-	wr	%g0, FPRS_FEF, %fprs	! fprs.fef = 1
-3:
-	cmp	%o2, MEDIUM_MAX
-	bmask	%o5, %g0, %g0
-
-	! Compute o5 (number of bytes that need copying using the main loop).
-	! First, compute for the medium case.
-	! Then, if large case, o5 is replaced by count for block alignment.
-	! Be careful not to read past end of SRC
-	! Currently, o2 is the actual count remaining
-	!	    o3 is how much sooner we'll cross the alignment boundary
-	!		in SRC compared to in DST
-	!
-	! Examples:  Let # denote bytes that should not be accessed
-	!	    Let x denote a byte already copied to align DST
-	!	    Let . and - denote bytes not yet copied
-	!	    Let | denote double alignment boundaries
-	!
-	!	    DST:  ######xx|........|--------|..######   o2 = 18
-	!			  o0
-	!
-	!  o3 = -3:  SRC:  ###xx...|.....---|-----..#|########   o5 = 8
-	!			  o1
-	!
-	!  o3 =  0:  SRC:  ######xx|........|--------|..######   o5 = 16-8 = 8
-	!				   o1
-	!
-	!  o3 = +1:  SRC:  #######x|x.......|.-------|-..#####   o5 = 16-8 = 8
-	!				   o1
-
-	mov	%asi, %g5		! save curr %asi
-	wr	%g0, ASI_CACHE_SPARING, %asi
-
-	or	%g0, -8, %o5
-	alignaddr %o1, %g0, %o1		! set GSR.ALIGN and align o1
-
-	movrlz	%o3, %g0, %o5		! subtract 8 from o2+o3 only if o3>=0
-	add	%o5, %o2, %o5
-	add	%o5, %o3, %o5
-
-	bleu	%ncc, 4f
-	andn	%o5, 7, %o5		! 8 byte aligned count
-	neg	%o0, %o5		! 'large' case
-	and	%o5, BLOCK_SIZE-1, %o5  ! bytes till DST block aligned
-4:	
-	brgez,a	%o3, .beginmedloop
-	ldda	[%o1-8]%asi, %d0
-
-	add	%o1, %o3, %o1		! back up o1
-5:
-	ldda	[%o1]ASI_FL8_P, %d2
-	inc	%o1
-	andcc	%o1, 7, %g0
-	bnz	%ncc, 5b
-	bshuffle %d0, %d2, %d0		! shifts d0 left 1 byte and or's in d2
-
-.beginmedloop:
-	tst	%o5
-	bz	%ncc, .endmedloop
-	sub	%o2, %o5, %o2		! update count for later
-
-	! Main loop to write out doubles.  Note: o5 & 7 == 0
-	
-	ldd	[%o1], %d2
-	subcc	%o5, 8, %o5		! update local count
-	bz,pn	%ncc, 1f
-	add	%o1, 8, %o1		! update SRC
-
-.medloop:
-	faligndata %d0, %d2, %d4
-	ldda	[%o1]%asi, %d0
-	subcc	%o5, 8, %o5		! update local count
-	add	%o1, 16, %o1		! update SRC
-	std	%d4, [%o0]
-	bz,pn	%ncc, 2f
-	faligndata %d2, %d0, %d6
-	ldda	[%o1 - 8]%asi, %d2
-	subcc	%o5, 8, %o5		! update local count
-	std	%d6, [%o0 + 8]
-	bnz,pt	%ncc, .medloop
-	add	%o0, 16, %o0		! update DST
-
-1:	
-	faligndata %d0, %d2, %d4
-	fmovd	%d2, %d0
-	std	%d4, [%o0]
-	ba	.endmedloop
-	add	%o0, 8, %o0
-	
-2:
-	std	%d6, [%o0 + 8]
-	sub	%o1, 8, %o1
-	add	%o0, 16, %o0
-	
-
-.endmedloop:
-	! Currently, o1 is pointing to the next double-aligned byte in SRC
-	! The 8 bytes starting at [o1-8] are available in d0
-	! At least one, and possibly all, of these need to be written.
-
-	cmp	%o2, BLOCK_SIZE	
-	bgu	%ncc, .large		! otherwise, less than 16 bytes left
-	
-#if 1
-
-	/* This code will use partial stores.  */
-
-	mov	%g0, %o5
-	and	%o3, 7, %o3		! Number of bytes needed to completely
-					! fill %d0 with good (unwritten) data.
-
-	subcc	%o2, 8, %o2		! update count (maybe too much)
-	movl	%ncc, %o2, %o5		
-	addcc	%o3, %o5, %o5		! extra bytes we can stuff into %d0
-	sub	%o3, %o5, %o3		! update o3 (# bad bytes in %d0)
-
-	bz	%ncc, 2f
-	alignaddr %o3, %g0, %g0		! set GSR.ALIGN
-	
-1:
-	deccc	%o5
-	ldda	[%o1]ASI_FL8_P, %d2
-	inc	%o1
-	bgu	%ncc, 1b
-	bshuffle %d0, %d2, %d0		! shifts d0 left 1 byte and or's in d2
-
-2:
-	not     %o3
-	faligndata %d0, %d0, %d0	! shift bytes to the left
-	and	%o3, 7, %o3		! last byte to be stored in [%o0+%o3]
-	edge8n	%g0, %o3, %o5
-	stda	%d0, [%o0]%o5, ASI_PST8_P
-	brlez	%o2, .exit_memcpy
-	add	%o0, %o3, %o0		! update DST to last stored byte
-3:	
-	inc	%o0
-	deccc	%o2
-	ldub	[%o1], %o3
-	stb	%o3, [%o0]
-	bgu	%ncc, 3b
-	inc	%o1
-
-#else
-
-	andcc	%o3, 7, %o5		! Number of bytes needed to completely
-					! fill %d0 with good (unwritten) data.
-	bz	%ncc, 2f
-	sub	%o5, 8, %o3		! -(number of good bytes in %d0)
-	cmp	%o2, 8
-	bl,a	%ncc, 3f		! Not enough bytes to fill %d0
-	add	%o1, %o3, %o1 		! Back up %o1
-
-1:
-	deccc	%o5
-	ldda	[%o1]ASI_FL8_P, %d2
-	inc	%o1
-	bgu	%ncc, 1b
-	bshuffle %d0, %d2, %d0		! shifts d0 left 1 byte and or's in d2
-
-2:	
-	subcc	%o2, 8, %o2
-	std	%d0, [%o0]
-	bz	%ncc, .exit_memcpy
-	add	%o0, 8, %o0
-3:	
-	ldub	[%o1], %o3
-	deccc	%o2
-	inc	%o1
-	stb	%o3, [%o0]
-	bgu	%ncc, 3b
-	inc	%o0
-#endif	
-
-.exit_memcpy:
-        wr      %o4, %g0, %fprs		! fprs = o4   restore fprs
-	mov	%g5, %asi		! restore %asi
-	retl
-        mov     %g1, %o0
-
-	.align ICACHE_LINE_SIZE
-.large:
-	! The following test for BSTORE_SIZE is used to decide whether
-	! to store data with a block store or with individual stores.
-	! The block store wins when the amount of data is so large
-	! that it is causes other application data to be moved out
-	! of the L1 or L2 cache.
-	! On a Panther, block store can lose more often because block
-	! store forces the stored data to be removed from the L3 cache.
-	!
-	sethi	%hi(BSTORE_SIZE),%o5
-	or	%o5,%lo(BSTORE_SIZE),%o5
-	cmp	%o2, %o5
-	bgu	%ncc, .xlarge		
-
-	! %o0 I/O DST is 64-byte aligned
-	! %o1 I/O 8-byte aligned (and we've set GSR.ALIGN)
-	! %d0 I/O already loaded with SRC data from [%o1-8]
-	! %o2 I/O count (number of bytes that need to be written)
-	! %o3 I   Not written.  If zero, then SRC is double aligned.
-	! %o4 I   Not written.  Holds fprs.
-	! %o5   O The number of doubles that remain to be written.
-
-	! Load the rest of the current block 
-	! Recall that %o1 is further into SRC than %o0 is into DST
-
-	prefetch [%o0 + (0 * BLOCK_SIZE)], #n_writes
-	prefetch [%o0 + (1 * BLOCK_SIZE)], #n_writes
-	prefetch [%o0 + (2 * BLOCK_SIZE)], #n_writes
-	ldda	[%o1]%asi, %d2
-	prefetch [%o1 + (3 * BLOCK_SIZE)], #one_read
-	ldda	[%o1 + 0x8]%asi, %d4
-	faligndata %d0, %d2, %d16
-	ldda	[%o1 + 0x10]%asi, %d6
-	faligndata %d2, %d4, %d18
-	ldda	[%o1 + 0x18]%asi, %d8
-	faligndata %d4, %d6, %d20
-	ldda	[%o1 + 0x20]%asi, %d10
-	or	%g0, -8, %o5		! if %o3 >= 0, %o5 = -8
-	prefetch [%o1 + (4 * BLOCK_SIZE)], #one_read
-	faligndata %d6, %d8, %d22
-	ldda	[%o1 + 0x28]%asi, %d12
-	movrlz	%o3, %g0, %o5		! if %o3 < 0, %o5 = 0  (needed lter)
-	faligndata %d8, %d10, %d24
-	ldda	[%o1 + 0x30]%asi, %d14
-	faligndata %d10, %d12, %d26
-	ldda	[%o1 + 0x38]%asi, %d0
-	sub	%o2, BLOCK_SIZE, %o2	! update count
-	prefetch [%o1 + (5 * BLOCK_SIZE)], #one_read
-	add	%o1, BLOCK_SIZE, %o1		! update SRC
-
-	! Main loop.  Write previous block.  Load rest of current block.
-	! Some bytes will be loaded that won't yet be written.
-1:	
-	ldda	[%o1]%asi, %d2
-	faligndata %d12, %d14, %d28
-	ldda	[%o1 + 0x8]%asi, %d4
-	faligndata %d14, %d0, %d30
-	std	%d16, [%o0]
-	std	%d18, [%o0+8]
-	std	%d20, [%o0+16]
-	std	%d22, [%o0+24]
-	std	%d24, [%o0+32]
-	std	%d26, [%o0+40]
-	std	%d28, [%o0+48]
-	std	%d30, [%o0+56]
-	sub	%o2, BLOCK_SIZE, %o2		! update count
-	prefetch [%o0 + (6 * BLOCK_SIZE)], #n_writes
-	prefetch [%o0 + (3 * BLOCK_SIZE)], #n_writes
-	add	%o0, BLOCK_SIZE, %o0		! update DST
-	ldda	[%o1 + 0x10]%asi, %d6
-	faligndata %d0, %d2, %d16
-	ldda	[%o1 + 0x18]%asi, %d8
-	faligndata %d2, %d4, %d18
-	ldda	[%o1 + 0x20]%asi, %d10
-	faligndata %d4, %d6, %d20
-	ldda	[%o1 + 0x28]%asi, %d12
-	faligndata %d6, %d8, %d22
-	ldda	[%o1 + 0x30]%asi, %d14
-	faligndata %d8, %d10, %d24
-	ldda	[%o1 + 0x38]%asi, %d0
-	faligndata %d10, %d12, %d26
-	cmp	%o2, BLOCK_SIZE + 8
-	prefetch [%o1 + (5 * BLOCK_SIZE)], #one_read
-	bgu,pt	%ncc, 1b
-	add	%o1, BLOCK_SIZE, %o1	! update SRC
-	faligndata %d12, %d14, %d28
-	faligndata %d14, %d0, %d30
-	stda	%d16, [%o0]ASI_BLK_P	! store 64 bytes, bypass cache
-	cmp	%o2, BLOCK_SIZE
-	bne	%ncc, 2f		! exactly 1 block remaining?
-	add	%o0, BLOCK_SIZE, %o0	! update DST
-	brz,a	%o3, 3f			! is SRC double aligned?
-	ldd	[%o1], %d2
-
-2:	
-	add	%o5, %o2, %o5		! %o5 was already set to 0 or -8 
-	add	%o5, %o3, %o5
-
-	ba	.beginmedloop
-	andn	%o5, 7, %o5		! 8 byte aligned count
-
-	! This is when there is exactly 1 block remaining and SRC is aligned
-3:
-	!  %d0 was loaded in the last iteration of the loop above, and
-	!  %d2 was loaded in the branch delay slot that got us here.
-	ldd	[%o1 + 0x08], %d4
-	ldd	[%o1 + 0x10], %d6
-	ldd	[%o1 + 0x18], %d8
-	ldd	[%o1 + 0x20], %d10
-	ldd	[%o1 + 0x28], %d12
-	ldd	[%o1 + 0x30], %d14
-	stda	%d0, [%o0]ASI_BLK_P
-
-	ba	.exit_memcpy
-	 nop
-
-
-	.align 16
-	! two nops here causes loop starting at 1f below to be
-	! on a cache line boundary, improving performance
-	nop
-	nop
-xlarge:
-.xlarge:
-	/*
-	set	4096, %l2
-	subcc	%o2, %l2, %g0
-	bge	%ncc, size_ge_4k
-	nop
-	*/
-	! %o0 I/O DST is 64-byte aligned
-	! %o1 I/O 8-byte aligned (and we've set GSR.ALIGN)
-	! %d0 I/O already loaded with SRC data from [%o1-8]
-	! %o2 I/O count (number of bytes that need to be written)
-	! %o3 I   Not written.  If zero, then SRC is double aligned.
-	! %o4 I   Not written.  Holds fprs.
-	! %o5   O The number of doubles that remain to be written.
-
-	! Load the rest of the current block 
-	! Recall that %o1 is further into SRC than %o0 is into DST
-
-	! prefetch [%o1 + (3 * BLOCK_SIZE)], #one_read
-	! executed in delay slot for branch to .xlarge
-	prefetch [%o1 + (4 * BLOCK_SIZE)], #one_read
-	prefetch [%o1 + (5 * BLOCK_SIZE)], #one_read
-	ldda	[%o1]%asi, %d2
-	prefetch [%o1 + (6 * BLOCK_SIZE)], #one_read
-	ldda	[%o1 + 0x8]%asi, %d4
-	faligndata %d0, %d2, %d16
-	ldda	[%o1 + 0x10]%asi, %d6
-	faligndata %d2, %d4, %d18
-	ldda	[%o1 + 0x18]%asi, %d8
-	faligndata %d4, %d6, %d20
-	ldda	[%o1 + 0x20]%asi, %d10
-	or	%g0, -8, %o5		! if %o3 >= 0, %o5 = -8
-	faligndata %d6, %d8, %d22
-	ldda	[%o1 + 0x28]%asi, %d12
-	movrlz	%o3, %g0, %o5		! if %o3 < 0, %o5 = 0  (needed later)
-	faligndata %d8, %d10, %d24
-	ldda	[%o1 + 0x30]%asi, %d14
-	faligndata %d10, %d12, %d26
-	ldda	[%o1 + 0x38]%asi, %d0
-	sub	%o2, BLOCK_SIZE, %o2	! update count
-	prefetch [%o1 + (7 * BLOCK_SIZE)], #one_read
-	add	%o1, BLOCK_SIZE, %o1	! update SRC
-
-	! This point is 32-byte aligned since 24 instructions appear since
-	! the previous alignment directive.
-	
-
-	! Main loop.  Write previous block.  Load rest of current block.
-	! Some bytes will be loaded that won't yet be written.
-1:
-	ldda	[%o1]%asi, %d2
-	faligndata %d12, %d14, %d28
-	ldda	[%o1 + 0x8]%asi, %d4
-	faligndata %d14, %d0, %d30
-	stda	%d16, [%o0]ASI_BLK_P
-	sub	%o2, BLOCK_SIZE, %o2		! update count
-	ldda	[%o1 + 0x10]%asi, %d6
-	faligndata %d0, %d2, %d16
-	ldda	[%o1 + 0x18]%asi, %d8
-	faligndata %d2, %d4, %d18
-	ldda	[%o1 + 0x20]%asi, %d10
-	faligndata %d4, %d6, %d20
-	ldda	[%o1 + 0x28]%asi, %d12
-	faligndata %d6, %d8, %d22
-	ldda	[%o1 + 0x30]%asi, %d14
-	faligndata %d8, %d10, %d24
-	ldda	[%o1 + 0x38]%asi, %d0
-	faligndata %d10, %d12, %d26
-	! offset of 8*BLK+8 bytes works best over range of (src-dst) mod 1K
-	prefetch [%o1 + (8 * BLOCK_SIZE) + 8], #one_read
-	add	%o0, BLOCK_SIZE, %o0		! update DST
-	cmp	%o2, BLOCK_SIZE + 8
-	! second prefetch important to correct for occasional dropped
-	! initial prefetches, 5*BLK works best over range of (src-dst) mod 1K
-	! strong prefetch prevents drops on Panther, but Jaguar and earlier
-	! US-III models treat strong prefetches as weak prefetchs
-	! to avoid regressions on customer hardware, we retain the prefetch
-	prefetch [%o1 + (5 * BLOCK_SIZE)], #one_read
-	bgu,pt	%ncc, 1b
-	add	%o1, BLOCK_SIZE, %o1	! update SRC
-
-	faligndata %d12, %d14, %d28
-	faligndata %d14, %d0, %d30
-	stda	%d16, [%o0]ASI_BLK_P	! store 64 bytes, bypass cache
-	cmp	%o2, BLOCK_SIZE		
-	bne	%ncc, 2f		! exactly 1 block remaining?
-	add	%o0, BLOCK_SIZE, %o0	! update DST
-	brz,a	%o3, 3f			! is SRC double aligned?
-	ldd	[%o1], %d2
-
-2:	
-	add	%o5, %o2, %o5		! %o5 was already set to 0 or -8 
-	add	%o5, %o3, %o5
-
-
-	ba	.beginmedloop
-	andn	%o5, 7, %o5		! 8 byte aligned count
-
-
-	! This is when there is exactly 1 block remaining and SRC is aligned
-3:
-	!  %d0 was loaded in the last iteration of the loop above, and
-	!  %d2 was loaded in the branch delay slot that got us here.
-	ldd	[%o1 + 0x08], %d4
-	ldd	[%o1 + 0x10], %d6
-	ldd	[%o1 + 0x18], %d8
-	ldd	[%o1 + 0x20], %d10
-	ldd	[%o1 + 0x28], %d12
-	ldd	[%o1 + 0x30], %d14
-	stda	%d0, [%o0]ASI_BLK_P
-
-	ba	.exit_memcpy
-	 nop
-
-copying_ge_512:
-	mov	%o0, %o5	! save dst address for return value.
-	! both src and dst are aligned to 8 byte boundary.
-	save	%sp, -SA(STACK_OFFSET + SAVESIZE), %sp
-	mov	%i0, %o0
-	mov	%i1, %o1
-	mov	%i2, %o2
-	mov	%i3, %o3
-	mov	%i5, %o5
-#ifndef	__sparcv9
-	stx	%g4, [%sp + STACK_OFFSET + g4_offset]
-	stx	%g5, [%sp + STACK_OFFSET + g5_offset]
-#endif
-	rd	%fprs, %g5		! check for unused fp
-	andcc	%g5, FPRS_FEF, %g5	! test FEF, fprs.du = fprs.dl = 0
-	bz,a	%ncc, 1f
-	wr	%g0, FPRS_FEF, %fprs	! fprs.fef = 1
-1:
-	!predfetch src buf
-	sub     %o1,1,%o3
-	andn    %o3,0x7f,%l1
-	add     %l1,128,%l1
-	prefetch [%l1],2		!prefetch next 128b
-	prefetch [%l1+64],2
-	prefetch [%l1+(2*64)],2		!cont from above
-	prefetch [%l1+(3*64)],2
-	!predfetch dst buf
-	sub     %o5,1,%o3
-	andn    %o3,0x7f,%l1
-	add     %l1,128,%l1
-	prefetch [%l1],2		!prefetch next 128b
-	prefetch [%l1+64],2
-	prefetch [%l1+(2*64)],2		!cont from above
-	prefetch [%l1+(3*64)],2
-
-	andcc   %o5,0x7f,%o3	    !o3=0 , means it is already 128 align
-	brz,pn  %o3,aligned_on_128
-	sub     %o3,128,%o3
-
-	add     %o2,%o3,%o2
-align_to_128:
-	ldxa	[%o1]ASI_CACHE_SPARING_PRIMARY, %o4
-	add     %o1,8,%o1		! increment src pointer
-	stxa    %o4,[%o5]ASI_CACHE_SPARING_PRIMARY
-	addcc   %o3,8,%o3
-	bl,pt   %ncc,align_to_128
-	add     %o5,8,%o5		! increment dst pointer
-
-aligned_on_128:
-	andcc	%o5,0x1ff,%o3	!%o3=0 when it is 512 b aligned.
-	brnz,pn	%o3, 4f
-	mov	%o2,%l4		!l4=count from 512 align
-	set	4096, %l2
-	subcc	%o2, %l2, %g0
-	bge,pn	%ncc, stingray_optimized_copy
-	nop
-4:
-
-	sub	%o5,8,%l6	!should be in current 512 chunk
-	andn 	%l6,0x1ff,%o3	!%o3=aligned 512b addr
-	add 	%o3,0x200,%o3	!%o3=next aligned 512b addr to start
-				! stingray_optimized_copy
-	sub 	%o3,%o5,%o3	!o3=how many byte in the current remaining chunk
-	sub	%o2,%o3,%l4	!l4=count from 512 align
-	/*
-	 * if l4 is < 4096 do interleave_128_copy only.
-	 */
-	set	4096, %l2
-	subcc	%l4, %l2, %g0
-	bge,pn	%ncc,6f
-	nop
-	mov	%g0, %l4
-	add	%o5, %o2, %l1
-	ba	interleave_128_copy
-	nop
-6:
-	mov	%o3, %o2
-	subcc 	%o3,256,%g0	! if it is > 256 bytes , could use the
-				! interleave_128_copy
-	bl,pn	%ncc,copy_word	! o.w use copy_word to finish the 512 byte
-				! alignment.
-	!%o1=64 bytes data
-	!%o5=next 8 byte addr to write
-	!%o2=new count i.e how many bytes to write
-	add     %o5,%o2,%l1	!cal the last byte to write %l1
-	ba	interleave_128_copy
-	nop
-
-	.align	64
-interleave_128_copy:
-	! %l1 has the addr of the dest. buffer at or beyond which no write
-	! is to be done.
-	! %l4 has the number of bytes to zero using stingray_optimized_bzero
-	!prefetch src
-	!prefetch src 
-
-	add	%o1, 256, %o3
-	prefetch [%o3], 2	!1st 64 byte line of next 256 byte block
-	add	%o1, 384, %o3
-	prefetch [%o3], 2	!3rd 64 byte line of next 256 byte block
-	add	%o1, 320, %o3
-	prefetch [%o3], 2	!2nd 64 byte line of next 256 byte block
-	add	%o1, 448, %o3
-	prefetch [%o3], 2	!4th 64 byte line of next 256 byte block
-
-	!prefetch dst 
-
-	add	%o5, 256, %o3
-	prefetch [%o3], 2	!1st 64 byte line of next 256 byte block
-	add	%o5, 384, %o3
-	prefetch [%o3], 2	!3rd 64 byte line of next 256 byte block
-	add	%o5, 320, %o3
-	prefetch [%o3], 2	!2nd 64 byte line of next 256 byte block
-	add	%o5, 448, %o3
-	prefetch [%o3], 2	!4th 64 byte line of next 256 byte block
-
-	ldxa	[%o1]ASI_CACHE_SPARING_PRIMARY, %o4
-	stxa     %o4,[%o5]ASI_CACHE_SPARING_PRIMARY	!1st 64 byte line
-	add	%o1, 128, %o3
-	ldxa	[%o3]ASI_CACHE_SPARING_PRIMARY, %o4
-	add     %o5, 128, %o3
-	stxa     %o4,[%o3]ASI_CACHE_SPARING_PRIMARY	!3rd 64 byte line
-	add     %o1, (1 * 8), %o3
-	ldxa	[%o3]ASI_CACHE_SPARING_PRIMARY, %o4
-	add	%o5, (1 * 8), %o3
-	stxa     %o4,[%o3]ASI_CACHE_SPARING_PRIMARY
-	add     %o1, (1 * 8 + 128), %o3
-	ldxa	[%o3]ASI_CACHE_SPARING_PRIMARY, %o4
-	add     %o5, (1 * 8 + 128), %o3
-	stxa     %o4,[%o3]ASI_CACHE_SPARING_PRIMARY
-	add     %o1, (2 * 8),%o3
-	ldxa	[%o3]ASI_CACHE_SPARING_PRIMARY, %o4
-	add     %o5, (2 * 8),%o3
-	stxa     %o4,[%o3]ASI_CACHE_SPARING_PRIMARY
-	add     %o1, (2 * 8 + 128) ,%o3
-	ldxa	[%o3]ASI_CACHE_SPARING_PRIMARY, %o4
-	add     %o5, (2 * 8 + 128) ,%o3
-	stxa     %o4,[%o3]ASI_CACHE_SPARING_PRIMARY
-	add     %o1, (3 * 8) ,%o3
-	ldxa	[%o3]ASI_CACHE_SPARING_PRIMARY, %o4
-	add     %o5, (3 * 8) ,%o3
-	stxa     %o4,[%o3]ASI_CACHE_SPARING_PRIMARY
-	add     %o1, (3 * 8 + 128) ,%o3
-	ldxa	[%o3]ASI_CACHE_SPARING_PRIMARY, %o4
-	add     %o5, (3 * 8 + 128) ,%o3
-	stxa     %o4,[%o3]ASI_CACHE_SPARING_PRIMARY
-	add     %o1, (4 * 8) ,%o3
-	ldxa	[%o3]ASI_CACHE_SPARING_PRIMARY, %o4
-	add     %o5, (4 * 8) ,%o3
-	stxa     %o4,[%o3]ASI_CACHE_SPARING_PRIMARY
-	add     %o1, (4 * 8 + 128) ,%o3
-	ldxa	[%o3]ASI_CACHE_SPARING_PRIMARY, %o4
-	add     %o5, (4 * 8 + 128) ,%o3
-	stxa     %o4,[%o3]ASI_CACHE_SPARING_PRIMARY
-	add     %o1, (5 * 8) ,%o3
-	ldxa	[%o3]ASI_CACHE_SPARING_PRIMARY, %o4
-	add     %o5, (5 * 8) ,%o3
-	stxa     %o4,[%o3]ASI_CACHE_SPARING_PRIMARY
-	add     %o1, (5 * 8 + 128) ,%o3
-	ldxa	[%o3]ASI_CACHE_SPARING_PRIMARY, %o4
-	add     %o5, (5 * 8 + 128) ,%o3
-	stxa     %o4,[%o3]ASI_CACHE_SPARING_PRIMARY
-	add     %o1, (6 * 8) ,%o3
-	ldxa	[%o3]ASI_CACHE_SPARING_PRIMARY, %o4
-	add     %o5, (6 * 8) ,%o3
-	stxa     %o4,[%o3]ASI_CACHE_SPARING_PRIMARY
-	add     %o1, (6 * 8 + 128) ,%o3
-	ldxa	[%o3]ASI_CACHE_SPARING_PRIMARY, %o4
-	add     %o5, (6 * 8 + 128) ,%o3
-	stxa     %o4,[%o3]ASI_CACHE_SPARING_PRIMARY
-	add     %o1, (7 * 8) ,%o3
-	ldxa	[%o3]ASI_CACHE_SPARING_PRIMARY, %o4
-	add     %o5, (7 * 8) ,%o3
-	stxa     %o4,[%o3]ASI_CACHE_SPARING_PRIMARY
-	add     %o1, (7 * 8 + 128) ,%o3
-	ldxa	[%o3]ASI_CACHE_SPARING_PRIMARY, %o4
-	add     %o5, (7 * 8 + 128) ,%o3
-	stxa     %o4,[%o3]ASI_CACHE_SPARING_PRIMARY
-	add     %o1, (8 * 8) ,%o3
-	ldxa	[%o3]ASI_CACHE_SPARING_PRIMARY, %o4
-	add     %o5, (8 * 8) ,%o3
-	stxa     %o4,[%o3]ASI_CACHE_SPARING_PRIMARY
-	add     %o1, (8 * 8 + 128) ,%o3
-	ldxa	[%o3]ASI_CACHE_SPARING_PRIMARY, %o4
-	add     %o5, (8 * 8 + 128) ,%o3
-	stxa     %o4,[%o3]ASI_CACHE_SPARING_PRIMARY
-	add     %o1, (9 * 8) ,%o3
-	ldxa	[%o3]ASI_CACHE_SPARING_PRIMARY, %o4
-	add     %o5, (9 * 8) ,%o3
-	stxa     %o4,[%o3]ASI_CACHE_SPARING_PRIMARY
-	add     %o1, (9 * 8 + 128) ,%o3
-	ldxa	[%o3]ASI_CACHE_SPARING_PRIMARY, %o4
-	add     %o5, (9 * 8 + 128) ,%o3
-	stxa     %o4,[%o3]ASI_CACHE_SPARING_PRIMARY
-	add     %o1, (10 * 8) ,%o3
-	ldxa	[%o3]ASI_CACHE_SPARING_PRIMARY, %o4
-	add     %o5, (10 * 8) ,%o3
-	stxa     %o4,[%o3]ASI_CACHE_SPARING_PRIMARY
-	add     %o1, (10 * 8 + 128) ,%o3
-	ldxa	[%o3]ASI_CACHE_SPARING_PRIMARY, %o4
-	add     %o5, (10 * 8 + 128) ,%o3
-	stxa     %o4,[%o3]ASI_CACHE_SPARING_PRIMARY
-	add     %o1, (11 * 8) ,%o3
-	ldxa	[%o3]ASI_CACHE_SPARING_PRIMARY, %o4
-	add     %o5, (11 * 8) ,%o3
-	stxa     %o4,[%o3]ASI_CACHE_SPARING_PRIMARY
-	add     %o1, (11 * 8 + 128) ,%o3
-	ldxa	[%o3]ASI_CACHE_SPARING_PRIMARY, %o4
-	add     %o5, (11 * 8 + 128) ,%o3
-	stxa     %o4,[%o3]ASI_CACHE_SPARING_PRIMARY
-	add     %o1, (12 * 8) ,%o3
-	ldxa	[%o3]ASI_CACHE_SPARING_PRIMARY, %o4
-	add     %o5, (12 * 8) ,%o3
-	stxa     %o4,[%o3]ASI_CACHE_SPARING_PRIMARY
-	add     %o1, (12 * 8 + 128) ,%o3
-	ldxa	[%o3]ASI_CACHE_SPARING_PRIMARY, %o4
-	add     %o5, (12 * 8 + 128) ,%o3
-	stxa     %o4,[%o3]ASI_CACHE_SPARING_PRIMARY
-	add     %o1, (13 * 8) ,%o3
-	ldxa	[%o3]ASI_CACHE_SPARING_PRIMARY, %o4
-	add     %o5, (13 * 8) ,%o3
-	stxa     %o4,[%o3]ASI_CACHE_SPARING_PRIMARY
-	add     %o1, (13 * 8 + 128) ,%o3
-	ldxa	[%o3]ASI_CACHE_SPARING_PRIMARY, %o4
-	add     %o5, (13 * 8 + 128) ,%o3
-	stxa     %o4,[%o3]ASI_CACHE_SPARING_PRIMARY
-	add     %o1, (14 * 8) ,%o3
-	ldxa	[%o3]ASI_CACHE_SPARING_PRIMARY, %o4
-	add     %o5, (14 * 8) ,%o3
-	stxa     %o4,[%o3]ASI_CACHE_SPARING_PRIMARY
-	add     %o1, (14 * 8 + 128) ,%o3
-	ldxa	[%o3]ASI_CACHE_SPARING_PRIMARY, %o4
-	add     %o5, (14 * 8 + 128) ,%o3
-	stxa     %o4,[%o3]ASI_CACHE_SPARING_PRIMARY
-	add     %o1, (15 * 8) ,%o3
-	ldxa	[%o3]ASI_CACHE_SPARING_PRIMARY, %o4
-	add     %o5, (15 * 8) ,%o3
-	stxa     %o4,[%o3]ASI_CACHE_SPARING_PRIMARY
-	add     %o1, (15 * 8 + 128) ,%o3
-	ldxa	[%o3]ASI_CACHE_SPARING_PRIMARY, %o4
-	add     %o5, (15 * 8 + 128) ,%o3
-	stxa     %o4,[%o3]ASI_CACHE_SPARING_PRIMARY
-	add	%o1, 256, %o1
-	! check if the next 256 byte copy will not exceed the number of
-	! bytes remaining to be copied.
-	! %l2 points to the dest buffer after copying 256 bytes more.
-	! %l1 points to dest. buffer at or beyond which no writes should be done.
-	add     %o5,512,%l2
-			
-	subcc   %l1,%l2,%g0
-	bge,pt  %ncc,interleave_128_copy
-	add     %o5,256,%o5
-
-copy_word:
-	and     %o2,255,%o3
-	and     %o3,7,%o2
-
-	! Set the remaining doubles
-	subcc   %o3, 8, %o3		! Can we store any doubles?
-	bl,pn  %ncc, 6f
-	and	%o2, 7, %o2		! calc bytes left after doubles
-
-	!prefetch src 
-
-	mov	%o1, %o4
-	prefetch [%o4], 2	!1st 64 byte line of next 256 byte block
-	add	%o1, 128, %o4
-	prefetch [%o4], 2	!3rd 64 byte line of next 256 byte block
-	add	%o1, 64, %o4
-	prefetch [%o4], 2	!2nd 64 byte line of next 256 byte block
-	add	%o1, 192, %o4
-	prefetch [%o4], 2	!4th 64 byte line of next 256 byte block
-
-	!prefetch dst 
-
-	mov	%o5, %o4
-	prefetch [%o4], 2	!1st 64 byte line of next 256 byte block
-	add	%o5, 128, %o4
-	prefetch [%o4], 2	!3rd 64 byte line of next 256 byte block
-	add	%o5, 64, %o4
-	prefetch [%o4], 2	!2nd 64 byte line of next 256 byte block
-	add	%o5, 192, %o4
-	prefetch [%o4], 2	!4th 64 byte line of next 256 byte block
-
-5:	
-	ldxa	[%o1]ASI_CACHE_SPARING_PRIMARY, %o4
-	add     %o1, 8, %o1      
-	stxa	%o4, [%o5]ASI_CACHE_SPARING_PRIMARY
-	subcc   %o3, 8, %o3
-	bge,pt	%ncc, 5b
-	add     %o5, 8, %o5      
-6:
-	! Set the remaining bytes
-	brz	%o2,  can_we_do_stingray_optimized_copy
-	nop
-	
-	! Terminate the copy with a partial store.
-	! The data should be at d0
-	ldxa	[%o1]ASI_CACHE_SPARING_PRIMARY, %o4
-	stx	%o4, [%sp + STACK_OFFSET + scratch_offset]
-	ldd	[%sp + STACK_OFFSET + scratch_offset], %d0
-	
-	dec     %o2		     ! needed to get the mask right
-	edge8n	%g0, %o2, %o4
-	stda	%d0, [%o5]%o4, ASI_PST8_P
-can_we_do_stingray_optimized_copy:
-	mov	%l4, %o2
-	brnz,pn	%o2, stingray_optimized_copy
-	nop
-	
-exit:	
-	brnz	%g5, 1f
-	nop
-	wr	%g5, %g0, %fprs
-1:
-#ifndef	__sparcv9
-	ldx	[%sp + STACK_OFFSET + g4_offset], %g4
-	ldx	[%sp + STACK_OFFSET + g5_offset], %g5
-#endif
-	ret				! %o0 was preserved
-	restore
-
-
-stingray_optimized_copy:
-!%o5 = next memory addr which is 512 b align
-!%l4 = remaining byte from 512 align.
-
-	add	%o5, %l4, %o2
-
-	prefetch [%o1+0],2
-	prefetch [%o1+(64*1)],2
-	prefetch [%o1+(64*2)],2
-	prefetch [%o1+(64*3)],2
-	prefetch [%o1+(64*4)],2
-	prefetch [%o1+(64*5)],2
-	prefetch [%o1+(64*6)],2
-	prefetch [%o1+(64*7)],2
-	prefetch [%o1+(64*8)],2
-	prefetch [%o1+(64*9)],2
-	prefetch [%o1+(64*10)],2
-	prefetch [%o1+(64*11)],2
-	prefetch [%o1+(64*12)],2
-	prefetch [%o1+(64*13)],2
-	prefetch [%o1+(64*14)],2
-	prefetch [%o1+(64*15)],2
-
-	prefetch [%o5+0],2
-	prefetch [%o5+(64*1)],2
-	prefetch [%o5+(64*2)],2
-	prefetch [%o5+(64*3)],2
-	prefetch [%o5+(64*4)],2
-	prefetch [%o5+(64*5)],2
-	prefetch [%o5+(64*6)],2
-	prefetch [%o5+(64*7)],2
-	prefetch [%o5+(64*8)],2
-	prefetch [%o5+(64*9)],2
-	prefetch [%o5+(64*10)],2
-	prefetch [%o5+(64*11)],2
-	prefetch [%o5+(64*12)],2
-	prefetch [%o5+(64*13)],2
-	prefetch [%o5+(64*14)],2
-	prefetch [%o5+(64*15)],2
-	
-	ba      myloop2
-	srl	%l4, 12, %l4
-	
-	! Local register usage:
-	!
-	! %l1 address at short distance ahead of current %o1 for prefetching
-	!     into L1 cache. 
-	! %l2 address at far ahead of current %o1 for prefetching into L2 cache.
-	! %l3 save %o5 at start of inner loop. 
-	! %l4 Number of 4k blocks to copy
-	! %g1 save %o1 at start of inner loop. 
-	! %l5 iteration counter to make buddy loop execute 2 times. 
-	! %l6 iteration counter to make inner loop execute 32 times. 
-	! %l7 address at far ahead of current %o5 for prefetching destination
-	!     into L2 cache.
-	       
-.align 64
-myloop2:
-	set      2,%l5	! %l5 is the loop count for the buddy loop, for 2 buddy lines.
-	add      %o5, 0, %l3 
-	add      %o1, 0, %g1 
-buddyloop:
-	set      PF_FAR, %g4	! Prefetch far ahead. CHANGE FAR PREFETCH HERE.
-	add      %o1, %g4, %l2	! For prefetching far ahead, set %l2 far ahead
-				! of %o1
-	add      %o1, PF_NEAR, %l1	! For prefetching into L1 D$, set %l1 a
-					! little ahead of %o1
-	add      %o5, %g4, %l7	! For prefetching far ahead, set %l7 far ahead
-				! of %o5
-
-	add      %l2, %g4, %g4	! %g4 is now double far ahead of the source
-				! address in %o1.
-	prefetch [%g4+%g0],2	! Prefetch ahead by several pages to get TLB
-				! entry in advance.
-	set      2*PF_FAR, %g4	! Prefetch double far ahead.  SET DOUBLE FAR
-				! PREFETCH HERE.
-	add      %o5, %g4, %g4	! %g4 is now double far ahead of the dest
-				! address in %o5.
-	prefetch [%g4+%g0],2	! Prefetch ahead by 2 pages to get TLB entry
-				! in advance.
-
-	set      4,%l6		! %l6 = loop count for the inner loop,
-				! for 4 x 8 = 32 lines.
-	set      0, %g4
-	
-	! Each iteration of the inner loop below copies 8 sequential lines.
-	! This loop is iterated 4 times, to move a total of 32 lines,
-	! all of which have the same value of PA[9], so we increment the base
-	! address by 1024 bytes in each iteration, which varies PA[10].				     */ 
-innerloop:	  
-	/* ---- copy line 1 of 8. ---- */
-	prefetch [%l2+%g4],2
-	prefetch [%l7+%g4],2
-	prefetch [%l1+%g4],1
-
-	ldd     [%o1],%d0
-	ldd     [%o1+8],%d2
-	ldd     [%o1+16],%d4
-	ldd     [%o1+24],%d6
-	ldd     [%o1+32],%d8
-	ldd     [%o1+40],%d10
-	ldd     [%o1+48],%d12
-	ldd     [%o1+56],%d14
-	stda    %d0,[%o5]ASI_BLK_P
-	add     %g4, 64, %g4
-	add     %o5, 64, %o5
-	add     %o1, 64, %o1       /* increment %o1 for the next source line.   */
-
-	/* ---- copy line 2 of 8. ---- */
-	prefetch [%l2+%g4],2
-	prefetch [%l7+%g4],2
-	prefetch [%l1+%g4],1
-
-	ldd     [%o1],%d0
-	ldd     [%o1+8],%d2
-	ldd     [%o1+16],%d4
-	ldd     [%o1+24],%d6
-	ldd     [%o1+32],%d8
-	ldd     [%o1+40],%d10
-	ldd     [%o1+48],%d12
-	ldd     [%o1+56],%d14
-	stda    %d0,[%o5]ASI_BLK_P
-	add     %g4, 64, %g4
-	add     %o5, 64, %o5
-	add     %o1, 64, %o1       /* increment %o1 for the next source line.   */
-
-	/* ---- copy line 3 of 8. ---- */
-	prefetch [%l2+%g4],2
-	prefetch [%l7+%g4],2
-	prefetch [%l1+%g4],1
-
-	ldd     [%o1],%d0
-	ldd     [%o1+8],%d2
-	ldd     [%o1+16],%d4
-	ldd     [%o1+24],%d6
-	ldd     [%o1+32],%d8
-	ldd     [%o1+40],%d10
-	ldd     [%o1+48],%d12
-	ldd     [%o1+56],%d14
-	stda    %d0,[%o5]ASI_BLK_P
-	add     %g4, 64, %g4
-	add     %o5, 64, %o5
-	add     %o1, 64, %o1       /* increment %o1 for the next source line.   */
-
-	/* ---- copy line 4 of 8. ---- */
-	prefetch [%l2+%g4],2
-	prefetch [%l7+%g4],2
-	prefetch [%l1+%g4],1
-
-	ldd     [%o1],%d0
-	ldd     [%o1+8],%d2
-	ldd     [%o1+16],%d4
-	ldd     [%o1+24],%d6
-	ldd     [%o1+32],%d8
-	ldd     [%o1+40],%d10
-	ldd     [%o1+48],%d12
-	ldd     [%o1+56],%d14
-	stda    %d0,[%o5]ASI_BLK_P
-	add     %g4, 64, %g4
-	add     %o5, 64, %o5
-	add     %o1, 64, %o1       /* increment %o1 for the next source line.   */
-
-	/* ---- copy line 5 of 8. ---- */
-	prefetch [%l2+%g4],2
-	prefetch [%l7+%g4],2
-	prefetch [%l1+%g4],1
-
-	ldd     [%o1],%d0
-	ldd     [%o1+8],%d2
-	ldd     [%o1+16],%d4
-	ldd     [%o1+24],%d6
-	ldd     [%o1+32],%d8
-	ldd     [%o1+40],%d10
-	ldd     [%o1+48],%d12
-	ldd     [%o1+56],%d14
-	stda    %d0,[%o5]ASI_BLK_P
-	add     %g4, 64, %g4
-	add     %o5, 64, %o5
-	add     %o1, 64, %o1       /* increment %o1 for the next source line.   */
-
-	/* ---- copy line 6 of 8. ---- */
-	prefetch [%l2+%g4],2
-	prefetch [%l7+%g4],2
-	prefetch [%l1+%g4],1
-
-	ldd     [%o1],%d0
-	ldd     [%o1+8],%d2
-	ldd     [%o1+16],%d4
-	ldd     [%o1+24],%d6
-	ldd     [%o1+32],%d8
-	ldd     [%o1+40],%d10
-	ldd     [%o1+48],%d12
-	ldd     [%o1+56],%d14
-	stda    %d0,[%o5]ASI_BLK_P
-	add     %g4, 64, %g4
-	add     %o5, 64, %o5
-	add     %o1, 64, %o1       /* increment %o1 for the next source line.   */
-
-	/* ---- copy line 7 of 8. ---- */
-	prefetch [%l2+%g4],2
-	prefetch [%l7+%g4],2
-	prefetch [%l1+%g4],1
-
-	ldd     [%o1],%d0
-	ldd     [%o1+8],%d2
-	ldd     [%o1+16],%d4
-	ldd     [%o1+24],%d6
-	ldd     [%o1+32],%d8
-	ldd     [%o1+40],%d10
-	ldd     [%o1+48],%d12
-	ldd     [%o1+56],%d14
-	stda    %d0,[%o5]ASI_BLK_P
-	add     %g4, 64, %g4
-	add     %o5, 64, %o5
-	add     %o1, 64, %o1       /* increment %o1 for the next source line.   */
-
-	/* ---- copy line 8 of 8. ---- */
-	prefetch [%l2+%g4],2
-	prefetch [%l7+%g4],2
-	prefetch [%l1+%g4],1
-
-	ldd     [%o1],%d0
-	ldd     [%o1+8],%d2
-	ldd     [%o1+16],%d4
-	ldd     [%o1+24],%d6
-	ldd     [%o1+32],%d8
-	ldd     [%o1+40],%d10
-	ldd     [%o1+48],%d12
-	ldd     [%o1+56],%d14
-	stda    %d0,[%o5]ASI_BLK_P
-
-	subcc   %l6,1,%l6	  /* Decrement the inner loop counter.	 */
-	
-	! Now increment by 64 + 512 so we don't toggle PA[9]
-	add     %g4, 576, %g4
-	add     %o5, 576, %o5
-
-	bg,pt   %icc,innerloop
-	add     %o1, 576, %o1	! increment %o1 for the next source line.
-	! END OF INNER LOOP
-
-
-	subcc   %l5,1,%l5
-	add     %l3, 512, %o5	! increment %o5 to first buddy line of dest.
-	bg,pt   %icc,buddyloop
-	add     %g1, 512 ,%o1	! Set %o1 to the first of the odd buddy lines.
-
-	subcc   %l4, 1, %l4
-	add     %o5, 3584, %o5	! Advance both base addresses to 4k above where
-				! they started.
-	add     %o1, 3584, %o1	! They were already incremented by 512,
-				! so just add 3584.
-
-	bg,pt   %icc,myloop2
-	nop
-
-	/****larryalg_end_here*************/
-
-	sub	%o2,%o5,%o2	!how many byte left
-	brz,pn	%o2,complete_write
-	mov	%g0,%l4
-	add     %o5,%o2,%l1	     !cal the last byte to write %l1
-	subcc	%o2,256,%g0
-	bge,pt	%ncc,interleave_128_copy
-	mov	%g0,%l4
-	
-	ba	copy_word
-	nop
-
-
-complete_write: 
-	ba      exit
-	nop
-
-
-	
-	SET_SIZE(memcpy)
-	SET_SIZE(__align_cpy_1)
--- a/usr/src/lib/libc/sparc_hwcap1/common/gen/memset.s	Wed Aug 05 18:08:09 2009 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,767 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License (the "License").
- * You may not use this file except in compliance with the License.
- *
- * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
- * or http://www.opensolaris.org/os/licensing.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information: Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- */
-
-/*
- * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
- * Use is subject to license terms.
- */
-
-
-	.file	"memset.s"
-/*
- * char *memset(sp, c, n)
- *
- * Set an array of n chars starting at sp to the character c.
- * Return sp.
- *
- * Fast assembler language version of the following C-program for memset
- * which represents the `standard' for the C-library.
- *
- *	void *
- *	memset(void *sp1, int c, size_t n)
- *	{
- *	    if (n != 0) {
- *		char *sp = sp1;
- *		do {
- *		    *sp++ = (char)c;
- *		} while (--n != 0);
- *	    }
- *	    return (sp1);
- *	}
- */
-
-#include <sys/asm_linkage.h>
-#include <sys/sun4asi.h>
-
-	ANSI_PRAGMA_WEAK(memset,function)
-
-#define	SAVESIZE	(8 * 1)
-#ifdef	__sparcv9
-#define	STACK_OFFSET	(STACK_BIAS + 0)
-#else
-#define	STACK_OFFSET	(STACK_BIAS + 0 + 0)
-#endif
-#define	scratch_offset	0
-
-#define ASI_CACHE_SPARING_PRIMARY 0xf4
-#define	ALIGN8(X)	(((X) + 7) & ~7)
-#define	ICACHE_LINE_SIZE	64
-#define	FPRS_FEF	0x4
-#define	PF_FAR		2048
-
-	.section        ".text"
-	.align ICACHE_LINE_SIZE
-
-	/*
-	 * Optimizations done:
-	 *
-	 * No stores in delay slot of branch instructions.
-	 * conditional stores where possible
-	 * prefetch before doing stxa
-	 * Bank interleaved writing.
-	 */
-
-	ENTRY(memset)
-	add	%sp, -SA(STACK_OFFSET + SAVESIZE), %sp
-	mov	%o0, %o5		! copy sp1 before using it
-	/*
-	 * If 0 bytes to xfer return
-	 */
-	brnz	%o2, continue
-	nop
-	retl
-	add	%sp, SA(STACK_OFFSET + SAVESIZE), %sp
-continue:
-	/*
-	 * If the count is multiple of 8 and buffer is aligned to 8
-	 * we don't have to look at fprs
-	 */
-	or	%o5, %o2, %o3
-	and	%o3, 7, %o3
-        brnz	%o3, check_fprs
-	mov	4, %g1
-	prefetch	[%o5],2
-	ba	skip_rd_fprs
-	nop
-	
-check_fprs:
-        rd      %fprs, %g1              ! g1 = fprs
-skip_rd_fprs:
-	prefetch	[%o5],2
-	andcc	%g1, 0x4, %g1		! fprs.du = fprs.dl = 0
-	bnz	%ncc, 1f		! Is fprs.fef == 1
-	nop
-        wr      %g0, FPRS_FEF, %fprs	! fprs.fef = 1
-1:
-	and	%o1, 0xff, %o1		! o1 is (char)c
-	sll     %o1, 8, %o3
-        or      %o1, %o3, %o1		! now o1 has 2 bytes of c
-        sll     %o1, 16, %o3
-        or      %o1, %o3, %o1		! now o1 has 4 bytes of c
-	sllx	%o1, 32, %o3
-	or	%o1, %o3, %o1		! now o1 has 8 bytes of c
-	stx	%o1, [%sp + STACK_OFFSET + scratch_offset]
-	ldd	[%sp + STACK_OFFSET + scratch_offset], %d0
-	cmp	%o2, 8
-	bge,pt	%ncc, xfer_8_or_more
-	mov	%o0, %o5
-	/*
-	 * Do a partial store of %o2 bytes
-	 */
-        andcc	%o5, 7, %o3		! is sp1 aligned on a 8 byte bound
-        brz,pt	%o3, aligned_on_8		
-        sub	%o5, %o3, %o5		! align the  destination buffer.
-	mov	%o3, %o1
-	mov	8, %o4
-	sub 	%o4, %o3, %o3
-	cmp	%o3, %o2
-	bg,a,pn	%ncc, 1f
-	mov	%o2, %o3	
-1:
-	! %o3 has the bytes to be written in partial store.
-	sub	%o2, %o3, %o2
-	dec	%o3
-	prefetch	[%o5],2
-	edge8n	%g0, %o3, %o4
-	srl	%o4, %o1, %o4
-	stda	%d0, [%o5]%o4, ASI_PST8_P
-	brz	%o2, simple_ret
-	add	%o5, 8, %o5
-aligned_on_8:
-	prefetch	[%o5],2
-        dec     %o2                     ! needed to get the mask right
-	edge8n	%g0, %o2, %o4
-	stda	%d0, [%o5]%o4, ASI_PST8_P
-	brnz	%g1, 1f			! was fprs.fef == 1
-	nop
-        wr	%g1, %g0, %fprs         ! fprs = g1  restore fprs
-1:
-	retl
-	add	%sp, SA(STACK_OFFSET + SAVESIZE), %sp
-
-xfer_8_or_more:
-        andcc	%o5, 7, %o3		! is sp1 aligned on a 8 byte bound
-        brz,pt	%o3, blkchk		
-        sub	%o5, %o3, %o5		! align the  destination buffer.
-        sub	%o3, 8, %o3		! -(bytes till double aligned)
-        add	%o2, %o3, %o2		! update o2 with new count
-	xor	%o3, 0xff, %o3
-	and	%o3, 7, %o3
-	prefetch	[%o5],2
-	edge8ln	%g0, %o3, %o4
-	stda	%d0, [%o5]%o4, ASI_PST8_P
-	add	%o5, 8, %o5
-
-
-	! Now sp1 is double aligned (sp1 is found in %o5)
-blkchk:
-	cmp     %o2, 767		! if large count use Block ld/st
-	bg,pt	%ncc,blkwr
-	nop
-
-	
-	and	%o2, 24, %o3		! o3 is {0, 8, 16, 24}
-
-	brz	%o3, skip_dw_loop
-	nop
-
-1:	subcc	%o3, 8, %o3		! double-word loop
-	stx	%o1, [%o5]
-	bgu,pt %ncc, 1b
-	add	%o5, 8, %o5
-skip_dw_loop:
-	andncc	%o2, 31, %o4		! o4 has 32 byte aligned count
-	brz,pn	%o4, 3f
-	nop
-	ba	loop_32byte
-	nop
-
-	.align	ICACHE_LINE_SIZE
-
-loop_32byte:
-	subcc	%o4, 32, %o4		! main loop, 32 bytes per iteration
-	stx	%o1, [%o5]
-	stx	%o1, [%o5 + 8]
-	stx	%o1, [%o5 + 16]
-	stx	%o1, [%o5 + 24]
-	bne,pt  %ncc, loop_32byte
-	add	%o5, 32, %o5
-3:	
-	and	%o2, 7, %o2		! o2 has the remaining bytes (<8)
-	brz	%o2, skip_partial_copy
-	nop
-
-	! Terminate the copy with a partial store.
-	! The data should be at d0
-	prefetch	[%o5],2
-        dec     %o2                     ! needed to get the mask right
-	edge8n	%g0, %o2, %o4
-	stda	%d0, [%o5]%o4, ASI_PST8_P
-
-skip_partial_copy:
-simple_ret:
-	brz,a	%g1, 1f			! was fprs.fef == 0
-        wr	%g1, %g0, %fprs         ! fprs = g1  restore fprs
-1:
-	retl
-	add	%sp, SA(STACK_OFFSET + SAVESIZE), %sp
-
-blkwr:
-        sub     %o5,1,%o3
-        andn    %o3,0x7f,%o4
-        add     %o4,128,%o4
-        prefetch [%o4],2		!prefetch next 128b
-        prefetch [%o4+64],2
-        prefetch [%o4+(2*64)],2		!cont from above
-        prefetch [%o4+(3*64)],2
-
-        andcc   %o5,0x7f,%o3            !o3=0 , means it is already 128 align
-        brz,pn  %o3,alreadyalign128
-        sub     %o3,128,%o3
-
-        add     %o2,%o3,%o2
-align128:
-        stxa    %o1,[%o5]ASI_CACHE_SPARING_PRIMARY
-        addcc   %o3,8,%o3
-        bl,pt   %ncc,align128
-        add     %o5,8,%o5
-
-
-
-alreadyalign128:
-	andcc	%o5,0x1ff,%o3	!%o3=0 when it is 512 b aligned.
-	brnz,pn	%o3, 4f
-	mov	%o2,%g5		!g5=count from 512 align
-	set	4096, %o4
-	subcc	%o2, %o4, %g0
-	bge,pn	%ncc, larry_alg
-	nop
-4:
-
-	sub	%o5,8,%o4	!should be in current 512 chunk
-	andn 	%o4,0x1ff,%o3	!%o3=aligned 512b addr
-	add 	%o3,0x200,%o3	!%o3=next aligned 512b addr which start larry process
-	sub 	%o3,%o5,%o3	!o3=how many byte in the current remaining chunk
-	sub	%o2,%o3,%g5	!g5=count from 512 align
-	/*
-	 * if g5 is < 4096 do start_128 only.
-	 */
-	set	4096, %o4
-	subcc	%g5, %o4, %g0
-	bge,pn	%ncc,6f
-	nop
-	mov	%g0, %g5
-	add	%o5, %o2, %o4
-	ba	start_128
-	nop
-6:
-	mov	%o3, %o2
-	subcc 	%o3,256,%g0	!if it is > 256 bytes , could use the st-interleave alg to wr
-	bl,pn	%ncc,storeword	!o.w use storeword to finish the 512 byte alignment.
-        !%o1=64 bytes data
-        !%o5=next 8 byte addr to write
-        !%o2=new count i.e how many bytes to write
-        add     %o5,%o2,%o4             !cal the last byte to write %o4
-	ba	start_128
-	nop
-
-	.align	64
-start_128:
-	add	%o5, 256, %o3
-	prefetch [%o3], 2	!1st 64 byte line of next 256 byte block
-	add	%o5, 384, %o3
-	prefetch [%o3], 2	!3rd 64 byte line of next 256 byte block
-	add	%o5, 320, %o3
-	prefetch [%o3], 2	!2nd 64 byte line of next 256 byte block
-	add	%o5, 448, %o3
-	prefetch [%o3], 2	!4th 64 byte line of next 256 byte block
-	mov	%o5, %o3
-        stxa     %o1,[%o3]ASI_CACHE_SPARING_PRIMARY	!1st 64 byte line
-        add     %o5,128,%o3
-        stxa     %o1,[%o3]ASI_CACHE_SPARING_PRIMARY	!3rd 64 byte line
-        add     %o5,8,%o3
-        stxa     %o1,[%o3]ASI_CACHE_SPARING_PRIMARY
-        add     %o3,128,%o3
-        stxa     %o1,[%o3]ASI_CACHE_SPARING_PRIMARY
-        add     %o5,(2 * 8),%o3
-        stxa     %o1,[%o3]ASI_CACHE_SPARING_PRIMARY
-        add     %o3,128 ,%o3
-        stxa     %o1,[%o3]ASI_CACHE_SPARING_PRIMARY
-        add     %o5,(3 * 8),%o3
-        stxa     %o1,[%o3]ASI_CACHE_SPARING_PRIMARY
-        add     %o3,128,%o3
-        stxa     %o1,[%o3]ASI_CACHE_SPARING_PRIMARY
-        add     %o5,(4 * 8),%o3
-        stxa     %o1,[%o3]ASI_CACHE_SPARING_PRIMARY
-        add     %o3,128,%o3
-        stxa     %o1,[%o3]ASI_CACHE_SPARING_PRIMARY
-        add     %o5,(5 * 8),%o3
-        stxa     %o1,[%o3]ASI_CACHE_SPARING_PRIMARY
-        add     %o3,128,%o3
-        stxa     %o1,[%o3]ASI_CACHE_SPARING_PRIMARY
-        add     %o5,(6 * 8),%o3
-        stxa     %o1,[%o3]ASI_CACHE_SPARING_PRIMARY
-        add     %o3,128,%o3
-        stxa     %o1,[%o3]ASI_CACHE_SPARING_PRIMARY
-        add     %o5,(7 * 8),%o3
-        stxa     %o1,[%o3]ASI_CACHE_SPARING_PRIMARY
-        add     %o3,128,%o3
-        stxa     %o1,[%o3]ASI_CACHE_SPARING_PRIMARY
-        add     %o5,(8 * 8),%o3
-        stxa     %o1,[%o3]ASI_CACHE_SPARING_PRIMARY
-        add     %o3,128,%o3
-        stxa     %o1,[%o3]ASI_CACHE_SPARING_PRIMARY
-        add     %o5,(9 * 8),%o3
-        stxa     %o1,[%o3]ASI_CACHE_SPARING_PRIMARY
-        add     %o3,128,%o3
-        stxa     %o1,[%o3]ASI_CACHE_SPARING_PRIMARY
-        add     %o5,(10 * 8),%o3
-        stxa     %o1,[%o3]ASI_CACHE_SPARING_PRIMARY
-        add     %o3,128,%o3
-        stxa     %o1,[%o3]ASI_CACHE_SPARING_PRIMARY
-        add     %o5,(11 * 8),%o3
-        stxa     %o1,[%o3]ASI_CACHE_SPARING_PRIMARY
-        add     %o3,128,%o3
-        stxa     %o1,[%o3]ASI_CACHE_SPARING_PRIMARY
-        add     %o5,(12 * 8),%o3
-        stxa     %o1,[%o3]ASI_CACHE_SPARING_PRIMARY
-        add     %o3,128,%o3
-        stxa     %o1,[%o3]ASI_CACHE_SPARING_PRIMARY
-        add     %o5,(13 * 8),%o3
-        stxa     %o1,[%o3]ASI_CACHE_SPARING_PRIMARY
-        add     %o3,128,%o3
-        stxa     %o1,[%o3]ASI_CACHE_SPARING_PRIMARY
-        add     %o5,(14 * 8),%o3
-        stxa     %o1,[%o3]ASI_CACHE_SPARING_PRIMARY
-        add     %o3,128,%o3
-        stxa     %o1,[%o3]ASI_CACHE_SPARING_PRIMARY
-        add     %o5,(15 * 8),%o3
-        stxa     %o1,[%o3]ASI_CACHE_SPARING_PRIMARY
-        add     %o3,128,%o3
-        stxa     %o1,[%o3]ASI_CACHE_SPARING_PRIMARY
-        add     %o5,512,%o3  !%o3=final byte of next 256 byte, to check if more 256 byte block ahead
-        subcc   %o4,%o3,%g0   !%o4=final byte location;%o3=final byte of next 256 byte block
-        bge,pt  %ncc,start_128    !branch taken means next 256 byte block is still within the limit.
-        add     %o5,256,%o5
-
-!need to connect the rest of the program
-storeword:
-        and     %o2,255,%o3
-        and     %o3,7,%o2
-
-	! Set the remaining doubles
-	subcc   %o3, 8, %o3		! Can we store any doubles?
-	bl,pn  %ncc, 6f
-	and	%o2, 7, %o2		! calc bytes left after doubles
-
-5:	
-	stxa	%o1, [%o5]ASI_CACHE_SPARING_PRIMARY
-	subcc   %o3, 8, %o3
-	bge,pt	%ncc, 5b
-        add     %o5, 8, %o5      
-6:
-	! Set the remaining bytes
-	brz	%o2,  check_larry_alg		! safe to check all 64-bits
-	
-	! Terminate the copy with a partial store.
-	! The data should be at d0
-        dec     %o2                     ! needed to get the mask right
-	edge8n	%g0, %o2, %o4
-	stda	%d0, [%o5]%o4, ASI_PST8_P
-check_larry_alg:
-	mov	%g5, %o2
-	brnz,pn	%o2, larry_alg
-	nop
-	
-.exit:	
-	brz,a	%g1, 1f			! was fprs.fef == 0
-        wr	%g1, %g0, %fprs         ! fprs = g1  restore fprs
-1:
-        retl				! %o0 was preserved
-	add	%sp, SA(STACK_OFFSET + SAVESIZE), %sp
-
-larry_alg:
-	add	%sp, SA(STACK_OFFSET + SAVESIZE), %sp
-	save	%sp, -SA(MINFRAME), %sp
-	mov	%i0, %o0
-	mov	%i1, %o1
-	mov	%i2, %o2
-	mov	%i3, %o3
-	mov	%i5, %o5
-!%o5 = next memory addr which is 512 b align
-!%g5 = remaining byte from 512 align.
-init:
-	set     4096,%g6
-
-        prefetch [%o5+0],2
-        prefetch [%o5+(64*1)],2
-        prefetch [%o5+(64*2)],2
-        prefetch [%o5+(64*3)],2
-        prefetch [%o5+(64*4)],2
-        prefetch [%o5+(64*5)],2
-        prefetch [%o5+(64*6)],2
-        prefetch [%o5+(64*7)],2
-        prefetch [%o5+(64*8)],2
-        prefetch [%o5+(64*9)],2
-        prefetch [%o5+(64*10)],2
-        prefetch [%o5+(64*11)],2
-        prefetch [%o5+(64*12)],2
-        prefetch [%o5+(64*13)],2
-        prefetch [%o5+(64*14)],2
-        prefetch [%o5+(64*15)],2
-        ba      myloop2
-	add     %o5,%g5,%g5
-        /* Local register usage:
-           %l3   save %o5 at start of inner loop.
-           %l5   iteration counter to make buddy loop execute 2 times.
-           %l6   iteration counter to make inner loop execute 32 times.
-           %l7   address at far ahead of current %o5 for prefetching destination into L2 cache.
-	 */
-
-	.align 64
-myloop2:
-	/* Section 1 */
-        set      2,%l5    /* %l5 is the loop count for the buddy loop, for 2 buddy lines.  */
-        add      %o5, 0, %l3
-buddyloop:
-        set      PF_FAR, %l4        /* Prefetch far ahead.             CHANGE FAR PREFETCH HERE.     <<==== */
-        add      %o5, %l4, %l7      /* For prefetching far ahead, set %l7 far ahead of %o5           */
-
-        set      2*PF_FAR, %l4      /* Prefetch double far ahead.  SET DOUBLE FAR PREFETCH HERE.     <<==== */
-        add      %o5, %l4, %l4      /* %l4 is now double far ahead of the dest address in %o5.       */
-        prefetch [%l4+%g0],2        /* Prefetch ahead by 2 pages to get TLB entry in advance.        */
-
-        set      4,%l6             /* %l6 = loop count for the inner loop, for 4 x 8 = 32 lines.     */
-        set      0, %l4
-
-
-/* Each iteration of the inner loop below writes 8 sequential lines.  This loop is iterated 4 times,
-   to move a total of 32 lines, all of which have the same value of PA[9], so we increment the base
-   address by 1024 bytes in each iteration, which varies PA[10].                                     */
-innerloop:
-	add	%o5, PF_FAR, %o3
-	prefetch [%o3],2
-	add	%o3, 64, %o3
-	prefetch [%o3],2
-	add	%o3, 64, %o3
-	prefetch [%o3],2
-	add	%o3, 64, %o3
-	prefetch [%o3],2
-	add	%o3, 64, %o3
-	prefetch [%o3],2
-	add	%o3, 64, %o3
-	prefetch [%o3],2 
-	add	%o3, 64, %o3
-	prefetch [%o3],2
-	add	%o3, 64, %o3
-	prefetch [%o3],2
-
-	mov	%o5, %o3
-        stxa     %o1,[%o3]ASI_CACHE_SPARING_PRIMARY	!1st 64 byte line
-        add     %o5,128,%o3
-        stxa     %o1,[%o3]ASI_CACHE_SPARING_PRIMARY	!3rd 64 byte line
-        add     %o5,8,%o3
-        stxa     %o1,[%o3]ASI_CACHE_SPARING_PRIMARY
-        add     %o3,128,%o3
-        stxa     %o1,[%o3]ASI_CACHE_SPARING_PRIMARY
-        add     %o5,(2 * 8),%o3
-        stxa     %o1,[%o3]ASI_CACHE_SPARING_PRIMARY
-        add     %o3,128 ,%o3
-        stxa     %o1,[%o3]ASI_CACHE_SPARING_PRIMARY
-        add     %o5,(3 * 8),%o3
-        stxa     %o1,[%o3]ASI_CACHE_SPARING_PRIMARY
-        add     %o3,128,%o3
-        stxa     %o1,[%o3]ASI_CACHE_SPARING_PRIMARY
-        add     %o5,(4 * 8),%o3
-        stxa     %o1,[%o3]ASI_CACHE_SPARING_PRIMARY
-        add     %o3,128,%o3
-        stxa     %o1,[%o3]ASI_CACHE_SPARING_PRIMARY
-        add     %o5,(5 * 8),%o3
-        stxa     %o1,[%o3]ASI_CACHE_SPARING_PRIMARY
-        add     %o3,128,%o3
-        stxa     %o1,[%o3]ASI_CACHE_SPARING_PRIMARY
-        add     %o5,(6 * 8),%o3
-        stxa     %o1,[%o3]ASI_CACHE_SPARING_PRIMARY
-        add     %o3,128,%o3
-        stxa     %o1,[%o3]ASI_CACHE_SPARING_PRIMARY
-        add     %o5,(7 * 8),%o3
-        stxa     %o1,[%o3]ASI_CACHE_SPARING_PRIMARY
-        add     %o3,128,%o3
-        stxa     %o1,[%o3]ASI_CACHE_SPARING_PRIMARY
-        add     %o5,(8 * 8),%o3
-        stxa     %o1,[%o3]ASI_CACHE_SPARING_PRIMARY
-        add     %o3,128,%o3
-        stxa     %o1,[%o3]ASI_CACHE_SPARING_PRIMARY
-        add     %o5,(9 * 8),%o3
-        stxa     %o1,[%o3]ASI_CACHE_SPARING_PRIMARY
-        add     %o3,128,%o3
-        stxa     %o1,[%o3]ASI_CACHE_SPARING_PRIMARY
-        add     %o5,(10 * 8),%o3
-        stxa     %o1,[%o3]ASI_CACHE_SPARING_PRIMARY
-        add     %o3,128,%o3
-        stxa     %o1,[%o3]ASI_CACHE_SPARING_PRIMARY
-        add     %o5,(11 * 8),%o3
-        stxa     %o1,[%o3]ASI_CACHE_SPARING_PRIMARY
-        add     %o3,128,%o3
-        stxa     %o1,[%o3]ASI_CACHE_SPARING_PRIMARY
-        add     %o5,(12 * 8),%o3
-        stxa     %o1,[%o3]ASI_CACHE_SPARING_PRIMARY
-        add     %o3,128,%o3
-        stxa     %o1,[%o3]ASI_CACHE_SPARING_PRIMARY
-        add     %o5,(13 * 8),%o3
-        stxa     %o1,[%o3]ASI_CACHE_SPARING_PRIMARY
-        add     %o3,128,%o3
-        stxa     %o1,[%o3]ASI_CACHE_SPARING_PRIMARY
-        add     %o5,(14 * 8),%o3
-        stxa     %o1,[%o3]ASI_CACHE_SPARING_PRIMARY
-        add     %o3,128,%o3
-        stxa     %o1,[%o3]ASI_CACHE_SPARING_PRIMARY
-        add     %o5,(15 * 8),%o3
-        stxa     %o1,[%o3]ASI_CACHE_SPARING_PRIMARY
-        add     %o3,128,%o3
-        stxa     %o1,[%o3]ASI_CACHE_SPARING_PRIMARY
-
-        add     %o5,256,%o5
-
-	mov	%o5, %o3
-        stxa     %o1,[%o3]ASI_CACHE_SPARING_PRIMARY	!1st 64 byte line
-        add     %o5,128,%o3
-        stxa     %o1,[%o3]ASI_CACHE_SPARING_PRIMARY	!3rd 64 byte line
-        add     %o5,8,%o3
-        stxa     %o1,[%o3]ASI_CACHE_SPARING_PRIMARY
-        add     %o3,128,%o3
-        stxa     %o1,[%o3]ASI_CACHE_SPARING_PRIMARY
-        add     %o5,(2 * 8),%o3
-        stxa     %o1,[%o3]ASI_CACHE_SPARING_PRIMARY
-        add     %o3,128 ,%o3
-        stxa     %o1,[%o3]ASI_CACHE_SPARING_PRIMARY
-        add     %o5,(3 * 8),%o3
-        stxa     %o1,[%o3]ASI_CACHE_SPARING_PRIMARY
-        add     %o3,128,%o3
-        stxa     %o1,[%o3]ASI_CACHE_SPARING_PRIMARY
-        add     %o5,(4 * 8),%o3
-        stxa     %o1,[%o3]ASI_CACHE_SPARING_PRIMARY
-        add     %o3,128,%o3
-        stxa     %o1,[%o3]ASI_CACHE_SPARING_PRIMARY
-        add     %o5,(5 * 8),%o3
-        stxa     %o1,[%o3]ASI_CACHE_SPARING_PRIMARY
-        add     %o3,128,%o3
-        stxa     %o1,[%o3]ASI_CACHE_SPARING_PRIMARY
-        add     %o5,(6 * 8),%o3
-        stxa     %o1,[%o3]ASI_CACHE_SPARING_PRIMARY
-        add     %o3,128,%o3
-        stxa     %o1,[%o3]ASI_CACHE_SPARING_PRIMARY
-        add     %o5,(7 * 8),%o3
-        stxa     %o1,[%o3]ASI_CACHE_SPARING_PRIMARY
-        add     %o3,128,%o3
-        stxa     %o1,[%o3]ASI_CACHE_SPARING_PRIMARY
-        add     %o5,(8 * 8),%o3
-        stxa     %o1,[%o3]ASI_CACHE_SPARING_PRIMARY
-        add     %o3,128,%o3
-        stxa     %o1,[%o3]ASI_CACHE_SPARING_PRIMARY
-        add     %o5,(9 * 8),%o3
-        stxa     %o1,[%o3]ASI_CACHE_SPARING_PRIMARY
-        add     %o3,128,%o3
-        stxa     %o1,[%o3]ASI_CACHE_SPARING_PRIMARY
-        add     %o5,(10 * 8),%o3
-        stxa     %o1,[%o3]ASI_CACHE_SPARING_PRIMARY
-        add     %o3,128,%o3
-        stxa     %o1,[%o3]ASI_CACHE_SPARING_PRIMARY
-        add     %o5,(11 * 8),%o3
-        stxa     %o1,[%o3]ASI_CACHE_SPARING_PRIMARY
-        add     %o3,128,%o3
-        stxa     %o1,[%o3]ASI_CACHE_SPARING_PRIMARY
-        add     %o5,(12 * 8),%o3
-        stxa     %o1,[%o3]ASI_CACHE_SPARING_PRIMARY
-        add     %o3,128,%o3
-        stxa     %o1,[%o3]ASI_CACHE_SPARING_PRIMARY
-        add     %o5,(13 * 8),%o3
-        stxa     %o1,[%o3]ASI_CACHE_SPARING_PRIMARY
-        add     %o3,128,%o3
-        stxa     %o1,[%o3]ASI_CACHE_SPARING_PRIMARY
-        add     %o5,(14 * 8),%o3
-        stxa     %o1,[%o3]ASI_CACHE_SPARING_PRIMARY
-        add     %o3,128,%o3
-        stxa     %o1,[%o3]ASI_CACHE_SPARING_PRIMARY
-        add     %o5,(15 * 8),%o3
-        stxa     %o1,[%o3]ASI_CACHE_SPARING_PRIMARY
-        add     %o3,128,%o3
-        stxa     %o1,[%o3]ASI_CACHE_SPARING_PRIMARY
-
-        subcc   %l6,1,%l6    /* Decrement the inner loop counter.         */
-
-        /* -------- Now increment by 256 + 512 so we don't toggle PA[9] -------- */
-        add     %o5, 768, %o5
-
-        bg,pt   %ncc,innerloop
-        nop
-/* ------------------------ END OF INNER LOOP -------------------------- */
-
-        subcc   %l5,1,%l5
-        add     %l3, 512, %o5       /* increment %o5 to first buddy line of dest.   */
-        bg,pt   %ncc,buddyloop
-	nop
-        add     %o5, 3584, %o5      /* Advance both base addresses to 4k above where they started. */
-                                        !%o5=next 4096 block.
-	add %o5,%g6,%i5
-	subcc %g5,%i5,%g0
-        bge,pt   %ncc,myloop2
-        nop
-
-
-	/****larryalg_end_here*************/
-
-	sub	%g5,%o5,%o2	!how many byte left
-	brz,pn	%o2,complete_write
-	mov	%g0,%g5
-	add     %o5,%o2,%o4             !cal the last byte to write %o4
-	subcc	%o2,256,%g0
-	bge,pt	%ncc,memset_128
-	mov	%g0,%g5
-	
-	ba	memset_storeword
-	nop
-
-
-complete_write: 
-	brz,a	%g1, 1f			! was fprs.fef == 0
-        wr	%g1, %g0, %fprs         ! fprs = g1  restore fprs
-1:
-        ret				! %o0 was preserved
-	restore
-
-	.align	64
-memset_128:
-	add	%o5, 256, %o3
-	prefetch [%o3], 2	!1st 64 byte line of next 256 byte block
-	add	%o5, 384, %o3
-	prefetch [%o3], 2	!3rd 64 byte line of next 256 byte block
-	add	%o5, 320, %o3
-	prefetch [%o3], 2	!2nd 64 byte line of next 256 byte block
-	add	%o5, 448, %o3
-	prefetch [%o3], 2	!4th 64 byte line of next 256 byte block
-	mov	%o5, %o3
-        stxa     %o1,[%o3]ASI_CACHE_SPARING_PRIMARY	!1st 64 byte line
-        add     %o5,128,%o3
-        stxa     %o1,[%o3]ASI_CACHE_SPARING_PRIMARY	!3rd 64 byte line
-        add     %o5,8,%o3
-        stxa     %o1,[%o3]ASI_CACHE_SPARING_PRIMARY
-        add     %o3,128,%o3
-        stxa     %o1,[%o3]ASI_CACHE_SPARING_PRIMARY
-        add     %o5,(2 * 8),%o3
-        stxa     %o1,[%o3]ASI_CACHE_SPARING_PRIMARY
-        add     %o3,128 ,%o3
-        stxa     %o1,[%o3]ASI_CACHE_SPARING_PRIMARY
-        add     %o5,(3 * 8),%o3
-        stxa     %o1,[%o3]ASI_CACHE_SPARING_PRIMARY
-        add     %o3,128,%o3
-        stxa     %o1,[%o3]ASI_CACHE_SPARING_PRIMARY
-        add     %o5,(4 * 8),%o3
-        stxa     %o1,[%o3]ASI_CACHE_SPARING_PRIMARY
-        add     %o3,128,%o3
-        stxa     %o1,[%o3]ASI_CACHE_SPARING_PRIMARY
-        add     %o5,(5 * 8),%o3
-        stxa     %o1,[%o3]ASI_CACHE_SPARING_PRIMARY
-        add     %o3,128,%o3
-        stxa     %o1,[%o3]ASI_CACHE_SPARING_PRIMARY
-        add     %o5,(6 * 8),%o3
-        stxa     %o1,[%o3]ASI_CACHE_SPARING_PRIMARY
-        add     %o3,128,%o3
-        stxa     %o1,[%o3]ASI_CACHE_SPARING_PRIMARY
-        add     %o5,(7 * 8),%o3
-        stxa     %o1,[%o3]ASI_CACHE_SPARING_PRIMARY
-        add     %o3,128,%o3
-        stxa     %o1,[%o3]ASI_CACHE_SPARING_PRIMARY
-        add     %o5,(8 * 8),%o3
-        stxa     %o1,[%o3]ASI_CACHE_SPARING_PRIMARY
-        add     %o3,128,%o3
-        stxa     %o1,[%o3]ASI_CACHE_SPARING_PRIMARY
-        add     %o5,(9 * 8),%o3
-        stxa     %o1,[%o3]ASI_CACHE_SPARING_PRIMARY
-        add     %o3,128,%o3
-        stxa     %o1,[%o3]ASI_CACHE_SPARING_PRIMARY
-        add     %o5,(10 * 8),%o3
-        stxa     %o1,[%o3]ASI_CACHE_SPARING_PRIMARY
-        add     %o3,128,%o3
-        stxa     %o1,[%o3]ASI_CACHE_SPARING_PRIMARY
-        add     %o5,(11 * 8),%o3
-        stxa     %o1,[%o3]ASI_CACHE_SPARING_PRIMARY
-        add     %o3,128,%o3
-        stxa     %o1,[%o3]ASI_CACHE_SPARING_PRIMARY
-        add     %o5,(12 * 8),%o3
-        stxa     %o1,[%o3]ASI_CACHE_SPARING_PRIMARY
-        add     %o3,128,%o3
-        stxa     %o1,[%o3]ASI_CACHE_SPARING_PRIMARY
-        add     %o5,(13 * 8),%o3
-        stxa     %o1,[%o3]ASI_CACHE_SPARING_PRIMARY
-        add     %o3,128,%o3
-        stxa     %o1,[%o3]ASI_CACHE_SPARING_PRIMARY
-        add     %o5,(14 * 8),%o3
-        stxa     %o1,[%o3]ASI_CACHE_SPARING_PRIMARY
-        add     %o3,128,%o3
-        stxa     %o1,[%o3]ASI_CACHE_SPARING_PRIMARY
-        add     %o5,(15 * 8),%o3
-        stxa     %o1,[%o3]ASI_CACHE_SPARING_PRIMARY
-        add     %o5,512,%l4  !%l4=final byte of next 256 byte, to check if more 256 byte block ahead
-        add     %o3,128,%o3
-        stxa     %o1,[%o3]ASI_CACHE_SPARING_PRIMARY
-!this branch condition is not needed if we are handling bytes before 4096b
-!because we will only issue once, so %l6 is an invalid data
-!the branch is really for handling bytes after 4096b, there could be
-!multiple of 256 byte block to work on. 
-
-        subcc   %o4,%l4,%g0   !%o4=final byte location;%l4=final byte of next 256 byte block
-        bge,pt  %ncc,memset_128    !branch taken means next 256 byte block is still within the limit.
-        add     %o5,256,%o5
-
-!need to connect the rest of the program
-memset_storeword:
-        and     %o2,255,%o3
-        and     %o3,7,%o2
-
-	! Set the remaining doubles
-	subcc   %o3, 8, %o3		! Can we store any doubles?
-	bl,pn  %ncc, 6f
-	and	%o2, 7, %o2		! calc bytes left after doubles
-
-5:	
-	stxa	%o1, [%o5]ASI_CACHE_SPARING_PRIMARY
-	subcc   %o3, 8, %o3
-	bge,pt	%ncc, 5b
-        add     %o5, 8, %o5      
-6:
-	! Set the remaining bytes
-	brz	%o2,  complete_write		! safe to check all 64-bits
-	
-	! Terminate the copy with a partial store.
-	! The data should be at d0
-        dec     %o2                     ! needed to get the mask right
-	edge8n	%g0, %o2, %o4
-	stda	%d0, [%o5]%o4, ASI_PST8_P
-	
-	brz,a	%g1, 1f			! was fprs.fef == 0
-        wr	%g1, %g0, %fprs         ! fprs = g1  restore fprs
-1:
-        ret				! %o0 was preserved
-	restore
-
-
-	SET_SIZE(memset)
--- a/usr/src/lib/libc/sparc_hwcap1/common/gen/misc.s	Wed Aug 05 18:08:09 2009 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,33 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License (the "License").
- * You may not use this file except in compliance with the License.
- *
- * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
- * or http://www.opensolaris.org/os/licensing.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information: Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- */
-
-/*
- * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
- * Use is subject to license terms.
- */
-
-#include <sys/asm_linkage.h>
-
-	ENTRY(_rock_pause)
-	membar	#Halt
-	retl
-	nop
-	SET_SIZE(_rock_pause)
--- a/usr/src/lib/libc/sparc_hwcap1/common/gen/strcpy.s	Wed Aug 05 18:08:09 2009 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,340 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License (the "License").
- * You may not use this file except in compliance with the License.
- *
- * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
- * or http://www.opensolaris.org/os/licensing.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information: Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- */
-
-/*
- * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
- * Use is subject to license terms.
- */
-
-	.file	"strcpy.s"
-
-/*
- * strcpy(s1, s2)
- *
- * Copy string s2 to s1.  s1 must be large enough. Return s1.
- *
- * Fast assembler language version of the following C-program strcpy
- * which represents the `standard' for the C-library.
- *
- *	char *
- *	strcpy(s1, s2)
- *	register char *s1;
- *	register const char *s2;
- *	{
- *		char *os1 = s1;
- *
- *		while(*s1++ = *s2++)
- *			;
- *		return(os1);
- *	}
- *
- */
-
-#include <sys/asm_linkage.h>
-
-	! This implementation of strcpy works by first checking the
-	! source alignment and copying byte, half byte, or word
-	! quantities until the source ptr is aligned at an extended
-	! word boundary.  Once this has occurred, the string is copied,
-	! checking for zero bytes, depending upon its dst ptr alignment.
-	! (methods for xword, word, half-word, and byte copies are present)
-
-#ifdef	__sparcv9
-#define	SAVESIZE	(8 * 3)
-#define	STACK_OFFSET	(STACK_BIAS + MINFRAME)
-#else
-#define	SAVESIZE	(8 * 5)
-#define	STACK_OFFSET	(STACK_BIAS + MINFRAME + 4)
-#endif
-
-#define LABEL_ADDRESS(label, reg)	 \
-	.pushlocals			;\
-0:	rd %pc, reg		  	;\
-	add reg, (label) - 0b, reg	;\
-	.poplocals
-
-offset_table:
-	.word	.storexword - offset_table	! Offset 0 => xword aligned
-	.word	.storebyte1241 - offset_table	! Offset 1 or 5
-	.word	.storehalfword - offset_table	! Offset 2 or 6
-	.word	.storebyte1421 - offset_table	! Offset 3 or 7
-	.word	.storeword - offset_table	! Offset 4
-
-	.align	64
-#ifdef	__sparcv9
-	.skip	20
-#else
-	.skip	12
-#endif
-
-	ENTRY(strcpy)
-	add	%sp, -SA(STACK_OFFSET + SAVESIZE), %sp
-#ifndef	__sparcv9
-	stx	%g4, [%sp + STACK_OFFSET + 24]
-	stx	%g5, [%sp + STACK_OFFSET + 32]
-#endif
-	sethi	%hi(0x01010101), %o4		! 0x01010000
-	sub	%o1, %o0, %o3		! src - dst
-	or	%o4, %lo(0x01010101), %o4	! 0x01010101
-	andcc	%o1, 7, %g5		! dword aligned ?
-	sllx	%o4, 32, %o5			! 0x01010101 << 32
-	mov	%o0, %o2		! save dst
-	or	%o4, %o5, %o4			! 0x0101010101010101
-
-	bz,pt	%ncc, .srcaligned	! yup
-	sllx	%o4, 7, %o5			! 0x8080808080808080
-
-	sub	%g0, %g5, %g4		! count = -off
-	ldx	[%o1 + %g4], %o1	! val = *(addr + -off)
-	mov	-1, %g1			! mask = -1
-	sllx	%g5, 3, %g4		! shift = off * 8
-	srlx	%g1, %g4, %g1		! -1 >> ((addr & 7) * 8)
-	orn	%o1, %g1, %o1		! val |= ~mask
-
-	andn	%o5, %o1, %g4		! ~val & 0x80
-	sub	%o1, %o4, %g1		! val - 0x01
-	andcc	%g4, %g1, %g4		! ~val & 0x80 & (val - 0x01)
-
-	sllx	%g5, 3, %g4
-	add	%o2, 8, %o2		! .zerobyte expects address = address + 8
-	bnz,a,pn	%xcc, .zerobyte ! Zero byte in the first xword
-	  sllx	%o1, %g4, %o1		! and data to be left justified
-
-	sub	%o2, 8, %o2
-	mov	8, %g4
-	sub	%g4, %g5, %g1		! Bytes to be written
-	sub	%g1, 1, %g4
-
-1:	stub	%o1, [%o2 + %g4]
-	dec	%g4
-	brgez,pt	%g4, 1b
-	srlx	%o1, 8, %o1
-
-	add	%o2, %g1, %o2		! Move ptr by #bytes written
-
-.srcaligned:
-	!! Check if the first dword contains zero after src is aligned
-	ldx	[%o2 + %o3], %o1	! x = src[]
-	andn	%o5, %o1, %g1		! ~x & 0x8080808080808080
-	sub	%o1, %o4, %g4		! x - 0x0101010101010101
-	andcc	%g4, %g1, %g0		! ((x - 0x0101010101010101) & ~x & 0x8080808080808080)
-	bnz,a,pn	%xcc, .zerobyte	! x has zero byte, handle end cases
-	  add	%o2, 8, %o2		! src += 8, dst += 8
-
-	!! Determine the destination offset and branch
-	!! to appropriate location
-	and	%o2, 3, %g4
-	and	%o2, 4, %g1
-	or	%g1, %g4, %g1
-	movrnz	%g4, 0, %g1
-	movrnz	%g1, 4, %g4
-
-	!! %g4 contains the index of the jump address
-	!! Load the address from the table.
-	LABEL_ADDRESS(offset_table, %g1)
-	sllx	%g4, 2, %g4
-	lduw	[%g1 + %g4], %g4
-	jmp	%g1 + %g4
-	add	%o2, 8, %o2		! src += 8, dst += 8
-
-.storexword:
-	stx	%o1, [%o2 - 8]		! store word to dst (address pre-incremented)
-
-1:
-	ldx	[%o2 + %o3], %o1	! src dword
-	add	%o2, 8, %o2		! src += 8, dst += 8
-	andn	%o5, %o1, %g1		! ~dword & 0x8080808080808080
-	sub	%o1, %o4, %g4		! dword - 0x0101010101010101
-	andcc	%g4, %g1, %g0		! ((dword - 0x0101010101010101) & ~dword & 0x8080808080808080)
-	bz,a,pt	%xcc, 1b		! no zero byte if magic expression == 0
-	  stx	%o1, [%o2 - 8]		! store word to dst (address pre-incremented)
-
-	ba,a	.zerobyte
-
-.storebyte1421:
-	!! Offset 3 or 7
-	srlx	%o1, 56, %g1		! %g1<7:0> = first byte; word aligned now
-	stb	%g1, [%o2 - 8]		! store first byte
-	srlx	%o1, 24, %g1		! %g1<31:0> = bytes 2, 3, 4, 5
-	stw	%g1, [%o2 - 7]		! store bytes 2, 3, 4, 5
-	srlx	%o1, 8, %g1		! %g1<15:0> = bytes 6, 7
-	sth	%g1, [%o2 - 3]		! store bytes 6, 7
-
-	stx	%l0, [%sp + STACK_OFFSET + 0]
-	and	%o2, 7, %g1
-	stx	%l1, [%sp + STACK_OFFSET + 8]
-	cmp	%g1, 3
-	stx	%l2, [%sp + STACK_OFFSET + 16]
-
-	move	%ncc, 40, %l0
-	move	%ncc, 24, %l1
-	move	%ncc, -11, %l2
-
-	movne	%ncc, 8, %l0
-	movne	%ncc, 56, %l1
-	movne	%ncc, -15, %l2
-
-	ba	.dstaligned
-	mov	%o1, %g5
-
-.storebyte1241:
-	!! Offset 1 or 5
-	srlx	%o1, 56, %g1		! %g1<7:0> = first byte; word aligned now
-	stb	%g1, [%o2 - 8]		! store first byte
-	srlx	%o1, 40, %g1		! %g1<15:0> = bytes 2, 3
-	sth	%g1, [%o2 - 7]		! store bytes 2, 3
-	srlx	%o1, 8, %g1		! %g1<31:0> = bytes 4, 5, 6, 7
-	stw	%g1, [%o2 - 5]		! store bytes 4, 5, 6, 7
-
-	stx	%l0, [%sp + STACK_OFFSET + 0]
-	and	%o2, 7, %g1
-	stx	%l1, [%sp + STACK_OFFSET + 8]
-	cmp	%g1, 1
-	stx	%l2, [%sp + STACK_OFFSET + 16]
-
-	move	%ncc, 56, %l0
-	move	%ncc, 8, %l1
-	move	%ncc, -9, %l2
-
-	movne	%ncc, 24, %l0
-	movne	%ncc, 40, %l1
-	movne	%ncc, -13, %l2
-
-	ba	.dstaligned
-	mov	%o1, %g5
-
-.storehalfword:
-	srlx	%o1, 48, %g1		! get first and second byte
-	sth	%g1, [%o2 - 8]		! store first and second byte; word aligned now
-	srlx	%o1, 16, %g1		! %g1<31:0> = bytes 3, 4, 5, 6
-	stw	%g1, [%o2 - 6]		! store bytes 3, 4, 5, 6
-
-	stx	%l0, [%sp + STACK_OFFSET + 0]
-	and	%o2, 7, %g1
-	stx	%l1, [%sp + STACK_OFFSET + 8]
-	cmp	%g1, 2
-	stx	%l2, [%sp + STACK_OFFSET + 16]
-
-	move	%ncc, 48, %l0
-	move	%ncc, 16, %l1
-	move	%ncc, -10, %l2
-
-	movne	%ncc, 16, %l0
-	movne	%ncc, 48, %l1
-	movne	%ncc, -14, %l2
-
-	ba	.dstaligned
-	mov	%o1, %g5
-
-.storeword:
-	srlx	%o1, 32, %g1		! get bytes 1,2,3,4
-	stw	%g1, [%o2 - 8]		! store bytes 1,2,3,4 (address is pre-incremented)
-
-	stx	%l0, [%sp + STACK_OFFSET + 0]
-	mov	32, %l0			! Num of bits to be shifted left
-	stx	%l1, [%sp + STACK_OFFSET + 8]
-	mov	32, %l1			! Num of bits to be shifted right
-	stx	%l2, [%sp + STACK_OFFSET + 16]
-	mov	-12, %l2		! -offset
-	mov	%o1, %g5
-
-	nop	! Do not delete. Used for alignment.
-.dstaligned:
-	ldx	[%o2 + %o3], %o1	! x = src[]
-	add	%o2, 8, %o2		! src += 8, dst += 8
-	andn	%o5, %o1, %g1		! ~x & 0x8080808080808080
-	sub	%o1, %o4, %g4		! x - 0x0101010101010101
-	andcc	%g4, %g1, %g0		! ((x - 0x0101010101010101) & ~x & 0x8080808080808080)
-	bnz,a,pn %xcc, .finishup	! x has zero byte, handle end cases
-	  stb	%g5, [%o2 - 9]
-
-	sllx	%g5, %l0, %g5
-	srlx	%o1, %l1, %g4
-	or	%g5, %g4, %g5
-
-	stx	%g5, [%o2 + %l2]
-	ba	.dstaligned
-	mov	%o1, %g5
-
-.finishup:
-	cmp	%l0, 56
-	be,pn	%ncc, .zerobyte_restore
-	andcc	%o2, 1, %g0
-	bnz,a	%ncc, 1f
-	  srlx	%g5, 8, %g5
-
-1:	srlx	%l1, 4, %g4	! g4 contains 1, 2 or 3
-	sub	%g4, 1, %g4	! multiple of 16
-	sllx	%g4, 4, %g4	! How many bits to shift
-	srlx	%g5, %g4, %l0
-	add	%o2, %l2, %g1
-
-2:	sth	%l0, [%g1]
-	sub	%g4, 16, %g4
-	add	%g1, 2, %g1
-	brgez,a,pt	%g4, 2b
-	  srlx	%g5, %g4, %l0
-
-.zerobyte_restore:
-	ldx	[%sp + STACK_OFFSET + 0], %l0
-	andn	%o5, %o1, %o3		! ~val & 0x80
-	ldx	[%sp + STACK_OFFSET + 8], %l1
-	sub	%o1, %o4, %g1		! val - 0x01
-	ldx	[%sp + STACK_OFFSET + 16], %l2
-
-	ba	1f
-	andcc	%o3, %g1, %o3		! ~val & 0x80 & (val - 0x01)
-
-.zerobyte:
-	!! %o5:	0x8080808080808080
-	!! %o4: 0x0101010101010101
-	!! %o1: Left justified dowrd that contains 0 byte
-	!! %o2: Address to be written + 8
-
-	andn	%o5, %o1, %o3		! ~val & 0x80
-	sub	%o1, %o4, %g1		! val - 0x01
-	andcc	%o3, %g1, %o3		! ~val & 0x80 & (val - 0x01)
-
-1:	srlx	%o3, 7, %o3		! shift 0x80 -> 0x01
-	andn	%o3, %o1, %o3		! mask off leading 0x01 bytes
-	lzd	%o3, %o4		! 7, 15, ... 63
-
-	mov	64, %o5			! Calc # of bytes to be discarded
-	inc	%o4			! Include the zero byte too
-	sub	%o5, %o4, %o5		! after the null byte
-	sub	%o2, 8, %o2		! Adjust address which is +8 here.
-	srlx	%o1, %o5, %o1		! Discard them
-
-	srlx	%o4, 3, %o4		! Bits to bytes to be written
-	dec	%o4			! dec 1 to use it as offset
-
-2:	stub	%o1, [%o2 + %o4]
-	dec	%o4
-	brgez,pt %o4, 2b
-	srlx	%o1, 8, %o1
-
-#ifndef	__sparcv9
-	ldx	[%sp + STACK_OFFSET + 24], %g4
-	ldx	[%sp + STACK_OFFSET + 32], %g5
-#endif
-	retl				! done with leaf function
-	add	%sp, SA(STACK_OFFSET + SAVESIZE), %sp
-	SET_SIZE(strcpy)
--- a/usr/src/lib/libc/sparc_hwcap1/common/gen/strlen.s	Wed Aug 05 18:08:09 2009 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,127 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License (the "License").
- * You may not use this file except in compliance with the License.
- *
- * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
- * or http://www.opensolaris.org/os/licensing.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information: Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- */
-
-/*
- * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
- * Use is subject to license terms.
- */
-
-	.file	"strlen.s"
-
-/*
- * strlen(s)
- *
- * Given string s, return length (not including the terminating null).
- *
- * Fast assembler language version of the following C-program strlen
- * which represents the `standard' for the C-library.
- *
- *	size_t
- *	strlen(s)
- *	register const char *s;
- *	{
- *		register const char *s0 = s + 1;
- *
- *		while (*s++ != '\0')
- *			;
- *		return (s - s0);
- *	}
- */
-
-#include <sys/asm_linkage.h>
-
-	/*
-	 * There are two key optimizations in the routine below.
-	 * First, all memory accesses are 8 bytes wide.  The time
-	 * for long strings is dominated by the latency of load
-	 * instructions in the inner loop, and going 8 bytes at
-	 * a time means 1/8th as much latency.
-	 *
-	 * Scanning an 8 byte word for a '\0' is made fast by
-	 * this formula (due to Alan Mycroft):
-	 *     ~x & 0x808080808080 & (x - 0x0101010101010101)
-	 * The result of this formula is non-zero iff there's
-	 * a '\0' somewhere in x.
-	 *
-	 * Second, the cost of short strings is dominated by the
-	 * cost of figuring out which byte out of the last 8
-	 * contained the '\0' that terminated the string.  We use
-	 * properties of the formula above to convert scanning the
-	 * word for '\0' into a single LZD instruction.
-	 */
-	.align	64
-	.skip	4*4	! force .findnull to align to 64 bytes
-	ENTRY_NP(strlen)
-	and	%o0, 7, %o3			! off = addr & 7
-	sethi	%hi(0x01010101), %o4		! 0x01010000
-
-	sub	%g0, %o3, %o2			! count = -off
-	or	%o4, %lo(0x01010101), %o4	! 0x01010101
-
-	ldx	[%o0 + %o2], %o1		! val = *(addr + count)
-	sllx	%o4, 32, %o5			! 0x01010101 << 32
-
-	mov	-1, %g1				! mask = -1
-	sllx	%o3, 3, %o3			! shift = off * 8
-
-	or	%o4, %o5, %o4			! 0x0101010101010101
-	srlx	%g1, %o3, %g1			! -1 >> ((addr & 7) * 8)
-
-	sllx	%o4, 7, %o5			! 0x8080808080808080
-	orn	%o1, %g1, %o1			! val |= ~mask
-.strlen_findnull:
-	!! %o0 - base address
-	!! %o1 - xword from memory
-	!! %o2 - index
-	!! %o3 - result of test for '\0'
-	!! %o4 - constant 0x0101.0101.0101.0101
-	!! %o5 - constant 0x8080.8080.8080.8080
-	!! %g1 - scratch
-	andn	%o5, %o1, %o3		! ~val & 0x80
-	sub	%o1, %o4, %g1		! val - 0x01
-	andcc	%o3, %g1, %o3		! ~val & 0x80 & (val - 0x01)
-	inc	8, %o2
-	bz,a,pt	%xcc, .strlen_findnull
-	  ldx	[%o0 + %o2], %o1
-
-	/*
-	 * The result of Mycroft's formula is a pattern of 0x80 and
-	 * 0x00 bytes.  There's a 0x80 at every byte position where
-	 * there was a '\0' character, but a string of 0x01 bytes
-	 * immediately preceding a '\0' becomes a corresponding
-	 * string of 0x80 bytes.  (e.g. 0x0101010101010100 becomes
-	 * 0x8080808080808080).  We need one final step to discount
-	 * any leading 0x01 bytes, and then LZD can tell us how many
-	 * characters there were before the terminating '\0'.
-	 */
-	!! %o1 - last data word
-	!! %o2 - length+8, plus 1-8 extra
-	!! %o3 - xword with 0x80 for each 0x00 byte and leading 0x01
-	sub	%o2, 8, %o2		! subtract off '\0' and last 8
-	srlx	%o3, 7, %o3		! shift 0x80 -> 0x01
-	andn	%o3, %o1, %o3		! mask off leading 0x01 bytes
-	lzd	%o3, %o3		! 7, 15, ... 63
-	srlx	%o3, 3, %o3		! 0 ... 7
-
-	retl
-	add	%o2, %o3, %o0		! add back bytes before '\0'
-
-	SET_SIZE(strlen)
--- a/usr/src/lib/libc/sparc_hwcap1/sparc/Makefile	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/lib/libc/sparc_hwcap1/sparc/Makefile	Mon Aug 10 10:43:48 2009 -0400
@@ -28,8 +28,7 @@
 
 LIBRARY=	libc_hwcap1.a
 
-EXTN_CPPFLAGS=	-DSMT_PAUSE_FUNCTION=_rock_pause \
-		-I$(SRC)/uts/sun4v -I$(ROOT)/usr/platform/sun4v/include
+EXTN_CPPFLAGS=	-I$(SRC)/uts/sun4v -I$(ROOT)/usr/platform/sun4v/include
 EXTN_ASFLAGS=	-xarch=v8plusd
 EXTN_DYNFLAGS=	-M mapfile
 
@@ -40,10 +39,10 @@
 
 PRFOBJS=		\
 	memcpy.o	\
+	memmove.o	\
 	memset.o	\
 	strlen.o	\
 	strcpy.o	\
-	misc.o
 
 MAPFILE_AUX =	mapfile-vers-aux
 
--- a/usr/src/lib/libc/sparc_hwcap1/sparcv9/Makefile	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/lib/libc/sparc_hwcap1/sparcv9/Makefile	Mon Aug 10 10:43:48 2009 -0400
@@ -27,8 +27,7 @@
 
 LIBRARY=	libc_hwcap1.a
 
-EXTN_CPPFLAGS=	-DSMT_PAUSE_FUNCTION=_rock_pause \
-		-I$(SRC)/uts/sun4v -I$(ROOT)/usr/platform/sun4v/include
+EXTN_CPPFLAGS=	-I$(SRC)/uts/sun4v -I$(ROOT)/usr/platform/sun4v/include
 EXTN_ASFLAGS=	-xarch=v9d
 EXTN_DYNFLAGS=	-M mapfile
 
@@ -39,10 +38,10 @@
 
 PRFOBJS=		\
 	memcpy.o	\
+	memmove.o	\
 	memset.o	\
 	strlen.o	\
 	strcpy.o	\
-	misc.o
 
 MAPFILE_AUX =	mapfile-vers-aux
 
--- a/usr/src/lib/libc/sparcv9/Makefile.com	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/lib/libc/sparcv9/Makefile.com	Mon Aug 10 10:43:48 2009 -0400
@@ -956,6 +956,11 @@
 RTLDINFO =	-z rtldinfo=tls_rtldinfo
 DYNFLAGS +=	$(RTLDINFO)
 
+# Force libc's internal references to be resolved immediately upon loading
+# in order to avoid critical region problems.  Since almost all libc symbols
+# are marked 'protected' in the mapfiles, this is a minimal set (15 to 20).
+DYNFLAGS +=	-znow
+
 DYNFLAGS +=	$(EXTN_DYNFLAGS)
 
 BUILD.s=	$(AS) $(ASFLAGS) $< -o $@
--- a/usr/src/lib/libdisasm/sparc/dis_sparc_fmt.c	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/lib/libdisasm/sparc/dis_sparc_fmt.c	Mon Aug 10 10:43:48 2009 -0400
@@ -20,12 +20,12 @@
  */
 
 /*
- * Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
+ * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
  * Use is subject to license terms.
  */
 
 /*
- * Copyright 2008 Jason King.  All rights reserved.
+ * Copyright 2009 Jason King.  All rights reserved.
  * Use is subject to license terms.
  */
 
@@ -389,15 +389,15 @@
 	uint32_t op3:6;
 	uint32_t rs1:5;
 	uint32_t i:1;
-	uint32_t undef:5;
-	uint32_t cmask:4;
+	uint32_t undef:6;
+	uint32_t cmask:3;
 	uint32_t mmask:4;
 } formatmbr_t;
 #elif defined(_BIT_FIELDS_LTOH)
 typedef struct formatmbr {
 	uint32_t mmask:4;
-	uint32_t cmask:4;
-	uint32_t undef:5;
+	uint32_t cmask:3;
+	uint32_t undef:6;
 	uint32_t i:1;
 	uint32_t rs1:5;
 	uint32_t op3:6;
@@ -566,8 +566,8 @@
 	"#LoadLoad", "#StoreLoad", "#LoadStore", "#StoreStore"
 };
 
-static const char *membar_cmask[4] = {
-	"#Lookaside", "#MemIssue", "#Sync", "#Halt"
+static const char *membar_cmask[3] = {
+	"#Lookaside", "#MemIssue", "#Sync"
 };
 
 /* v8 ancillary state register names */
@@ -592,15 +592,15 @@
 	"%pcr",		"%pic",		"%dcr",	"%gsr",
 	"%softint_set",	"%softint_clr",	"%softint",	"%tick_cmpr",
 	"%stick",	"%stick_cmpr",	NULL,	NULL,
-	"%cps",		NULL,		NULL,	NULL
+	NULL,		NULL,		NULL,	NULL
 };
 /*
  * on v9, only certain registers are valid for read or writing
  * these are bitmasks corresponding to which registers are valid in which
- * case
+ * case. Any access to %dcr is illegal.
  */
-static const uint32_t v9_asr_rdmask = 0x13cb007d;
-static const uint32_t v9_asr_wrmask = 0x13fb004d;
+static const uint32_t v9_asr_rdmask = 0x03cb007d;
+static const uint32_t v9_asr_wrmask = 0x03fb004d;
 
 /* privledged register names on v9 */
 /* TODO: compat - NULL to %priv_nn */
@@ -617,7 +617,7 @@
 
 /* hyper privileged register names on v9 */
 static const char *v9_hprivreg_names[32] = {
-	"%hpstate",	 "%htstate",	"%hrstba",  "%hintp",
+	"%hpstate",	 "%htstate",	NULL,  "%hintp",
 	NULL,	"%htba",	 "%hver",  NULL,
 	NULL,	NULL,	NULL,	NULL,
 	NULL,	NULL,	NULL,	NULL,
@@ -629,8 +629,8 @@
 
 static const uint32_t v9_pr_rdmask = 0x80017fff;
 static const uint32_t v9_pr_wrmask = 0x00017fff;
-static const uint32_t v9_hpr_rdmask = 0x8000006f;
-static const uint32_t v9_hpr_wrmask = 0x8000006f;
+static const uint32_t v9_hpr_rdmask = 0x8000006b;
+static const uint32_t v9_hpr_wrmask = 0x8000006b;
 
 static const char *prefetch_str[32] = {
 	"#n_reads", "#one_read",
@@ -784,7 +784,6 @@
 	int32_t disp;
 	uint32_t flags = inp->in_data.in_def.in_flags;
 	int octal = ((dhp->dh_flags & DIS_OCTAL) != 0);
-	int chkpt = 0;
 
 	if ((dhp->dh_debug & DIS_DEBUG_PRTFMT) != 0) {
 		prt_field("op", f->f2.op, 2);
@@ -822,13 +821,6 @@
 		flags = FLG_RS1(REG_NONE)|FLG_DISP(DISP19);
 	}
 
-	if (f->f2b.op2 == 0x01 && f->f2b.a == 1 &&
-	    f->f2b.p == 0 && f->f2b.cond == 0x8 && f->f2b.cc == 0x01) {
-		name = "chkpt";
-		flags = FLG_RS1(REG_NONE)|FLG_DISP(DISP19);
-		chkpt = 1;
-	}
-
 
 	switch (FLG_DISP_VAL(flags)) {
 	case DISP22:
@@ -867,11 +859,7 @@
 		}
 	}
 
-	if (!chkpt) {
-		(void) snprintf(buf, sizeof (buf), "%s%s%s", name, annul, pred);
-	} else {
-		(void) snprintf(buf, sizeof (buf), "%s", name);
-	}
+	(void) snprintf(buf, sizeof (buf), "%s%s%s", name, annul, pred);
 	prt_name(dhp, buf, 1);
 
 
@@ -884,19 +872,11 @@
 		break;
 
 	case DISP19:
-		if (!chkpt) {
-			bprintf(dhp,
-			    (octal != 0) ? "%s, %s0%-5lo <" :
-			    "%s, %s0x%-04lx <",
-			    r,
-			    (disp < 0) ? "-" : "+",
-			    (disp < 0) ? (-disp) : disp);
-		} else {
-			bprintf(dhp,
-			    (octal != 0) ? "%s0%-5lo <" : "%s0x%-04lx <",
-			    (disp < 0) ? "-" : "+",
-			    (disp < 0) ? (-disp) : disp);
-		}
+		bprintf(dhp,
+		    (octal != 0) ? "%s, %s0%-5lo <" :
+		    "%s, %s0x%-04lx <", r,
+		    (disp < 0) ? "-" : "+",
+		    (disp < 0) ? (-disp) : disp);
 		break;
 
 	case DISP16:
@@ -1328,7 +1308,7 @@
 
 			first = 0;
 
-			for (i = 0; i < 5; ++i) {
+			for (i = 0; i < 4; ++i) {
 				if ((f->fmb.cmask & (1L << i)) != 0) {
 					bprintf(dhp, "%s%s",
 					    (first != 0) ? "|" : "",
@@ -1503,7 +1483,6 @@
 
 	int v9 = ((dhp->dh_flags & (DIS_SPARC_V9|DIS_SPARC_V9_SGI)) != 0);
 	int p_rs1, p_t;
-	char failstr[8] = "fail";
 
 	if (f->ftcc.undef != 0)
 		return (-1);
@@ -1530,26 +1509,13 @@
 		    (p_rs1 != 0) ? " + " : "",
 		    (p_t != 0) ? reg_names[f->f3.rs2] : "");
 	} else {
-		if ((p_rs1 == 0) && (f->ftcc.immtrap == 0xF)) {
-		(void) strlcat(failstr,
-		    (const char *)&(inp->in_data.in_def.in_name[1]),
-		    sizeof (failstr));
-
-		prt_name(dhp, failstr, 1);
-		bprintf(dhp, "%s%s%s",
-		    (v9 != 0) ? icc_names[f->ftcc2.cc] : "",
-		    (p_rs1 != 0) ? reg_names[f->ftcc2.rs1] : "",
-		    (p_rs1 != 0) ? " + " : "");
-		} else {
 		bprintf(dhp, "%-9s %s%s%s%s0x%x", inp->in_data.in_def.in_name,
 		    (v9 != 0) ? icc_names[f->ftcc2.cc] : "",
 		    (v9 != 0) ? ", " : "",
 		    (p_rs1 != 0) ? reg_names[f->ftcc2.rs1] : "",
 		    (p_rs1 != 0) ? " + " : "",
 		    f->ftcc.immtrap);
-		}
 	}
-
 	return (0);
 }
 
@@ -1894,17 +1860,9 @@
 		return (0);
 
 	case 0x3b:
-		if (f->f3.rd == 1) {
-			/* flusha */
-			prt_name(dhp, "flusha", 1);
-			prt_address(dhp, instr, 0);
-			(void) strlcat(dhp->dh_buf, " ", dhp->dh_buflen);
-			prt_asi(dhp, instr);
-		} else {
-			/* flush */
-			prt_name(dhp, name, 1);
-			prt_address(dhp, instr, 0);
-		}
+		/* flush */
+		prt_name(dhp, name, 1);
+		prt_address(dhp, instr, 0);
 		return (0);
 
 	case 0x3c:
--- a/usr/src/lib/libdisasm/sparc/instr.c	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/lib/libdisasm/sparc/instr.c	Mon Aug 10 10:43:48 2009 -0400
@@ -20,12 +20,12 @@
  */
 
 /*
- * Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
+ * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
  * Use is subject to license terms.
  */
 
 /*
- * Copyright 2007 Jason King.  All rights reserved.
+ * Copyright 2009 Jason King.  All rights reserved.
  * Use is subject to license terms.
  */
 
@@ -155,12 +155,12 @@
 };
 
 static const inst_t BPr_table_def[16] = {
-	INST("brnr",  V9, FLG_PRED|FLG_DISP(DISP16)|FLG_RS1(REG_INT)),
+	INVALID,
 	INST("brz",   V9|V9S, FLG_PRED|FLG_DISP(DISP16)|FLG_RS1(REG_INT)),
 	INST("brlez", V9|V9S, FLG_PRED|FLG_DISP(DISP16)|FLG_RS1(REG_INT)),
 	INST("brlz",  V9|V9S, FLG_PRED|FLG_DISP(DISP16)|FLG_RS1(REG_INT)),
 
-	INST("brr",  V9, FLG_PRED|FLG_DISP(DISP16)|FLG_RS1(REG_INT)),
+	INVALID,
 	INST("brnz",  V9|V9S, FLG_PRED|FLG_DISP(DISP16)|FLG_RS1(REG_INT)),
 	INST("brgz",  V9|V9S, FLG_PRED|FLG_DISP(DISP16)|FLG_RS1(REG_INT)),
 	INST("brgez", V9|V9S, FLG_PRED|FLG_DISP(DISP16)|FLG_RS1(REG_INT)),
@@ -483,10 +483,7 @@
 
 	/* 0x10 */
 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
-	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
-	INST("commit", V9, 0),
-	INVALID
-
+	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID
 };
 
 static const table_t tr_table = {
@@ -637,12 +634,7 @@
 	INST("fsqrtq", VALL,
 		FLG_P1(REG_NONE)|FLG_P2(REG_FPQ)|FLG_NOIMM|FLG_P3(REG_FPQ)),
 
-	INVALID,
-	INST("frsqrt1xs", V9,
-		FLG_P1(REG_NONE)|FLG_P2(REG_FPQ)|FLG_NOIMM|FLG_P3(REG_FPQ)),
-	INST("frsqrt1xd", VALL,
-		FLG_P1(REG_NONE)|FLG_P2(REG_FPD)|FLG_NOIMM|FLG_P3(REG_FPD)),
-	INVALID,
+	INVALID, INVALID, INVALID, INVALID,
 
 	/* 0x30 */
 	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
@@ -683,31 +675,11 @@
 		FLG_P1(REG_FPQ)|FLG_P2(REG_FPQ)|FLG_NOIMM|FLG_P3(REG_FPQ)),
 
 	/* 0x050 */
-	INVALID,
-	INST("fnadds", V9S,
-		FLG_P1(REG_FP)|FLG_P2(REG_FP)|FLG_NOIMM|FLG_P3(REG_FP)),
-	INST("fnaddd", V9S,
-		FLG_P1(REG_FPD)|FLG_P2(REG_FPD)|FLG_NOIMM|FLG_P3(REG_FPD)),
-	INVALID, INVALID, INVALID, INVALID, INVALID,
-	INVALID,
-	INST("fnmuls", V9S,
-		FLG_P1(REG_FP)|FLG_P2(REG_FP)|FLG_NOIMM|FLG_P3(REG_FP)),
-	INST("fnmuld", V9S,
-		FLG_P1(REG_FPD)|FLG_P2(REG_FPD)|FLG_NOIMM|FLG_P3(REG_FPD)),
-	INVALID, INVALID, INVALID, INVALID, INVALID,
+	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
+	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
 
 	/* 0x060 */
-	INVALID,
-	INST("fhadds", V9,
-		FLG_P1(REG_FP)|FLG_P2(REG_FP)|FLG_NOIMM|FLG_P3(REG_FP)),
-	INST("fhaddd", V9,
-		FLG_P1(REG_FPD)|FLG_P2(REG_FPD)|FLG_NOIMM|FLG_P3(REG_FPD)),
-	INVALID, INVALID,
-	INST("fhsubs", V9S,
-		FLG_P1(REG_FP)|FLG_P2(REG_FP)|FLG_NOIMM|FLG_P3(REG_FP)),
-	INST("fhsubd", V9S,
-		FLG_P1(REG_FPD)|FLG_P2(REG_FPD)|FLG_NOIMM|FLG_P3(REG_FPD)),
-	INVALID,
+	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
 
 	/* 0x068 */
 	INVALID,
@@ -723,16 +695,8 @@
 	INVALID,
 
 	/* 0x070 */
-	INVALID,
-	INST("fnhadds", V9S,
-		FLG_P1(REG_FP)|FLG_P2(REG_FP)|FLG_NOIMM|FLG_P3(REG_FP)),
-	INST("fnhaddd", V9S,
-		FLG_P1(REG_FPD)|FLG_P2(REG_FPD)|FLG_NOIMM|FLG_P3(REG_FPD)),
-	INVALID, INVALID, INVALID, INVALID, INVALID,
-	INVALID,
-	INST("fnsmuld", V9S,
-		FLG_P1(REG_FP)|FLG_P2(REG_FP)|FLG_NOIMM|FLG_P3(REG_FPD)),
-	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
+	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
+	INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID, INVALID,
 
 	/* 0x080 */
 	INVALID,
@@ -1600,40 +1564,6 @@
 	.tbl_inp   = fused_table_def
 };
 
-static const inst_t unfused_table_def[16] = {
-	/* 0x0 */
-	INVALID,
-	INST("fumadds", V9, FLG_P1(REG_FP)),
-	INST("fumaddd", V9, FLG_P1(REG_FPD)),
-	INVALID,
-
-	/* 0x4 */
-	INVALID,
-	INST("fumsubs", V9, FLG_P1(REG_FP)),
-	INST("fumsubd", V9, FLG_P1(REG_FPD)),
-	INVALID,
-
-	/* 0x8 */
-	INVALID,
-	INST("fnumsubs", V9, FLG_P1(REG_FP)),
-	INST("fnumsubd", V9, FLG_P1(REG_FPD)),
-	INVALID,
-
-	/* 0xc */
-	INVALID,
-	INST("fnumadds", V9, FLG_P1(REG_FP)),
-	INST("fnumaddd", V9, FLG_P1(REG_FPD)),
-	INVALID
-};
-
-static const table_t unfused_table = {
-	.tbl_field = 8,
-	.tbl_len   = 4,
-	.tbl_ovp   = NULL,
-	.tbl_fmt   = fmt_fused,
-	.tbl_inp   = unfused_table_def
-};
-
 static const inst_t alu_table_def[64] = {
 	/* 0x00 */
 	INST("add",		VALL,	0),
@@ -1722,7 +1652,7 @@
 	INST("save",		VALL,	0),
 	INST("restore",		VALL,	0),
 	TABLE(tr_table,		V9|V9S),
-	TABLE(unfused_table,	V9|V9S)
+	INVALID
 };
 
 
--- a/usr/src/lib/libdladm/common/libdlwlan.c	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/lib/libdladm/common/libdlwlan.c	Mon Aug 10 10:43:48 2009 -0400
@@ -19,7 +19,7 @@
  * CDDL HEADER END
  */
 /*
- * Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
+ * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
  * Use is subject to license terms.
  */
 
@@ -122,6 +122,8 @@
 	{ "a",		DLADM_WLAN_MODE_80211A		},
 	{ "b",		DLADM_WLAN_MODE_80211B		},
 	{ "g",		DLADM_WLAN_MODE_80211G		},
+	{ "n",		DLADM_WLAN_MODE_80211GN		},
+	{ "n",		DLADM_WLAN_MODE_80211AN		}
 };
 
 static val_desc_t	auth_vals[] = {
@@ -161,11 +163,16 @@
 static dladm_wlan_mode_t
 do_convert_mode(wl_phy_conf_t *phyp)
 {
+	wl_erp_t *wlep = &phyp->wl_phy_erp_conf;
+	wl_ofdm_t *wlop = &phyp->wl_phy_ofdm_conf;
+
 	switch (phyp->wl_phy_fhss_conf.wl_fhss_subtype) {
 	case WL_ERP:
-		return (DLADM_WLAN_MODE_80211G);
+		return (wlep->wl_erp_ht_enabled ?
+		    DLADM_WLAN_MODE_80211GN : DLADM_WLAN_MODE_80211G);
 	case WL_OFDM:
-		return (DLADM_WLAN_MODE_80211A);
+		return (wlop->wl_ofdm_ht_enabled ?
+		    DLADM_WLAN_MODE_80211AN : DLADM_WLAN_MODE_80211A);
 	case WL_DSSS:
 	case WL_FHSS:
 		return (DLADM_WLAN_MODE_80211B);
--- a/usr/src/lib/libdladm/common/libdlwlan.h	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/lib/libdladm/common/libdlwlan.h	Mon Aug 10 10:43:48 2009 -0400
@@ -19,7 +19,7 @@
  * CDDL HEADER END
  */
 /*
- * Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
+ * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
  * Use is subject to license terms.
  */
 
@@ -110,7 +110,9 @@
 	DLADM_WLAN_MODE_NONE = 0,
 	DLADM_WLAN_MODE_80211A,
 	DLADM_WLAN_MODE_80211B,
-	DLADM_WLAN_MODE_80211G
+	DLADM_WLAN_MODE_80211G,
+	DLADM_WLAN_MODE_80211GN,
+	DLADM_WLAN_MODE_80211AN
 } dladm_wlan_mode_t;
 
 typedef enum {
--- a/usr/src/lib/libldap5/sources/ldap/common/sasl.c	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/lib/libldap5/sources/ldap/common/sasl.c	Mon Aug 10 10:43:48 2009 -0400
@@ -19,12 +19,10 @@
  * CDDL HEADER END
  */
 /*
- * Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
+ * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
  * Use is subject to license terms.
  */
 
-#pragma ident	"%Z%%M%	%I%	%E% SMI"
-
 #ifdef LDAP_SASLIO_HOOKS
 #include <assert.h>
 #include "ldap-int.h"
@@ -587,11 +585,22 @@
 	return( LDAP_SUCCESS );
 }
 
+static void
+destroy_sasliobuf(Sockbuf *sb)
+{
+	if (sb != NULL && sb->sb_sasl_ibuf != NULL) {
+		NSLDAPI_FREE(sb->sb_sasl_ibuf);
+		sb->sb_sasl_ibuf = NULL;
+	}
+}
+
 static int
 nsldapi_sasl_close( LDAP *ld, Sockbuf *sb )
 {
 	sasl_conn_t	*ctx = (sasl_conn_t *)sb->sb_sasl_ctx;
 
+	destroy_sasliobuf(sb);
+
 	if( ctx != NULL ) {
 		sasl_dispose( &ctx );
 		sb->sb_sasl_ctx = NULL;
--- a/usr/src/lib/libldap5/sources/ldap/prldap/ldappr-io.c	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/lib/libldap5/sources/ldap/prldap/ldappr-io.c	Mon Aug 10 10:43:48 2009 -0400
@@ -1,11 +1,8 @@
 /*
- * Copyright 2001-2002 Sun Microsystems, Inc.  All rights reserved.
+ * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
  * Use is subject to license terms.
  */
 
-#pragma ident	"%Z%%M%	%I%	%E% SMI"
-
-
 /*
  * The contents of this file are subject to the Netscape Public
  * License Version 1.1 (the "License"); you may not use this file
@@ -437,8 +434,13 @@
 	}
 
 #ifdef _SOLARIS_SDK
-	if ( NULL != hostname ) ldap_memfree(hostname);
-	hostname = nsldapi_strdup(host);
+	if ( NULL != hostname ) {
+		ldap_memfree(hostname);
+		hostname = NULL;
+	}
+	if ( rc >= 0 ) {
+		hostname = nsldapi_strdup(host);
+	}
 #endif	/* _SOLARIS_SDK */
 	ldap_memfree( host );
     }
--- a/usr/src/lib/libprtdiag/common/display_sun4v.c	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/lib/libprtdiag/common/display_sun4v.c	Mon Aug 10 10:43:48 2009 -0400
@@ -106,8 +106,6 @@
 static void sun4v_env_print_current_indicators();
 static void sun4v_env_print_voltage_sensors();
 static void sun4v_env_print_voltage_indicators();
-static void sun4v_env_print_humidity_sensors();
-static void sun4v_env_print_humidity_indicators();
 static void sun4v_env_print_LEDs();
 static void sun4v_print_fru_status();
 static int is_fru_absent(picl_nodehdl_t);
@@ -1101,16 +1099,6 @@
 
 	class_node_found = 0;
 	all_status_ok = 1;
-	sun4v_env_print_humidity_sensors();
-	exit_code |= (!all_status_ok);
-
-	class_node_found = 0;
-	all_status_ok = 1;
-	sun4v_env_print_humidity_indicators();
-	exit_code |= (!all_status_ok);
-
-	class_node_found = 0;
-	all_status_ok = 1;
 	sun4v_env_print_LEDs();
 	exit_code |= (!all_status_ok);
 
@@ -1737,68 +1725,6 @@
 }
 
 static void
-sun4v_env_print_humidity_sensors()
-{
-	char *fmt = "%-34s %-14s %-10s\n";
-	(void) picl_walk_tree_by_class(phyplatformh,
-	    PICL_CLASS_HUMIDITY_SENSOR,
-	    (void *)PICL_PROP_HUMIDITY,
-	    sun4v_env_print_sensor_callback);
-	if (!class_node_found)
-		return;
-	log_printf("\nHumidity sensors:\n");
-	if (syserrlog == 0) {
-		(void) picl_walk_tree_by_class(phyplatformh,
-		    PICL_CLASS_HUMIDITY_SENSOR,
-		    PICL_PROP_HUMIDITY, sun4v_env_print_sensor_callback);
-		if (all_status_ok) {
-			log_printf("All humidity sensors are OK.\n");
-			return;
-		}
-	}
-	log_printf("-------------------------------------------------"
-	    "-----------\n");
-	log_printf(fmt, "Location", "Sensor", "Status", 0);
-	log_printf("-------------------------------------------------"
-	    "-----------\n");
-	(void) picl_walk_tree_by_class(phyplatformh,
-	    PICL_CLASS_HUMIDITY_SENSOR,
-	    (void *)PICL_PROP_HUMIDITY,
-	    sun4v_env_print_sensor_callback);
-}
-
-static void
-sun4v_env_print_humidity_indicators()
-{
-	char *fmt = "%-34s %-14s %-8s\n";
-	(void) picl_walk_tree_by_class(phyplatformh,
-	    PICL_CLASS_HUMIDITY_INDICATOR,
-	    (void *)PICL_PROP_CONDITION,
-	    sun4v_env_print_indicator_callback);
-	if (!class_node_found)
-		return;
-	log_printf("\nHumidity indicators:\n");
-	if (syserrlog == 0) {
-		(void) picl_walk_tree_by_class(phyplatformh,
-		    PICL_CLASS_HUMIDITY_INDICATOR, (void *)PICL_PROP_CONDITION,
-		    sun4v_env_print_indicator_callback);
-		if (all_status_ok) {
-			log_printf("All humidity indicators are OK.\n");
-			return;
-		}
-	}
-	log_printf("-------------------------------------------------"
-	    "-----------\n");
-	log_printf(fmt, "Location", "Indicator", "Condition", 0);
-	log_printf("-------------------------------------------------"
-	    "-----------\n");
-	(void) picl_walk_tree_by_class(phyplatformh,
-	    PICL_CLASS_HUMIDITY_INDICATOR,
-	    (void *)PICL_PROP_CONDITION,
-	    sun4v_env_print_indicator_callback);
-}
-
-static void
 sun4v_env_print_LEDs()
 {
 	char *fmt = "%-34s %-14s %-8s\n";
--- a/usr/src/lib/libzpool/common/kernel.c	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/lib/libzpool/common/kernel.c	Mon Aug 10 10:43:48 2009 -0400
@@ -884,3 +884,27 @@
 	spa_strfree(ksid->kd_name);
 	umem_free(ksid, sizeof (ksiddomain_t));
 }
+
+/*
+ * Do not change the length of the returned string; it must be freed
+ * with strfree().
+ */
+char *
+kmem_asprintf(const char *fmt, ...)
+{
+	int size;
+	va_list adx;
+	char *buf;
+
+	va_start(adx, fmt);
+	size = vsnprintf(NULL, 0, fmt, adx) + 1;
+	va_end(adx);
+
+	buf = kmem_alloc(size, KM_SLEEP);
+
+	va_start(adx, fmt);
+	size = vsnprintf(buf, size, fmt, adx);
+	va_end(adx);
+
+	return (buf);
+}
--- a/usr/src/lib/libzpool/common/sys/zfs_context.h	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/lib/libzpool/common/sys/zfs_context.h	Mon Aug 10 10:43:48 2009 -0400
@@ -490,6 +490,9 @@
 #define	zone_dataset_visible(x, y)	(1)
 #define	INGLOBALZONE(z)			(1)
 
+extern char *kmem_asprintf(const char *fmt, ...);
+#define	strfree(str) kmem_free((str), strlen(str)+1)
+
 /*
  * Hostname information
  */
--- a/usr/src/lib/pkcs11/pkcs11_softtoken/common/softEncryptUtil.c	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/lib/pkcs11/pkcs11_softtoken/common/softEncryptUtil.c	Mon Aug 10 10:43:48 2009 -0400
@@ -19,12 +19,10 @@
  * CDDL HEADER END
  */
 /*
- * Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
+ * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
  * Use is subject to license terms.
  */
 
-#pragma ident	"%Z%%M%	%I%	%E% SMI"
-
 #include <pthread.h>
 #include <stdlib.h>
 #include <string.h>
@@ -818,8 +816,11 @@
 	case CKM_RC4:
 	{
 		ARCFour_key *key = (ARCFour_key *)session_p->encrypt.context;
+		/* Remaining data size is always zero for RC4. */
+		*pulLastEncryptedPartLen = 0;
+		if (pLastEncryptedPart == NULL)
+			goto clean1;
 		bzero(key, sizeof (*key));
-		*pulLastEncryptedPartLen = 0;
 		break;
 	}
 	default:
--- a/usr/src/lib/pyzfs/common/dataset.py	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/lib/pyzfs/common/dataset.py	Mon Aug 10 10:43:48 2009 -0400
@@ -213,12 +213,16 @@
 
 def snapshots_fromcmdline(dsnames, recursive):
 	for dsname in dsnames:
-		ds = Dataset(dsname)
 		if not "@" in dsname:
 			raise zfs.util.ZFSError(errno.EINVAL,
 			    _("cannot open %s") % dsname,
 			    _("operation only applies to snapshots"))
-		yield ds
+		try:
+			ds = Dataset(dsname)
+			yield ds
+		except zfs.util.ZFSError, e:
+			if not recursive or e.errno != errno.ENOENT:
+				raise
 		if recursive:
 			(base, snapname) = dsname.split('@')
 			parent = Dataset(base)
--- a/usr/src/lib/pyzfs/common/holds.py	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/lib/pyzfs/common/holds.py	Mon Aug 10 10:43:48 2009 -0400
@@ -61,8 +61,10 @@
 	fields = ("name", "tag", "timestamp")
 	rjustfields = ()
 	printing = False 
+	gotone = False
 	t = zfs.table.Table(fields, rjustfields) 
 	for ds in zfs.dataset.snapshots_fromcmdline(args, options.recursive):
+		gotone = True
 		for tag, tm in ds.get_holds().iteritems():
 			val = {"name": ds.name, "tag": tag,
 			    "timestamp": time.ctime(tm)}
@@ -70,3 +72,5 @@
 			printing = True
 	if printing:
 		t.printme()
+	elif not gotone:
+		raise zfs.util.ZFSError(errno.ENOENT, _("no matching datasets"))
--- a/usr/src/lib/storage/libg_fc/common/genf.c	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/lib/storage/libg_fc/common/genf.c	Mon Aug 10 10:43:48 2009 -0400
@@ -19,7 +19,7 @@
  * CDDL HEADER END
  */
 /*
- * Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
+ * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
  * Use is subject to license terms.
  */
 
@@ -78,6 +78,7 @@
 /* Bus strings - for internal use by g_get_path_type() only */
 #define	PCI_BUS			1
 #define	SBUS			2
+#define	FCOE			3
 
 struct str_type {
 	char *string;
@@ -87,6 +88,7 @@
 static struct str_type ValidBusStrings[] = {
 	{"pci@", PCI_BUS},
 	{"sbus@", SBUS},
+	{"fcoe", FCOE},
 	{NULL, 0}
 };
 
--- a/usr/src/lib/sun_fc/Makefile.com	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/lib/sun_fc/Makefile.com	Mon Aug 10 10:43:48 2009 -0400
@@ -19,7 +19,7 @@
 # CDDL HEADER END
 #
 #
-# Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
+# Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
 # Use is subject to license terms.
 #
 #
@@ -119,6 +119,7 @@
 		HandleNPIVPort.o \
 		AdapterDeviceEventListener.o \
 		Sun_fcRegisterForAdapterDeviceEvents.o \
+		Sun_fcDoForceLip.o \
 		Sun_fcAdapterCreateWWN.o \
 		Sun_fcAdapterReturnWWN.o
 
--- a/usr/src/lib/sun_fc/common/FCHBA.cc	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/lib/sun_fc/common/FCHBA.cc	Mon Aug 10 10:43:48 2009 -0400
@@ -19,7 +19,7 @@
  * CDDL HEADER END
  */
 /*
- * Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
+ * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
  * Use is subject to license terms.
  */
 
@@ -204,6 +204,51 @@
     return (attributes);
 }
 
+int FCHBA::doForceLip() {
+    Trace	 log("FCHBA::doForceLip");
+    int		 fd;
+    fcio_t	 fcio;
+    uint64_t	 wwn  = 0;
+    HBAPort	*port = getPortByIndex(0);
+
+    errno = 0;
+    if ((fd = open(port->getPath().c_str(), O_RDONLY | O_EXCL)) == -1) {
+	if (errno == EBUSY) {
+	    throw BusyException();
+	} else if (errno == EAGAIN) {
+	    throw TryAgainException();
+	} else if (errno == ENOTSUP) {
+	    throw NotSupportedException();
+	} else {
+	    throw IOError(port);
+	}
+    }
+
+    memset(&fcio, 0, sizeof (fcio));
+    fcio.fcio_cmd = FCIO_RESET_LINK;
+    fcio.fcio_xfer = FCIO_XFER_WRITE;
+    fcio.fcio_ilen = sizeof (wwn);
+    fcio.fcio_ibuf = (caddr_t)&wwn;
+
+    errno = 0;
+    if (ioctl(fd, FCIO_CMD, &fcio) != 0) {
+	close(fd);
+
+	if (errno == EBUSY) {
+	    throw BusyException();
+	} else if (errno == EAGAIN) {
+	    throw TryAgainException();
+	} else if (errno == ENOTSUP) {
+	    throw NotSupportedException();
+	} else {
+	    throw IOError("Unable to reinitialize the link");
+	}
+    } else {
+        close(fd);
+	return (fcio.fcio_errno);
+    }
+}
+
 HBA_ADAPTERATTRIBUTES FCHBA::npivGetHBAAttributes() {
 	Trace log("FCHBA::npivGetHBAAttributes");
 	int fd;
--- a/usr/src/lib/sun_fc/common/FCHBA.h	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/lib/sun_fc/common/FCHBA.h	Mon Aug 10 10:43:48 2009 -0400
@@ -19,7 +19,7 @@
  * CDDL HEADER END
  */
 /*
- * Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
+ * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
  * Use is subject to license terms.
  */
 
@@ -47,6 +47,7 @@
      */
     virtual std::string		    getName();
     virtual HBA_ADAPTERATTRIBUTES   getHBAAttributes();
+    virtual int 		    doForceLip();
     virtual HBA_ADAPTERATTRIBUTES	npivGetHBAAttributes();
     static void loadAdapters(std::vector<HBA*> &list);
 
--- a/usr/src/lib/sun_fc/common/HBA.h	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/lib/sun_fc/common/HBA.h	Mon Aug 10 10:43:48 2009 -0400
@@ -19,7 +19,7 @@
  * CDDL HEADER END
  */
 /*
- * Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
+ * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
  * Use is subject to license terms.
  */
 
@@ -61,6 +61,7 @@
 	bool				containsWWN(uint64_t wwn);
 
 	virtual HBA_ADAPTERATTRIBUTES	getHBAAttributes() = 0;
+	virtual int			doForceLip() = 0;
 	virtual HBA_ADAPTERATTRIBUTES	npivGetHBAAttributes() = 0;
 	void				setRNID(HBA_MGMTINFO info);
 	/*
--- a/usr/src/lib/sun_fc/common/Handle.cc	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/lib/sun_fc/common/Handle.cc	Mon Aug 10 10:43:48 2009 -0400
@@ -19,7 +19,7 @@
  * CDDL HEADER END
  */
 /*
- * Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
+ * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
  * Use is subject to license terms.
  */
 
@@ -123,7 +123,7 @@
 
 
 	// if initiator mode call constructor for initiator.
-	if (m == INITIATOR) { 
+	if (m == INITIATOR) {
 		Handle(myhba, TARGET);
 	}
 
@@ -377,6 +377,24 @@
 	}
 }
 
+/**
+ * @memo	    Do FORCELIP
+ *
+ * @see		    HBA::doForceLip
+ */
+int Handle::doForceLip() {
+	Trace log("Handle::doForceLip");
+	lock();
+	try {
+	    int rval = hba->doForceLip();
+	    unlock();
+	    return (rval);
+	} catch (...) {
+	    unlock();
+	    throw;
+	}
+}
+
 HBA_ADAPTERATTRIBUTES Handle::npivGetHBAAttributes() {
 	Trace log("Handle::npivGetHBAAttributes");
 	lock();
--- a/usr/src/lib/sun_fc/common/Handle.h	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/lib/sun_fc/common/Handle.h	Mon Aug 10 10:43:48 2009 -0400
@@ -19,7 +19,7 @@
  * CDDL HEADER END
  */
 /*
- * Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
+ * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
  * Use is subject to license terms.
  */
 
@@ -69,6 +69,7 @@
     void		    refresh();
 
     HBA_ADAPTERATTRIBUTES	    getHBAAttributes();
+    int				    doForceLip();
     HBA_ADAPTERATTRIBUTES	    npivGetHBAAttributes();
     HBA_PORTATTRIBUTES		    getPortAttributes(uint64_t wwn);
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/usr/src/lib/sun_fc/common/Sun_fcDoForceLip.cc	Mon Aug 10 10:43:48 2009 -0400
@@ -0,0 +1,60 @@
+/*
+ * CDDL HEADER START
+ *
+ * The contents of this file are subject to the terms of the
+ * Common Development and Distribution License (the "License").
+ * You may not use this file except in compliance with the License.
+ *
+ * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+ * or http://www.opensolaris.org/os/licensing.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL HEADER in each
+ * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+ * If applicable, add the following below this CDDL HEADER, with the
+ * fields enclosed by brackets "[]" replaced with your own identifying
+ * information: Portions Copyright [yyyy] [name of copyright owner]
+ *
+ * CDDL HEADER END
+ */
+/*
+ * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
+ * Use is subject to license terms.
+ */
+
+#include "Handle.h"
+#include "Trace.h"
+#include "Exceptions.h"
+#ifdef	__cplusplus
+extern "C" {
+#endif
+
+/**
+ * @memo	    Retrieves the attributes for an adapter
+ * @precondition    Library must be loaded
+ * @return	    HBA_STATUS_OK if attributes were filled in
+ * @param	    handle The desired HBA
+ * @param	    rval Return value
+ *
+ */
+HBA_STATUS Sun_fcDoForceLip(HBA_HANDLE handle,
+	    int *rval) {
+	Trace log("Sun_fcDoForceLip");
+
+	try {
+	    Handle *myHandle = Handle::findHandle(handle);
+	    *rval = myHandle->doForceLip();
+	    return (HBA_STATUS_OK);
+	} catch (HBAException &e) {
+	    return (e.getErrorCode());
+	} catch (...) {
+	    log.internalError(
+		"Uncaught exception");
+	    return (HBA_STATUS_ERROR);
+	}
+}
+
+#ifdef	__cplusplus
+}
+#endif
--- a/usr/src/lib/sun_fc/common/TgtFCHBA.cc	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/lib/sun_fc/common/TgtFCHBA.cc	Mon Aug 10 10:43:48 2009 -0400
@@ -19,7 +19,7 @@
  * CDDL HEADER END
  */
 /*
- * Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
+ * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
  * Use is subject to license terms.
  */
 
@@ -160,6 +160,63 @@
     return (attributes);
 }
 
+int TgtFCHBA::doForceLip()
+{
+    Trace	 log("TgtFCHBA::doForceLip");
+    int		 fd;
+    HBAPort	*port = getPortByIndex(0);
+    fctio_t	 fctio;
+    uint64_t	 portwwn;
+
+    errno = 0;
+    if ((fd = open(FCT_DRIVER_PATH.c_str(), O_NDELAY | O_RDONLY)) == -1) {
+	if (errno == EBUSY) {
+	    throw BusyException();
+	} else if (errno == EAGAIN) {
+	    throw TryAgainException();
+	} else if (errno == ENOTSUP) {
+	    throw NotSupportedException();
+	} else {
+	    throw IOError(port);
+	}
+    }
+
+    try {
+	    std::string path = port->getPath();
+	    string::size_type offset = path.find_last_of(".");
+	    if (offset >= 0) {
+		string portwwnString = path.substr(offset+1);
+		portwwn = strtoull(portwwnString.c_str(), NULL, 16);
+	    }
+    } catch (...) {
+	    throw BadArgumentException();
+    }
+
+    uint64_t en_wwn = htonll(portwwn);
+    memset(&fctio, 0, sizeof (fctio));
+    fctio.fctio_cmd = FCTIO_FORCE_LIP;
+    fctio.fctio_xfer = FCTIO_XFER_READ;
+    fctio.fctio_ilen = 8;
+    fctio.fctio_ibuf = (uint64_t)(uintptr_t)&en_wwn;
+
+    errno = 0;
+    if (ioctl(fd, FCTIO_CMD, &fctio) != 0) {
+	close(fd);
+	if (errno == EBUSY) {
+	    throw BusyException();
+	} else if (errno == EAGAIN) {
+	    throw TryAgainException();
+	} else if (errno == ENOTSUP) {
+	    throw NotSupportedException();
+	} else {
+	    throw IOError("Unable to reinitialize the link");
+	}
+    } else {
+	close(fd);
+	return ((int)fctio.fctio_errno);
+    }
+}
+
 void TgtFCHBA::loadAdapters(vector<HBA*> &list)
 {
     Trace log("TgtFCHBA::loadAdapters");
@@ -257,11 +314,11 @@
 	try {
 	    std::string hbapath = FCT_ADAPTER_NAME_PREFIX.c_str();
 	    hbapath += ".";
-	    // move the row with two dimentional uint8 array for WWN 
+	    // move the row with two dimentional uint8 array for WWN
 	    uint64_t tmp = ntohll(*((uint64_t *)&tgthbaList->port_wwn[i][0]));
 	    sprintf(wwnStr, "%llx", tmp);
 	    hbapath += wwnStr;
-	    
+
 	    HBA *hba = new TgtFCHBA(hbapath);
 	    list.insert(list.begin(), hba);
 	} catch (...) {
--- a/usr/src/lib/sun_fc/common/TgtFCHBA.h	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/lib/sun_fc/common/TgtFCHBA.h	Mon Aug 10 10:43:48 2009 -0400
@@ -19,7 +19,7 @@
  * CDDL HEADER END
  */
 /*
- * Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
+ * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
  * Use is subject to license terms.
  */
 
@@ -47,6 +47,7 @@
      */
     virtual std::string		    getName();
     virtual HBA_ADAPTERATTRIBUTES   getHBAAttributes();
+    virtual int 		    doForceLip();
     static void loadAdapters(std::vector<HBA*> &list);
     virtual HBA_ADAPTERATTRIBUTES   npivGetHBAAttributes() {
 					throw NotSupportedException(); }
--- a/usr/src/lib/sun_fc/common/mapfile-vers	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/lib/sun_fc/common/mapfile-vers	Mon Aug 10 10:43:48 2009 -0400
@@ -108,6 +108,7 @@
 	Sun_fcSetBindingSupport;
 	Sun_fcSetPersistentBindingV2;
 	Sun_fcSetRNIDMgmtInfo;
+	Sun_fcDoForceLip;
 
     local:
 	*;
--- a/usr/src/pkgdefs/Makefile	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/pkgdefs/Makefile	Mon Aug 10 10:43:48 2009 -0400
@@ -96,7 +96,6 @@
 	SUNWssad  \
 	SUNWstc.u \
 	SUNWus.u \
-	SUNWusat10.v \
 	SUNWust1.v \
 	SUNWust2.v \
 	SUNWwbsd
@@ -255,6 +254,7 @@
 	SUNWfcoe \
 	SUNWfcoeu \
 	SUNWfcoet \
+	SUNWfcoei \
 	SUNWfilebench \
 	SUNWfmd  \
 	SUNWfmdr  \
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/usr/src/pkgdefs/SUNWfcoei/Makefile	Mon Aug 10 10:43:48 2009 -0400
@@ -0,0 +1,33 @@
+#
+# CDDL HEADER START
+#
+# The contents of this file are subject to the terms of the
+# Common Development and Distribution License (the "License").
+# You may not use this file except in compliance with the License.
+#
+# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+# or http://www.opensolaris.org/os/licensing.
+# See the License for the specific language governing permissions
+# and limitations under the License.
+#
+# When distributing Covered Code, include this CDDL HEADER in each
+# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+# If applicable, add the following below this CDDL HEADER, with the
+# fields enclosed by brackets "[]" replaced with your own identifying
+# information: Portions Copyright [yyyy] [name of copyright owner]
+#
+# CDDL HEADER END
+#
+#
+# Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
+# Use is subject to license terms.
+#
+
+include ../Makefile.com
+
+.KEEP_STATE:
+
+all: $(FILES) depend preremove postinstall
+install: all pkg
+
+include ../Makefile.targ
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/usr/src/pkgdefs/SUNWfcoei/depend	Mon Aug 10 10:43:48 2009 -0400
@@ -0,0 +1,52 @@
+#
+# CDDL HEADER START
+#
+# The contents of this file are subject to the terms of the
+# Common Development and Distribution License (the "License").
+# You may not use this file except in compliance with the License.
+#
+# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+# or http://www.opensolaris.org/os/licensing.
+# See the License for the specific language governing permissions
+# and limitations under the License.
+
+# When distributing Covered Code, include this CDDL HEADER in each
+# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+# If applicable, add the following below this CDDL HEADER, with the
+# fields enclosed by brackets "[]" replaced with your own identifying
+# information: Portions Copyright [yyyy] [name of copyright owner]
+#
+# CDDL HEADER END
+#
+#
+# Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
+# Use is subject to license terms.
+#
+#
+# This package information file defines software dependencies associated
+# with the pkg.  You can define three types of pkg dependencies with this file:
+#	 P indicates a prerequisite for installation
+#	 I indicates an incompatible package
+#	 R indicates a reverse dependency
+# <pkg.abbr> see pkginfo(4), PKG parameter
+# <name> see pkginfo(4), NAME parameter
+# <version> see pkginfo(4), VERSION parameter
+# <arch> see pkginfo(4), ARCH parameter
+# <type> <pkg.abbr> <name>
+# 	(<arch>)<version>
+# 	(<arch>)<version>
+# 	...
+# <type> <pkg.abbr> <name>
+# ...
+
+P SUNWcar	Core Architecture, (Root)
+P SUNWcakr      Core Solaris Kernel Architecture (Root)
+P SUNWkvm	Core Architecture, (Kvm)
+P SUNWcsr	Core Solaris, (Root)
+P SUNWckr       Core Solaris Kernel (Root)
+P SUNWcnetr     Core Solaris Network Infrastructure (Root)
+P SUNWcsu	Core Solaris, (Usr)
+P SUNWcsd	Core Solaris Devices
+P SUNWcsl	Core Solaris Libraries
+P SUNWfcoe	Sun FCoE Transport Driver
+P SUNWfctl	Sun Fibre Channel Transport layer
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/usr/src/pkgdefs/SUNWfcoei/pkginfo.tmpl	Mon Aug 10 10:43:48 2009 -0400
@@ -0,0 +1,50 @@
+#
+# CDDL HEADER START
+#
+# The contents of this file are subject to the terms of the
+# Common Development and Distribution License (the "License").
+# You may not use this file except in compliance with the License.
+#
+# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+# or http://www.opensolaris.org/os/licensing.
+# See the License for the specific language governing permissions
+# and limitations under the License.
+#
+# When distributing Covered Code, include this CDDL HEADER in each
+# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+# If applicable, add the following below this CDDL HEADER, with the
+# fields enclosed by brackets "[]" replaced with your own identifying
+# information: Portions Copyright [yyyy] [name of copyright owner]
+#
+# CDDL HEADER END
+#
+#
+# Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
+# Use is subject to license terms.
+#
+#
+#
+# This required package information file describes characteristics of the
+# package, such as package abbreviation, full package name, package version,
+# and package architecture.
+#
+ 
+PKG="SUNWfcoei"
+NAME="Sun FCoE Initiator Driver"
+ARCH="ISA"
+CATEGORY="system"
+BASEDIR=/
+SUNW_PKGVERS="1.0"
+SUNW_PKGTYPE="root"
+CLASSES="none"
+DESC="Sun FCoE (Fibre Channel over Ethernet) Initiator Driver"
+SUNW_PRODNAME="SunOS"
+SUNW_PRODVERS="RELEASE/VERSION"
+VERSION="ONVERS,REV=0.0.0"
+VENDOR="Sun Microsystems, Inc."
+HOTLINE="Please contact your local service provider"
+EMAIL=""
+MAXINST="1000"
+SUNW_PKG_ALLZONES="true"
+SUNW_PKG_HOLLOW="true"
+SUNW_PKG_THISZONE="false"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/usr/src/pkgdefs/SUNWfcoei/postinstall	Mon Aug 10 10:43:48 2009 -0400
@@ -0,0 +1,54 @@
+#!/bin/sh
+#
+# CDDL HEADER START
+#
+# The contents of this file are subject to the terms of the
+# Common Development and Distribution License (the "License").
+# You may not use this file except in compliance with the License.
+#
+# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+# or http://www.opensolaris.org/os/licensing.
+# See the License for the specific language governing permissions
+# and limitations under the License.
+#
+# When distributing Covered Code, include this CDDL HEADER in each
+# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+# If applicable, add the following below this CDDL HEADER, with the
+# fields enclosed by brackets "[]" replaced with your own identifying
+# information: Portions Copyright [yyyy] [name of copyright owner]
+#
+# CDDL HEADER END
+#
+#
+# Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
+# Use is subject to license terms.
+#
+#
+
+PATH=/usr/bin:/usr/sbin:$PATH; export PATH
+
+# Driver definitions
+DRVR_NAME=fcoei
+DRVR_PERM="-m '* 0600 root sys'"
+DRVR_CLASS=""
+DRVR_ALIASES=""
+
+
+if [ -z "${BASEDIR}" ]; then
+	echo "\n$0 Failed: BASEDIR is not set.\n" >&2
+	exit 1
+fi
+
+# Remove existing definition, if it exists. 
+/usr/sbin/rem_drv -b "${BASEDIR}" ${DRVR_NAME} > /dev/null 2>&1
+
+ADD_DRV="add_drv -n -b ${BASEDIR}"
+
+eval ${ADD_DRV} "${DRVR_PERM}" ${DRVR_CLASS} "${DRVR_ALIASES}" ${DRVR_NAME}
+if [ $? -ne 0 ]; then
+	echo "\nCommand Failed:\n${ADD_DRV} "${DRVR_PERM}" ${DRVR_CLASS} \
+		"${DRVR_ALIASES}" ${DRVR_NAME}\n" >&2
+	exit 1
+fi
+
+exit 0
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/usr/src/pkgdefs/SUNWfcoei/preremove	Mon Aug 10 10:43:48 2009 -0400
@@ -0,0 +1,33 @@
+#!/bin/sh
+#
+# CDDL HEADER START
+#
+# The contents of this file are subject to the terms of the
+# Common Development and Distribution License (the "License").
+# You may not use this file except in compliance with the License.
+#
+# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+# or http://www.opensolaris.org/os/licensing.
+# See the License for the specific language governing permissions
+# and limitations under the License.
+
+# When distributing Covered Code, include this CDDL HEADER in each
+# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+# If applicable, add the following below this CDDL HEADER, with the
+# fields enclosed by brackets "[]" replaced with your own identifying
+# information: Portions Copyright [yyyy] [name of copyright owner]
+#
+# CDDL HEADER END
+#
+#
+# Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
+# Use is subject to license terms.
+#
+#
+
+DRVR_NAME=fcoei
+
+# Remove the driver entries but leave it attached.
+/usr/sbin/rem_drv -b ${BASEDIR} ${DRVR_NAME}
+
+exit 0
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/usr/src/pkgdefs/SUNWfcoei/prototype_com	Mon Aug 10 10:43:48 2009 -0400
@@ -0,0 +1,41 @@
+#
+# CDDL HEADER START
+#
+# The contents of this file are subject to the terms of the
+# Common Development and Distribution License (the "License").
+# You may not use this file except in compliance with the License.
+#
+# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+# or http://www.opensolaris.org/os/licensing.
+# See the License for the specific language governing permissions
+# and limitations under the License.
+
+# When distributing Covered Code, include this CDDL HEADER in each
+# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+# If applicable, add the following below this CDDL HEADER, with the
+# fields enclosed by brackets "[]" replaced with your own identifying
+# information: Portions Copyright [yyyy] [name of copyright owner]
+#
+# CDDL HEADER END
+#
+# Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
+# Use is subject to license terms.
+#
+#
+# This required package information file contains a list of package contents.
+# The 'pkgmk' command uses this file to identify the contents of a package
+# and their location on the development machine when building the package.
+# Can be created via a text editor or through use of the 'pkgproto' command.
+
+#!search <pathname pathname ...>	# where to find pkg objects
+#!include <filename>			# include another 'prototype' file
+#!default <mode> <owner> <group>	# default used if not specified on entry
+#!<param>=<value>			# puts parameter in pkg environment
+
+#
+#
+i copyright
+i pkginfo 
+i depend
+i postinstall
+i preremove
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/usr/src/pkgdefs/SUNWfcoei/prototype_i386	Mon Aug 10 10:43:48 2009 -0400
@@ -0,0 +1,53 @@
+#
+# CDDL HEADER START
+#
+# The contents of this file are subject to the terms of the
+# Common Development and Distribution License (the "License").
+# You may not use this file except in compliance with the License.
+#
+# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+# or http://www.opensolaris.org/os/licensing.
+# See the License for the specific language governing permissions
+# and limitations under the License.
+
+# When distributing Covered Code, include this CDDL HEADER in each
+# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+# If applicable, add the following below this CDDL HEADER, with the
+# fields enclosed by brackets "[]" replaced with your own identifying
+# information: Portions Copyright [yyyy] [name of copyright owner]
+#
+# CDDL HEADER END
+#
+#
+# Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
+# Use is subject to license terms.
+#
+#
+# This required package information file contains a list of package contents.
+# The 'pkgmk' command uses this file to identify the contents of a package
+# and their location on the development machine when building the package.
+# Can be created via a text editor or through use of the 'pkgproto' command.
+
+#!search <pathname pathname ...>	# where to find pkg objects
+#!include <filename>			# include another 'prototype' file
+#!default <mode> <owner> <group>	# default used if not specified on entry
+#!<param>=<value>			# puts parameter in pkg environment
+#
+# Include ISA independent files (prototype_com)
+#
+!include prototype_com
+#
+#
+# List files which are Intel specific here
+#
+# source locations relative to the prototype file
+#
+#
+# SUNWfcoei
+#
+d none kernel 0755 root sys
+d none kernel/drv 0755 root sys
+d none kernel/drv/amd64 0755 root sys
+f none kernel/drv/fcoei.conf 0644 root sys
+f none kernel/drv/fcoei 0755 root sys
+f none kernel/drv/amd64/fcoei 0755 root sys
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/usr/src/pkgdefs/SUNWfcoei/prototype_sparc	Mon Aug 10 10:43:48 2009 -0400
@@ -0,0 +1,52 @@
+#
+# CDDL HEADER START
+#
+# The contents of this file are subject to the terms of the
+# Common Development and Distribution License (the "License").
+# You may not use this file except in compliance with the License.
+#
+# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+# or http://www.opensolaris.org/os/licensing.
+# See the License for the specific language governing permissions
+# and limitations under the License.
+
+# When distributing Covered Code, include this CDDL HEADER in each
+# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+# If applicable, add the following below this CDDL HEADER, with the
+# fields enclosed by brackets "[]" replaced with your own identifying
+# information: Portions Copyright [yyyy] [name of copyright owner]
+#
+# CDDL HEADER END
+#
+#
+# Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
+# Use is subject to license terms.
+#
+#
+# This required package information file contains a list of package contents.
+# The 'pkgmk' command uses this file to identify the contents of a package
+# and their location on the development machine when building the package.
+# Can be created via a text editor or through use of the 'pkgproto' command.
+
+#!search <pathname pathname ...>	# where to find pkg objects
+#!include <filename>			# include another 'prototype' file
+#!default <mode> <owner> <group>	# default used if not specified on entry
+#!<param>=<value>			# puts parameter in pkg environment
+#
+# Include ISA independent files (prototype_com)
+#
+!include prototype_com
+#
+#
+# List files which are SPARC specific here
+#
+# source locations relative to the prototype file
+#
+#
+# SUNWfcoei
+#
+d none kernel 0755 root sys
+d none kernel/drv 0755 root sys
+f none kernel/drv/fcoei.conf 0644 root sys
+d none kernel/drv/sparcv9 0755 root sys
+f none kernel/drv/sparcv9/fcoei 0755 root sys
--- a/usr/src/pkgdefs/SUNWfcprtr/preremove	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/pkgdefs/SUNWfcprtr/preremove	Mon Aug 10 10:43:48 2009 -0400
@@ -71,4 +71,7 @@
 SERVICE="svc:/system/fcoe_target:default"
 disable_service
 
+SERVICE="svc:/system/fcoe_initiator:default"
+disable_service
+
 exit $exitcode
--- a/usr/src/pkgdefs/SUNWfcprtr/prototype_com	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/pkgdefs/SUNWfcprtr/prototype_com	Mon Aug 10 10:43:48 2009 -0400
@@ -47,9 +47,11 @@
 d none var/svc/manifest/network 0755 root sys
 d none var/svc/manifest/system 0755 root sys
 f manifest var/svc/manifest/network/npiv_config.xml 0444 root sys
+f manifest var/svc/manifest/system/fcoe_initiator.xml 0444 root sys
 f manifest var/svc/manifest/system/fcoe_target.xml 0444 root sys
 d none lib 755 root bin
 d none lib/svc 755 root bin
 d none lib/svc/method 755 root bin
 f none lib/svc/method/npivconfig 0555 root bin
+f none lib/svc/method/svc-fcoei 0555 root bin
 f none lib/svc/method/svc-fcoet 0555 root bin
--- a/usr/src/pkgdefs/SUNWscpu/postinstall	Wed Aug 05 18:08:09 2009 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,33 +0,0 @@
-#
-# CDDL HEADER START
-#
-# The contents of this file are subject to the terms of the
-# Common Development and Distribution License, Version 1.0 only
-# (the "License").  You may not use this file except in compliance
-# with the License.
-#
-# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
-# or http://www.opensolaris.org/os/licensing.
-# See the License for the specific language governing permissions
-# and limitations under the License.
-#
-# When distributing Covered Code, include this CDDL HEADER in each
-# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
-# If applicable, add the following below this CDDL HEADER, with the
-# fields enclosed by brackets "[]" replaced with your own identifying
-# information: Portions Copyright [yyyy] [name of copyright owner]
-#
-# CDDL HEADER END
-#
-#
-#ident	"%Z%%M%	%I%	%E% SMI"
-#
-# Copyright (c) 1991 by Sun Microsystems, Inc.
-#
-
-# Remove the "arch" command, we nuked it, but it comes back
-if [ -d $BASEDIR/usr/kvm ] ; then
-	if [ -f $BASEDIR/usr/kvm/arch ] ; then
-		rm $BASEDIR/usr/kvm/arch
-	fi
-fi
--- a/usr/src/pkgdefs/SUNWscpu/prototype_com	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/pkgdefs/SUNWscpu/prototype_com	Mon Aug 10 10:43:48 2009 -0400
@@ -35,7 +35,6 @@
 # packaging files
 i pkginfo
 i copyright
-i postinstall
 i depend
 #
 # source locations relative to the prototype file
@@ -58,7 +57,6 @@
 f none usr/ucb/basename 755 root bin
 f none usr/ucb/bgplot 755 root bin
 f none usr/ucb/biff 755 root bin
-f none usr/ucb/cc 555 root bin
 f none usr/ucb/chown 755 root bin
 s none usr/ucb/clear=../bin/clear
 f none usr/ucb/crtplot 755 root bin
@@ -87,8 +85,6 @@
 f none usr/ucb/hpplot 755 root bin
 f none usr/ucb/implot 755 root bin
 f none usr/ucb/install 755 root bin
-f none usr/ucb/ld 555 root bin
-f none usr/ucb/lint 555 root bin
 f none usr/ucb/ln 755 root bin
 s none usr/ucb/logger=../bin/logger
 f none usr/ucb/ls 755 root bin
--- a/usr/src/pkgdefs/SUNWusat10.v/Makefile	Wed Aug 05 18:08:09 2009 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,35 +0,0 @@
-#
-# CDDL HEADER START
-#
-# The contents of this file are subject to the terms of the
-# Common Development and Distribution License (the "License").
-# You may not use this file except in compliance with the License.
-#
-# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
-# or http://www.opensolaris.org/os/licensing.
-# See the License for the specific language governing permissions
-# and limitations under the License.
-#
-# When distributing Covered Code, include this CDDL HEADER in each
-# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
-# If applicable, add the following below this CDDL HEADER, with the
-# fields enclosed by brackets "[]" replaced with your own identifying
-# information: Portions Copyright [yyyy] [name of copyright owner]
-#
-# CDDL HEADER END
-#
-
-#
-# Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
-# Use is subject to license terms.
-#
-
-include ../Makefile.com
-
-.KEEP_STATE:
-
-all: $(FILES)
-
-install: all pkg
-
-include ../Makefile.targ
--- a/usr/src/pkgdefs/SUNWusat10.v/pkginfo.tmpl	Wed Aug 05 18:08:09 2009 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,55 +0,0 @@
-#
-# CDDL HEADER START
-#
-# The contents of this file are subject to the terms of the
-# Common Development and Distribution License (the "License").
-# You may not use this file except in compliance with the License.
-#
-# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
-# or http://www.opensolaris.org/os/licensing.
-# See the License for the specific language governing permissions
-# and limitations under the License.
-#
-# When distributing Covered Code, include this CDDL HEADER in each
-# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
-# If applicable, add the following below this CDDL HEADER, with the
-# fields enclosed by brackets "[]" replaced with your own identifying
-# information: Portions Copyright [yyyy] [name of copyright owner]
-#
-# CDDL HEADER END
-#
-
-#
-# Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
-# Use is subject to license terms.
-#
-# This required package information file describes characteristics of the
-# package, such as package abbreviation, full package name, package version,
-# and package architecture.
-#
-PKG="SUNWusat10"
-NAME="UltraSPARC-AT10 (Root)"
-ARCH="sparc.sun4v"
-VERSION="ONVERS,REV=0.0.0"
-SUNW_PRODNAME="SunOS"
-SUNW_PRODVERS="RELEASE/VERSION"
-SUNW_PKGTYPE="root"
-MAXINST="1000"
-CATEGORY="system"
-DESC="UltraSPARC-AT10 core kernel software"
-VENDOR="Sun Microsystems, Inc."
-HOTLINE="Please contact your local service provider"
-EMAIL=""
-CLASSES="none"
-BASEDIR=/
-SUNW_PKGVERS="1.0"
-SUNW_PKG_ALLZONES="true"
-SUNW_PKG_HOLLOW="true"
-SUNW_PKG_THISZONE="false"
-#VSTOCK="<reserved by Release Engineering for package part #>"
-#ISTATES="<developer defined>"
-#RSTATES='<developer defined>'
-#ULIMIT="<developer defined>"
-#ORDER="<developer defined>"
-#PSTAMP="<developer defined>"
-#INTONLY="<developer defined>"
--- a/usr/src/pkgdefs/SUNWusat10.v/prototype_com	Wed Aug 05 18:08:09 2009 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,52 +0,0 @@
-#
-# CDDL HEADER START
-#
-# The contents of this file are subject to the terms of the
-# Common Development and Distribution License (the "License").
-# You may not use this file except in compliance with the License.
-#
-# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
-# or http://www.opensolaris.org/os/licensing.
-# See the License for the specific language governing permissions
-# and limitations under the License.
-#
-# When distributing Covered Code, include this CDDL HEADER in each
-# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
-# If applicable, add the following below this CDDL HEADER, with the
-# fields enclosed by brackets "[]" replaced with your own identifying
-# information: Portions Copyright [yyyy] [name of copyright owner]
-#
-# CDDL HEADER END
-#
-
-#
-# Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
-# Use is subject to license terms.
-#
-# This required package information file contains a list of package contents.
-# The 'pkgmk' command uses this file to identify the contents of a package
-# and their location on the development machine when building the package.
-# Can be created via a text editor or through use of the 'pkgproto' command.
-
-#!search <pathname pathname ...>	# where to find pkg objects
-#!include <filename>			# include another 'prototype' file
-#!default <mode> <owner> <group>	# default used if not specified on entry
-#!<param>=<value>			# puts parameter in pkg environment
-
-# packaging files
-i pkginfo
-i copyright
-#
-# source locations relative to the prototype file
-#
-# SUNWusat10.v
-#
-d none platform 755 root sys
-d none platform/sun4v 755 root sys
-d none platform/sun4v/kernel 755 root sys
-d none platform/sun4v/kernel/cpu 755 root sys
-d none platform/sun4v/kernel/cpu/sparcv9 755 root sys
-f none platform/sun4v/kernel/cpu/sparcv9/SUNW,UltraSPARC-AT10 755 root sys
-d none platform/sun4v/kernel/pcbe 755 root sys
-d none platform/sun4v/kernel/pcbe/sparcv9 755 root sys
-f none platform/sun4v/kernel/pcbe/sparcv9/pcbe.SUNW,UltraSPARC-AT10 755 root sys
--- a/usr/src/pkgdefs/SUNWusat10.v/prototype_sparc	Wed Aug 05 18:08:09 2009 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,30 +0,0 @@
-#
-# CDDL HEADER START
-#
-# The contents of this file are subject to the terms of the
-# Common Development and Distribution License (the "License").
-# You may not use this file except in compliance with the License.
-#
-# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
-# or http://www.opensolaris.org/os/licensing.
-# See the License for the specific language governing permissions
-# and limitations under the License.
-#
-# When distributing Covered Code, include this CDDL HEADER in each
-# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
-# If applicable, add the following below this CDDL HEADER, with the
-# fields enclosed by brackets "[]" replaced with your own identifying
-# information: Portions Copyright [yyyy] [name of copyright owner]
-#
-# CDDL HEADER END
-#
-
-#
-# Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
-# Use is subject to license terms.
-#
-
-# Include ISA independent files (prototype_com)
-!include prototype_com
-
-# List files which are SPARC specific here
--- a/usr/src/pkgdefs/etc/exception_list_i386	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/pkgdefs/etc/exception_list_i386	Mon Aug 10 10:43:48 2009 -0400
@@ -670,8 +670,9 @@
 usr/include/sys/1394/id1394.h		i386
 # Private net80211 headers
 usr/include/sys/net80211.h		i386
+usr/include/sys/net80211_crypto.h	i386
+usr/include/sys/net80211_ht.h		i386
 usr/include/sys/net80211_proto.h	i386
-usr/include/sys/net80211_crypto.h	i386
 #
 # PPPoE files not delivered to customers.
 usr/include/net/pppoe.h			i386
--- a/usr/src/pkgdefs/etc/exception_list_sparc	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/pkgdefs/etc/exception_list_sparc	Mon Aug 10 10:43:48 2009 -0400
@@ -677,8 +677,9 @@
 usr/include/net/wpa.h			sparc
 # Private net80211 headers
 usr/include/sys/net80211.h		sparc
+usr/include/sys/net80211_crypto.h	sparc
+usr/include/sys/net80211_ht.h		sparc
 usr/include/sys/net80211_proto.h	sparc
-usr/include/sys/net80211_crypto.h	sparc
 #
 # User<->kernel interface used by cfgadm/USB only
 #
--- a/usr/src/tools/onbld/Scm/WorkSpace.py	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/tools/onbld/Scm/WorkSpace.py	Mon Aug 10 10:43:48 2009 -0400
@@ -440,70 +440,64 @@
         self.ui = self.repo.ui
         self.name = self.repo.root
 
-        parent = self.repo.ui.expandpath('default')
-        if parent == 'default':
-            parent = None
-        self.parentrepo = parent
-
         self.activecache = {}
         self.outgoingcache = {}
 
     def parent(self, spec=None):
-        '''Return canonical workspace parent, either SPEC if passed,
-        or default parent otherwise'''
-        return spec or self.parentrepo
+        '''Return the canonical workspace parent, either SPEC (which
+        will be expanded) if provided or the default parent
+        otherwise.'''
 
-    def _localtip(self, bases, heads):
-        '''Return a tuple (changectx, workingctx) representing the most
-        representative head to act as the local tip.
+        if spec:
+            return self.ui.expandpath(spec)
 
-        If the working directory is modified, the changectx is its
-        tipmost local parent (or tipmost parent, if neither is
-        local), and the workingctx is non-null.
+        p = self.ui.expandpath('default')
+        if p == 'default':
+            return None
+        else:
+            return p
 
-        If the working directory is clean, the workingctx is null.
-        The changectx is the tip-most local head on the current branch.
-        If this can't be determined for some reason (e.g., the parent
-        repo is inacessible), changectx is the tip-most head on the
-        current branch.
+    def _localtip(self, outgoing, wctx):
+        '''Return the most representative changeset to act as the
+        localtip.
 
-        If the workingctx is non-null it is the actual local tip (and would
-        be the local tip in any generated ActiveList, for instance),
-        the better parent revision is returned also to aid callers needing
-        a real changeset to act as a surrogate for an uncommitted change.'''
+        If the working directory is modified (has file changes, is a
+        merge, or has switched branches), this will be a workingctx.
 
-        def tipmost_of(nodes):
-            return sorted(nodes, cmp=lambda x, y: cmp(x.rev(), y.rev()))[-1]
+        If the working directory is unmodified, this will be the most
+        recent (highest revision number) local (outgoing) head on the
+        current branch, if no heads are determined to be outgoing, it
+        will be the most recent head on the current branch.
+        '''
 
         #
-        # We need a full set of outgoing nodes such that we can limit
-        # local branch heads to those which are outgoing
-        #
-        outnodes = self.repo.changelog.nodesbetween(bases, heads)[0]
-        wctx = self.workingctx()
-
-        #
-        # A modified working context is seen as a proto-branch, where
-        # the 'heads' from our view are the parent revisions of that
-        # context.
-        # (and the working head is it)
+        # A modified working copy is seen as a proto-branch, and thus
+        # our only option as the local tip.
         #
         if (wctx.files() or len(wctx.parents()) > 1 or
             wctx.branch() != wctx.parents()[0].branch()):
-            heads = wctx.parents()
-        else:
-            heads = [self.repo.changectx(n) for n in heads]
-            wctx = None
+            return wctx
+
+        heads = self.repo.heads(start=wctx.parents()[0].node())
+        headctxs = [self.repo.changectx(n) for n in heads]
+        localctxs = [c for c in headctxs if c.node() in outgoing]
+
+        ltip = sorted(localctxs or headctxs, key=lambda x: x.rev())[-1]
 
-        localchoices = [n for n in heads if n.node() in outnodes]
-        return (tipmost_of(localchoices or heads), wctx)
+        if len(heads) > 1:
+            self.ui.warn('The current branch has more than one head, '
+                         'using %s\n' % ltip.rev())
+
+        return ltip
 
-    def _parenttip(self, localtip, parent=None):
-        '''Find the closest approximation of the parents tip, as best
-        as we can.
+    def _parenttip(self, heads, outgoing):
+        '''Return the highest-numbered, non-outgoing changeset that is
+        an ancestor of a changeset in heads.
 
-        In parent-less workspaces returns our tip (given the best
-        we can do is deal with uncommitted changes)'''
+        This is intended to find the most recent changeset on a given
+        branch that is shared between a parent and child workspace,
+        such that it can act as a stand-in for the parent workspace.
+        '''
 
         def tipmost_shared(head, outnodes):
             '''Return the tipmost node on the same branch as head that is not
@@ -514,15 +508,20 @@
             and return the first node we see in the iter phase that
             was previously collected.
 
+            If no node is found (all revisions >= 0 are outgoing), the
+            only possible parenttip is the null node (node.nullid)
+            which is returned explicitly.
+
             See the docstring of mercurial.cmdutil.walkchangerevs()
             for the phased approach to the iterator returned.  The
             important part to note is that the 'add' phase gathers
             nodes, which the 'iter' phase then iterates through.'''
 
+            opts = {'rev': ['%s:0' % head.rev()],
+                    'follow': True}
             get = util.cachefunc(lambda r: self.repo.changectx(r).changeset())
             changeiter = cmdutil.walkchangerevs(self.repo.ui, self.repo, [],
-                                                get, {'rev': ['%s:0' % head],
-                                                      'follow': True})[0]
+                                                get, opts)[0]
             seen = []
             for st, rev, fns in changeiter:
                 n = self.repo.changelog.node(rev)
@@ -532,22 +531,10 @@
                 elif st == 'iter':
                     if n in seen:
                         return rev
-            return None
-
-        tipctx, wctx = localtip
-        parent = self.parent(parent)
-        outgoing = None
+            return self.repo.changelog.rev(node.nullid)
 
-        if parent:
-            outgoing = self.findoutgoing(parent)
-
-        if wctx:
-            possible_branches = wctx.parents()
-        else:
-            possible_branches = [tipctx]
-
-        nodes = self.repo.changelog.nodesbetween(outgoing)[0]
-        ptips = map(lambda x: tipmost_shared(x.rev(), nodes), possible_branches)
+        nodes = set(outgoing)
+        ptips = map(lambda x: tipmost_shared(x, nodes), heads)
         return self.repo.changectx(sorted(ptips)[-1])
 
     def status(self, base=None, head=None):
@@ -614,30 +601,26 @@
 
         if parent:
             outgoing = self.findoutgoing(parent)
+            outnodes = self.repo.changelog.nodesbetween(outgoing)[0]
         else:
             outgoing = []       # No parent, no outgoing nodes
+            outnodes = []
 
-        branchheads = self.repo.heads(start=self.repo.dirstate.parents()[0])
-        ourhead, workinghead = self._localtip(outgoing, branchheads)
+        localtip = self._localtip(outnodes, self.workingctx())
 
-        if len(branchheads) > 1:
-            self.ui.warn('The current branch has more than one head, '
-                         'using %s\n' % ourhead.rev())
+        if localtip.rev() is None:
+            heads = localtip.parents()
+        else:
+            heads = [localtip]
 
-        if workinghead:
-            parents = workinghead.parents()
-            ctxs = [self.repo.changectx(n) for n in
-                    self.repo.changelog.nodesbetween(outgoing,
-                                                     [h.node() for h in
-                                                      parents])[0]]
-            ctxs.append(workinghead)
-        else:
-            ctxs = [self.repo.changectx(n) for n in
-                    self.repo.changelog.nodesbetween(outgoing,
-                                                     [ourhead.node()])[0]]
+        ctxs = [self.repo.changectx(n) for n in
+                self.repo.changelog.nodesbetween(outgoing,
+                                                 [h.node() for h in heads])[0]]
 
-        act = ActiveList(self, self._parenttip((ourhead, workinghead), parent),
-                         ctxs)
+        if localtip.rev() is None:
+            ctxs.append(localtip)
+
+        act = ActiveList(self, self._parenttip(heads, outnodes), ctxs)
 
         self.activecache[parent] = act
         return act
--- a/usr/src/tools/onbld/hgext/cdm.py	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/tools/onbld/hgext/cdm.py	Mon Aug 10 10:43:48 2009 -0400
@@ -75,47 +75,22 @@
         return False
 
 
-def _buildfilelist(repo, args):
-    '''build a list of files in which we're interested
-
-    If no files are specified, then we'll default to using
-    the entire active list.
+def buildfilelist(ws, parent, files):
+    '''Build a list of files in which we're interested.
 
-    Returns a dictionary, wherein the keys are cwd-relative file paths,
-    and the values (when present) are entries from the active list.
-    Instead of warning the user explicitly about files not in the active
-    list, we'll attempt to do checks on them.'''
-
-    fdict = {}
+    If no files are specified take files from the active list relative
+    to 'parent'.
 
-    #
-    # If the user specified files on the command line, we'll only check
-    # those files.  We won't pull the active list at all.  That means we
-    # won't be smart about skipping deleted files and such, so the user
-    # needs to be smart enough to not explicitly specify a nonexistent
-    # file path.  Which seems reasonable.
-    #
-    if args:
-        for f in args:
-            fdict[f] = None
+    Return a list of 2-tuples the first element being a path relative
+    to the current directory and the second an entry from the active
+    list, or None if an explicit file list was given.'''
 
-    #
-    # Otherwise, if no files were listed explicitly, we assume that the
-    # checks should be run on all files in the active list.  So we determine
-    # it here.
-    #
-    # Tracking the file paths is a slight optimization, in that multiple
-    # check functions won't need to derive it themselves.  This also dovetails
-    # nicely with the expectation that explicitly specified files will be
-    # ${CWD}-relative paths, so the fdict keyspace will be consistent either
-    # way.
-    #
+    if files:
+        return [(path, None) for path in sorted(files)]
     else:
-        active = wslist[repo].active()
-        for e in sorted(active):
-            fdict[wslist[repo].filepath(e.name)] = e
-
-    return fdict
+        active = ws.active(parent=parent)
+        return [(ws.filepath(e.name), e) for e in sorted(active)]
+buildfilelist = util.cachefunc(buildfilelist)
 
 
 def not_check(repo, cmd):
@@ -303,16 +278,14 @@
     See http://www.opensolaris.org/os/community/on/devref_toc/devref_7/#7_2_3_nonformatting_considerations
     for more info.'''
 
-    filelist = opts.get('filelist') or _buildfilelist(repo, args)
+    filelist = buildfilelist(wslist[repo], opts.get('parent'), args)
+    exclude = not_check(repo, 'cddlchk')
+    lenient = True
+    ret = 0
 
     ui.write('CDDL block check:\n')
 
-    lenient = True
-    ret = 0
-
-    exclude = not_check(repo, 'cddlchk')
-
-    for f, e in filelist.iteritems():
+    for f, e in filelist:
         if e and e.is_removed():
             continue
         elif (e or opts.get('honour_nots')) and exclude(f):
@@ -336,14 +309,13 @@
     header comment directing the reader to the document containing
     Solaris object versioning rules (README.mapfile).'''
 
-    filelist = opts.get('filelist') or _buildfilelist(repo, args)
+    filelist = buildfilelist(wslist[repo], opts.get('parent'), args)
+    exclude = not_check(repo, 'mapfilechk')
+    ret = 0
 
     ui.write('Mapfile comment check:\n')
 
-    ret = 0
-    exclude = not_check(repo, 'mapfilechk')
-
-    for f, e in filelist.iteritems():
+    for f, e in filelist:
         if e and e.is_removed():
             continue
         elif f.find('mapfile') == -1:
@@ -366,14 +338,13 @@
     See http://www.opensolaris.org/os/project/muskoka/on_dev/golden_rules.txt
     for more info.'''
 
-    filelist = opts.get('filelist') or _buildfilelist(repo, args)
+    filelist = buildfilelist(wslist[repo], opts.get('parent'), args)
+    exclude = not_check(repo, 'copyright')
+    ret = 0
 
     ui.write('Copyright check:\n')
 
-    ret = 0
-    exclude = not_check(repo, 'copyright')
-
-    for f, e in filelist.iteritems():
+    for f, e in filelist:
         if e and e.is_removed():
             continue
         elif (e or opts.get('honour_nots')) and exclude(f):
@@ -389,14 +360,13 @@
 def cdm_hdrchk(ui, repo, *args, **opts):
     '''check active header files conform to O/N rules'''
 
-    filelist = opts.get('filelist') or _buildfilelist(repo, args)
+    filelist = buildfilelist(wslist[repo], opts.get('parent'), args)
+    exclude = not_check(repo, 'hdrchk')
+    ret = 0
 
     ui.write('Header format check:\n')
 
-    ret = 0
-    exclude = not_check(repo, 'hdrchk')
-
-    for f, e in filelist.iteritems():
+    for f, e in filelist:
         if e and e.is_removed():
             continue
         elif not f.endswith('.h'):
@@ -416,14 +386,13 @@
 
     See http://opensolaris.org/os/community/documentation/getting_started_docs/cstyle.ms.pdf'''
 
-    filelist = opts.get('filelist') or _buildfilelist(repo, args)
+    filelist = buildfilelist(wslist[repo], opts.get('parent'), args)
+    exclude = not_check(repo, 'cstyle')
+    ret = 0
 
     ui.write('C style check:\n')
 
-    ret = 0
-    exclude = not_check(repo, 'cstyle')
-
-    for f, e in filelist.iteritems():
+    for f, e in filelist:
         if e and e.is_removed():
             continue
         elif not (f.endswith('.c') or f.endswith('.h')):
@@ -443,14 +412,13 @@
 def cdm_jstyle(ui, repo, *args, **opts):
     'check active Java source files for common stylistic errors'
 
-    filelist = opts.get('filelist') or _buildfilelist(repo, args)
+    filelist = buildfilelist(wslist[repo], opts.get('parent'), args)
+    exclude = not_check(repo, 'jstyle')
+    ret = 0
 
     ui.write('Java style check:\n')
 
-    ret = 0
-    exclude = not_check(repo, 'jstyle')
-
-    for f, e in filelist.iteritems():
+    for f, e in filelist:
         if e and e.is_removed():
             continue
         elif not f.endswith('.java'):
@@ -468,14 +436,13 @@
 def cdm_permchk(ui, repo, *args, **opts):
     '''check active files permission - warn +x (execute) mode'''
 
-    filelist = opts.get('filelist') or _buildfilelist(repo, args)
+    filelist = buildfilelist(wslist[repo], opts.get('parent'), args)
+    exclude = not_check(repo, 'permchk')
+    exeFiles = []
 
     ui.write('File permission check:\n')
 
-    exeFiles = []
-    exclude = not_check(repo, 'permchk')
-
-    for f, e in filelist.iteritems():
+    for f, e in filelist:
         if e and e.is_removed():
             continue
         elif (e or opts.get('honour_nots')) and exclude(f):
@@ -606,14 +573,13 @@
 def cdm_keywords(ui, repo, *args, **opts):
     '''check source files do not contain SCCS keywords'''
 
-    filelist = opts.get('filelist') or _buildfilelist(repo, args)
+    filelist = buildfilelist(wslist[repo], opts.get('parent'), args)
+    exclude = not_check(repo, 'keywords')
+    ret = 0
 
     ui.write('Keywords check:\n')
 
-    ret = 0
-    exclude = not_check(repo, 'keywords')
-
-    for f, e in filelist.iteritems():
+    for f, e in filelist:
         if e and e.is_removed():
             continue
         elif (e or opts.get('honour_nots')) and exclude(f):
@@ -671,20 +637,17 @@
 
     ret = 0
 
-    flist = _buildfilelist(ws.repo, args)
-
     for cmd in cmds:
         name = cmd.func_name.split('_')[1]
         if not ws.ui.configbool('cdm', name, True):
             ws.ui.status('Skipping %s check...\n' % name)
         else:
             ws.ui.pushbuffer()
+            result = cmd(ws.ui, ws.repo, honour_nots=True, *args, **opts)
+            output = ws.ui.popbuffer()
 
-            result = cmd(ws.ui, ws.repo, filelist=flist,
-                         honour_nots=True, *args, **opts)
             ret |= result
 
-            output = ws.ui.popbuffer()
             if not ws.ui.quiet or result != 0:
                 ws.ui.write(output, '\n')
     return ret
--- a/usr/src/tools/scripts/bfu.sh	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/tools/scripts/bfu.sh	Mon Aug 10 10:43:48 2009 -0400
@@ -313,6 +313,7 @@
 	lib/svc/method/svc-drd
 	lib/svc/method/svc-dscp
 	lib/svc/method/svc-dumpadm
+	lib/svc/method/svc-fcoei
 	lib/svc/method/svc-fcoet
 	lib/svc/method/svc-intrd
 	lib/svc/method/svc-hal
@@ -383,6 +384,7 @@
 	var/svc/manifest/system/device/devices-audio.xml
 	var/svc/manifest/system/device/devices-fc-fabric.xml
 	var/svc/manifest/system/dumpadm.xml
+	var/svc/manifest/system/fcoe_initiator.xml
 	var/svc/manifest/system/fcoe_target.xml
 	var/svc/manifest/system/filesystem/rmvolmgr.xml
 	var/svc/manifest/system/fmd.xml
--- a/usr/src/ucbcmd/Makefile	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/ucbcmd/Makefile	Mon Aug 10 10:43:48 2009 -0400
@@ -32,7 +32,6 @@
 COMMON_SUBDIRS=		\
 	basename	\
 	biff		\
-	cc		\
 	chown		\
 	df		\
 	du		\
@@ -44,8 +43,6 @@
 	from		\
 	groups		\
 	install.d	\
-	ld		\
-	lint.d		\
 	ln		\
 	ls		\
 	mkstr		\
--- a/usr/src/ucbcmd/cc/Makefile	Wed Aug 05 18:08:09 2009 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,42 +0,0 @@
-#
-# CDDL HEADER START
-#
-# The contents of this file are subject to the terms of the
-# Common Development and Distribution License, Version 1.0 only
-# (the "License").  You may not use this file except in compliance
-# with the License.
-#
-# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
-# or http://www.opensolaris.org/os/licensing.
-# See the License for the specific language governing permissions
-# and limitations under the License.
-#
-# When distributing Covered Code, include this CDDL HEADER in each
-# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
-# If applicable, add the following below this CDDL HEADER, with the
-# fields enclosed by brackets "[]" replaced with your own identifying
-# information: Portions Copyright [yyyy] [name of copyright owner]
-#
-# CDDL HEADER END
-#
-#ident	"%Z%%M%	%I%	%E% SMI"
-#
-# Copyright 2005 Sun Microsystems, Inc.  All rights reserved.
-# Use is subject to license terms.
-#
-
-PROG= cc
-
-include ../Makefile.ucbcmd
-
-.KEEP_STATE:
-
-all: $(PROG)
-
-install: all $(ROOTBIN) $(ROOTPROG)
-
-clean:
-
-lint:
-
-include ../Makefile.ucbtarg
--- a/usr/src/ucbcmd/cc/cc.sh	Wed Aug 05 18:08:09 2009 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,141 +0,0 @@
-#!/usr/bin/sh
-#
-# CDDL HEADER START
-#
-# The contents of this file are subject to the terms of the
-# Common Development and Distribution License, Version 1.0 only
-# (the "License").  You may not use this file except in compliance
-# with the License.
-#
-# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
-# or http://www.opensolaris.org/os/licensing.
-# See the License for the specific language governing permissions
-# and limitations under the License.
-#
-# When distributing Covered Code, include this CDDL HEADER in each
-# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
-# If applicable, add the following below this CDDL HEADER, with the
-# fields enclosed by brackets "[]" replaced with your own identifying
-# information: Portions Copyright [yyyy] [name of copyright owner]
-#
-# CDDL HEADER END
-#
-#
-# Copyright 1995 Sun Microsystems, Inc.  All rights reserved.
-# Use is subject to license terms.
-#
-
-#	Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T
-#	  All Rights Reserved
-
-#
-# University Copyright- Copyright (c) 1982, 1986, 1988
-# The Regents of the University of California
-# All Rights Reserved
-#
-# University Acknowledgment- Portions of this document are derived from
-# software developed by the University of California, Berkeley, and its
-# contributors.
-#
-
-#ident	"%Z%%M%	%I%	%E% SMI"
-
-# cc command for BSD compatibility package:
-#
-#	BSD compatibility package header files (/usr/ucbinclude)
-#	are included before SVr4 default (/usr/include) files but 
-#       after any directories specified on the command line via 
-#	the -I option.  Thus, the BSD header files are included
-#	next to last, and SVr4 header files are searched last.
-#	
-#	BSD compatibility package libraries (/usr/ucblib) are
-#	searched next to third to last.  SVr4 default libraries 
-#	(/usr/ccs/lib and /usr/lib) are searched next to last
-#
-#	Because the BSD compatibility package C library does not 
-#	contain all the C library routines of /usr/ccs/lib/libc.a, 
-#	the BSD package C library is named /usr/ucblib/libucb.a
-#	and is passed explicitly to cc.  This ensures that libucb.a 
-#	will be searched first for routines and that 
-#	/usr/ccs/lib/libc.a will be searched afterwards for routines 
-#	not found in /usr/ucblib/libucb.a.  Also because sockets is    
-#       provided in libc under BSD, /usr/lib/libsocket and /usr/lib/nsl
-#       are also included as default libraries.
-#
-#	NOTE: the -Y L, and -Y U, options of cc are not valid 
-
-if [ -f /usr/ccs/bin/ucbcc ]
-then
-
-	if [ $# -eq 0 ]
-	then
-		# use this to get the usage message from /usr/ccs/bin/ucbcc
-		/usr/ccs/bin/ucbcc
-		ret=$?
-		exit $ret
-	fi
-
-
-	UCB_LIB_DIR=/usr/ucblib
-	CCS_LIB_DIR=/usr/ccs/lib
-	USR_LIB=/usr/lib
-	TYPE=
-	dopt=
-	cgdir=
-
-	for i in $*
-	do
-		case $i in
-			-cg*)
-				cgdir=`echo $i | sed -n 's/-//p'`
-				;;
-			-Bstatic|-Bdynamic)
-				dopt=$i
-				;;
-			-xarch=v9)
-				TYPE=/sparcv9
-				;;
-		esac
-	done
-
-	if [ x$LD_RUN_PATH = x ]
-	then
-		LD_RUN_PATH=$UCB_LIB_DIR$TYPE
-	else
-		LD_RUN_PATH=$LD_RUN_PATH:$UCB_LIB_DIR$TYPE
-	fi
-	export LD_RUN_PATH
-
-	if [ "$dopt" = "-Bstatic" ]
-	then
-		LIBS="-lucb -lsocket -lnsl -lelf"
-	else
-		LIBS="-lucb -lsocket -lnsl -lelf -laio"
-	fi
-
-	# get the directory where ucbcc points to and set the LD_LIBRARY_PATH
-	# to that directory so as to get the necessary libraries.
-	cclink=`/usr/bin/ls -ln /usr/ccs/bin/ucbcc | awk '{print $11}'`
-	ccdir=`/usr/bin/dirname $cclink`
-	if [ "$cgdir" != "" ]
-	then
-		# can not have cgdir set and compile in 64bit mode, so
-		# reset variables back to 32bit mode
-		TYPE=
-		nccdir="$ccdir/../lib/$cgdir:$ccdir/../lib:$ccdir/$cgdir:$ccdir"
-	else
-		nccdir="$ccdir/../lib$TYPE:$ccdir$TYPE"
-	fi
-
-	LD_LIBRARY_PATH=$UCB_LIB_DIR$TYPE:$CCS_LIB_DIR$TYPE:$USR_LIB$TYPE
-	export LD_LIBRARY_PATH
-
-	/usr/ccs/bin/ucbcc -Xs \
-	-YP,:$UCB_LIB_DIR$TYPE:$nccdir:$CCS_LIB_DIR$TYPE:$USR_LIB$TYPE \
-	"$@" -I/usr/ucbinclude $LIBS
-	ret=$?
-	exit $ret
-else
-	echo "/usr/ucb/cc:  language optional software package not installed"
-	exit 1
-fi
--- a/usr/src/ucbcmd/ld/Makefile	Wed Aug 05 18:08:09 2009 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,42 +0,0 @@
-#
-# CDDL HEADER START
-#
-# The contents of this file are subject to the terms of the
-# Common Development and Distribution License, Version 1.0 only
-# (the "License").  You may not use this file except in compliance
-# with the License.
-#
-# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
-# or http://www.opensolaris.org/os/licensing.
-# See the License for the specific language governing permissions
-# and limitations under the License.
-#
-# When distributing Covered Code, include this CDDL HEADER in each
-# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
-# If applicable, add the following below this CDDL HEADER, with the
-# fields enclosed by brackets "[]" replaced with your own identifying
-# information: Portions Copyright [yyyy] [name of copyright owner]
-#
-# CDDL HEADER END
-#
-#ident	"%Z%%M%	%I%	%E% SMI"
-#
-# Copyright 2005 Sun Microsystems, Inc.  All rights reserved.
-# Use is subject to license terms.
-#
-
-PROG= ld
-
-include ../Makefile.ucbcmd
-
-.KEEP_STATE:
-
-all: $(PROG)
-
-install: all $(ROOTBIN) $(ROOTPROG)
-
-clean:
-
-lint:
-
-include ../Makefile.ucbtarg
--- a/usr/src/ucbcmd/ld/ld.sh	Wed Aug 05 18:08:09 2009 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,77 +0,0 @@
-#!/usr/bin/sh
-#
-# CDDL HEADER START
-#
-# The contents of this file are subject to the terms of the
-# Common Development and Distribution License, Version 1.0 only
-# (the "License").  You may not use this file except in compliance
-# with the License.
-#
-# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
-# or http://www.opensolaris.org/os/licensing.
-# See the License for the specific language governing permissions
-# and limitations under the License.
-#
-# When distributing Covered Code, include this CDDL HEADER in each
-# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
-# If applicable, add the following below this CDDL HEADER, with the
-# fields enclosed by brackets "[]" replaced with your own identifying
-# information: Portions Copyright [yyyy] [name of copyright owner]
-#
-# CDDL HEADER END
-#
-#	Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T
-#	  All Rights Reserved
-
-
-#ident	"%Z%%M%	%I%	%E% SMI"	/* SVr4.0 1.7	*/
-
-#	Copyright (c) 1984 AT&T
-#	  All Rights Reserved
-
-
-#	Portions Copyright(c) 1988, Sun Microsystems, Inc.
-#	All Rights Reserved
-
-# ld command for BSD compatibility package:
-#
-#       BSD compatibility package libraries (/usr/ucblib) are
-#       searched next to third to last.  SVr4 default libraries 
-#       (/usr/ccs/lib and /usr/lib) are searched next to last and
-#	last respectively.
-#
-#       Because the BSD compatibility package C library does not 
-#       contain all the C library routines of /usr/ccs/lib/libc.a, 
-#       the BSD package C library is named /usr/ucblib/libucb.a
-#       and is passed explicitly to ld.  This ensures that libucb.a 
-#       will be searched first for routines and that 
-#       /usr/ccs/lib/libc.a will be searched afterwards for routines 
-#       not found in /usr/ucblib/libucb.a.  Also because sockets is    
-#       provided in libc under BSD, /usr/lib/libsocket and /usr/lib/nsl
-#       are also included as default libraries.
-#
-#       NOTE: the -Y L, and -Y U, options of ld are not valid 
-
-opts=
-LIBS="-lucb -lresolv -lsocket -lnsl -lelf"
-
-if [ $# -eq 0 ]
-then
-	exit 1
-elif [ $# -gt 0 ]
-then
-	for i in $*
-	do
-		case $i in
-			-r)
-				LIBS=""
-				opts="$opts $i"
-				shift;;
-			*)
-				opts="$opts $i"
-				shift;;
-		esac
-	done
-fi
-
-LD_RUN_PATH=/usr/ucblib /usr/ccs/bin/ld -YP,:/usr/ucblib:/usr/ccs/lib:/usr/lib $opts $LIBS
--- a/usr/src/ucbcmd/lint.d/Makefile	Wed Aug 05 18:08:09 2009 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,45 +0,0 @@
-#
-# CDDL HEADER START
-#
-# The contents of this file are subject to the terms of the
-# Common Development and Distribution License, Version 1.0 only
-# (the "License").  You may not use this file except in compliance
-# with the License.
-#
-# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
-# or http://www.opensolaris.org/os/licensing.
-# See the License for the specific language governing permissions
-# and limitations under the License.
-#
-# When distributing Covered Code, include this CDDL HEADER in each
-# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
-# If applicable, add the following below this CDDL HEADER, with the
-# fields enclosed by brackets "[]" replaced with your own identifying
-# information: Portions Copyright [yyyy] [name of copyright owner]
-#
-# CDDL HEADER END
-#
-#ident	"%Z%%M%	%I%	%E% SMI"
-#
-# Copyright 2005 Sun Microsystems, Inc.  All rights reserved.
-# Use is subject to license terms.
-#
-
-PROG= lintcmd
-REALPROG= lint
-
-include ../Makefile.ucbcmd
-
-.KEEP_STATE:
-
-all: $(PROG)
-
-install: all $(ROOTBIN) $(ROOTPROG)
-	$(RM) $(ROOTBIN)/$(REALPROG)
-	$(MV) $(ROOTBIN)/$(PROG) $(ROOTBIN)/$(REALPROG)
-
-clean:
-
-lint:
-
-include ../Makefile.ucbtarg
--- a/usr/src/ucbcmd/lint.d/lintcmd.sh	Wed Aug 05 18:08:09 2009 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,77 +0,0 @@
-#!/usr/bin/sh
-#
-# CDDL HEADER START
-#
-# The contents of this file are subject to the terms of the
-# Common Development and Distribution License, Version 1.0 only
-# (the "License").  You may not use this file except in compliance
-# with the License.
-#
-# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
-# or http://www.opensolaris.org/os/licensing.
-# See the License for the specific language governing permissions
-# and limitations under the License.
-#
-# When distributing Covered Code, include this CDDL HEADER in each
-# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
-# If applicable, add the following below this CDDL HEADER, with the
-# fields enclosed by brackets "[]" replaced with your own identifying
-# information: Portions Copyright [yyyy] [name of copyright owner]
-#
-# CDDL HEADER END
-#
-#
-# Copyright 1989 Sun Microsystems, Inc.  All rights reserved.
-# Use is subject to license terms.
-#
-
-#	Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T
-#	  All Rights Reserved
-
-# University Copyright- Copyright (c) 1982, 1986, 1988
-# The Regents of the University of California
-# All Rights Reserved
-#
-# University Acknowledgment- Portions of this document are derived from
-# software developed by the University of California, Berkeley, and its
-# contributors.
-
-#pragma ident	"%Z%%M%	%I%	%E% SMI"
-
-
-# lint command for BSD compatibility package:
-#
-#	BSD compatibility package header files (/usr/ucbinclude)
-#	are included before SVr4 default (/usr/include) files but 
-#       after any directories specified on the command line via 
-#	the -I option.  Thus, the BSD header files are included
-#	next to last, and SVr4 header files are searched last.
-#	
-#	BSD compatibility package libraries are searched first.
-#
-#	Because the BSD compatibility package C lint library does not 
-#	contain all the C library routines of /usr/ccs/lib/llib-lc, 
-#	the BSD package C library is named /usr/ucblib/llib-lucb
-#	and is passed explicitly to lint.  This ensures that llib-lucb
-#	will be searched first for routines and that 
-#	/usr/ccs/lib/llib-lc will be searched afterwards for routines 
-#	not found in /usr/ucblib/llib-lucb.  Also because sockets is    
-#       provided in libc under BSD, /usr/lib/llib-lsocket and 
-#	/usr/lib/llib-lnsl are also included as default libraries.
-#	
-#	Note: Lint does not allow you to reset the search PATH for
-# 	libraries. The following uses the -L option to point to
-#	/usr/ucblib. There are however some combinations of options
-#	specified by the user that could overrule the intended path.
-#
-
-if [ -f /usr/ccs/bin/ucblint ]
-then
-	/usr/ccs/bin/ucblint -L/usr/ucblib -Xs "$@" -I/usr/ucbinclude \
-	-L/usr/ucblib -lucb -lsocket -lnsl -lelf
-	ret=$?
-	exit $ret
-else
-	echo "/usr/ucb/lint:  language optional software not installed"
-	exit 1
-fi
--- a/usr/src/uts/common/Makefile.files	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/uts/common/Makefile.files	Mon Aug 10 10:43:48 2009 -0400
@@ -631,7 +631,8 @@
 NET80211_OBJS += net80211.o net80211_proto.o net80211_input.o \
 		 net80211_output.o net80211_node.o net80211_crypto.o \
 		 net80211_crypto_none.o net80211_crypto_wep.o net80211_ioctl.o \
-		 net80211_crypto_tkip.o net80211_crypto_ccmp.o
+		 net80211_crypto_tkip.o net80211_crypto_ccmp.o	\
+		 net80211_ht.o
 
 VNIC_OBJS +=	vnic_ctl.o vnic_dev.o
 
@@ -900,6 +901,8 @@
 
 FCOET_OBJS += fcoet.o fcoet_eth.o fcoet_fc.o
 
+FCOEI_OBJS += fcoei.o fcoei_eth.o fcoei_lv.o
+
 ISCSIT_SHARED_OBJS += \
 		iscsit_common.o
 
--- a/usr/src/uts/common/Makefile.rules	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/uts/common/Makefile.rules	Mon Aug 10 10:43:48 2009 -0400
@@ -983,6 +983,10 @@
 	$(COMPILE.c) -o $@ $<
 	$(CTFCONVERT_O)
 
+$(OBJS_DIR)/%.o:		$(UTSBASE)/common/io/fibre-channel/fca/fcoei/%.c
+	$(COMPILE.c) -o $@ $<
+	$(CTFCONVERT_O)
+
 $(OBJS_DIR)/%.o:		$(UTSBASE)/common/io/sdcard/adapters/sdhost/%.c
 	$(COMPILE.c) -o $@ $<
 	$(CTFCONVERT_O)
@@ -2117,6 +2121,9 @@
 $(LINTS_DIR)/%.ln:		$(UTSBASE)/common/io/fibre-channel/fca/emlxs/%.c
 	@($(LHEAD) $(LINT.c) $< $(LTAIL))
 
+$(LINTS_DIR)/%.ln:		$(UTSBASE)/common/io/fibre-channel/fca/fcoei/%.c
+	@($(LHEAD) $(LINT.c) $< $(LTAIL))
+
 $(LINTS_DIR)/%.ln:		$(UTSBASE)/common/io/scsi/conf/%.c
 	@($(LHEAD) $(LINT.c) $< $(LTAIL))
 
--- a/usr/src/uts/common/fs/nfs/nfs4_client.c	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/uts/common/fs/nfs/nfs4_client.c	Mon Aug 10 10:43:48 2009 -0400
@@ -106,7 +106,6 @@
 static int	nfs4renew(nfs4_server_t *);
 static void	nfs4_attrcache_va(vnode_t *, nfs4_ga_res_t *, int);
 static void	nfs4_pgflush_thread(pgflush_t *);
-static void	flush_pages(vnode_t *, cred_t *);
 
 static boolean_t nfs4_client_cpr_callb(void *, int);
 
@@ -302,7 +301,7 @@
 	if (nfs4_has_pages(vp) && !pgflush) {
 		if (!asyncpg) {
 			(void) nfs4_waitfor_purge_complete(vp);
-			flush_pages(vp, cr);
+			nfs4_flush_pages(vp, cr);
 		} else {
 			pgflush_t *args;
 
@@ -343,8 +342,8 @@
  * ones.
  */
 
-static void
-flush_pages(vnode_t *vp, cred_t *cr)
+void
+nfs4_flush_pages(vnode_t *vp, cred_t *cr)
 {
 	int error;
 	rnode4_t *rp = VTOR4(vp);
@@ -373,7 +372,7 @@
 	rp->r_pgflush = curthread;
 	mutex_exit(&rp->r_statelock);
 
-	flush_pages(args->vp, args->cr);
+	nfs4_flush_pages(args->vp, args->cr);
 
 	mutex_enter(&rp->r_statelock);
 	rp->r_pgflush = NULL;
--- a/usr/src/uts/common/fs/nfs/nfs4_vnops.c	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/uts/common/fs/nfs/nfs4_vnops.c	Mon Aug 10 10:43:48 2009 -0400
@@ -13994,6 +13994,7 @@
 	rnode4_t	*rp = VTOR4(vp);
 	int		error = *errorp;
 	nfs_argop4	*argop;
+	int	do_flush_pages = 0;
 
 	ASSERT(nfs_zone() == mi->mi_zone);
 	/*
@@ -14018,22 +14019,11 @@
 		 * work since VOP_PUTPAGE can call nfs4_commit which calls
 		 * nfs4_start_fop. We flush the pages below after calling
 		 * nfs4_end_fop above
-		 */
-		if (!error && resp && resp->status == NFS4_OK) {
-			int error;
-
-			error = VOP_PUTPAGE(vp, (u_offset_t)0,
-			    0, B_INVAL, cred, NULL);
-
-			if (error && (error == ENOSPC || error == EDQUOT)) {
-				rnode4_t *rp = VTOR4(vp);
-
-				mutex_enter(&rp->r_statelock);
-				if (!rp->r_error)
-					rp->r_error = error;
-				mutex_exit(&rp->r_statelock);
-			}
-		}
+		 * The flush of the page cache must be done after
+		 * nfs4_end_open_seqid_sync() to avoid a 4-way hang.
+		 */
+		if (!error && resp && resp->status == NFS4_OK)
+			do_flush_pages = 1;
 	}
 	if (argsp) {
 		ASSERT(argsp->array_len == 2);
@@ -14063,6 +14053,9 @@
 		open_owner_rele(oop);
 	}
 
+	if (do_flush_pages)
+		nfs4_flush_pages(vp, cred);
+
 	(void) convoff(vp, flk, whence, offset);
 
 	lm_rel_sysid(ls);
--- a/usr/src/uts/common/fs/ufs/ufs_lockfs.c	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/uts/common/fs/ufs/ufs_lockfs.c	Mon Aug 10 10:43:48 2009 -0400
@@ -239,11 +239,21 @@
 	int error = 0;
 	ulockfs_info_t *head;
 	ulockfs_info_t *info;
+	klwp_t *lwp = ttolwp(curthread);
 
 	head = (ulockfs_info_t *)tsd_get(ufs_lockfs_key);
 	SEARCH_ULOCKFSP(head, ulp, info);
 
 	/*
+	 * We have to keep /proc away from stopping us after we applied
+	 * the softlock but before we got a chance to clear it again.
+	 * prstop() may pagefault and become stuck on the softlock still
+	 * pending.
+	 */
+	if (lwp != NULL)
+		lwp->lwp_nostop++;
+
+	/*
 	 * Set a softlock to suspend future ufs_vnops so that
 	 * this lockfs request will not be starved
 	 */
@@ -279,6 +289,9 @@
 	 */
 	ULOCKFS_CLR_SLOCK(ulp);
 
+	if (lwp != NULL)
+		lwp->lwp_nostop--;
+
 	return (error);
 }
 
--- a/usr/src/uts/common/fs/zfs/arc.c	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/uts/common/fs/zfs/arc.c	Mon Aug 10 10:43:48 2009 -0400
@@ -3160,11 +3160,14 @@
 			 * sync-to-convergence, because we remove
 			 * buffers from the hash table when we arc_free().
 			 */
-			ASSERT(zio->io_flags & ZIO_FLAG_IO_REWRITE);
-			ASSERT(DVA_EQUAL(BP_IDENTITY(&zio->io_bp_orig),
-			    BP_IDENTITY(zio->io_bp)));
-			ASSERT3U(zio->io_bp_orig.blk_birth, ==,
-			    zio->io_bp->blk_birth);
+			if (!(zio->io_flags & ZIO_FLAG_IO_REWRITE) ||
+			    !DVA_EQUAL(BP_IDENTITY(&zio->io_bp_orig),
+			    BP_IDENTITY(zio->io_bp)) ||
+			    zio->io_bp_orig.blk_birth !=
+			    zio->io_bp->blk_birth) {
+				panic("bad overwrite, hdr=%p exists=%p",
+				    (void *)hdr, (void *)exists);
+			}
 
 			ASSERT(refcount_is_zero(&exists->b_refcnt));
 			arc_change_state(arc_anon, exists, hash_lock);
--- a/usr/src/uts/common/fs/zfs/dmu_objset.c	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/uts/common/fs/zfs/dmu_objset.c	Mon Aug 10 10:43:48 2009 -0400
@@ -564,7 +564,7 @@
 struct oscarg {
 	void (*userfunc)(objset_t *os, void *arg, cred_t *cr, dmu_tx_t *tx);
 	void *userarg;
-	dsl_dataset_t *clone_parent;
+	dsl_dataset_t *clone_origin;
 	const char *lastname;
 	dmu_objset_type_t type;
 	uint64_t flags;
@@ -585,17 +585,13 @@
 	if (err != ENOENT)
 		return (err ? err : EEXIST);
 
-	if (oa->clone_parent != NULL) {
-		/*
-		 * You can't clone across pools.
-		 */
-		if (oa->clone_parent->ds_dir->dd_pool != dd->dd_pool)
+	if (oa->clone_origin != NULL) {
+		/* You can't clone across pools. */
+		if (oa->clone_origin->ds_dir->dd_pool != dd->dd_pool)
 			return (EXDEV);
 
-		/*
-		 * You can only clone snapshots, not the head datasets.
-		 */
-		if (oa->clone_parent->ds_phys->ds_num_children == 0)
+		/* You can only clone snapshots, not the head datasets. */
+		if (!dsl_dataset_is_snapshot(oa->clone_origin))
 			return (EINVAL);
 	}
 
@@ -607,37 +603,37 @@
 {
 	dsl_dir_t *dd = arg1;
 	struct oscarg *oa = arg2;
-	dsl_dataset_t *ds;
-	blkptr_t *bp;
 	uint64_t dsobj;
 
 	ASSERT(dmu_tx_is_syncing(tx));
 
 	dsobj = dsl_dataset_create_sync(dd, oa->lastname,
-	    oa->clone_parent, oa->flags, cr, tx);
+	    oa->clone_origin, oa->flags, cr, tx);
 
-	VERIFY(0 == dsl_dataset_hold_obj(dd->dd_pool, dsobj, FTAG, &ds));
-	bp = dsl_dataset_get_blkptr(ds);
-	if (BP_IS_HOLE(bp)) {
+	if (oa->clone_origin == NULL) {
+		dsl_dataset_t *ds;
+		blkptr_t *bp;
 		objset_impl_t *osi;
 
-		/* This is an empty dmu_objset; not a clone. */
+		VERIFY(0 == dsl_dataset_hold_obj(dd->dd_pool, dsobj,
+		    FTAG, &ds));
+		bp = dsl_dataset_get_blkptr(ds);
+		ASSERT(BP_IS_HOLE(bp));
+
 		osi = dmu_objset_create_impl(dsl_dataset_get_spa(ds),
 		    ds, bp, oa->type, tx);
 
 		if (oa->userfunc)
 			oa->userfunc(&osi->os, oa->userarg, cr, tx);
+		dsl_dataset_rele(ds, FTAG);
 	}
 
 	spa_history_internal_log(LOG_DS_CREATE, dd->dd_pool->dp_spa,
 	    tx, cr, "dataset = %llu", dsobj);
-
-	dsl_dataset_rele(ds, FTAG);
 }
 
 int
-dmu_objset_create(const char *name, dmu_objset_type_t type,
-    objset_t *clone_parent, uint64_t flags,
+dmu_objset_create(const char *name, dmu_objset_type_t type, uint64_t flags,
     void (*func)(objset_t *os, void *arg, cred_t *cr, dmu_tx_t *tx), void *arg)
 {
 	dsl_dir_t *pdd;
@@ -654,24 +650,39 @@
 		return (EEXIST);
 	}
 
-	dprintf("name=%s\n", name);
-
 	oa.userfunc = func;
 	oa.userarg = arg;
 	oa.lastname = tail;
 	oa.type = type;
 	oa.flags = flags;
 
-	if (clone_parent != NULL) {
-		/*
-		 * You can't clone to a different type.
-		 */
-		if (clone_parent->os->os_phys->os_type != type) {
-			dsl_dir_close(pdd, FTAG);
-			return (EINVAL);
-		}
-		oa.clone_parent = clone_parent->os->os_dsl_dataset;
+	err = dsl_sync_task_do(pdd->dd_pool, dmu_objset_create_check,
+	    dmu_objset_create_sync, pdd, &oa, 5);
+	dsl_dir_close(pdd, FTAG);
+	return (err);
+}
+
+int
+dmu_objset_clone(const char *name, dsl_dataset_t *clone_origin, uint64_t flags)
+{
+	dsl_dir_t *pdd;
+	const char *tail;
+	int err = 0;
+	struct oscarg oa = { 0 };
+
+	ASSERT(strchr(name, '@') == NULL);
+	err = dsl_dir_open(name, FTAG, &pdd, &tail);
+	if (err)
+		return (err);
+	if (tail == NULL) {
+		dsl_dir_close(pdd, FTAG);
+		return (EEXIST);
 	}
+
+	oa.lastname = tail;
+	oa.clone_origin = clone_origin;
+	oa.flags = flags;
+
 	err = dsl_sync_task_do(pdd->dd_pool, dmu_objset_create_check,
 	    dmu_objset_create_sync, pdd, &oa, 5);
 	dsl_dir_close(pdd, FTAG);
@@ -685,10 +696,11 @@
 	int error;
 
 	/*
-	 * If it looks like we'll be able to destroy it, and there's
-	 * an unplayed replay log sitting around, destroy the log.
-	 * It would be nicer to do this in dsl_dataset_destroy_sync(),
-	 * but the replay log objset is modified in open context.
+	 * dsl_dataset_destroy() can free any claimed-but-unplayed
+	 * intent log, but if there is an active log, it has blocks that
+	 * are allocated, but may not yet be reflected in the on-disk
+	 * structure.  Only the ZIL knows how to free them, so we have
+	 * to call into it here.
 	 */
 	error = dmu_objset_open(name, DMU_OST_ANY,
 	    DS_MODE_OWNER|DS_MODE_READONLY|DS_MODE_INCONSISTENT, &os);
@@ -697,43 +709,13 @@
 		zil_destroy(dmu_objset_zil(os), B_FALSE);
 
 		error = dsl_dataset_destroy(ds, os, defer);
-		/*
-		 * dsl_dataset_destroy() closes the ds.
-		 */
+		/* dsl_dataset_destroy() closes the ds. */
 		kmem_free(os, sizeof (objset_t));
 	}
 
 	return (error);
 }
 
-/*
- * This will close the objset.
- */
-int
-dmu_objset_rollback(objset_t *os)
-{
-	int err;
-	dsl_dataset_t *ds;
-
-	ds = os->os->os_dsl_dataset;
-
-	if (!dsl_dataset_tryown(ds, TRUE, os)) {
-		dmu_objset_close(os);
-		return (EBUSY);
-	}
-
-	err = dsl_dataset_rollback(ds, os->os->os_phys->os_type);
-
-	/*
-	 * NB: we close the objset manually because the rollback
-	 * actually implicitly called dmu_objset_evict(), thus freeing
-	 * the objset_impl_t.
-	 */
-	dsl_dataset_disown(ds, os);
-	kmem_free(os, sizeof (objset_t));
-	return (err);
-}
-
 struct snaparg {
 	dsl_sync_task_group_t *dstg;
 	char *snapname;
--- a/usr/src/uts/common/fs/zfs/dmu_send.c	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/uts/common/fs/zfs/dmu_send.c	Mon Aug 10 10:43:48 2009 -0400
@@ -321,31 +321,9 @@
 	dsl_dataset_t *ds; /* the ds to recv into; returned from the syncfunc */
 };
 
-static dsl_dataset_t *
-recv_full_sync_impl(dsl_pool_t *dp, uint64_t dsobj, dmu_objset_type_t type,
-    cred_t *cr, dmu_tx_t *tx)
-{
-	dsl_dataset_t *ds;
-
-	/* This should always work, since we just created it */
-	/* XXX - create should return an owned ds */
-	VERIFY(0 == dsl_dataset_own_obj(dp, dsobj,
-	    DS_MODE_INCONSISTENT, dmu_recv_tag, &ds));
-
-	if (type != DMU_OST_NONE) {
-		(void) dmu_objset_create_impl(dp->dp_spa,
-		    ds, &ds->ds_phys->ds_bp, type, tx);
-	}
-
-	spa_history_internal_log(LOG_DS_REPLAY_FULL_SYNC,
-	    dp->dp_spa, tx, cr, "dataset = %lld", dsobj);
-
-	return (ds);
-}
-
 /* ARGSUSED */
 static int
-recv_full_check(void *arg1, void *arg2, dmu_tx_t *tx)
+recv_new_check(void *arg1, void *arg2, dmu_tx_t *tx)
 {
 	dsl_dir_t *dd = arg1;
 	struct recvbeginsyncarg *rbsa = arg2;
@@ -363,7 +341,7 @@
 		/* make sure it's a snap in the same pool */
 		if (rbsa->origin->ds_dir->dd_pool != dd->dd_pool)
 			return (EXDEV);
-		if (rbsa->origin->ds_phys->ds_num_children == 0)
+		if (!dsl_dataset_is_snapshot(rbsa->origin))
 			return (EINVAL);
 		if (rbsa->origin->ds_phys->ds_guid != rbsa->fromguid)
 			return (ENODEV);
@@ -373,82 +351,31 @@
 }
 
 static void
-recv_full_sync(void *arg1, void *arg2, cred_t *cr, dmu_tx_t *tx)
+recv_new_sync(void *arg1, void *arg2, cred_t *cr, dmu_tx_t *tx)
 {
 	dsl_dir_t *dd = arg1;
 	struct recvbeginsyncarg *rbsa = arg2;
 	uint64_t flags = DS_FLAG_INCONSISTENT | rbsa->dsflags;
 	uint64_t dsobj;
 
+	/* Create and open new dataset. */
 	dsobj = dsl_dataset_create_sync(dd, strrchr(rbsa->tofs, '/') + 1,
 	    rbsa->origin, flags, cr, tx);
-
-	rbsa->ds = recv_full_sync_impl(dd->dd_pool, dsobj,
-	    rbsa->origin ? DMU_OST_NONE : rbsa->type, cr, tx);
-}
-
-static int
-recv_full_existing_check(void *arg1, void *arg2, dmu_tx_t *tx)
-{
-	dsl_dataset_t *ds = arg1;
-	struct recvbeginsyncarg *rbsa = arg2;
-	int err;
-	struct dsl_ds_destroyarg dsda = {0};
-
-	/* must be a head ds */
-	if (ds->ds_phys->ds_next_snap_obj != 0)
-		return (EINVAL);
+	VERIFY(0 == dsl_dataset_own_obj(dd->dd_pool, dsobj,
+	    DS_MODE_INCONSISTENT, dmu_recv_tag, &rbsa->ds));
 
-	/* must not be a clone ds */
-	if (dsl_dir_is_clone(ds->ds_dir))
-		return (EINVAL);
-
-	dsda.ds = ds;
-	err = dsl_dataset_destroy_check(&dsda, rbsa->tag, tx);
-	if (err)
-		return (err);
-
-	if (rbsa->origin) {
-		/* make sure it's a snap in the same pool */
-		if (rbsa->origin->ds_dir->dd_pool != ds->ds_dir->dd_pool)
-			return (EXDEV);
-		if (rbsa->origin->ds_phys->ds_num_children == 0)
-			return (EINVAL);
-		if (rbsa->origin->ds_phys->ds_guid != rbsa->fromguid)
-			return (ENODEV);
+	if (rbsa->origin == NULL) {
+		(void) dmu_objset_create_impl(dd->dd_pool->dp_spa,
+		    rbsa->ds, &rbsa->ds->ds_phys->ds_bp, rbsa->type, tx);
 	}
 
-	return (0);
-}
-
-static void
-recv_full_existing_sync(void *arg1, void *arg2, cred_t *cr, dmu_tx_t *tx)
-{
-	dsl_dataset_t *ds = arg1;
-	struct recvbeginsyncarg *rbsa = arg2;
-	dsl_dir_t *dd = ds->ds_dir;
-	uint64_t flags = DS_FLAG_INCONSISTENT | rbsa->dsflags;
-	uint64_t dsobj;
-	struct dsl_ds_destroyarg dsda = {0};
-
-	/*
-	 * NB: caller must provide an extra hold on the dsl_dir_t, so it
-	 * won't go away when dsl_dataset_destroy_sync() closes the
-	 * dataset.
-	 */
-	dsda.ds = ds;
-	dsl_dataset_destroy_sync(&dsda, rbsa->tag, cr, tx);
-	ASSERT3P(dsda.rm_origin, ==, NULL);
-
-	dsobj = dsl_dataset_create_sync_dd(dd, rbsa->origin, flags, tx);
-
-	rbsa->ds = recv_full_sync_impl(dd->dd_pool, dsobj,
-	    rbsa->origin ? DMU_OST_NONE : rbsa->type, cr, tx);
+	spa_history_internal_log(LOG_DS_REPLAY_FULL_SYNC,
+	    dd->dd_pool->dp_spa, tx, cr, "dataset = %lld", dsobj);
 }
 
 /* ARGSUSED */
 static int
-recv_incremental_check(void *arg1, void *arg2, dmu_tx_t *tx)
+recv_existing_check(void *arg1, void *arg2, dmu_tx_t *tx)
 {
 	dsl_dataset_t *ds = arg1;
 	struct recvbeginsyncarg *rbsa = arg2;
@@ -459,13 +386,17 @@
 	if (!rbsa->force && dsl_dataset_modified_since_lastsnap(ds))
 		return (ETXTBSY);
 
-	/* must already be a snapshot of this fs */
-	if (ds->ds_phys->ds_prev_snap_obj == 0)
-		return (ENODEV);
-
-	/* most recent snapshot must match fromguid */
-	if (ds->ds_prev->ds_phys->ds_guid != rbsa->fromguid)
-		return (ENODEV);
+	if (rbsa->fromguid) {
+		/* if incremental, most recent snapshot must match fromguid */
+		if (ds->ds_prev == NULL)
+			return (ENODEV);
+		if (ds->ds_prev->ds_phys->ds_guid != rbsa->fromguid)
+			return (ENODEV);
+	} else {
+		/* if full, most recent snapshot must be $ORIGIN */
+		if (ds->ds_phys->ds_prev_snap_txg >= TXG_INITIAL)
+			return (ENODEV);
+	}
 
 	/* temporary clone name must not exist */
 	err = zap_lookup(ds->ds_dir->dd_pool->dp_meta_objset,
@@ -488,26 +419,30 @@
 
 /* ARGSUSED */
 static void
-recv_incremental_sync(void *arg1, void *arg2, cred_t *cr, dmu_tx_t *tx)
+recv_existing_sync(void *arg1, void *arg2, cred_t *cr, dmu_tx_t *tx)
 {
 	dsl_dataset_t *ohds = arg1;
 	struct recvbeginsyncarg *rbsa = arg2;
 	dsl_pool_t *dp = ohds->ds_dir->dd_pool;
-	dsl_dataset_t *ods, *cds;
+	dsl_dataset_t *cds;
 	uint64_t flags = DS_FLAG_INCONSISTENT | rbsa->dsflags;
 	uint64_t dsobj;
 
-	/* create the temporary clone */
-	VERIFY(0 == dsl_dataset_hold_obj(dp, ohds->ds_phys->ds_prev_snap_obj,
-	    FTAG, &ods));
-	dsobj = dsl_dataset_create_sync(ohds->ds_dir,
-	    rbsa->clonelastname, ods, flags, cr, tx);
-	dsl_dataset_rele(ods, FTAG);
-
-	/* open the temporary clone */
+	/* create and open the temporary clone */
+	dsobj = dsl_dataset_create_sync(ohds->ds_dir, rbsa->clonelastname,
+	    ohds->ds_prev, flags, cr, tx);
 	VERIFY(0 == dsl_dataset_own_obj(dp, dsobj,
 	    DS_MODE_INCONSISTENT, dmu_recv_tag, &cds));
 
+	/*
+	 * If we actually created a non-clone, we need to create the
+	 * objset in our new dataset.
+	 */
+	if (BP_IS_HOLE(dsl_dataset_get_blkptr(cds))) {
+		(void) dmu_objset_create_impl(dp->dp_spa,
+		    cds, dsl_dataset_get_blkptr(cds), rbsa->type, tx);
+	}
+
 	/* copy the refquota from the target fs to the clone */
 	if (ohds->ds_quota > 0)
 		dsl_dataset_set_quota_sync(cds, &ohds->ds_quota, cr, tx);
@@ -528,7 +463,7 @@
 {
 	int err = 0;
 	boolean_t byteswap;
-	struct recvbeginsyncarg rbsa;
+	struct recvbeginsyncarg rbsa = { 0 };
 	uint64_t version;
 	int flags;
 	dsl_dataset_t *ds;
@@ -573,17 +508,17 @@
 	/*
 	 * Process the begin in syncing context.
 	 */
-	if (rbsa.fromguid && !(flags & DRR_FLAG_CLONE)) {
-		/* incremental receive */
+
+	/* open the dataset we are logically receiving into */
+	err = dsl_dataset_hold(tofs, dmu_recv_tag, &ds);
+	if (err == 0) {
+		/* target fs already exists; recv into temp clone */
 
-		/* tmp clone name is: tofs/%tosnap" */
-		(void) snprintf(rbsa.clonelastname, sizeof (rbsa.clonelastname),
-		    "%%%s", tosnap);
-
-		/* open the dataset we are logically receiving into */
-		err = dsl_dataset_hold(tofs, dmu_recv_tag, &ds);
-		if (err)
-			return (err);
+		/* Can't recv a clone into an existing fs */
+		if (flags & DRR_FLAG_CLONE) {
+			dsl_dataset_rele(ds, dmu_recv_tag);
+			return (EINVAL);
+		}
 
 		/* must not have an incremental recv already in progress */
 		if (!mutex_tryenter(&ds->ds_recvlock)) {
@@ -591,10 +526,12 @@
 			return (EBUSY);
 		}
 
+		/* tmp clone name is: tofs/%tosnap" */
+		(void) snprintf(rbsa.clonelastname, sizeof (rbsa.clonelastname),
+		    "%%%s", tosnap);
 		rbsa.force = force;
 		err = dsl_sync_task_do(ds->ds_dir->dd_pool,
-		    recv_incremental_check,
-		    recv_incremental_sync, ds, &rbsa, 5);
+		    recv_existing_check, recv_existing_sync, ds, &rbsa, 5);
 		if (err) {
 			mutex_exit(&ds->ds_recvlock);
 			dsl_dataset_rele(ds, dmu_recv_tag);
@@ -602,47 +539,36 @@
 		}
 		drc->drc_logical_ds = ds;
 		drc->drc_real_ds = rbsa.ds;
-	} else {
-		/* create new fs -- full backup or clone */
-		dsl_dir_t *dd = NULL;
-		const char *tail;
+	} else if (err == ENOENT) {
+		/* target fs does not exist; must be a full backup or clone */
+		dsl_dataset_t *parent;
+		char *cp;
 
-		err = dsl_dir_open(tofs, FTAG, &dd, &tail);
+		/*
+		 * If it's a non-clone incremental, we are missing the
+		 * target fs, so fail the recv.
+		 */
+		if (rbsa.fromguid && !(flags & DRR_FLAG_CLONE))
+			return (ENOENT);
+
+		/* Open the parent of tofs */
+		cp = strrchr(tofs, '/');
+		*cp = '\0';
+		err = dsl_dataset_hold(tofs, FTAG, &parent);
+		*cp = '/';
 		if (err)
 			return (err);
-		if (tail == NULL) {
-			if (!force) {
-				dsl_dir_close(dd, FTAG);
-				return (EEXIST);
-			}
 
-			rw_enter(&dd->dd_pool->dp_config_rwlock, RW_READER);
-			err = dsl_dataset_own_obj(dd->dd_pool,
-			    dd->dd_phys->dd_head_dataset_obj,
-			    DS_MODE_INCONSISTENT, FTAG, &ds);
-			rw_exit(&dd->dd_pool->dp_config_rwlock);
-			if (err) {
-				dsl_dir_close(dd, FTAG);
-				return (err);
-			}
-
-			dsl_dataset_make_exclusive(ds, FTAG);
-			err = dsl_sync_task_do(dd->dd_pool,
-			    recv_full_existing_check,
-			    recv_full_existing_sync, ds, &rbsa, 5);
-			dsl_dataset_disown(ds, FTAG);
-		} else {
-			err = dsl_sync_task_do(dd->dd_pool, recv_full_check,
-			    recv_full_sync, dd, &rbsa, 5);
-		}
-		dsl_dir_close(dd, FTAG);
+		err = dsl_sync_task_do(ds->ds_dir->dd_pool,
+		    recv_new_check, recv_new_sync, ds->ds_dir, &rbsa, 5);
+		dsl_dataset_rele(parent, FTAG);
 		if (err)
 			return (err);
 		drc->drc_logical_ds = drc->drc_real_ds = rbsa.ds;
 		drc->drc_newfs = B_TRUE;
 	}
 
-	return (0);
+	return (err);
 }
 
 struct restorearg {
@@ -1079,37 +1005,31 @@
 	ds->ds_phys->ds_flags &= ~DS_FLAG_INCONSISTENT;
 }
 
-int
-dmu_recv_end(dmu_recv_cookie_t *drc)
+static int
+dmu_recv_existing_end(dmu_recv_cookie_t *drc)
 {
 	struct recvendsyncarg resa;
 	dsl_dataset_t *ds = drc->drc_logical_ds;
 	int err;
 
 	/*
-	 * XXX hack; seems the ds is still dirty and
-	 * dsl_pool_zil_clean() expects it to have a ds_user_ptr
-	 * (and zil), but clone_swap() can close it.
+	 * XXX hack; seems the ds is still dirty and dsl_pool_zil_clean()
+	 * expects it to have a ds_user_ptr (and zil), but clone_swap()
+	 * can close it.
 	 */
 	txg_wait_synced(ds->ds_dir->dd_pool, 0);
 
-	if (ds != drc->drc_real_ds) {
-		/* we are doing an online recv */
-		if (dsl_dataset_tryown(ds, FALSE, dmu_recv_tag)) {
-			err = dsl_dataset_clone_swap(drc->drc_real_ds, ds,
-			    drc->drc_force);
-			if (err)
-				dsl_dataset_disown(ds, dmu_recv_tag);
-		} else {
-			err = EBUSY;
-			dsl_dataset_rele(ds, dmu_recv_tag);
-		}
-		/* dsl_dataset_destroy() will disown the ds */
+	if (dsl_dataset_tryown(ds, FALSE, dmu_recv_tag)) {
+		err = dsl_dataset_clone_swap(drc->drc_real_ds, ds,
+		    drc->drc_force);
+		if (err)
+			goto out;
+	} else {
+		mutex_exit(&ds->ds_recvlock);
+		dsl_dataset_rele(ds, dmu_recv_tag);
 		(void) dsl_dataset_destroy(drc->drc_real_ds, dmu_recv_tag,
 		    B_FALSE);
-		mutex_exit(&drc->drc_logical_ds->ds_recvlock);
-		if (err)
-			return (err);
+		return (EBUSY);
 	}
 
 	resa.creation_time = drc->drc_drrb->drr_creation_time;
@@ -1119,17 +1039,52 @@
 	err = dsl_sync_task_do(ds->ds_dir->dd_pool,
 	    recv_end_check, recv_end_sync, ds, &resa, 3);
 	if (err) {
-		if (drc->drc_newfs) {
-			ASSERT(ds == drc->drc_real_ds);
-			(void) dsl_dataset_destroy(ds, dmu_recv_tag,
-			    B_FALSE);
-			return (err);
-		} else {
-			(void) dsl_dataset_rollback(ds, DMU_OST_NONE);
-		}
+		/* swap back */
+		(void) dsl_dataset_clone_swap(drc->drc_real_ds, ds, B_TRUE);
 	}
 
-	/* release the hold from dmu_recv_begin */
+out:
+	mutex_exit(&ds->ds_recvlock);
 	dsl_dataset_disown(ds, dmu_recv_tag);
+	(void) dsl_dataset_destroy(drc->drc_real_ds, dmu_recv_tag, B_FALSE);
 	return (err);
 }
+
+static int
+dmu_recv_new_end(dmu_recv_cookie_t *drc)
+{
+	struct recvendsyncarg resa;
+	dsl_dataset_t *ds = drc->drc_logical_ds;
+	int err;
+
+	/*
+	 * XXX hack; seems the ds is still dirty and dsl_pool_zil_clean()
+	 * expects it to have a ds_user_ptr (and zil), but clone_swap()
+	 * can close it.
+	 */
+	txg_wait_synced(ds->ds_dir->dd_pool, 0);
+
+	resa.creation_time = drc->drc_drrb->drr_creation_time;
+	resa.toguid = drc->drc_drrb->drr_toguid;
+	resa.tosnap = drc->drc_tosnap;
+
+	err = dsl_sync_task_do(ds->ds_dir->dd_pool,
+	    recv_end_check, recv_end_sync, ds, &resa, 3);
+	if (err) {
+		/* clean up the fs we just recv'd into */
+		(void) dsl_dataset_destroy(ds, dmu_recv_tag, B_FALSE);
+	} else {
+		/* release the hold from dmu_recv_begin */
+		dsl_dataset_disown(ds, dmu_recv_tag);
+	}
+	return (err);
+}
+
+int
+dmu_recv_end(dmu_recv_cookie_t *drc)
+{
+	if (drc->drc_logical_ds != drc->drc_real_ds)
+		return (dmu_recv_existing_end(drc));
+	else
+		return (dmu_recv_new_end(drc));
+}
--- a/usr/src/uts/common/fs/zfs/dsl_dataset.c	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/uts/common/fs/zfs/dsl_dataset.c	Mon Aug 10 10:43:48 2009 -0400
@@ -45,8 +45,6 @@
 
 static dsl_checkfunc_t dsl_dataset_destroy_begin_check;
 static dsl_syncfunc_t dsl_dataset_destroy_begin_sync;
-static dsl_checkfunc_t dsl_dataset_rollback_check;
-static dsl_syncfunc_t dsl_dataset_rollback_sync;
 static dsl_syncfunc_t dsl_dataset_set_reservation_sync;
 
 #define	DS_REF_MAX	(1ULL << 62)
@@ -244,8 +242,6 @@
 
 	ASSERT(ds->ds_owner == NULL || DSL_DATASET_IS_DESTROYED(ds));
 
-	dprintf_ds(ds, "evicting %s\n", "");
-
 	unique_remove(ds->ds_fsid_guid);
 
 	if (ds->ds_user_ptr != NULL)
@@ -867,15 +863,11 @@
 	dsl_dataset_t *ds;
 	int err;
 	char *dsname;
-	size_t buflen;
-
-	/* alloc a buffer to hold name@snapname, plus the terminating NULL */
-	buflen = strlen(name) + strlen(da->snapname) + 2;
-	dsname = kmem_alloc(buflen, KM_SLEEP);
-	(void) snprintf(dsname, buflen, "%s@%s", name, da->snapname);
+
+	dsname = kmem_asprintf("%s@%s", name, da->snapname);
 	err = dsl_dataset_own(dsname, DS_MODE_READONLY | DS_MODE_INCONSISTENT,
 	    da->dstg, &ds);
-	kmem_free(dsname, buflen);
+	strfree(dsname);
 	if (err == 0) {
 		struct dsl_ds_destroyarg *dsda;
 
@@ -1181,25 +1173,6 @@
 	return (err);
 }
 
-int
-dsl_dataset_rollback(dsl_dataset_t *ds, dmu_objset_type_t ost)
-{
-	int err;
-
-	ASSERT(ds->ds_owner);
-
-	dsl_dataset_make_exclusive(ds, ds->ds_owner);
-	err = dsl_sync_task_do(ds->ds_dir->dd_pool,
-	    dsl_dataset_rollback_check, dsl_dataset_rollback_sync,
-	    ds, &ost, 0);
-	/* drop exclusive access */
-	mutex_enter(&ds->ds_lock);
-	rw_exit(&ds->ds_rwlock);
-	cv_broadcast(&ds->ds_exclusive_cv);
-	mutex_exit(&ds->ds_lock);
-	return (err);
-}
-
 void *
 dsl_dataset_set_user_ptr(dsl_dataset_t *ds,
     void *p, dsl_dataset_evict_func_t func)
@@ -1345,145 +1318,6 @@
 
 /* ARGSUSED */
 static int
-dsl_dataset_rollback_check(void *arg1, void *arg2, dmu_tx_t *tx)
-{
-	dsl_dataset_t *ds = arg1;
-	dmu_objset_type_t *ost = arg2;
-
-	/*
-	 * We can only roll back to emptyness if it is a ZPL objset.
-	 */
-	if (*ost != DMU_OST_ZFS &&
-	    ds->ds_phys->ds_prev_snap_txg < TXG_INITIAL)
-		return (EINVAL);
-
-	/*
-	 * This must not be a snapshot.
-	 */
-	if (ds->ds_phys->ds_next_snap_obj != 0)
-		return (EINVAL);
-
-	/*
-	 * If we made changes this txg, traverse_dataset won't find
-	 * them.  Try again.
-	 */
-	if (ds->ds_phys->ds_bp.blk_birth >= tx->tx_txg)
-		return (EAGAIN);
-
-	return (0);
-}
-
-/* ARGSUSED */
-static void
-dsl_dataset_rollback_sync(void *arg1, void *arg2, cred_t *cr, dmu_tx_t *tx)
-{
-	dsl_dataset_t *ds = arg1;
-	dmu_objset_type_t *ost = arg2;
-	objset_t *mos = ds->ds_dir->dd_pool->dp_meta_objset;
-
-	dmu_buf_will_dirty(ds->ds_dbuf, tx);
-
-	if (ds->ds_user_ptr != NULL) {
-		/*
-		 * We need to make sure that the objset_impl_t is reopened after
-		 * we do the rollback, otherwise it will have the wrong
-		 * objset_phys_t.  Normally this would happen when this
-		 * dataset-open is closed, thus causing the
-		 * dataset to be immediately evicted.  But when doing "zfs recv
-		 * -F", we reopen the objset before that, so that there is no
-		 * window where the dataset is closed and inconsistent.
-		 */
-		ds->ds_user_evict_func(ds, ds->ds_user_ptr);
-		ds->ds_user_ptr = NULL;
-	}
-
-	/* Transfer space that was freed since last snap back to the head. */
-	{
-		uint64_t used;
-
-		VERIFY(0 == bplist_space_birthrange(&ds->ds_deadlist,
-		    ds->ds_origin_txg, UINT64_MAX, &used));
-		dsl_dir_transfer_space(ds->ds_dir, used,
-		    DD_USED_SNAP, DD_USED_HEAD, tx);
-	}
-
-	/* Zero out the deadlist. */
-	bplist_close(&ds->ds_deadlist);
-	bplist_destroy(mos, ds->ds_phys->ds_deadlist_obj, tx);
-	ds->ds_phys->ds_deadlist_obj =
-	    bplist_create(mos, DSL_DEADLIST_BLOCKSIZE, tx);
-	VERIFY(0 == bplist_open(&ds->ds_deadlist, mos,
-	    ds->ds_phys->ds_deadlist_obj));
-
-	{
-		/*
-		 * Free blkptrs that we gave birth to - this covers
-		 * claimed but not played log blocks too.
-		 */
-		zio_t *zio;
-		struct killarg ka;
-
-		zio = zio_root(tx->tx_pool->dp_spa, NULL, NULL,
-		    ZIO_FLAG_MUSTSUCCEED);
-		ka.ds = ds;
-		ka.zio = zio;
-		ka.tx = tx;
-		(void) traverse_dataset(ds, ds->ds_phys->ds_prev_snap_txg,
-		    TRAVERSE_POST, kill_blkptr, &ka);
-		(void) zio_wait(zio);
-	}
-
-	ASSERT(!DS_UNIQUE_IS_ACCURATE(ds) || ds->ds_phys->ds_unique_bytes == 0);
-
-	if (ds->ds_prev && ds->ds_prev != ds->ds_dir->dd_pool->dp_origin_snap) {
-		/* Change our contents to that of the prev snapshot */
-
-		ASSERT3U(ds->ds_prev->ds_object, ==,
-		    ds->ds_phys->ds_prev_snap_obj);
-		ASSERT3U(ds->ds_phys->ds_used_bytes, <=,
-		    ds->ds_prev->ds_phys->ds_used_bytes);
-
-		ds->ds_phys->ds_bp = ds->ds_prev->ds_phys->ds_bp;
-		ds->ds_phys->ds_used_bytes =
-		    ds->ds_prev->ds_phys->ds_used_bytes;
-		ds->ds_phys->ds_compressed_bytes =
-		    ds->ds_prev->ds_phys->ds_compressed_bytes;
-		ds->ds_phys->ds_uncompressed_bytes =
-		    ds->ds_prev->ds_phys->ds_uncompressed_bytes;
-		ds->ds_phys->ds_flags = ds->ds_prev->ds_phys->ds_flags;
-
-		if (ds->ds_prev->ds_phys->ds_next_snap_obj == ds->ds_object) {
-			dmu_buf_will_dirty(ds->ds_prev->ds_dbuf, tx);
-			ds->ds_prev->ds_phys->ds_unique_bytes = 0;
-		}
-	} else {
-		objset_impl_t *osi;
-
-		ASSERT(*ost != DMU_OST_ZVOL);
-		ASSERT3U(ds->ds_phys->ds_used_bytes, ==, 0);
-		ASSERT3U(ds->ds_phys->ds_compressed_bytes, ==, 0);
-		ASSERT3U(ds->ds_phys->ds_uncompressed_bytes, ==, 0);
-
-		bzero(&ds->ds_phys->ds_bp, sizeof (blkptr_t));
-		ds->ds_phys->ds_flags = 0;
-		ds->ds_phys->ds_unique_bytes = 0;
-		if (spa_version(ds->ds_dir->dd_pool->dp_spa) >=
-		    SPA_VERSION_UNIQUE_ACCURATE)
-			ds->ds_phys->ds_flags |= DS_FLAG_UNIQUE_ACCURATE;
-
-		osi = dmu_objset_create_impl(ds->ds_dir->dd_pool->dp_spa, ds,
-		    &ds->ds_phys->ds_bp, *ost, tx);
-#ifdef _KERNEL
-		zfs_create_fs(&osi->os, kcred, NULL, tx);
-#endif
-	}
-
-	spa_history_internal_log(LOG_DS_ROLLBACK, ds->ds_dir->dd_pool->dp_spa,
-	    tx, cr, "dataset = %llu", ds->ds_object);
-}
-
-/* ARGSUSED */
-static int
 dsl_dataset_destroy_begin_check(void *arg1, void *arg2, dmu_tx_t *tx)
 {
 	dsl_dataset_t *ds = arg1;
@@ -1991,7 +1825,7 @@
 			origin->ds_user_ptr = NULL;
 		}
 
-		dsl_dataset_rele(origin, tag);
+		dsl_dataset_rele(origin, ds);
 		ds->ds_prev = NULL;
 
 		ndsda.ds = origin;
@@ -3002,9 +2836,11 @@
 	if (csa->cds->ds_prev != csa->ohds->ds_prev)
 		return (EINVAL);
 
-	/* cds should be the clone */
-	if (csa->cds->ds_prev->ds_phys->ds_next_snap_obj !=
-	    csa->ohds->ds_object)
+	/* cds should be the clone (unless they are unrelated) */
+	if (csa->cds->ds_prev != NULL &&
+	    csa->cds->ds_prev != csa->cds->ds_dir->dd_pool->dp_origin_snap &&
+	    csa->ohds->ds_object !=
+	    csa->cds->ds_prev->ds_phys->ds_next_snap_obj)
 		return (EINVAL);
 
 	/* the clone should be a child of the origin */
@@ -3042,7 +2878,6 @@
 
 	dmu_buf_will_dirty(csa->cds->ds_dbuf, tx);
 	dmu_buf_will_dirty(csa->ohds->ds_dbuf, tx);
-	dmu_buf_will_dirty(csa->cds->ds_prev->ds_dbuf, tx);
 
 	if (csa->cds->ds_user_ptr != NULL) {
 		csa->cds->ds_user_evict_func(csa->cds, csa->cds->ds_user_ptr);
@@ -3055,10 +2890,16 @@
 		csa->ohds->ds_user_ptr = NULL;
 	}
 
-	/* reset origin's unique bytes */
-	VERIFY(0 == bplist_space_birthrange(&csa->cds->ds_deadlist,
-	    csa->cds->ds_prev->ds_phys->ds_prev_snap_txg, UINT64_MAX,
-	    &csa->cds->ds_prev->ds_phys->ds_unique_bytes));
+	/*
+	 * Reset origin's unique bytes, if it exists.
+	 */
+	if (csa->cds->ds_prev) {
+		dsl_dataset_t *origin = csa->cds->ds_prev;
+		dmu_buf_will_dirty(origin->ds_dbuf, tx);
+		VERIFY(0 == bplist_space_birthrange(&csa->cds->ds_deadlist,
+		    origin->ds_phys->ds_prev_snap_txg, UINT64_MAX,
+		    &origin->ds_phys->ds_unique_bytes));
+	}
 
 	/* swap blkptrs */
 	{
@@ -3144,8 +2985,10 @@
 }
 
 /*
- * Swap 'clone' with its origin head file system.  Used at the end
- * of "online recv" to swizzle the file system to the new version.
+ * Swap 'clone' with its origin head datasets.  Used at the end of "zfs
+ * recv" into an existing fs to swizzle the file system to the new
+ * version, and by "zfs rollback".  Can also be used to swap two
+ * independent head datasets if neither has any snapshots.
  */
 int
 dsl_dataset_clone_swap(dsl_dataset_t *clone, dsl_dataset_t *origin_head,
@@ -3470,6 +3313,7 @@
 	char *htag;
 	char *snapname;
 	boolean_t recursive;
+	boolean_t gotone;
 	char failed[MAXPATHLEN];
 };
 
@@ -3480,15 +3324,13 @@
 	dsl_dataset_t *ds;
 	int error;
 	char *name;
-	size_t buflen;
 
 	/* alloc a buffer to hold dsname@snapname plus terminating NULL */
-	buflen = strlen(dsname) + strlen(ha->snapname) + 2;
-	name = kmem_alloc(buflen, KM_SLEEP);
-	(void) snprintf(name, buflen, "%s@%s", dsname, ha->snapname);
+	name = kmem_asprintf("%s@%s", dsname, ha->snapname);
 	error = dsl_dataset_hold(name, ha->dstg, &ds);
-	kmem_free(name, buflen);
+	strfree(name);
 	if (error == 0) {
+		ha->gotone = B_TRUE;
 		dsl_sync_task_create(ha->dstg, dsl_dataset_user_hold_check,
 		    dsl_dataset_user_hold_sync, ds, ha->htag, 0);
 	} else if (error == ENOENT && ha->recursive) {
@@ -3542,6 +3384,9 @@
 		dsl_dataset_rele(ds, ha->dstg);
 	}
 
+	if (error == 0 && recursive && !ha->gotone)
+		error = ENOENT;
+
 	if (error)
 		(void) strcpy(dsname, ha->failed);
 
@@ -3673,7 +3518,6 @@
 	int error;
 	void *dtag = ha->dstg;
 	char *name;
-	size_t buflen;
 	boolean_t own = B_FALSE;
 	boolean_t might_destroy;
 
@@ -3681,17 +3525,17 @@
 		return (ENAMETOOLONG);
 
 	/* alloc a buffer to hold dsname@snapname, plus the terminating NULL */
-	buflen = strlen(dsname) + strlen(ha->snapname) + 2;
-	name = kmem_alloc(buflen, KM_SLEEP);
-	(void) snprintf(name, buflen, "%s@%s", dsname, ha->snapname);
+	name = kmem_asprintf("%s@%s", dsname, ha->snapname);
 	error = dsl_dataset_hold(name, dtag, &ds);
-	kmem_free(name, buflen);
+	strfree(name);
 	if (error == ENOENT && ha->recursive)
 		return (0);
 	(void) strcpy(ha->failed, dsname);
 	if (error)
 		return (error);
 
+	ha->gotone = B_TRUE;
+
 	ASSERT(dsl_dataset_is_snapshot(ds));
 
 	error = dsl_dataset_release_might_destroy(ds, ha->htag, &might_destroy);
@@ -3781,6 +3625,9 @@
 		kmem_free(ra, sizeof (struct dsl_ds_releasearg));
 	}
 
+	if (error == 0 && recursive && !ha->gotone)
+		error = ENOENT;
+
 	if (error)
 		(void) strcpy(dsname, ha->failed);
 
--- a/usr/src/uts/common/fs/zfs/sys/dmu.h	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/uts/common/fs/zfs/sys/dmu.h	Mon Aug 10 10:43:48 2009 -0400
@@ -172,12 +172,12 @@
     objset_t **osp);
 void dmu_objset_close(objset_t *os);
 int dmu_objset_evict_dbufs(objset_t *os);
-int dmu_objset_create(const char *name, dmu_objset_type_t type,
-    objset_t *clone_parent, uint64_t flags,
+int dmu_objset_create(const char *name, dmu_objset_type_t type, uint64_t flags,
     void (*func)(objset_t *os, void *arg, cred_t *cr, dmu_tx_t *tx), void *arg);
+int dmu_objset_clone(const char *name, struct dsl_dataset *clone_origin,
+    uint64_t flags);
 int dmu_objset_destroy(const char *name, boolean_t defer);
 int dmu_snapshots_destroy(char *fsname, char *snapname, boolean_t defer);
-int dmu_objset_rollback(objset_t *os);
 int dmu_objset_snapshot(char *fsname, char *snapname, struct nvlist *props,
     boolean_t recursive);
 int dmu_objset_rename(const char *name, const char *newname,
--- a/usr/src/uts/common/fs/zfs/sys/dmu_objset.h	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/uts/common/fs/zfs/sys/dmu_objset.h	Mon Aug 10 10:43:48 2009 -0400
@@ -114,11 +114,11 @@
 int dmu_objset_open(const char *name, dmu_objset_type_t type, int mode,
     objset_t **osp);
 void dmu_objset_close(objset_t *os);
-int dmu_objset_create(const char *name, dmu_objset_type_t type,
-    objset_t *clone_parent, uint64_t flags,
+int dmu_objset_create(const char *name, dmu_objset_type_t type, uint64_t flags,
     void (*func)(objset_t *os, void *arg, cred_t *cr, dmu_tx_t *tx), void *arg);
+int dmu_objset_clone(const char *name, struct dsl_dataset *clone_origin,
+    uint64_t flags);
 int dmu_objset_destroy(const char *name, boolean_t defer);
-int dmu_objset_rollback(objset_t *os);
 int dmu_objset_snapshot(char *fsname, char *snapname, nvlist_t *props,
     boolean_t recursive);
 void dmu_objset_stats(objset_t *os, nvlist_t *nv);
--- a/usr/src/uts/common/fs/zfs/sys/dsl_dataset.h	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/uts/common/fs/zfs/sys/dsl_dataset.h	Mon Aug 10 10:43:48 2009 -0400
@@ -195,7 +195,6 @@
 dsl_syncfunc_t dsl_dataset_destroy_sync;
 dsl_checkfunc_t dsl_dataset_snapshot_check;
 dsl_syncfunc_t dsl_dataset_snapshot_sync;
-int dsl_dataset_rollback(dsl_dataset_t *ds, dmu_objset_type_t ost);
 int dsl_dataset_rename(char *name, const char *newname, boolean_t recursive);
 int dsl_dataset_promote(const char *name);
 int dsl_dataset_clone_swap(dsl_dataset_t *clone, dsl_dataset_t *origin_head,
--- a/usr/src/uts/common/fs/zfs/zfs_ioctl.c	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/uts/common/fs/zfs/zfs_ioctl.c	Mon Aug 10 10:43:48 2009 -0400
@@ -2406,14 +2406,12 @@
 			return (error);
 		}
 
-		error = dmu_objset_create(zc->zc_name, type, clone, 0,
-		    NULL, NULL);
+		error = dmu_objset_clone(zc->zc_name, dmu_objset_ds(clone), 0);
+		dmu_objset_close(clone);
 		if (error) {
-			dmu_objset_close(clone);
 			nvlist_free(nvprops);
 			return (error);
 		}
-		dmu_objset_close(clone);
 	} else {
 		boolean_t is_insensitive = B_FALSE;
 
@@ -2470,7 +2468,7 @@
 				return (error);
 			}
 		}
-		error = dmu_objset_create(zc->zc_name, type, NULL,
+		error = dmu_objset_create(zc->zc_name, type,
 		    is_insensitive ? DS_FLAG_CI_DATASET : 0, cbfunc, &zct);
 		nvlist_free(zct.zct_zplprops);
 	}
@@ -2617,19 +2615,42 @@
 static int
 zfs_ioc_rollback(zfs_cmd_t *zc)
 {
-	objset_t *os;
+	dsl_dataset_t *ds, *clone;
 	int error;
-	zfsvfs_t *zfsvfs = NULL;
+	zfsvfs_t *zfsvfs;
+	char *clone_name;
+
+	error = dsl_dataset_hold(zc->zc_name, FTAG, &ds);
+	if (error)
+		return (error);
+
+	/* must not be a snapshot */
+	if (dsl_dataset_is_snapshot(ds)) {
+		dsl_dataset_rele(ds, FTAG);
+		return (EINVAL);
+	}
+
+	/* must have a most recent snapshot */
+	if (ds->ds_phys->ds_prev_snap_txg < TXG_INITIAL) {
+		dsl_dataset_rele(ds, FTAG);
+		return (EINVAL);
+	}
 
 	/*
-	 * Get the zfsvfs for the receiving objset. There
-	 * won't be one if we're operating on a zvol, if the
-	 * objset doesn't exist yet, or is not mounted.
+	 * Create clone of most recent snapshot.
 	 */
-	error = dmu_objset_open(zc->zc_name, DMU_OST_ANY, DS_MODE_USER, &os);
+	clone_name = kmem_asprintf("%s/%%rollback", zc->zc_name);
+	error = dmu_objset_clone(clone_name, ds->ds_prev, DS_FLAG_INCONSISTENT);
 	if (error)
-		return (error);
-
+		goto out;
+
+	error = dsl_dataset_own(clone_name, DS_MODE_INCONSISTENT, FTAG, &clone);
+	if (error)
+		goto out;
+
+	/*
+	 * Do clone swap.
+	 */
 	if (getzfsvfs(zc->zc_name, &zfsvfs) == 0) {
 		int mode;
 
@@ -2637,18 +2658,37 @@
 		if (error == 0) {
 			int resume_err;
 
-			error = dmu_objset_rollback(os);
+			if (dsl_dataset_tryown(ds, B_FALSE, FTAG)) {
+				error = dsl_dataset_clone_swap(clone, ds,
+				    B_TRUE);
+				dsl_dataset_disown(ds, FTAG);
+				ds = NULL;
+			} else {
+				error = EBUSY;
+			}
 			resume_err = zfs_resume_fs(zfsvfs, zc->zc_name, mode);
 			error = error ? error : resume_err;
-		} else {
-			dmu_objset_close(os);
 		}
 		VFS_RELE(zfsvfs->z_vfs);
 	} else {
-		error = dmu_objset_rollback(os);
+		if (dsl_dataset_tryown(ds, B_FALSE, FTAG)) {
+			error = dsl_dataset_clone_swap(clone, ds, B_TRUE);
+			dsl_dataset_disown(ds, FTAG);
+			ds = NULL;
+		} else {
+			error = EBUSY;
+		}
 	}
-	/* Note, the dmu_objset_rollback() releases the objset for us. */
-
+
+	/*
+	 * Destroy clone (which also closes it).
+	 */
+	(void) dsl_dataset_destroy(clone, FTAG, B_FALSE);
+
+out:
+	strfree(clone_name);
+	if (ds)
+		dsl_dataset_rele(ds, FTAG);
 	return (error);
 }
 
--- a/usr/src/uts/common/fs/zfs/zfs_znode.c	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/uts/common/fs/zfs/zfs_znode.c	Mon Aug 10 10:43:48 2009 -0400
@@ -202,11 +202,8 @@
 	nzp->z_dbuf = ozp->z_dbuf;
 
 	/*
-	 * Release any cached ACL, since it *may* have
-	 * zfs_acl_node_t's that directly references an
-	 * embedded ACL in the zp_acl of the old znode_phys_t
-	 *
-	 * It will be recached the next time the ACL is needed.
+	 * Since this is just an idle znode and kmem is already dealing with
+	 * memory pressure, release any cached ACL.
 	 */
 	if (ozp->z_acl_cached) {
 		zfs_acl_free(ozp->z_acl_cached);
@@ -571,6 +568,7 @@
 	mutex_enter(&zp->z_lock);
 
 	ASSERT(zp->z_dbuf == NULL);
+	ASSERT(zp->z_acl_cached == NULL);
 	zp->z_dbuf = db;
 	nzp = dmu_buf_set_user_ie(db, zp, &zp->z_phys, znode_evict_error);
 
@@ -1003,6 +1001,13 @@
 		return (EIO);
 	}
 
+	mutex_enter(&zp->z_acl_lock);
+	if (zp->z_acl_cached) {
+		zfs_acl_free(zp->z_acl_cached);
+		zp->z_acl_cached = NULL;
+	}
+	mutex_exit(&zp->z_acl_lock);
+
 	zfs_znode_dmu_init(zfsvfs, zp, db);
 	zp->z_unlinked = (zp->z_phys->zp_links == 0);
 	zp->z_blksz = doi.doi_data_block_size;
--- a/usr/src/uts/common/fs/zfs/zvol.c	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/uts/common/fs/zfs/zvol.c	Mon Aug 10 10:43:48 2009 -0400
@@ -435,7 +435,6 @@
 	int ds_mode = DS_MODE_OWNER;
 	vnode_t *vp = NULL;
 	char *devpath;
-	size_t devpathlen = strlen(ZVOL_FULL_DEV_DIR) + strlen(name) + 1;
 	char chrbuf[30], blkbuf[30];
 	int error;
 
@@ -468,13 +467,9 @@
 	 * If there's an existing /dev/zvol symlink, try to use the
 	 * same minor number we used last time.
 	 */
-	devpath = kmem_alloc(devpathlen, KM_SLEEP);
-
-	(void) sprintf(devpath, "%s%s", ZVOL_FULL_DEV_DIR, name);
-
+	devpath = kmem_asprintf("%s%s", ZVOL_FULL_DEV_DIR, name);
 	error = lookupname(devpath, UIO_SYSSPACE, NO_FOLLOW, NULL, &vp);
-
-	kmem_free(devpath, devpathlen);
+	strfree(devpath);
 
 	if (error == 0 && vp->v_type != VLNK)
 		error = EINVAL;
@@ -1612,14 +1607,11 @@
 	vnode_t *vp;
 	boolean_t ret = B_FALSE;
 	char *devpath;
-	size_t devpathlen;
 	int error;
 
-	devpathlen = strlen(ZVOL_FULL_DEV_DIR) + strlen(zv->zv_name) + 1;
-	devpath = kmem_alloc(devpathlen, KM_SLEEP);
-	(void) sprintf(devpath, "%s%s", ZVOL_FULL_DEV_DIR, zv->zv_name);
+	devpath = kmem_asprintf("%s%s", ZVOL_FULL_DEV_DIR, zv->zv_name);
 	error = lookupname(devpath, UIO_SYSSPACE, FOLLOW, NULLVPP, &vp);
-	kmem_free(devpath, devpathlen);
+	strfree(devpath);
 
 	ret = !error && IS_SWAPVP(common_specvp(vp));
 
--- a/usr/src/uts/common/inet/wifi_ioctl.h	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/uts/common/inet/wifi_ioctl.h	Mon Aug 10 10:43:48 2009 -0400
@@ -19,7 +19,7 @@
  * CDDL HEADER END
  */
 /*
- * Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
+ * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
  * Use is subject to license terms.
  */
 
@@ -30,8 +30,6 @@
 #ifndef	__WIFI_IOCTL_H
 #define	__WIFI_IOCTL_H
 
-#pragma ident	"%Z%%M%	%I%	%E% SMI"
-
 #include <sys/types.h>
 
 #ifdef	__cplusplus
@@ -262,6 +260,7 @@
 	uint32_t wl_ofdm_subtype;
 	uint32_t wl_ofdm_frequency;
 	uint32_t wl_ofdm_freq_supported;
+	boolean_t wl_ofdm_ht_enabled;
 } wl_ofdm_t;
 
 typedef struct wl_erp {
@@ -277,6 +276,7 @@
 	boolean_t wl_erp_dsss_ofdm_enabled;
 	boolean_t wl_erp_have_sst;
 	boolean_t wl_erp_sst_enabled;
+	boolean_t wl_erp_ht_enabled;
 } wl_erp_t;
 
 typedef union wl_phy_conf {
--- a/usr/src/uts/common/io/arn/arn_core.h	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/uts/common/io/arn/arn_core.h	Mon Aug 10 10:43:48 2009 -0400
@@ -359,11 +359,6 @@
 #define	WME_BA_BMP_SIZE		64
 #define	WME_MAX_BA		WME_BA_BMP_SIZE
 #define	ATH_TID_MAX_BUFS	(2 * WME_MAX_BA)
-#define	TID_TO_WME_AC(_tid)				\
-	((((_tid) == 0) || ((_tid) == 3)) ? WME_AC_BE :	\
-	(((_tid) == 1) || ((_tid) == 2)) ? WME_AC_BK :	\
-	(((_tid) == 4) || ((_tid) == 5)) ? WME_AC_VI :	\
-	WME_AC_VO)
 
 /* Wireless Multimedia Extension Defines */
 #define	WME_AC_BE	0 /* best effort */
--- a/usr/src/uts/common/io/bscv.c	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/uts/common/io/bscv.c	Mon Aug 10 10:43:48 2009 -0400
@@ -82,7 +82,6 @@
 static int bscv_getinfo(dev_info_t *, ddi_info_cmd_t, void *, void **);
 static int bscv_attach(dev_info_t *, ddi_attach_cmd_t);
 static int bscv_detach(dev_info_t *, ddi_detach_cmd_t);
-static int bscv_reset(dev_info_t *, ddi_reset_cmd_t);
 static int bscv_quiesce(dev_info_t *);
 static int bscv_map_regs(bscv_soft_state_t *);
 static void bscv_unmap_regs(bscv_soft_state_t *);
@@ -370,7 +369,7 @@
 	nulldev,		/* devo_probe */
 	bscv_attach,		/* devo_attach */
 	bscv_detach,		/* devo_detach */
-	bscv_reset,		/* devo_reset */
+	nodev,			/* devo_reset */
 	&bscv_cb_ops,		/* devo_cb_ops */
 	(struct bus_ops *)0,	/* devo_bus_ops */
 	NULL,			/* devo_power */
@@ -754,25 +753,6 @@
 }
 
 /*
- * function	- bscv_reset
- * description	- routine that implements the obsolete devo_reset entry point.
- *		  MAN page declares that devo_quiesce subsumes devo_reset
- *		  functionality.
- * inputs	- device information structure, DDI_RESET command
- * outputs	- DDI_SUCCESS or DDI_FAILURE
- */
-static int
-bscv_reset(dev_info_t *dip, ddi_reset_cmd_t cmd)
-{
-	switch (cmd) {
-	case DDI_RESET_FORCE:
-		return (bscv_quiesce(dip));
-	default:
-		return (DDI_FAILURE);
-	}
-}
-
-/*
  * quiesce(9E) entry point.
  *
  * This function is called when the system is single-threaded at high
--- a/usr/src/uts/common/io/comstar/port/fcoet/fcoet.c	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/uts/common/io/comstar/port/fcoet/fcoet.c	Mon Aug 10 10:43:48 2009 -0400
@@ -453,6 +453,8 @@
 	client_fcoet.ect_port_event = fcoet_port_event;
 	client_fcoet.ect_release_sol_frame = fcoet_release_sol_frame;
 	client_fcoet.ect_client_port_struct = ss;
+	client_fcoet.ect_fcoe_ver = FCOE_VER_NOW;
+	FCOET_LOG(__FUNCTION__, "version: %x %x", FCOE_VER_NOW, fcoe_ver_now);
 	ret = ddi_prop_get_int(DDI_DEV_T_ANY, ss->ss_dip,
 	    DDI_PROP_DONTPASS | DDI_PROP_NOTPROM, "mac_id", -1);
 	if (ret == -1) {
--- a/usr/src/uts/common/io/comstar/port/fcoet/fcoet.h	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/uts/common/io/comstar/port/fcoet/fcoet.h	Mon Aug 10 10:43:48 2009 -0400
@@ -33,7 +33,7 @@
 
 #ifdef	_KERNEL
 
-#define	FCOET_VERSION	"v20090311-1.00"
+#define	FCOET_VERSION	"v20090729-1.01"
 #define	FCOET_NAME	"COMSTAR FCoET "
 #define	FCOET_MOD_NAME	FCOET_NAME FCOET_VERSION
 
--- a/usr/src/uts/common/io/comstar/port/fcoet/fcoet_eth.c	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/uts/common/io/comstar/port/fcoet/fcoet_eth.c	Mon Aug 10 10:43:48 2009 -0400
@@ -540,9 +540,11 @@
 
 	bcopy(frm->frm_payload, dbuf->db_sglist[sge_idx].seg_addr,
 	    frm->frm_payload_size);
+	atomic_add_16(&dbuf->db_sglist_length, 1);
 
 	xch->xch_left_data_size -= frm->frm_payload_size;
-	if (xch->xch_left_data_size <= 0) {
+	if ((xch->xch_left_data_size <= 0) ||
+	    dbuf->db_sglist_length >= FCOET_GET_SEG_NUM(dbuf)) {
 		fc_st = FCT_SUCCESS;
 		iof = 0;
 		dbuf->db_xfer_status = fc_st;
--- a/usr/src/uts/common/io/comstar/port/fcoet/fcoet_fc.c	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/uts/common/io/comstar/port/fcoet/fcoet_fc.c	Mon Aug 10 10:43:48 2009 -0400
@@ -234,6 +234,7 @@
 		 * If it's write type command, we need send xfer_rdy now
 		 * We may need to consider bidirectional command later
 		 */
+		dbuf->db_sglist_length = 0;
 		frm = CMD2SS(cmd)->ss_eport->eport_alloc_frame(
 		    CMD2SS(cmd)->ss_eport, sizeof (fcoe_fcp_xfer_rdy_t) +
 		    FCFH_SIZE, NULL);
--- a/usr/src/uts/common/io/comstar/port/fct/fct.c	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/uts/common/io/comstar/port/fct/fct.c	Mon Aug 10 10:43:48 2009 -0400
@@ -743,6 +743,30 @@
 }
 
 static int
+fct_forcelip(uint8_t *port_wwn, uint32_t *fctio_errno)
+{
+	fct_status_t		 rval;
+	fct_i_local_port_t	*iport;
+
+	mutex_enter(&fct_global_mutex);
+	iport = fct_get_iport_per_wwn(port_wwn);
+	mutex_exit(&fct_global_mutex);
+	if (iport == NULL) {
+		return (-1);
+	}
+
+	iport->iport_port->port_ctl(iport->iport_port,
+	    FCT_CMD_FORCE_LIP, &rval);
+	if (rval != FCT_SUCCESS) {
+		*fctio_errno = FCTIO_FAILURE;
+	} else {
+		*fctio_errno = 0;
+	}
+
+	return (0);
+}
+
+static int
 fct_fctiocmd(intptr_t data, int mode)
 {
 	int ret	 = 0;
@@ -885,6 +909,10 @@
 		break;
 		}
 
+	case FCTIO_FORCE_LIP:
+		ret = fct_forcelip((uint8_t *)ibuf, &fctio->fctio_errno);
+		break;
+
 	default:
 		break;
 	}
--- a/usr/src/uts/common/io/comstar/port/qlt/qlt.c	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/uts/common/io/comstar/port/qlt/qlt.c	Mon Aug 10 10:43:48 2009 -0400
@@ -1646,18 +1646,38 @@
 	return (ret);
 }
 
+static fct_status_t
+qlt_force_lip(qlt_state_t *qlt)
+{
+	mbox_cmd_t	*mcp;
+	fct_status_t	 rval;
+
+	mcp = qlt_alloc_mailbox_command(qlt, 0);
+	mcp->to_fw[0] = 0x0072;
+	mcp->to_fw[1] = BIT_4;
+	mcp->to_fw[3] = 1;
+	mcp->to_fw_mask |= BIT_1 | BIT_3;
+	rval = qlt_mailbox_command(qlt, mcp);
+	if (rval != FCT_SUCCESS) {
+		QLT_LOG(qlt->qlt_port_alias, "qlt FLIP MB failed: rval=%x");
+	} else {
+		if (mcp->from_fw[0] != 0x4000) {
+			QLT_LOG(qlt->qlt_port_alias, "qlt FLIP: fw[0]=%x",
+			    mcp->from_fw[0]);
+			rval = FCT_FAILURE;
+		}
+	}
+	qlt_free_mailbox_command(qlt, mcp);
+	return (rval);
+}
+
 static void
 qlt_ctl(struct fct_local_port *port, int cmd, void *arg)
 {
-	stmf_change_status_t		st;
+	stmf_change_status_t		 st;
 	stmf_state_change_info_t	*ssci = (stmf_state_change_info_t *)arg;
 	qlt_state_t			*qlt;
 
-	ASSERT((cmd == FCT_CMD_PORT_ONLINE) ||
-	    (cmd == FCT_CMD_PORT_OFFLINE) ||
-	    (cmd == FCT_ACK_PORT_ONLINE_COMPLETE) ||
-	    (cmd == FCT_ACK_PORT_OFFLINE_COMPLETE));
-
 	qlt = (qlt_state_t *)port->port_fca_private;
 	st.st_completion_status = FCT_SUCCESS;
 	st.st_additional_info = NULL;
@@ -1727,6 +1747,15 @@
 			}
 		}
 		break;
+
+	case FCT_CMD_FORCE_LIP:
+		*((fct_status_t *)arg) = qlt_force_lip(qlt);
+		QLT_LOG(qlt->qlt_port_alias, "qlt_ctl: forcelip done");
+		break;
+
+	default:
+		QLT_LOG(qlt->qlt_port_alias, "qlt_ctl: unsupport-0x%02X", cmd);
+		break;
 	}
 }
 
--- a/usr/src/uts/common/io/fcoe/fcoe.c	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/uts/common/io/fcoe/fcoe.c	Mon Aug 10 10:43:48 2009 -0400
@@ -195,7 +195,7 @@
 	ddi_quiesce_not_needed
 };
 
-#define	FCOE_VERSION	"20090311-1.00"
+#define	FCOE_VERSION	"20090729-1.01"
 #define	FCOE_NAME	"FCoE Transport v" FCOE_VERSION
 #define	TASKQ_NAME_LEN	32
 
@@ -223,6 +223,7 @@
 /*
  * Driver's global variables
  */
+const fcoe_ver_e	 fcoe_ver_now	  = FCOE_VER_NOW;
 static void		*fcoe_state	  = NULL;
 fcoe_soft_state_t	*fcoe_global_ss	  = NULL;
 int			 fcoe_use_ext_log = 1;
@@ -409,23 +410,19 @@
 static int
 fcoe_initchild(dev_info_t *fcoe_dip, dev_info_t *client_dip)
 {
-	char		 name[32];
-	static int	 inicounter = 0;
-	static int	 tgtcounter = 0;
-	int		*counter;
+	char	client_addr[FCOE_STR_LEN];
+	int	rval;
 
-	if (strcmp(ddi_driver_name(client_dip), FCOET_DRIVER_NAME) == 0) {
-		counter = &tgtcounter;
-		tgtcounter++;
-	} else {
-		counter = &inicounter;
-		inicounter++;
+	rval = ddi_prop_get_int(DDI_DEV_T_ANY, client_dip,
+	    DDI_PROP_DONTPASS | DDI_PROP_NOTPROM, "mac_id", -1);
+	if (rval == -1) {
+		FCOE_LOG(__FUNCTION__, "no mac_id property: %p", client_dip);
+		return (DDI_FAILURE);
 	}
 
-	bzero(name, 32);
-	(void) sprintf((char *)name, "%x,0", *counter);
-	ddi_set_name_addr(client_dip, name);
-
+	bzero(client_addr, FCOE_STR_LEN);
+	(void) sprintf((char *)client_addr, "%x,0", rval);
+	ddi_set_name_addr(client_dip, client_addr);
 	return (DDI_SUCCESS);
 }
 
@@ -778,11 +775,9 @@
 		mutex_enter(&ss->ss_ioctl_mutex);
 		ret = fcoe_delete_port(ss->ss_dip, fcoeio,
 		    del_port_param->fdp_mac_linkid, is_target);
-		if (ret != 0) {
-			FCOE_LOG("fcoe",
-			    "fcoe_delete_port failed: %d", ret);
-		}
 		mutex_exit(&ss->ss_ioctl_mutex);
+		FCOE_LOG("fcoe", "fcoe_delete_port %x return: %d",
+		    del_port_param->fdp_mac_linkid, ret);
 		break;
 	}
 
@@ -818,8 +813,8 @@
 		return (ENOTTY);
 	}
 
-	FCOE_LOG("fcoe", "fcoe_ioctl returned %d, fcoeio_status = %d",
-	    ret, fcoeio->fcoeio_status);
+	FCOE_LOG("fcoe", "fcoe_ioctl %x returned %d, fcoeio_status = %d",
+	    fcoeio->fcoeio_cmd, ret, fcoeio->fcoeio_status);
 
 fcoeiocmd_release_buf:
 	if (ret == 0) {
--- a/usr/src/uts/common/io/fcoe/fcoe.h	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/uts/common/io/fcoe/fcoe.h	Mon Aug 10 10:43:48 2009 -0400
@@ -156,6 +156,7 @@
 
 #define	FCOE_MAC_FLAG_ENABLED		0x01
 #define	FCOE_MAC_FLAG_BOUND		0x02
+#define	FCOE_MAC_FLAG_USER_DEL		0x04
 
 typedef struct fcoe_frame_header {
 	uint8_t		 ffh_ver[1];	/* version field - upper 4 bits */
--- a/usr/src/uts/common/io/fcoe/fcoe_eth.c	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/uts/common/io/fcoe/fcoe_eth.c	Mon Aug 10 10:43:48 2009 -0400
@@ -199,6 +199,9 @@
 	    mac_stat_get(mac->fm_handle, MAC_STAT_LINK_UP)?
 	    FCOE_MAC_LINK_STATE_UP:FCOE_MAC_LINK_STATE_DOWN;
 
+	mac->fm_eport.eport_link_speed =
+	    mac_client_stat_get(mac->fm_cli_handle, MAC_STAT_IFSPEED);
+
 	/*
 	 * Add a notify function so that we get updates from MAC
 	 */
@@ -259,6 +262,7 @@
 		frame_size = raw_frame_size - PADDING_SIZE;
 		frm = fcoe_allocate_frame(&mac->fm_eport, frame_size, mp);
 		if (frm != NULL) {
+			frm->frm_clock = CURRENT_CLOCK;
 			fcoe_post_frame(frm);
 		}
 
@@ -290,7 +294,6 @@
 			mac->fm_eport.eport_link_speed =
 			    mac_client_stat_get(mac->fm_cli_handle,
 			    MAC_STAT_IFSPEED);
-
 			(void) fcoe_mac_set_address(&mac->fm_eport,
 			    mac->fm_primary_addr, B_FALSE);
 
--- a/usr/src/uts/common/io/fcoe/fcoe_fc.c	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/uts/common/io/fcoe/fcoe_fc.c	Mon Aug 10 10:43:48 2009 -0400
@@ -72,7 +72,11 @@
 	fcoe_mac_t	*mac;
 	fcoe_port_t	*eport;
 
-	ASSERT(MUTEX_HELD(&fcoe_global_ss->ss_ioctl_mutex));
+	if (client->ect_fcoe_ver != fcoe_ver_now) {
+		cmn_err(CE_WARN, "FCoE modules version mismatch, "
+		    "fail registering client.");
+		return (NULL);
+	}
 
 	/*
 	 * We will not come here, when someone is changing ss_mac_list,
@@ -131,8 +135,6 @@
 {
 	fcoe_mac_t	*mac = EPORT2MAC(eport);
 
-	ASSERT(MUTEX_HELD(&fcoe_global_ss->ss_ioctl_mutex));
-
 	/*
 	 * Wait for all the related frame to be freed, this should be fast
 	 * because before deregister fcoei/fcoet will make sure its port
@@ -144,6 +146,11 @@
 	}
 
 	atomic_and_32(&EPORT2MAC(eport)->fm_flags, ~FCOE_MAC_FLAG_BOUND);
+	atomic_and_32(&mac->fm_eport.eport_flags, ~EPORT_FLAG_MAC_IN_USE);
+	if (!(EPORT2MAC(eport)->fm_flags & FCOE_MAC_FLAG_USER_DEL)) {
+		(void) fcoe_close_mac(mac);
+		fcoe_destroy_mac(mac);
+	}
 }
 
 /* ARGSUSED */
@@ -466,14 +473,21 @@
 	}
 
 	*is_target = EPORT_CLT_TYPE(&mac->fm_eport);
-
 	if ((mac->fm_flags & FCOE_MAC_FLAG_ENABLED) != FCOE_MAC_FLAG_ENABLED) {
 		fcoeio->fcoeio_status = FCOEIOE_ALREADY;
 		return (EALREADY);
 	}
 
+	if (!(mac->fm_flags & FCOE_MAC_FLAG_BOUND)) {
+		/*
+		 * It means that deferred detach has finished
+		 * of last delete operation
+		 */
+		goto skip_devi_offline;
+	}
+
 	atomic_and_32(&mac->fm_eport.eport_flags, ~EPORT_FLAG_MAC_IN_USE);
-
+	mac->fm_flags |= FCOE_MAC_FLAG_USER_DEL;
 	rval = ndi_devi_offline(mac->fm_client_dev, NDI_DEVI_REMOVE);
 	if (rval != NDI_SUCCESS) {
 		FCOE_LOG("fcoe", "fcoe%d: offline_driver %s failed",
@@ -485,6 +499,8 @@
 		fcoeio->fcoeio_status = FCOEIOE_OFFLINE_FAILURE;
 		return (EBUSY);
 	}
+
+skip_devi_offline:
 	(void) fcoe_close_mac(mac);
 	fcoe_destroy_mac(mac);
 	return (0);
--- a/usr/src/uts/common/io/fibre-channel/fca/emlxs/emlxs_els.c	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/uts/common/io/fibre-channel/fca/emlxs/emlxs_els.c	Mon Aug 10 10:43:48 2009 -0400
@@ -1523,7 +1523,11 @@
 emlxs_handle_unsol_prlo(emlxs_port_t *port, RING *rp, IOCBQ *iocbq,
     MATCHMAP *mp, uint32_t size)
 {
+#ifdef ULP_PATCH4
+#ifdef ULP_PATCH6
 	emlxs_hba_t *hba = HBA;
+#endif /* ULP_PATCH6 */
+#endif /* ULP_PATCH4 */
 	IOCB *iocb;
 	uint32_t sid;
 #ifndef ULP_PATCH4
--- a/usr/src/uts/common/io/fibre-channel/fca/emlxs/emlxs_fct.c	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/uts/common/io/fibre-channel/fca/emlxs/emlxs_fct.c	Mon Aug 10 10:43:48 2009 -0400
@@ -213,7 +213,7 @@
 
 #ifdef MODSYM_SUPPORT
 
-static int
+extern int
 emlxs_fct_modopen()
 {
 	int err;
@@ -913,10 +913,6 @@
 	if (!hba->tgt_mode) {
 		return;
 	}
-#ifdef MODSYM_SUPPORT
-	/* Open COMSTAR */
-	(void) emlxs_fct_modopen();
-#endif /* MODSYM_SUPPORT */
 
 	/* Check if COMSTAR is present */
 	if (((void *)MODSYM(stmf_alloc) == NULL) ||
--- a/usr/src/uts/common/io/fibre-channel/fca/emlxs/emlxs_solaris.c	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/uts/common/io/fibre-channel/fca/emlxs/emlxs_solaris.c	Mon Aug 10 10:43:48 2009 -0400
@@ -1114,8 +1114,30 @@
 		return (ret);
 	}
 
+#ifdef MODSYM_SUPPORT
+	/* Open SFS */
+	(void) emlxs_fca_modopen();
+#ifdef SFCT_SUPPORT
+	/* Open FCT */
+	(void) emlxs_fct_modopen();
+#endif /* SFCT_SUPPORT */
+#endif /* MODSYM_SUPPORT */
+
+	/* Setup devops for SFS */
+	MODSYM(fc_fca_init)(&emlxs_ops);
+
 	if ((ret = mod_install(&emlxs_modlinkage)) != 0) {
 		(void) ddi_soft_state_fini(&emlxs_soft_state);
+#ifdef MODSYM_SUPPORT
+		/* Close SFS */
+		emlxs_fca_modclose();
+#ifdef SFCT_SUPPORT
+		/* Close FCT */
+		emlxs_fct_modclose();
+#endif /* SFCT_SUPPORT */
+#endif /* MODSYM_SUPPORT */
+
+		return (ret);
 	}
 
 #ifdef SAN_DIAG_SUPPORT
@@ -5542,10 +5564,6 @@
 	if (!hba->ini_mode) {
 		return;
 	}
-#ifdef MODSYM_SUPPORT
-	/* Open SFS */
-	(void) emlxs_fca_modopen();
-#endif /* MODSYM_SUPPORT */
 
 	/* Check if SFS present */
 	if (((void *)MODSYM(fc_fca_init) == NULL) ||
@@ -5555,9 +5573,6 @@
 		goto failed;
 	}
 
-	/* Setup devops for SFS */
-	MODSYM(fc_fca_init)(&emlxs_ops);
-
 	/* Check if our SFS driver interface matches the current SFS stack */
 	if (MODSYM(fc_fca_attach) (hba->dip, hba->fca_tran) != DDI_SUCCESS) {
 		EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_attach_debug_msg,
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/usr/src/uts/common/io/fibre-channel/fca/fcoei/fcoei.c	Mon Aug 10 10:43:48 2009 -0400
@@ -0,0 +1,1130 @@
+/*
+ * CDDL HEADER START
+ *
+ * The contents of this file are subject to the terms of the
+ * Common Development and Distribution License (the "License").
+ * You may not use this file except in compliance with the License.
+ *
+ * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+ * or http://www.opensolaris.org/os/licensing.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL HEADER in each
+ * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+ * If applicable, add the following below this CDDL HEADER, with the
+ * fields enclosed by brackets "[]" replaced with your own identifying
+ * information: Portions Copyright [yyyy] [name of copyright owner]
+ *
+ * CDDL HEADER END
+ */
+
+/*
+ * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
+ * Use is subject to license terms.
+ */
+
+#include <sys/conf.h>
+#include <sys/ddi.h>
+#include <sys/stat.h>
+#include <sys/pci.h>
+#include <sys/sunddi.h>
+#include <sys/modctl.h>
+#include <sys/file.h>
+#include <sys/cred.h>
+#include <sys/byteorder.h>
+#include <sys/atomic.h>
+#include <sys/scsi/scsi.h>
+#include <sys/mac_client.h>
+#include <sys/modhash.h>
+
+/*
+ * leadville header files
+ */
+#include <sys/fibre-channel/fc.h>
+#include <sys/fibre-channel/impl/fc_fcaif.h>
+
+/*
+ * fcoe header files
+ */
+#include <sys/fcoe/fcoe_common.h>
+
+/*
+ * fcoei header files
+ */
+#include <fcoei.h>
+
+/*
+ * forward declaration of stack functions
+ */
+static uint32_t fcoei_xch_check(
+	mod_hash_key_t key, mod_hash_val_t *val, void *arg);
+static int fcoei_attach(dev_info_t *dip, ddi_attach_cmd_t cmd);
+static int fcoei_detach(dev_info_t *dip, ddi_detach_cmd_t cmd);
+static int fcoei_open(dev_t *devp, int flag, int otype, cred_t *credp);
+static int fcoei_close(dev_t dev, int flag, int otype, cred_t *credp);
+static int fcoei_ioctl(
+	dev_t dev, int cmd, intptr_t data, int mode, cred_t *credp, int *rval);
+static int fcoei_attach_init(fcoei_soft_state_t *ss);
+static int fcoei_detach_uninit(fcoei_soft_state_t *ss);
+static void fcoei_watchdog(void *arg);
+static void fcoei_process_events(fcoei_soft_state_t *ss);
+static void fcoei_trigger_fp_attach(void *arg);
+static void fcoei_abts_exchange(fcoei_exchange_t *xch);
+static void fcoei_clear_watchdog_jobs(fcoei_soft_state_t *ss);
+
+/*
+ * Driver identificaton stuff
+ */
+static struct cb_ops fcoei_cb_ops = {
+	fcoei_open,
+	fcoei_close,
+	nodev,
+	nodev,
+	nodev,
+	nodev,
+	nodev,
+	fcoei_ioctl,
+	nodev,
+	nodev,
+	nodev,
+	nochpoll,
+	ddi_prop_op,
+	0,
+	D_MP | D_NEW | D_HOTPLUG,
+	CB_REV,
+	nodev,
+	nodev
+};
+
+static struct dev_ops fcoei_ops = {
+	DEVO_REV,
+	0,
+	nodev,
+	nulldev,
+	nulldev,
+	fcoei_attach,
+	fcoei_detach,
+	nodev,
+	&fcoei_cb_ops,
+	NULL,
+	ddi_power,
+	ddi_quiesce_not_needed
+};
+
+static struct modldrv modldrv = {
+	&mod_driverops,
+	FCOEI_NAME_VERSION,
+	&fcoei_ops,
+};
+
+static struct modlinkage modlinkage = {
+	MODREV_1,
+	&modldrv,
+	NULL
+};
+
+/*
+ * Driver's global variables
+ */
+void	*fcoei_state	   = NULL;
+int	 fcoei_use_ext_log = 0;
+
+/*
+ * Common loadable module entry points _init, _fini, _info
+ */
+int
+_init(void)
+{
+	int ret;
+
+	ret = ddi_soft_state_init(&fcoei_state, sizeof (fcoei_soft_state_t), 0);
+	if (ret != DDI_SUCCESS) {
+		FCOEI_LOG(__FUNCTION__, "soft state init failed: %x", ret);
+		return (ret);
+	}
+
+	ret = mod_install(&modlinkage);
+	if (ret != 0) {
+		ddi_soft_state_fini(&fcoei_state);
+		FCOEI_LOG(__FUNCTION__, "fcoei mod_install failed: %x", ret);
+		return (ret);
+	}
+
+	/*
+	 * Let FCTL initialize devo_bus_ops
+	 */
+	fc_fca_init(&fcoei_ops);
+
+	FCOEI_LOG(__FUNCTION__, "fcoei _init succeeded");
+	return (ret);
+}
+
+int
+_fini(void)
+{
+	int ret;
+
+	ret = mod_remove(&modlinkage);
+	if (ret != 0) {
+		FCOEI_EXT_LOG(__FUNCTION__, "fcoei mod_remove failed: %x", ret);
+		return (ret);
+	}
+
+	ddi_soft_state_fini(&fcoei_state);
+	FCOEI_LOG(__FUNCTION__, "fcoei _fini succeeded");
+	return (ret);
+}
+
+int
+_info(struct modinfo *modinfop)
+{
+	return (mod_info(&modlinkage, modinfop));
+}
+
+/*
+ * Autoconfiguration entry points: attach, detach, getinfo
+ */
+
+static int
+fcoei_attach(dev_info_t *dip, ddi_attach_cmd_t cmd)
+{
+	int			 ret;
+	int			 fcoe_ret;
+	int			 instance;
+	fcoei_soft_state_t	*ss;
+
+	instance = ddi_get_instance(dip);
+	FCOEI_LOG(__FUNCTION__, "instance is %d", instance);
+	switch (cmd) {
+	case DDI_ATTACH:
+		ret = ddi_soft_state_zalloc(fcoei_state, instance);
+		if (ret != DDI_SUCCESS) {
+			FCOEI_LOG(__FUNCTION__, "ss zalloc failed: %x", ret);
+			return (ret);
+		}
+
+		/*
+		 * Get the soft state, and do basic initialization with dip
+		 */
+		ss = ddi_get_soft_state(fcoei_state, instance);
+		ss->ss_dip = dip;
+
+		fcoe_ret = fcoei_attach_init(ss);
+		if (fcoe_ret != FCOE_SUCCESS) {
+			ddi_soft_state_free(fcoei_state, instance);
+			FCOEI_LOG(__FUNCTION__, "fcoei_attach_init failed: "
+			    "%x", fcoe_ret);
+			return (DDI_FAILURE);
+		}
+
+		ss->ss_flags |= SS_FLAG_TRIGGER_FP_ATTACH;
+		(void) timeout(fcoei_trigger_fp_attach, ss, FCOE_SEC2TICK(1));
+		FCOEI_LOG(__FUNCTION__, "fcoei_attach succeeded: dip-%p, "
+		    "cmd-%x", dip, cmd);
+		return (DDI_SUCCESS);
+
+	case DDI_RESUME:
+		return (DDI_SUCCESS);
+
+	default:
+		FCOEI_LOG(__FUNCTION__, "unsupported attach cmd-%X", cmd);
+		return (DDI_FAILURE);
+	}
+}
+
+static int
+fcoei_detach(dev_info_t *dip, ddi_detach_cmd_t cmd)
+{
+	int			 fcoe_ret;
+	int			 instance;
+	fcoei_soft_state_t	*ss;
+
+	instance = ddi_get_instance(dip);
+	ss = ddi_get_soft_state(fcoei_state, instance);
+	if (ss == NULL) {
+		FCOEI_LOG(__FUNCTION__, "get ss failed: dip-%p", dip);
+		return (DDI_FAILURE);
+	}
+
+	switch (cmd) {
+	case DDI_DETACH:
+		if (ss->ss_flags & SS_FLAG_TRIGGER_FP_ATTACH) {
+			FCOEI_LOG(__FUNCTION__, "still await fp attach");
+			return (DDI_FAILURE);
+		}
+
+		if (ss->ss_flags & SS_FLAG_LV_BOUND) {
+			FCOEI_LOG(__FUNCTION__, "fp is not detached yet");
+			return (DDI_FAILURE);
+		}
+
+		fcoe_ret = fcoei_detach_uninit(ss);
+		if (fcoe_ret != FCOE_SUCCESS) {
+			FCOEI_LOG(__FUNCTION__, "fcoei_detach_uninit failed:"
+			    " dip-%p, fcoe_ret-%d", dip, fcoe_ret);
+			return (DDI_FAILURE);
+		}
+
+		FCOEI_LOG(__FUNCTION__, "succeeded: dip-%p, cmd-%x", dip, cmd);
+		return (DDI_SUCCESS);
+
+	case DDI_SUSPEND:
+		return (DDI_SUCCESS);
+
+	default:
+		FCOEI_LOG(__FUNCTION__, "unspported detach cmd-%X", cmd);
+		return (DDI_FAILURE);
+	}
+}
+
+/*
+ * Device access entry points: open, close, ioctl
+ */
+
+static int
+fcoei_open(dev_t *devp, int flag, int otype, cred_t *credp)
+{
+	fcoei_soft_state_t	*ss;
+
+	if (otype != OTYP_CHR) {
+		FCOEI_LOG(__FUNCTION__, "flag: %x", flag);
+		return (EINVAL);
+	}
+
+	if (drv_priv(credp)) {
+		return (EPERM);
+	}
+
+	/*
+	 * First of all, get related soft state
+	 */
+	ss = ddi_get_soft_state(fcoei_state, (int)getminor(*devp));
+	if (ss == NULL) {
+		return (ENXIO);
+	}
+
+	mutex_enter(&ss->ss_ioctl_mutex);
+	if (ss->ss_ioctl_flags & FCOEI_IOCTL_FLAG_OPEN) {
+		/*
+		 * We don't support concurrent open
+		 */
+		mutex_exit(&ss->ss_ioctl_mutex);
+		return (EBUSY);
+	}
+
+	ss->ss_ioctl_flags |= FCOEI_IOCTL_FLAG_OPEN;
+	mutex_exit(&ss->ss_ioctl_mutex);
+
+	return (0);
+}
+
+static int
+fcoei_close(dev_t dev, int flag, int otype, cred_t *credp)
+{
+	fcoei_soft_state_t	*ss;
+
+	if (otype != OTYP_CHR) {
+		FCOEI_LOG(__FUNCTION__, "flag: %x, %p", flag, credp);
+		return (EINVAL);
+	}
+
+	/*
+	 * First of all, get related soft state
+	 */
+	ss = ddi_get_soft_state(fcoei_state, (int)getminor(dev));
+	if (ss == NULL) {
+		return (ENXIO);
+	}
+
+	mutex_enter(&ss->ss_ioctl_mutex);
+	if (!(ss->ss_ioctl_flags & FCOEI_IOCTL_FLAG_OPEN)) {
+		/*
+		 * If it's not open, we can exit
+		 */
+
+		mutex_exit(&ss->ss_ioctl_mutex);
+		return (ENODEV);
+	}
+
+	ss->ss_ioctl_flags &= ~FCOEI_IOCTL_FLAG_OPEN;
+	mutex_exit(&ss->ss_ioctl_mutex);
+
+	return (0);
+}
+
+static int
+fcoei_ioctl(dev_t dev, int cmd, intptr_t data, int mode,
+    cred_t *credp, int *rval)
+{
+	fcoei_soft_state_t	*ss;
+	int			 ret = 0;
+
+	if (drv_priv(credp) != 0) {
+		FCOEI_LOG(__FUNCTION__, "data: %p, %x", data, mode);
+		return (EPERM);
+	}
+
+	/*
+	 * Get related soft state
+	 */
+	ss = ddi_get_soft_state(fcoei_state, (int32_t)getminor(dev));
+	if (!ss) {
+		return (ENXIO);
+	}
+
+	/*
+	 * Process ioctl
+	 */
+	switch (cmd) {
+
+	default:
+		FCOEI_LOG(__FUNCTION__, "ioctl-0x%02X", cmd);
+		ret = ENOTTY;
+	}
+
+	/*
+	 * Set return value
+	 */
+	*rval = ret;
+	return (ret);
+}
+
+/*
+ * fcoei_attach_init
+ *	init related stuff of the soft state
+ *
+ * Input:
+ *	ss = the soft state that will be processed
+ *
+ * Return:
+ *	if it succeeded or not
+ *
+ * Comment:
+ *	N/A
+ */
+static int
+fcoei_attach_init(fcoei_soft_state_t *ss)
+{
+	fcoe_port_t		*eport;
+	fcoe_client_t		 client_fcoei;
+	char			 taskq_name[32];
+	int			 ret;
+	la_els_logi_t		*els = &ss->ss_els_logi;
+	svc_param_t		*class3_param;
+
+	/*
+	 * Register fcoei to FCOE as its client
+	 */
+	client_fcoei.ect_eport_flags = EPORT_FLAG_INI_MODE |
+	    EPORT_FLAG_IS_DIRECT_P2P;
+	client_fcoei.ect_max_fc_frame_size = FCOE_MAX_FC_FRAME_SIZE;
+	client_fcoei.ect_private_frame_struct_size = sizeof (fcoei_frame_t);
+	fcoei_init_ect_vectors(&client_fcoei);
+	client_fcoei.ect_client_port_struct = ss;
+	client_fcoei.ect_fcoe_ver = FCOE_VER_NOW;
+	FCOEI_LOG(__FUNCTION__, "version: %x %x", FCOE_VER_NOW, fcoe_ver_now);
+	ret = ddi_prop_get_int(DDI_DEV_T_ANY, ss->ss_dip,
+	    DDI_PROP_DONTPASS | DDI_PROP_NOTPROM, "mac_id", -1);
+	if (ret == -1) {
+		FCOEI_LOG(__FUNCTION__, "get mac_id failed");
+		return (DDI_FAILURE);
+	} else {
+		client_fcoei.ect_channelid = ret;
+	}
+
+	/*
+	 * It's fcoe's responsiblity to initialize eport's all elements,
+	 * so we needn't do eport initialization
+	 */
+	eport = fcoe_register_client(&client_fcoei);
+	if (eport == NULL) {
+		goto fail_register_client;
+	} else {
+		ss->ss_eport = eport;
+		FCOE_SET_DEFAULT_FPORT_ADDR(eport->eport_efh_dst);
+	}
+
+	/*
+	 * Now it's time to register fca_tran to FCTL
+	 * Remember fc_local_port is transparent to FCA (fcoei)
+	 */
+	ss->ss_fca_tran.fca_version  = FCTL_FCA_MODREV_5;
+	ss->ss_fca_tran.fca_numports = 1;
+	ss->ss_fca_tran.fca_pkt_size = sizeof (fcoei_exchange_t);
+	ss->ss_fca_tran.fca_cmd_max  = 2048;
+
+	/*
+	 * scsi_tran_hba_setup could need these stuff
+	 */
+	ss->ss_fca_tran.fca_dma_lim  = NULL;
+	ss->ss_fca_tran.fca_iblock   = NULL;
+	ss->ss_fca_tran.fca_dma_attr = NULL;
+	ss->ss_fca_tran.fca_acc_attr = NULL;
+
+	/*
+	 * Initialize vectors
+	 */
+	fcoei_init_fcatran_vectors(&ss->ss_fca_tran);
+
+	/*
+	 * fc_fca_attach only sets driver's private, it has nothing to with
+	 * common port object between fcoei and leadville.
+	 * After this attach, fp_attach will be triggered, and it will call
+	 * fca_bind_port to let fcoei to know about common port object.
+	 */
+	if (fc_fca_attach(ss->ss_dip, &ss->ss_fca_tran) != DDI_SUCCESS) {
+		goto fail_fca_attach;
+	}
+
+	/*
+	 * It's time to do ss initialization
+	 */
+	ret = ddi_create_minor_node(ss->ss_dip, "admin",
+	    S_IFCHR, ddi_get_instance(ss->ss_dip), DDI_NT_NEXUS, 0);
+	if (ret != DDI_SUCCESS) {
+		goto fail_minor_node;
+	}
+
+	ss->ss_flags	   = 0;
+	ss->ss_port	   = NULL;
+	/*
+	 * ss->ss_eport has been initialized
+	 */
+
+	ss->ss_sol_oxid_hash = mod_hash_create_idhash(
+	    "fcoei_sol_oxid_hash", FCOEI_SOL_HASH_SIZE,
+	    mod_hash_null_valdtor);
+	ss->ss_unsol_rxid_hash = mod_hash_create_idhash(
+	    "fcoei_unsol_rxid_hash", FCOEI_UNSOL_HASH_SIZE,
+	    mod_hash_null_valdtor);
+	list_create(&ss->ss_comp_xch_list, sizeof (fcoei_exchange_t),
+	    offsetof(fcoei_exchange_t, xch_comp_node));
+	ss->ss_next_sol_oxid   = 0xFFFF;
+	ss->ss_next_unsol_rxid = 0xFFFF;
+
+	mutex_init(&ss->ss_watchdog_mutex, 0, MUTEX_DRIVER, 0);
+	cv_init(&ss->ss_watchdog_cv, NULL, CV_DRIVER, NULL);
+	(void) snprintf(taskq_name, 32, "leadville_fcoei_%d_taskq",
+	    ddi_get_instance(ss->ss_dip));
+	taskq_name[31] = 0;
+	ss->ss_taskq = ddi_taskq_create(ss->ss_dip,
+	    taskq_name, 64, TASKQ_DEFAULTPRI, DDI_SLEEP);
+
+	ss->ss_link_state	  = FC_STATE_OFFLINE;
+	ss->ss_link_speed	  = 0;
+	ss->ss_port_event_counter = 0;
+
+	list_create(&ss->ss_event_list, sizeof (fcoei_event_t),
+	    offsetof(fcoei_event_t, ae_node));
+
+	ss->ss_sol_cnt1   = 0;
+	ss->ss_sol_cnt2   = 0;
+	ss->ss_sol_cnt	   = &ss->ss_sol_cnt1;
+	ss->ss_unsol_cnt1 = 0;
+	ss->ss_unsol_cnt2 = 0;
+	ss->ss_unsol_cnt  = &ss->ss_unsol_cnt1;
+	ss->ss_ioctl_flags = 0;
+
+	mutex_init(&ss->ss_ioctl_mutex, 0, MUTEX_DRIVER, 0);
+
+	bcopy(eport->eport_portwwn, els->nport_ww_name.raw_wwn, 8);
+	bcopy(eport->eport_nodewwn, els->node_ww_name.raw_wwn, 8);
+	els->common_service.fcph_version = 0x2008;
+	els->common_service.btob_credit = 3;
+	els->common_service.cmn_features = 0x8800;
+	els->common_service.conc_sequences = 0xff;
+	els->common_service.relative_offset = 3;
+	els->common_service.e_d_tov = 0x07d0;
+	class3_param = (svc_param_t *)&els->class_3;
+	class3_param->class_opt = 0x8800;
+	class3_param->rcv_size = els->common_service.rx_bufsize = 2048;
+	class3_param->conc_sequences = 0xff;
+	class3_param->open_seq_per_xchng = 1;
+
+	/*
+	 * Fill out RNID Management Information
+	 */
+	bcopy(ss->ss_eport->eport_portwwn, ss->ss_rnid.global_id, 8);
+	ss->ss_rnid.unit_type  = FCOEI_RNID_HBA;
+	ss->ss_rnid.ip_version = FCOEI_RNID_IPV4;
+
+	/*
+	 * Start our watchdog
+	 */
+	(void) ddi_taskq_dispatch(ss->ss_taskq,
+	    fcoei_watchdog, ss, DDI_SLEEP);
+	while (!(ss->ss_flags & SS_FLAG_WATCHDOG_RUNNING)) {
+		delay(50);
+	}
+
+	/*
+	 * Report the device to the system
+	 */
+	ddi_report_dev(ss->ss_dip);
+	return (DDI_SUCCESS);
+
+
+fail_minor_node:
+	FCOEI_LOG(__FUNCTION__, "fail_minor_node");
+	fc_fca_detach(ss->ss_dip);
+
+fail_fca_attach:
+	eport->eport_deregister_client(eport);
+	FCOEI_LOG(__FUNCTION__, "fail_fca_attach");
+
+fail_register_client:
+	FCOEI_LOG(__FUNCTION__, "fail_register_client");
+	return (DDI_FAILURE);
+}
+
+/*
+ * fcoei_detach_uninit
+ *	uninit related stuff of the soft state
+ *
+ * Input:
+ *	ss = the soft state that will be processed
+ *
+ * Return:
+ *	if it succeeded or not
+ *
+ * Comment:
+ *	N/A
+ */
+int
+fcoei_detach_uninit(fcoei_soft_state_t *ss)
+{
+	/*
+	 * Stop watchdog first
+	 */
+	if (ss->ss_flags & SS_FLAG_WATCHDOG_RUNNING) {
+		ss->ss_flags |= SS_FLAG_TERMINATE_WATCHDOG;
+		cv_broadcast(&ss->ss_watchdog_cv);
+	}
+
+	/*
+	 * Destroy the taskq
+	 */
+	ddi_taskq_wait(ss->ss_taskq);
+	ddi_taskq_destroy(ss->ss_taskq);
+
+	/*
+	 * Release all allocated resources
+	 */
+	mutex_destroy(&ss->ss_ioctl_mutex);
+	mutex_destroy(&ss->ss_watchdog_mutex);
+	cv_destroy(&ss->ss_watchdog_cv);
+	mod_hash_destroy_idhash(ss->ss_sol_oxid_hash);
+	mod_hash_destroy_idhash(ss->ss_unsol_rxid_hash);
+	list_destroy(&ss->ss_event_list);
+	ss->ss_eport->eport_deregister_client(ss->ss_eport);
+	ddi_remove_minor_node(ss->ss_dip, NULL);
+
+	/*
+	 * Release itself
+	 */
+	ddi_soft_state_free(fcoei_state, ddi_get_instance(ss->ss_dip));
+	return (FCOE_SUCCESS);
+}
+
+/*
+ * fcoei_watchdog
+ *	Perform periodic checking and routine tasks
+ *
+ * Input:
+ *	arg = the soft state that will be processed
+ *
+ * Return:
+ *	N/A
+ *
+ * Comment:
+ *	N/A
+ */
+static void
+fcoei_watchdog(void *arg)
+{
+	fcoei_soft_state_t	*ss;
+	clock_t			 tmp_delay;
+	clock_t			 start_clock;
+	clock_t			 last_clock;
+
+	/*
+	 * For debugging
+	 */
+	ss = (fcoei_soft_state_t *)arg;
+	FCOEI_LOG(__FUNCTION__, "ss %p", ss);
+	FCOEI_LOG(__FUNCTION__, "sol_hash %p", ss->ss_sol_oxid_hash);
+	FCOEI_LOG(__FUNCTION__, "unsol_hash %p", ss->ss_unsol_rxid_hash);
+	ss->ss_flags |= SS_FLAG_WATCHDOG_RUNNING;
+	tmp_delay = FCOE_SEC2TICK(1) / 2;
+	last_clock = CURRENT_CLOCK;
+
+	/*
+	 * If nobody reqeusts to terminate the watchdog, we will work forever
+	 */
+	while (!(ss->ss_flags & SS_FLAG_TERMINATE_WATCHDOG)) {
+		/*
+		 * We handle all asynchronous events serially
+		 */
+		fcoei_process_events(ss);
+
+		/*
+		 * To avoid to check timing too freqently, we check
+		 * if we need skip timing stuff.
+		 */
+		start_clock = CURRENT_CLOCK;
+		if ((start_clock - last_clock) < tmp_delay) {
+			goto end_timing;
+		} else {
+			last_clock = start_clock;
+		}
+
+		/*
+		 * It's time to do timeout checking of solicited exchanges
+		 */
+		if (ss->ss_sol_cnt == (&ss->ss_sol_cnt1)) {
+			if (ss->ss_sol_cnt2 == 0) {
+				ss->ss_sol_cnt = &ss->ss_sol_cnt2;
+			} else {
+				mod_hash_walk(ss->ss_sol_oxid_hash,
+				    fcoei_xch_check, ss);
+			}
+		} else {
+			if (ss->ss_sol_cnt1 == 0) {
+				ss->ss_sol_cnt = &ss->ss_sol_cnt1;
+			} else {
+				mod_hash_walk(ss->ss_sol_oxid_hash,
+				    fcoei_xch_check, ss);
+			}
+		}
+
+		/*
+		 * It's time to do timeout checking of unsolicited exchange
+		 */
+		if (ss->ss_unsol_cnt == (&ss->ss_unsol_cnt1)) {
+			if (ss->ss_unsol_cnt2 == 0) {
+				ss->ss_unsol_cnt = &ss->ss_unsol_cnt2;
+			} else {
+				mod_hash_walk(ss->ss_unsol_rxid_hash,
+				    fcoei_xch_check, ss);
+			}
+		} else {
+			if (ss->ss_unsol_cnt1 == 0) {
+				ss->ss_unsol_cnt = &ss->ss_unsol_cnt1;
+			} else {
+				mod_hash_walk(ss->ss_unsol_rxid_hash,
+				    fcoei_xch_check, ss);
+			}
+		}
+
+		/*
+		 * Check if there are exchanges which are ready to complete
+		 */
+		fcoei_handle_comp_xch_list(ss);
+
+	end_timing:
+		/*
+		 * Wait for next cycle
+		 */
+		mutex_enter(&ss->ss_watchdog_mutex);
+		ss->ss_flags |= SS_FLAG_WATCHDOG_IDLE;
+		if (!list_is_empty(&ss->ss_event_list)) {
+			goto skip_wait;
+		}
+
+		(void) cv_timedwait(&ss->ss_watchdog_cv,
+		    &ss->ss_watchdog_mutex, CURRENT_CLOCK +
+		    (clock_t)tmp_delay);
+	skip_wait:
+		ss->ss_flags &= ~SS_FLAG_WATCHDOG_IDLE;
+		mutex_exit(&ss->ss_watchdog_mutex);
+	}
+
+	/*
+	 * Do clear work before exit
+	 */
+	fcoei_clear_watchdog_jobs(ss);
+
+	/*
+	 * Watchdog has stopped
+	 */
+	ss->ss_flags &= ~SS_FLAG_WATCHDOG_RUNNING;
+}
+
+static void
+fcoei_clear_watchdog_jobs(fcoei_soft_state_t *ss)
+{
+	fcoei_event_t 		*ae;
+	fcoe_frame_t		*frm;
+
+	mutex_enter(&ss->ss_watchdog_mutex);
+	while (!list_is_empty(&ss->ss_event_list)) {
+		ae = (fcoei_event_t *)list_head(&ss->ss_event_list);
+		list_remove(&ss->ss_event_list, ae);
+		switch (ae->ae_type) {
+		case AE_EVENT_SOL_FRAME:
+			frm = (fcoe_frame_t *)ae->ae_obj;
+			frm->frm_eport->eport_release_frame(frm);
+			break;
+
+		case AE_EVENT_UNSOL_FRAME:
+			frm = (fcoe_frame_t *)ae->ae_obj;
+			frm->frm_eport->eport_free_netb(frm->frm_netb);
+			frm->frm_eport->eport_release_frame(frm);
+			break;
+
+		case AE_EVENT_PORT:
+			atomic_add_32(&ss->ss_port_event_counter, -1);
+			/* FALLTHROUGH */
+
+		case AE_EVENT_RESET:
+			kmem_free(ae, sizeof (fcoei_event_t));
+			break;
+
+		case AE_EVENT_EXCHANGE:
+			/* FALLTHROUGH */
+
+		default:
+			break;
+		}
+	}
+
+	mod_hash_clear(ss->ss_unsol_rxid_hash);
+	mod_hash_clear(ss->ss_sol_oxid_hash);
+
+	while (!list_is_empty(&ss->ss_comp_xch_list)) {
+		list_remove_head(&ss->ss_comp_xch_list);
+	}
+	mutex_exit(&ss->ss_watchdog_mutex);
+}
+
+/*
+ * fcoei_process_events
+ *	Process the events one by one
+ *
+ * Input:
+ *	ss = the soft state that will be processed
+ *
+ * Return:
+ *	N/A
+ *
+ * Comment:
+ *	N/A
+ */
+static void
+fcoei_process_events(fcoei_soft_state_t *ss)
+{
+	fcoei_event_t	*ae = NULL;
+
+	/*
+	 * It's the only place to delete node from ss_event_list, so we needn't
+	 * hold mutex to check if the list is empty.
+	 */
+	ASSERT(!MUTEX_HELD(&ss->ss_watchdog_mutex));
+	while (list_is_empty(&ss->ss_event_list) == B_FALSE) {
+		mutex_enter(&ss->ss_watchdog_mutex);
+		ae = (fcoei_event_t *)list_remove_head(&ss->ss_event_list);
+		mutex_exit(&ss->ss_watchdog_mutex);
+
+		switch (ae->ae_type) {
+		case AE_EVENT_SOL_FRAME:
+			fcoei_handle_sol_frame_done((fcoe_frame_t *)ae->ae_obj);
+			break;
+
+		case AE_EVENT_UNSOL_FRAME:
+			fcoei_process_unsol_frame((fcoe_frame_t *)ae->ae_obj);
+			break;
+
+		case AE_EVENT_EXCHANGE:
+			fcoei_process_event_exchange(ae);
+			break;
+
+		case AE_EVENT_PORT:
+			fcoei_process_event_port(ae);
+			break;
+
+		case AE_EVENT_RESET:
+			fcoei_process_event_reset(ae);
+			break;
+
+		default:
+			FCOEI_LOG(__FUNCTION__, "unsupported events");
+		}
+
+	}
+}
+
+/*
+ * fcoei_handle_tmout_xch_list
+ *	Complete every exchange in the timed-out xch list of the soft state
+ *
+ * Input:
+ *	ss = the soft state that need be handled
+ *
+ * Return:
+ *	N/A
+ *
+ * Comment:
+ *	When mod_hash_walk is in progress, we can't change the hashtable.
+ *	This is post-walk handling of exchange timing
+ */
+void
+fcoei_handle_comp_xch_list(fcoei_soft_state_t *ss)
+{
+	fcoei_exchange_t	*xch	  = NULL;
+
+	while ((xch = list_remove_head(&ss->ss_comp_xch_list)) != NULL) {
+		fcoei_complete_xch(xch, NULL, xch->xch_fpkt->pkt_state,
+		    xch->xch_fpkt->pkt_reason);
+	}
+}
+
+/*
+ * fcoei_xch_check
+ *	Check if the exchange timed out or link is down
+ *
+ * Input:
+ *	key = rxid of the unsolicited exchange
+ *	val = the unsolicited exchange
+ *	arg = the soft state
+ *
+ * Return:
+ *	MH_WALK_CONTINUE = continue to walk
+ *
+ * Comment:
+ *	We need send ABTS for timed-out for solicited exchange
+ *	If it's solicited FLOGI, we need set SS_FLAG_FLOGI_FAILED
+ *	If the link is down, we think it has timed out too.
+ */
+static uint32_t
+fcoei_xch_check(mod_hash_key_t key, mod_hash_val_t *val, void *arg)
+{
+	fcoei_exchange_t	*xch = (fcoei_exchange_t *)val;
+
+	ASSERT(xch->xch_ss == arg);
+	if ((xch->xch_end_tick < CURRENT_CLOCK) &&
+	    (xch->xch_ss->ss_link_state != FC_STATE_OFFLINE)) {
+		if (xch->xch_flags & XCH_FLAG_IN_SOL_HASH) {
+			ASSERT(xch->xch_oxid == CMHK(key));
+			/*
+			 * It's solicited exchange
+			 */
+			fcoei_abts_exchange(xch);
+			if (LA_ELS_FLOGI == ((ls_code_t *)(void *)
+			    xch->xch_fpkt->pkt_cmd)->ls_code) {
+				/*
+				 * It's solicited FLOGI
+				 */
+				xch->xch_ss->ss_flags |= SS_FLAG_FLOGI_FAILED;
+			}
+		}
+
+		FCOEI_LOG(__FUNCTION__, "oxid-%x/rxid-%x  timed out",
+		    xch->xch_oxid, xch->xch_rxid);
+		xch->xch_flags |= XCH_FLAG_TMOUT;
+		xch->xch_fpkt->pkt_state = FC_PKT_TIMEOUT;
+		xch->xch_fpkt->pkt_reason = FC_REASON_ABORTED;
+		list_insert_tail(&xch->xch_ss->ss_comp_xch_list, xch);
+	} else if (xch->xch_ss->ss_link_state == FC_STATE_OFFLINE) {
+		FCOEI_LOG(__FUNCTION__, "oxid-%x/rxid-%x  offline complete",
+		    xch->xch_oxid, xch->xch_rxid);
+		xch->xch_flags |= XCH_FLAG_TMOUT;
+		xch->xch_fpkt->pkt_state = FC_PKT_PORT_OFFLINE;
+		xch->xch_fpkt->pkt_reason = FC_REASON_OFFLINE;
+		list_insert_tail(&xch->xch_ss->ss_comp_xch_list, xch);
+	}
+
+	return (MH_WALK_CONTINUE);
+}
+
+/*
+ * fcoei_init_ifm
+ *	initialize fcoei_frame
+ *
+ * Input:
+ *	frm = the frame that ifm need link to
+ *	xch = the exchange that ifm need link to
+ *
+ * Return:
+ *	N/A
+ *
+ * Comment:
+ *	For solicited frames, it's called after FC frame header initialization
+ *	For unsolicited frames, it's called just after the frame enters fcoei
+ */
+void
+fcoei_init_ifm(fcoe_frame_t *frm, fcoei_exchange_t *xch)
+{
+	FRM2IFM(frm)->ifm_frm = frm;
+	FRM2IFM(frm)->ifm_xch = xch;
+	FRM2IFM(frm)->ifm_rctl = FRM_R_CTL(frm);
+}
+
+/*
+ * fcoei_trigger_fp_attach
+ *	Trigger fp_attach for this fcoei port
+ *
+ * Input:
+ *	arg = the soft state that fp will attach
+ *
+ * Return:
+ *	N/A
+ *
+ * Comment:
+ *	N/A
+ */
+static void
+fcoei_trigger_fp_attach(void * arg)
+{
+	fcoei_soft_state_t	*ss    = (fcoei_soft_state_t *)arg;
+	dev_info_t		*child = NULL;
+	int			 rval  = NDI_FAILURE;
+
+	ndi_devi_alloc_sleep(ss->ss_dip, "fp", DEVI_PSEUDO_NODEID, &child);
+	if (child == NULL) {
+		FCOEI_LOG(__FUNCTION__, "can't alloc dev_info");
+		return;
+	}
+
+	/*
+	 * fp/fctl need this property
+	 */
+	if (ddi_prop_update_string(DDI_DEV_T_NONE, child,
+	    "bus-addr", "0,0") != DDI_PROP_SUCCESS) {
+		FCOEI_LOG(__FUNCTION__, "update bus-addr failed");
+		(void) ndi_devi_free(child);
+		return;
+	}
+
+	/*
+	 * If it's physical HBA, fp.conf will register the property.
+	 * fcoei is one software HBA, so we need register it manually
+	 */
+	if (ddi_prop_update_int(DDI_DEV_T_NONE, child,
+	    "port", 0) != DDI_PROP_SUCCESS) {
+		FCOEI_LOG(__FUNCTION__, "update port failed");
+		(void) ndi_devi_free(child);
+		return;
+	}
+
+	/*
+	 * It will call fp_attach eventually
+	 */
+	rval = ndi_devi_online(child, NDI_ONLINE_ATTACH);
+	ss->ss_flags &= ~SS_FLAG_TRIGGER_FP_ATTACH;
+	if (rval != NDI_SUCCESS) {
+		FCOEI_LOG(__FUNCTION__, "devi_online: %d", rval);
+	} else {
+		FCOEI_LOG(__FUNCTION__, "triggered successfully");
+	}
+}
+
+/*
+ * fcoei_abts_exchange
+ *	Send ABTS to abort solicited exchange
+ *
+ * Input:
+ *	xch = the exchange that will be aborted
+ *
+ * Return:
+ *	N/A
+ *
+ * Comment:
+ *	ABTS frame uses the same oxid as the exchange
+ */
+static void
+fcoei_abts_exchange(fcoei_exchange_t *xch)
+{
+	fc_packet_t	*fpkt = xch->xch_fpkt;
+	fcoe_frame_t	*frm  = NULL;
+
+	/*
+	 * BLS_ABTS doesn't contain any other payload except FCFH
+	 */
+	frm = xch->xch_ss->ss_eport->eport_alloc_frame(xch->xch_ss->ss_eport,
+	    FCFH_SIZE, NULL);
+	if (frm == NULL) {
+		FCOEI_LOG(__FUNCTION__, "can't alloc frame: %p", xch);
+		return;
+	}
+
+	FFM_R_CTL(0x81, frm);
+	FFM_D_ID(fpkt->pkt_cmd_fhdr.d_id, frm);
+	FFM_S_ID(fpkt->pkt_cmd_fhdr.s_id, frm);
+	FFM_F_CTL(0x090000, frm);
+	FFM_SEQ_ID(0x01, frm);
+	FFM_OXID(xch->xch_oxid, frm);
+	FFM_RXID(xch->xch_rxid, frm);
+	fcoei_init_ifm(frm, xch);
+	xch->xch_ss->ss_eport->eport_tx_frame(frm);
+}
+
+/*
+ * fcoei_complete_xch
+ *	Complete the exchange
+ *
+ * Input:
+ *	xch = the exchange that will be completed
+ *	frm = newly-allocated frame that has not been submitted
+ *	pkt_state = LV fpkt state
+ *	pkt_reason = LV fpkt reason
+ *
+ * Return:
+ *	N/A
+ *
+ * Comment:
+ *	N/A
+ */
+void
+fcoei_complete_xch(fcoei_exchange_t *xch, fcoe_frame_t *frm,
+    uint8_t pkt_state, uint8_t pkt_reason)
+{
+	mod_hash_val_t val;
+
+	if (pkt_state != FC_PKT_SUCCESS) {
+		FCOEI_LOG(__FUNCTION__, "FHDR: %x/%x/%x, %x/%x/%x",
+		    xch->xch_fpkt->pkt_cmd_fhdr.r_ctl,
+		    xch->xch_fpkt->pkt_cmd_fhdr.f_ctl,
+		    xch->xch_fpkt->pkt_cmd_fhdr.type,
+		    xch->xch_fpkt->pkt_resp_fhdr.r_ctl,
+		    xch->xch_fpkt->pkt_resp_fhdr.f_ctl,
+		    xch->xch_fpkt->pkt_resp_fhdr.type);
+		FCOEI_LOG(__FUNCTION__, "%p/%p/%x/%x",
+		    xch, frm, pkt_state, pkt_reason);
+	}
+
+	if (frm != NULL) {
+		/*
+		 * It's newly-allocated frame , which we haven't sent out
+		 */
+		xch->xch_ss->ss_eport->eport_free_netb(frm->frm_netb);
+		xch->xch_ss->ss_eport->eport_release_frame(frm);
+		FCOEI_LOG(__FUNCTION__, "xch: %p, not submitted", xch);
+	}
+
+	/*
+	 * If xch is in hash table, we need remove it
+	 */
+	if (xch->xch_flags & XCH_FLAG_IN_SOL_HASH) {
+		mod_hash_remove(xch->xch_ss->ss_sol_oxid_hash,
+		    FMHK(xch->xch_oxid), &val);
+		ASSERT((fcoei_exchange_t *)val == xch);
+		xch->xch_flags &= ~XCH_FLAG_IN_SOL_HASH;
+	} else if (xch->xch_flags & XCH_FLAG_IN_UNSOL_HASH) {
+		mod_hash_remove(xch->xch_ss->ss_unsol_rxid_hash,
+		    FMHK(xch->xch_rxid), &val);
+		ASSERT((fcoei_exchange_t *)val == xch);
+		xch->xch_flags &= ~XCH_FLAG_IN_UNSOL_HASH;
+	} else {
+		FCOEI_LOG(__FUNCTION__, "xch not in any hash: %p", xch);
+	}
+
+	xch->xch_fpkt->pkt_state = pkt_state;
+	xch->xch_fpkt->pkt_reason = pkt_reason;
+	if (xch->xch_fpkt->pkt_tran_flags & FC_TRAN_NO_INTR) {
+		FCOEI_LOG(__FUNCTION__, "polled xch is done: %p", xch);
+		sema_v(&xch->xch_sema);
+	} else {
+		xch->xch_fpkt->pkt_comp(xch->xch_fpkt);
+	}
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/usr/src/uts/common/io/fibre-channel/fca/fcoei/fcoei.conf	Mon Aug 10 10:43:48 2009 -0400
@@ -0,0 +1,24 @@
+#
+# CDDL HEADER START
+#
+# The contents of this file are subject to the terms of the
+# Common Development and Distribution License (the "License").
+# You may not use this file except in compliance with the License.
+#
+# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+# or http://www.opensolaris.org/os/licensing.
+# See the License for the specific language governing permissions
+# and limitations under the License.
+#
+# When distributing Covered Code, include this CDDL HEADER in each
+# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+# If applicable, add the following below this CDDL HEADER, with the
+# fields enclosed by brackets "[]" replaced with your own identifying
+# information: Portions Copyright [yyyy] [name of copyright owner]
+#
+# CDDL HEADER END
+#
+#
+# Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
+# Use is subject to license terms.
+#
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/usr/src/uts/common/io/fibre-channel/fca/fcoei/fcoei.h	Mon Aug 10 10:43:48 2009 -0400
@@ -0,0 +1,371 @@
+/*
+ * CDDL HEADER START
+ *
+ * The contents of this file are subject to the terms of the
+ * Common Development and Distribution License (the "License").
+ * You may not use this file except in compliance with the License.
+ *
+ * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+ * or http://www.opensolaris.org/os/licensing.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL HEADER in each
+ * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+ * If applicable, add the following below this CDDL HEADER, with the
+ * fields enclosed by brackets "[]" replaced with your own identifying
+ * information: Portions Copyright [yyyy] [name of copyright owner]
+ *
+ * CDDL HEADER END
+ */
+/*
+ * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
+ * Use is subject to license terms.
+ */
+#ifndef	_FCOEI_H
+#define	_FCOEI_H
+
+#ifdef	__cplusplus
+extern "C" {
+#endif
+
+#ifdef	_KERNEL
+
+/*
+ * FCOEI logging
+ */
+extern int fcoei_use_ext_log;
+extern void *fcoei_state;
+
+#define	FCOEI_EXT_LOG(log_ident, ...)				\
+	{							\
+		if (fcoei_use_ext_log) {			\
+			fcoe_trace(log_ident, __VA_ARGS__);	\
+		}						\
+	}
+
+#define	FCOEI_LOG(log_ident, ...)		\
+	fcoe_trace(log_ident, __VA_ARGS__)
+
+/*
+ * IOCTL supporting stuff
+ */
+#define	FCOEI_IOCTL_FLAG_MASK		0xFF
+#define	FCOEI_IOCTL_FLAG_IDLE		0x00
+#define	FCOEI_IOCTL_FLAG_OPEN		0x01
+#define	FCOEI_IOCTL_FLAG_EXCL		0x02
+
+/*
+ * define common constants
+ */
+#define	FCOEI_MAX_OPEN_XCHS	2048
+#define	FCOEI_SOL_HASH_SIZE	2048
+#define	FCOEI_UNSOL_HASH_SIZE	128
+#define	FCOEI_VERSION		"20090729-1.00"
+#define	FCOEI_NAME_VERSION	"SunFC FCoEI v" FCOEI_VERSION
+
+/*
+ * define RNID Management Info
+ */
+#define	FCOEI_RNID_HBA	0x7
+#define	FCOEI_RNID_IPV4	0x1
+#define	FCOEI_RNID_IPV6	0x2
+
+typedef enum event_type {
+	AE_EVENT_NONE = 0,
+	AE_EVENT_EXCHANGE,
+	AE_EVENT_SOL_FRAME,
+	AE_EVENT_UNSOL_FRAME,
+	AE_EVENT_PORT,
+	AE_EVENT_ABORT,
+	AE_EVENT_RESET,
+} event_type_e;
+
+typedef struct fcoei_event {
+	list_node_t	 ae_node;
+	event_type_e	 ae_type;
+
+	/*
+	 * event specific
+	 */
+	uint64_t	 ae_specific;
+
+	/*
+	 * event related object
+	 */
+	void		*ae_obj;
+} fcoei_event_t;
+
+typedef struct fcoei_soft_state {
+	dev_info_t		*ss_dip;
+	uint32_t		 ss_flags;
+	uint32_t		 ss_fcp_data_payload_size;
+	list_t			 ss_comp_xch_list;
+
+	/*
+	 * common data structure (fc_local_port_t) between leadville and fcoei
+	 */
+	void			*ss_port;
+
+	/*
+	 * common data structure between fcoei and fcoe module
+	 */
+	fcoe_port_t		*ss_eport;
+
+	mod_hash_t		*ss_sol_oxid_hash;
+	mod_hash_t		*ss_unsol_rxid_hash;
+	uint16_t		 ss_next_sol_oxid;
+	uint16_t		 ss_next_unsol_rxid;
+
+	/*
+	 * We will use ss_taskq to dispatch watchdog and other tasks
+	 */
+	ddi_taskq_t		*ss_taskq;
+
+	kcondvar_t		 ss_watchdog_cv;
+	kmutex_t		 ss_watchdog_mutex;
+
+	/*
+	 * current port state, speed. see fctl.h
+	 */
+	uint16_t		 ss_link_state;
+	uint16_t		 ss_link_speed;
+
+	/*
+	 * # of unprocessed port/link change
+	 */
+	uint32_t		 ss_port_event_counter;
+	list_t			 ss_event_list;
+
+	/*
+	 * solicited and unsolicited exchanges timing checking
+	 */
+	uint32_t		 ss_sol_cnt1;
+	uint32_t		 ss_sol_cnt2;
+	uint32_t		*ss_sol_cnt;
+	uint32_t		 ss_unsol_cnt1;
+	uint32_t		 ss_unsol_cnt2;
+	uint32_t		*ss_unsol_cnt;
+
+	/*
+	 * ioctl related stuff
+	 */
+	uint32_t		 ss_ioctl_flags;
+	kmutex_t		 ss_ioctl_mutex;
+
+	/*
+	 * fp-defined routines that fcoei will call
+	 */
+	fc_fca_bind_info_t	 ss_bind_info;
+
+	/*
+	 * fcoei-defined plogi response that fp will use
+	 */
+	la_els_logi_t		 ss_els_logi;
+
+	/*
+	 * fcoei-defined routines that fp will call
+	 */
+	fc_fca_tran_t		 ss_fca_tran;
+
+	/*
+	 * Direct p2p information, and ss's fcid will be stored here
+	 */
+	fc_fca_p2p_info_t	ss_p2p_info;
+
+	/*
+	 * RNID Management Information
+	 */
+	fc_rnid_t			ss_rnid;
+} fcoei_soft_state_t;
+
+#define	SS_FLAG_LV_NONE			0x0000
+#define	SS_FLAG_LV_BOUND		0x0001
+#define	SS_FLAG_PORT_DISABLED		0x0002
+#define	SS_FLAG_TERMINATE_WATCHDOG	0x0004
+#define	SS_FLAG_WATCHDOG_RUNNING	0x0008
+#define	SS_FLAG_WATCHDOG_IDLE		0x0010
+#define	SS_FLAG_TRIGGER_FP_ATTACH	0x0020
+#define	SS_FLAG_FLOGI_FAILED		0x0040
+
+/*
+ * fcoei_frame - corresponding data structure to fcoe_frame/fc_frame
+ */
+typedef struct fcoei_frame {
+	fcoei_event_t		 ifm_ae;
+	fcoe_frame_t		*ifm_frm;
+	uint32_t		 ifm_flags;
+	struct fcoei_exchange	*ifm_xch;
+
+	/*
+	 * will be used after the relevant frame mblk was released by ETH layer
+	 */
+	uint8_t			 ifm_rctl;
+} fcoei_frame_t;
+
+#define	IFM_FLAG_NONE		0x0000
+#define	IFM_FLAG_FREE_NETB	0x0001
+
+/*
+ * fcoei_exchange - corresponding data structure to leadville fc_packet
+ */
+typedef struct fcoei_exchange {
+	list_node_t		 xch_comp_node;
+	fcoei_event_t		 xch_ae;
+	uint32_t		 xch_flags;
+	fcoei_soft_state_t	*xch_ss;
+	clock_t			 xch_start_tick;
+	clock_t			 xch_end_tick;
+	int			 xch_resid;
+	ksema_t			 xch_sema;
+
+	/*
+	 * current cnt for timing check, when the exchange is created
+	 */
+	uint32_t		*xch_cnt;
+
+	/*
+	 * leadville fc_packet will not maintain oxid/rxid,
+	 * so fcoei exchange  need do it
+	 */
+	uint16_t		 xch_oxid;
+	uint16_t		 xch_rxid;
+
+	/*
+	 * to link leadville's stuff
+	 */
+	fc_packet_t		*xch_fpkt;
+	fc_unsol_buf_t		*xch_ub;
+} fcoei_exchange_t;
+
+#define	XCH_FLAG_NONE		0x00000000
+#define	XCH_FLAG_TMOUT		0x00000001
+#define	XCH_FLAG_ABORT		0x00000002
+#define	XCH_FLAG_IN_SOL_HASH	0x00000004
+#define	XCH_FLAG_IN_UNSOL_HASH	0x00000008
+
+typedef struct fcoei_walk_arg
+{
+	fcoei_exchange_t	*wa_xch;
+	uint16_t		 wa_oxid;
+} fcoei_walk_arg_t;
+
+/*
+ * Define conversion and calculation macros
+ */
+#define	FRM2IFM(x_frm)	((fcoei_frame_t *)(x_frm)->frm_client_private)
+#define	FRM2SS(x_frm)							\
+	((fcoei_soft_state_t *)(x_frm)->frm_eport->eport_client_private)
+
+#define	PORT2SS(x_port)	((fcoei_soft_state_t *)(x_port)->port_fca_private)
+#define	EPORT2SS(x_eport)					\
+	((fcoei_soft_state_t *)(x_eport)->eport_client_private)
+
+#define	FPKT2XCH(x_fpkt)	((fcoei_exchange_t *)x_fpkt->pkt_fca_private)
+#define	FRM2FPKT(x_fpkt)	(FRM2IFM(frm)->ifm_xch->xch_fpkt)
+
+#define	HANDLE2SS(x_handle)	((fcoei_soft_state_t *)fca_handle)
+
+#define	FPLD			frm->frm_payload
+
+#define	FCOEI_FRM2FHDR(x_frm, x_fhdr)				\
+	{							\
+		(x_fhdr)->r_ctl = FRM_R_CTL(x_frm);		\
+		(x_fhdr)->d_id = FRM_D_ID(x_frm);		\
+		(x_fhdr)->s_id = FRM_S_ID(x_frm);		\
+		(x_fhdr)->type = FRM_TYPE(x_frm);		\
+		(x_fhdr)->f_ctl = FRM_F_CTL(x_frm);		\
+		(x_fhdr)->seq_id = FRM_SEQ_ID(x_frm);		\
+		(x_fhdr)->df_ctl = FRM_DF_CTL(x_frm);		\
+		(x_fhdr)->seq_cnt = FRM_SEQ_CNT(x_frm);		\
+		(x_fhdr)->ox_id = FRM_OXID(x_frm);		\
+		(x_fhdr)->rx_id = FRM_RXID(x_frm);		\
+		(x_fhdr)->ro = FRM_PARAM(x_frm);		\
+	}
+
+#define	FCOEI_PARTIAL_FHDR2FRM(x_fhdr, x_frm)		\
+	{						\
+		FFM_R_CTL((x_fhdr)->r_ctl, x_frm);	\
+		FFM_D_ID((x_fhdr)->d_id, x_frm);	\
+		FFM_S_ID((x_fhdr)->s_id, x_frm);	\
+		FFM_TYPE((x_fhdr)->type, x_frm);	\
+		FFM_F_CTL((x_fhdr)->f_ctl, x_frm);	\
+	}
+
+#define	PRT_FRM_HDR(x_p, x_f)						\
+	{								\
+		FCOEI_LOG(x_p, "rctl/%x, fctl/%x, type/%x, oxid/%x",	\
+			FCOE_B2V_1((x_f)->frm_hdr->hdr_r_ctl),		\
+			FCOE_B2V_3((x_f)->frm_hdr->hdr_f_ctl),		\
+			FCOE_B2V_1((x_f)->frm_hdr->hdr_type),		\
+			FCOE_B2V_2((x_f)->frm_hdr->hdr_oxid));		\
+	}
+
+#define	FCOEI_INIT_SOL_ID_HASH(xch, xch_tmp)				\
+	{								\
+		do {							\
+			if (++xch->xch_ss->ss_next_sol_oxid == 0xFFFF) { \
+				++xch->xch_ss->ss_next_sol_oxid;	\
+			}						\
+		} while (mod_hash_find(xch->xch_ss->ss_sol_oxid_hash,	\
+		    (mod_hash_key_t)(intptr_t)xch->xch_ss->ss_next_sol_oxid, \
+		    (mod_hash_val_t)&xch_tmp) == 0);	\
+		xch->xch_oxid = xch->xch_ss->ss_next_sol_oxid;		\
+		xch->xch_rxid = 0xFFFF;					\
+		(void) mod_hash_insert(xch->xch_ss->ss_sol_oxid_hash,	\
+		    FMHK(xch->xch_oxid), (mod_hash_val_t)xch); \
+		xch->xch_flags |= XCH_FLAG_IN_SOL_HASH;			\
+	}
+
+#define	FCOEI_SET_UNSOL_FRM_RXID(frm, xch_tmp)				\
+	{								\
+		do {							\
+			if (++FRM2SS(frm)->ss_next_unsol_rxid == 0xFFFF) { \
+				++FRM2SS(frm)->ss_next_unsol_rxid;	\
+			}						\
+		} while (mod_hash_find(FRM2SS(frm)->ss_unsol_rxid_hash,	\
+		    (mod_hash_key_t)(intptr_t)FRM2SS(frm)->ss_next_unsol_rxid, \
+		    (mod_hash_val_t)&xch_tmp) == 0);	\
+		FFM_RXID(FRM2SS(frm)->ss_next_unsol_rxid, frm);	\
+	}
+
+#define	FCOEI_INIT_UNSOL_ID_HASH(xch)					\
+	{								\
+		xch->xch_oxid = fpkt->pkt_cmd_fhdr.ox_id;		\
+		xch->xch_rxid = fpkt->pkt_cmd_fhdr.rx_id;		\
+		(void) mod_hash_insert(xch->xch_ss->ss_unsol_rxid_hash,	\
+		    FMHK(xch->xch_rxid), (mod_hash_val_t)xch); 		\
+		xch->xch_flags |= XCH_FLAG_IN_UNSOL_HASH;		\
+	}
+
+/*
+ * Common functions defined in fcoei.c
+ */
+void fcoei_complete_xch(fcoei_exchange_t *xch, fcoe_frame_t *frm,
+    uint8_t pkt_state, uint8_t pkt_reason);
+void fcoei_init_ifm(fcoe_frame_t *frm, fcoei_exchange_t *xch);
+void fcoei_handle_comp_xch_list(fcoei_soft_state_t *ss);
+
+/*
+ * Common functions defined in fcoei_lv.c
+ */
+void fcoei_init_fcatran_vectors(fc_fca_tran_t *fcatran);
+void fcoei_process_event_exchange(fcoei_event_t *ae);
+void fcoei_process_event_reset(fcoei_event_t *ae);
+
+/*
+ * Common functions defined in fcoei_eth.c
+ */
+void fcoei_init_ect_vectors(fcoe_client_t *ect);
+void fcoei_process_unsol_frame(fcoe_frame_t *frm);
+void fcoei_handle_sol_frame_done(fcoe_frame_t *frm);
+void fcoei_process_event_port(fcoei_event_t *ae);
+void fcoei_port_event(fcoe_port_t *eport, uint32_t event);
+
+#endif /* _KERNEL */
+
+#ifdef	__cplusplus
+}
+#endif
+
+#endif /* _FCOEI_H */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/usr/src/uts/common/io/fibre-channel/fca/fcoei/fcoei_eth.c	Mon Aug 10 10:43:48 2009 -0400
@@ -0,0 +1,1390 @@
+/*
+ * CDDL HEADER START
+ *
+ * The contents of this file are subject to the terms of the
+ * Common Development and Distribution License (the "License").
+ * You may not use this file except in compliance with the License.
+ *
+ * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+ * or http://www.opensolaris.org/os/licensing.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL HEADER in each
+ * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+ * If applicable, add the following below this CDDL HEADER, with the
+ * fields enclosed by brackets "[]" replaced with your own identifying
+ * information: Portions Copyright [yyyy] [name of copyright owner]
+ *
+ * CDDL HEADER END
+ */
+
+/*
+ * The following notice accompanied the original version of this file:
+ *
+ * BSD LICENSE
+ *
+ * Copyright(c) 2007 Intel Corporation. All rights reserved.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ *   * Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ *   * Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in
+ *     the documentation and/or other materials provided with the
+ *     distribution.
+ *   * Neither the name of Intel Corporation nor the names of its
+ *     contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER 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.
+ */
+
+/*
+ * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
+ * Use is subject to license terms.
+ */
+
+/*
+ * This file defines interface functions between fcoe and fcoei driver.
+ */
+
+#include <sys/conf.h>
+#include <sys/ddi.h>
+#include <sys/stat.h>
+#include <sys/pci.h>
+#include <sys/sunddi.h>
+#include <sys/modctl.h>
+#include <sys/file.h>
+#include <sys/cred.h>
+#include <sys/byteorder.h>
+#include <sys/atomic.h>
+#include <sys/scsi/scsi.h>
+#include <sys/mac_client.h>
+#include <sys/modhash.h>
+
+/*
+ * LEADVILLE header files
+ */
+#include <sys/fibre-channel/fc.h>
+#include <sys/fibre-channel/impl/fc_fcaif.h>
+
+/*
+ * COMSTAR header files
+ */
+#include <sys/stmf_defines.h>
+
+/*
+ * FCOE header files
+ */
+#include <sys/fcoe/fcoe_common.h>
+
+/*
+ * Driver's own header files
+ */
+#include <fcoei.h>
+
+/*
+ * Forward declaration of internal functions
+ */
+static void fcoei_process_unsol_els_req(fcoe_frame_t *frm);
+static void fcoei_process_sol_els_rsp(fcoe_frame_t *frm);
+static void fcoei_process_unsol_abts_req(fcoe_frame_t *frame);
+static void fcoei_process_sol_abts_acc(fcoe_frame_t *frame);
+static void fcoei_process_sol_abts_rjt(fcoe_frame_t *frame);
+static void fcoei_process_sol_ct_rsp(fcoe_frame_t *frame);
+static void fcoei_process_unsol_xfer_rdy(fcoe_frame_t *frame);
+static void fcoei_process_sol_fcp_resp(fcoe_frame_t *frm);
+
+static void fcoei_fill_fcp_resp(uint8_t *src, uint8_t *dest, int size);
+static void fcoei_fill_els_fpkt_resp(fcoe_frame_t *frm, fcoei_exchange_t *xch,
+    int size);
+
+/*
+ * fcoei_rx_frame
+ *	Unsolicited frame is received
+ *
+ * Input:
+ *	frame = unsolicited frame that is received
+ *
+ * Return:
+ *	N/A
+ *
+ * Comment:
+ *	N/A
+ */
+static void
+fcoei_rx_frame(fcoe_frame_t *frm)
+{
+	if (!(FRM2SS(frm)->ss_flags & SS_FLAG_LV_BOUND)) {
+		/*
+		 * Release the frame and netb
+		 */
+		FCOEI_LOG(__FUNCTION__, "not bound now");
+		frm->frm_eport->eport_free_netb(frm->frm_netb);
+		frm->frm_eport->eport_release_frame(frm);
+		return;
+	}
+
+	FRM2IFM(frm)->ifm_ae.ae_type = AE_EVENT_UNSOL_FRAME;
+	FRM2IFM(frm)->ifm_ae.ae_obj = frm;
+
+	mutex_enter(&FRM2SS(frm)->ss_watchdog_mutex);
+	list_insert_tail(&FRM2SS(frm)->ss_event_list, &FRM2IFM(frm)->ifm_ae);
+	if (FRM2SS(frm)->ss_flags & SS_FLAG_WATCHDOG_IDLE) {
+		cv_signal(&FRM2SS(frm)->ss_watchdog_cv);
+	}
+	mutex_exit(&FRM2SS(frm)->ss_watchdog_mutex);
+}
+
+/*
+ * fcoei_release_sol_frame
+ *	Release the solicited frame that has just been sent out
+ *
+ * Input:
+ *	frame = solicited frame that has been sent out
+ *
+ * Returns:
+ *	N/A
+ *
+ * Comments:
+ *	After FCOE sends solicited frames out, it will call this to notify
+ *	FCOEI of the completion.
+ */
+static void
+fcoei_release_sol_frame(fcoe_frame_t *frm)
+{
+	/*
+	 * For request-type frames, it's safe to be handled out of
+	 * watchdog, because it needn't update anything
+	 */
+	switch (FRM2IFM(frm)->ifm_rctl) {
+	case R_CTL_SOLICITED_DATA:
+	case R_CTL_COMMAND:
+	case R_CTL_ELS_REQ:
+	case R_CTL_UNSOL_CONTROL:
+	case R_CTL_LS_ABTS:
+		FRM2SS(frm)->ss_eport->eport_release_frame(frm);
+		break;
+
+	default:
+		FRM2IFM(frm)->ifm_ae.ae_type = AE_EVENT_SOL_FRAME;
+		FRM2IFM(frm)->ifm_ae.ae_obj = frm;
+
+		mutex_enter(&FRM2SS(frm)->ss_watchdog_mutex);
+		list_insert_tail(&FRM2SS(frm)->ss_event_list,
+		    &FRM2IFM(frm)->ifm_ae);
+		if (FRM2SS(frm)->ss_flags & SS_FLAG_WATCHDOG_IDLE) {
+			cv_signal(&FRM2SS(frm)->ss_watchdog_cv);
+		}
+		mutex_exit(&FRM2SS(frm)->ss_watchdog_mutex);
+		break;
+	}
+}
+
+/*
+ * fcoei_process_unsol_xfer_rdy
+ *	XFER_RDY is received
+ *
+ * Input:
+ *	frm = XFER_RDY frame
+ *
+ * Returns:
+ *	N/A
+ *
+ * Comments:
+ *	N/A
+ */
+static void
+fcoei_process_unsol_xfer_rdy(fcoe_frame_t *frm)
+{
+	uint16_t		 sol_oxid;
+	fcoei_exchange_t	*xch;
+	int			 rcv_buf_size;
+	int			 offset;
+	int			 left_size;
+	int			 data_size;
+	int			 frm_num;
+	int			 idx;
+	fcoe_frame_t		*nfrm;
+
+	sol_oxid = FRM_OXID(frm);
+	if (mod_hash_find(FRM2SS(frm)->ss_sol_oxid_hash,
+	    FMHK(sol_oxid), (mod_hash_val_t *)&xch) != 0) {
+		return;
+	}
+
+	/*
+	 * rcv_buf_size is the total size of data that should be transferred
+	 * in this sequence.
+	 * offset is based on the exchange not the sequence.
+	 */
+	xch->xch_rxid = FRM_RXID(frm);
+	rcv_buf_size = FCOE_B2V_4(frm->frm_payload + 4);
+	offset = FCOE_B2V_4(frm->frm_payload);
+	ASSERT(xch->xch_resid >= rcv_buf_size);
+
+	/*
+	 * Local variables initialization
+	 */
+	left_size = rcv_buf_size;
+	data_size = FRM2SS(frm)->ss_fcp_data_payload_size;
+	frm_num = (rcv_buf_size + data_size - 1) / data_size;
+
+	for (idx = 0; idx < frm_num - 1; idx++) {
+		/*
+		 * The first (frm_num -1) frames are always full
+		 */
+		nfrm = FRM2SS(frm)->ss_eport->eport_alloc_frame(
+		    FRM2SS(frm)->ss_eport, data_size + FCFH_SIZE, NULL);
+		if (nfrm == NULL) {
+			FCOEI_LOG(__FUNCTION__, "can't alloc frame");
+			return;
+		}
+
+		/*
+		 * Copy the data payload that will  be transferred
+		 */
+		bcopy(offset + (uint8_t *)xch->xch_fpkt->pkt_data,
+		    nfrm->frm_payload, nfrm->frm_payload_size);
+
+		FFM_R_CTL(R_CTL_SOLICITED_DATA, nfrm);
+		FFM_TYPE(FC_TYPE_SCSI_FCP, nfrm);
+		FFM_F_CTL(0x010008, nfrm);
+		FFM_OXID(xch->xch_oxid, nfrm);
+		FFM_RXID(xch->xch_rxid, nfrm);
+		FFM_S_ID(FRM_D_ID(frm), nfrm);
+		FFM_D_ID(FRM_S_ID(frm), nfrm);
+		FFM_SEQ_CNT(idx, nfrm);
+		FFM_PARAM(offset, nfrm);
+		fcoei_init_ifm(nfrm, xch);
+
+		/*
+		 * Submit the frame
+		 */
+		xch->xch_ss->ss_eport->eport_tx_frame(nfrm);
+
+		/*
+		 * Update offset and left_size
+		 */
+		offset += data_size;
+		left_size -= data_size;
+	}
+
+	/*
+	 * Send the last data frame of this sequence
+	 */
+	data_size = left_size;
+	nfrm = xch->xch_ss->ss_eport->eport_alloc_frame(
+	    xch->xch_ss->ss_eport, data_size + FCFH_SIZE, NULL);
+	if (nfrm != NULL) {
+		fcoei_init_ifm(nfrm, xch);
+	} else {
+		ASSERT(0);
+		return;
+	}
+
+	/*
+	 * Copy the data payload that will be transferred
+	 */
+	bcopy(offset + (uint8_t *)xch->xch_fpkt->pkt_data,
+	    nfrm->frm_payload, nfrm->frm_payload_size);
+
+	/*
+	 * Set ifm_rctl for fcoei_handle_sol_frame_done
+	 */
+	FRM2IFM(nfrm)->ifm_rctl = R_CTL_SOLICITED_DATA;
+
+	/*
+	 * FFM
+	 */
+	FFM_R_CTL(R_CTL_SOLICITED_DATA, nfrm);
+	FFM_TYPE(FC_TYPE_SCSI_FCP, nfrm);
+	FFM_F_CTL(0x090008, nfrm);
+	FFM_OXID(xch->xch_oxid, nfrm);
+	FFM_RXID(xch->xch_rxid, nfrm);
+	FFM_S_ID(FRM_D_ID(frm), nfrm);
+	FFM_D_ID(FRM_S_ID(frm), nfrm);
+	FFM_SEQ_CNT(idx, nfrm);
+	FFM_PARAM(offset, nfrm);
+
+	/*
+	 * Submit the frame
+	 */
+	xch->xch_ss->ss_eport->eport_tx_frame(nfrm);
+
+	/*
+	 * Sequence is a transaction, so we need only update
+	 * xch_remained_bytes in the end.
+	 */
+	xch->xch_resid -= rcv_buf_size;
+}
+
+/*
+ * fcoei_process_unsol_els_req
+ *	els req frame is received
+ *
+ * Input:
+ *	frm = ELS request frame
+ *
+ * Returns:
+ *	N/A
+ *
+ * Comments:
+ *	We will not create exchange data structure at this time,
+ *	and we should create unsolicited buffer, which will only
+ *	contain the exchange's request payload.
+ */
+static void
+fcoei_process_unsol_els_req(fcoe_frame_t *frm)
+{
+	fc_unsol_buf_t		*ub;
+	fc_rscn_t		*rscn;
+	uint32_t		 offset;
+	fcoei_exchange_t	*xch_tmp;
+
+	/*
+	 * Get the unsol rxid first
+	 */
+	FCOEI_SET_UNSOL_FRM_RXID(frm, xch_tmp);
+
+	/*
+	 * Do proper ub initialization
+	 */
+	ub = (fc_unsol_buf_t *)kmem_zalloc(sizeof (fc_unsol_buf_t), KM_SLEEP);
+	ub->ub_class = FC_TRAN_CLASS3;
+	ub->ub_bufsize = frm->frm_payload_size;
+	ub->ub_buffer = kmem_alloc(frm->frm_payload_size, KM_SLEEP);
+	ub->ub_port_handle = FRM2SS(frm);
+	ub->ub_token = (uint64_t)(long)ub;
+
+	/*
+	 * header conversion
+	 * Caution: ub_buffer is big endian, but ub_frame should be host-format
+	 * RSCN is one exception.
+	 */
+	FCOEI_FRM2FHDR(frm, &ub->ub_frame);
+
+	/*
+	 * If it's FLOGI, and our FLOGI failed last time,
+	 * then we post online event
+	 */
+	if ((FRM2SS(frm)->ss_flags & SS_FLAG_FLOGI_FAILED) &&
+	    (frm->frm_payload[0] == LA_ELS_FLOGI)) {
+		frm->frm_eport->eport_flags |=
+		    EPORT_FLAG_IS_DIRECT_P2P;
+		FRM2SS(frm)->ss_bind_info.port_statec_cb(FRM2SS(frm)->ss_port,
+		    FC_STATE_ONLINE);
+	}
+
+	switch (frm->frm_payload[0]) {
+	case LA_ELS_RSCN:
+		/*
+		 * Only RSCN need byte swapping
+		 */
+		rscn = (fc_rscn_t *)(void *)ub->ub_buffer;
+		rscn->rscn_code = frm->frm_payload[0];
+		rscn->rscn_len = frm->frm_payload[1];
+		rscn->rscn_payload_len =
+		    FCOE_B2V_2(frm->frm_payload + 2);
+
+		offset = 4;
+		for (int i = 0; i < rscn->rscn_payload_len - 4; i += 4) {
+			*(uint32_t *)((intptr_t)(uint8_t *)ub->ub_buffer +
+			    offset) = FCOE_B2V_4(frm->frm_payload + offset);
+			offset += 4;
+		}
+		break;
+
+	default:
+		bcopy(frm->frm_payload, ub->ub_buffer, frm->frm_payload_size);
+		break;
+	}
+
+	/*
+	 * Pass this unsol ELS up to Leadville
+	 */
+	FRM2SS(frm)->ss_bind_info.port_unsol_cb(FRM2SS(frm)->ss_port, ub, 0);
+}
+
+/*
+ * fcoei_search_abort_xch
+ *	Find the exchange that should be aborted
+ *
+ * Input:
+ *	key = oxid of the exchange
+ *	val = the exchange
+ *	arg = the soft state
+ *
+ * Returns:
+ *	MH_WALK_TERMINATE = found it, terminate the walk
+ *	MH_WALK_CONTINUE = not found, continue the walk
+ *
+ * Comments:
+ *	N/A
+ */
+static uint32_t
+fcoei_search_abort_xch(mod_hash_key_t key, mod_hash_val_t *val, void *arg)
+{
+	fcoei_walk_arg_t	*wa = (fcoei_walk_arg_t *)arg;
+	fcoei_exchange_t	*xch = (fcoei_exchange_t *)val;
+
+	if (xch->xch_oxid == wa->wa_oxid) {
+		wa->wa_xch = xch;
+		ASSERT(xch->xch_oxid == CMHK(key));
+		return (MH_WALK_TERMINATE);
+	}
+
+	return (MH_WALK_CONTINUE);
+}
+
+/*
+ * fcoei_process_unsol_abts_req
+ *	ABTS request is received
+ *
+ * Input:
+ *	frm = ABTS request frame
+ *
+ * Returns:
+ *	N/A
+ *
+ * Comments:
+ *	The remote side wants to abort one unsolicited exchange.
+ */
+static void
+fcoei_process_unsol_abts_req(fcoe_frame_t *frm)
+{
+	fcoei_exchange_t	*xch = NULL;
+	fcoe_frame_t		*nfrm;
+	int			 payload_size;
+	fcoei_walk_arg_t	 walk_arg;
+
+	/*
+	 * According to spec, the responder could want to ABTS xch too
+	 */
+	if (FRM_SENDER_IS_XCH_RESPONDER(frm)) {
+		uint16_t sol_oxid = FRM_OXID(frm);
+		(void) mod_hash_find(FRM2SS(frm)->ss_sol_oxid_hash,
+		    FMHK(sol_oxid), (mod_hash_val_t *)&xch);
+	} else {
+		/*
+		 * it's a unsolicited exchange, and we need find it out from
+		 * unsolicited hash table. But at this time, RXID in frame could
+		 * still be 0xFFFF in most cases, so we need do exaustive search
+		 */
+		walk_arg.wa_xch = NULL;
+		walk_arg.wa_oxid = FRM_OXID(frm);
+		mod_hash_walk(FRM2SS(frm)->ss_unsol_rxid_hash,
+		    fcoei_search_abort_xch, &walk_arg);
+		xch = walk_arg.wa_xch;
+	}
+
+	if (xch == NULL) {
+		payload_size = 4;
+		nfrm = FRM2SS(frm)->ss_eport->eport_alloc_frame(
+		    FRM2SS(frm)->ss_eport,
+		    payload_size + FCFH_SIZE, NULL);
+		if (nfrm == NULL) {
+			FCOEI_LOG(__FUNCTION__, "can't alloc frame");
+			return;
+		}
+
+		bzero(nfrm->frm_payload, nfrm->frm_payload_size);
+		nfrm->frm_payload[1] = 0x05;
+		nfrm->frm_payload[3] = 0xAA;
+		FFM_R_CTL(R_CTL_LS_BA_RJT, nfrm);
+		fcoei_init_ifm(nfrm, xch);
+	} else {
+		/*
+		 * We should complete the exchange with frm as NULL,
+		 * and we don't care its success or failure
+		 */
+		fcoei_complete_xch(xch, NULL, FC_PKT_FAILURE, FC_REASON_ABTX);
+
+		/*
+		 * Construct ABTS ACC frame
+		 */
+		payload_size = 12;
+		nfrm = FRM2SS(frm)->ss_eport->eport_alloc_frame(
+		    FRM2SS(frm)->ss_eport, payload_size + FCFH_SIZE, NULL);
+		if (nfrm == NULL) {
+			FCOEI_LOG(__FUNCTION__, "can't alloc frame");
+			return;
+		}
+
+		bzero(nfrm->frm_payload, nfrm->frm_payload_size);
+		nfrm->frm_payload[4] = 0xFF & (xch->xch_oxid >> 8);
+		nfrm->frm_payload[5] = 0xFF & (xch->xch_oxid);
+		nfrm->frm_payload[6] = 0xFF & (xch->xch_rxid >> 8);
+		nfrm->frm_payload[7] = 0xFF & (xch->xch_rxid);
+		nfrm->frm_payload[10] = 0xFF;
+		nfrm->frm_payload[11] = 0xFF;
+
+		FFM_R_CTL(R_CTL_LS_BA_ACC, nfrm);
+		fcoei_init_ifm(nfrm, xch);
+	}
+
+	FFM_D_ID(FRM_S_ID(frm), nfrm);
+	FFM_S_ID(FRM_D_ID(frm), nfrm);
+	FFM_TYPE(FRM_TYPE(frm), nfrm);
+	FFM_F_CTL(FRM_F_CTL(frm), nfrm);
+	FFM_OXID(FRM_OXID(frm), nfrm);
+	FFM_RXID(FRM_RXID(frm), nfrm);
+	FRM2SS(frm)->ss_eport->eport_tx_frame(nfrm);
+}
+
+/*
+ * fcoei_process_sol_fcp_resp
+ *	FCP response is received
+ *
+ * Input:
+ *	frm = FCP response frame
+ *
+ * Returns:
+ *	N/A
+ *
+ * Comments:
+ *	N/A
+ */
+static void
+fcoei_process_sol_fcp_resp(fcoe_frame_t *frm)
+{
+	uint16_t		 sol_oxid;
+	uint32_t		 actual_size;
+	fcoei_exchange_t	*xch  = NULL;
+	fc_packet_t		*fpkt = NULL;
+	mod_hash_val_t		 val;
+	uint32_t		 i_fcp_status;
+
+	/*
+	 * Firstly, we search the related exchange
+	 */
+	sol_oxid = FRM_OXID(frm);
+	if (mod_hash_find(FRM2SS(frm)->ss_sol_oxid_hash,
+	    FMHK(sol_oxid), (mod_hash_val_t *)&xch) != 0) {
+		PRT_FRM_HDR(__FUNCTION__, frm);
+		FCOEI_LOG(__FUNCTION__, "can't find the corresponding xch: "
+		    "oxid/%x %lu - %lu", sol_oxid,
+		    CURRENT_CLOCK, frm->frm_clock);
+		return;
+	} else {
+		fpkt = xch->xch_fpkt;
+	}
+
+	/*
+	 * Decide the actual response length
+	 */
+	actual_size = fpkt->pkt_rsplen;
+	if (actual_size > frm->frm_payload_size) {
+		actual_size = frm->frm_payload_size;
+	}
+
+	/*
+	 * Update the exchange and hash table
+	 */
+	mod_hash_remove(FRM2SS(frm)->ss_sol_oxid_hash,
+	    FMHK(xch->xch_oxid), &val);
+	ASSERT((fcoei_exchange_t *)val == xch);
+	xch->xch_flags &= ~XCH_FLAG_IN_SOL_HASH;
+
+	/*
+	 * Upate fpkt related elements
+	 */
+	FCOEI_FRM2FHDR(frm, &fpkt->pkt_resp_fhdr);
+
+	/*
+	 * we should set pkt_reason and pkt_state carefully
+	 */
+	fpkt->pkt_state = FC_PKT_SUCCESS;
+	fpkt->pkt_reason = 0;
+
+	/*
+	 * First we zero the first 12 byte of dest
+	 */
+	bzero(xch->xch_fpkt->pkt_resp, 12);
+	i_fcp_status = BE_IN32(frm->frm_payload + 8);
+	if (i_fcp_status != 0) {
+		fcoei_fill_fcp_resp(frm->frm_payload,
+		    (uint8_t *)xch->xch_fpkt->pkt_resp, actual_size);
+	}
+
+	/*
+	 * Update pkt_resp_resid
+	 */
+	fpkt->pkt_data_resid = xch->xch_resid;
+	if ((xch->xch_resid != 0) && ((xch->xch_resid % 0x200) == 0) &&
+	    ((xch->xch_fpkt->pkt_datalen % 0x200) == 0) &&
+	    (i_fcp_status == 0)) {
+		FCOEI_LOG(__FUNCTION__, "frame lost no pause ? %x/%x",
+		    xch->xch_resid, xch->xch_fpkt->pkt_datalen);
+		fpkt->pkt_state = FC_PKT_LOCAL_RJT;
+		fpkt->pkt_reason = FC_REASON_UNDERRUN;
+	}
+
+	/*
+	 * Notify LV it's over
+	 */
+	if (fpkt->pkt_tran_flags & FC_TRAN_NO_INTR) {
+		FCOEI_LOG(__FUNCTION__, "BEFORE WAKEUP: %p-%p", fpkt, xch);
+		sema_v(&xch->xch_sema);
+		FCOEI_LOG(__FUNCTION__, "AFTERE WAKEUP: %p-%p", fpkt, xch);
+	} else {
+		xch->xch_fpkt->pkt_comp(xch->xch_fpkt);
+	}
+}
+
+/*
+ * fcoei_process_sol_els_rsp
+ *	ELS response is received
+ *
+ * Input:
+ *	frm = ELS response frame
+ *
+ * Returns:
+ *	N/A
+ *
+ * Comments:
+ *	N/A
+ */
+static void
+fcoei_process_sol_els_rsp(fcoe_frame_t *frm)
+{
+	uint16_t		 sol_oxid    = 0;
+	uint32_t		 actual_size = 0;
+	fcoei_exchange_t	*xch;
+	fc_packet_t		*fpkt;
+
+	/*
+	 * Look for the related exchange
+	 */
+	xch = NULL;
+	fpkt = NULL;
+	sol_oxid = FRM_OXID(frm);
+	if (mod_hash_find(FRM2SS(frm)->ss_sol_oxid_hash,
+	    FMHK(sol_oxid), (mod_hash_val_t *)&xch) != 0) {
+		PRT_FRM_HDR(__FUNCTION__, frm);
+		FCOEI_LOG(__FUNCTION__, "can't find the "
+		    "corresponding xch: oxid/%x", sol_oxid);
+		return;
+	}
+
+	xch->xch_rxid = FRM_RXID(frm);
+	fpkt = xch->xch_fpkt;
+
+	/*
+	 * Decide the actual response length
+	 */
+	actual_size = frm->frm_payload_size;
+	if (actual_size > fpkt->pkt_rsplen) {
+		FCOEI_LOG(__FUNCTION__, "pkt_rsplen is smaller"
+		    "0x(%x - %x)", actual_size, fpkt->pkt_rsplen);
+		actual_size = fpkt->pkt_rsplen;
+	}
+
+	/*
+	 * Upate fpkt related elements
+	 */
+	FCOEI_FRM2FHDR(frm, &fpkt->pkt_resp_fhdr);
+	fcoei_fill_els_fpkt_resp(frm, xch, actual_size);
+
+	/*
+	 * we should set pkt_reason and pkt_state carefully now
+	 * Need to analyze pkt_reason according to the response.
+	 * Leave it untouched now.
+	 */
+	if (((ls_code_t *)(void *)xch->xch_fpkt->pkt_resp)->ls_code ==
+	    LA_ELS_RJT) {
+		fcoei_complete_xch(xch, NULL, FC_PKT_FABRIC_RJT,
+		    FC_REASON_INVALID_PARAM);
+	} else {
+		fcoei_complete_xch(xch, NULL, FC_PKT_SUCCESS, 0);
+	}
+}
+
+/*
+ * fcoei_process_sol_ct_rsp
+ *	CT response is received
+ *
+ * Input:
+ *	frm = CT response frame
+ *
+ * Returns:
+ *	N/A
+ *
+ * Comments:
+ *	N/A
+ */
+static void
+fcoei_process_sol_ct_rsp(fcoe_frame_t *frm)
+{
+	uint16_t		 sol_oxid    = 0;
+	uint32_t		 actual_size = 0;
+	fcoei_exchange_t	*xch;
+	fc_packet_t		*fpkt;
+
+	/*
+	 * Look for the related exchange
+	 */
+	xch = NULL;
+	fpkt = NULL;
+	sol_oxid = FRM_OXID(frm);
+	if (mod_hash_find(FRM2SS(frm)->ss_sol_oxid_hash,
+	    FMHK(sol_oxid), (mod_hash_val_t *)&xch) != 0) {
+		FCOEI_LOG(__FUNCTION__, "can't find the "
+		    "corresponding xch: oxid/%x", sol_oxid);
+		return;
+	}
+
+	xch->xch_rxid = FRM_RXID(frm);
+	fpkt = xch->xch_fpkt;
+
+	/*
+	 * Decide the actual response length
+	 */
+	actual_size = fpkt->pkt_rsplen;
+	if (actual_size > frm->frm_payload_size) {
+		FCOEI_LOG(__FUNCTION__, "payload is smaller"
+		    "0x(%x - %x)", actual_size, frm->frm_payload_size);
+		actual_size = frm->frm_payload_size;
+	}
+
+	/*
+	 * Update fpkt related elements
+	 * Caution: we needn't do byte swapping for CT response
+	 */
+	FCOEI_FRM2FHDR(frm, &fpkt->pkt_resp_fhdr);
+	bcopy(FPLD, (uint8_t *)xch->xch_fpkt->pkt_resp, actual_size);
+
+	/*
+	 * Complete it with frm as NULL
+	 */
+	fcoei_complete_xch(xch, NULL, FC_PKT_SUCCESS, 0);
+}
+
+/*
+ * fcoei_process_sol_abts_acc
+ *	ABTS accpet is received
+ *
+ * Input:
+ *	frm = ABTS accept frame
+ *
+ * Returns:
+ *	N/A
+ *
+ * Comments:
+ *	We will always finish the abortion of solicited exchanges,
+ *	so we will not depend on the response from the remote side.
+ *	We just log one message.
+ */
+static void
+fcoei_process_sol_abts_acc(fcoe_frame_t *frm)
+{
+	FCOEI_LOG(__FUNCTION__, "the remote side has agreed to "
+	    "abort the exchange: oxid-%x, rxid-%x",
+	    FCOE_B2V_2(frm->frm_payload + 4),
+	    FCOE_B2V_2(frm->frm_payload + 6));
+}
+
+/*
+ * fcoei_process_sol_abts_rjt
+ *	ABTS reject is received
+ *
+ * Input:
+ *	frm = ABTS reject frame
+ *
+ * Returns:
+ *	N/A
+ *
+ * Comments:
+ *	We will alwayas finish the abortion of solicited exchanges,
+ *	so we will not depend on the response from the remote side.
+ *	We just log one message.
+ */
+static void
+fcoei_process_sol_abts_rjt(fcoe_frame_t *frm)
+{
+	FCOEI_LOG(__FUNCTION__, "the remote side rejected "
+	    "our request to abort one exchange.: %p", frm);
+}
+
+/*
+ * fcoei_fill_els_fpkt_resp
+ *	Fill fpkt ELS response in host format according frm payload
+ *
+ * Input:
+ *	src = frm payload in link format
+ *	dest = fpkt ELS response in host format
+ *	size = Maximum conversion size
+ *	els_op = ELS opcode
+ *
+ * Returns:
+ *	N/A
+ *
+ * Comments:
+ *	fpkt->pkt_resp must be mapped to one data structure, and it's
+ *	different from the content in the raw frame
+ */
+static void
+fcoei_fill_els_fpkt_resp(fcoe_frame_t *frm, fcoei_exchange_t *xch, int size)
+{
+	uint8_t			*src	   = frm->frm_payload;
+	uint8_t			*dest	   = (uint8_t *)xch->xch_fpkt->pkt_resp;
+	ls_code_t		*els_code  = (ls_code_t *)(void *)dest;
+	la_els_logi_t		*els_logi  = (la_els_logi_t *)(void *)dest;
+	la_els_adisc_t		*els_adisc = (la_els_adisc_t *)(void *)dest;
+	la_els_rls_acc_t	*els_rls;
+	la_els_rnid_acc_t	*els_rnid;
+	struct fcp_prli_acc	*prli_acc;
+	int			 offset;
+
+	els_code->ls_code = FCOE_B2V_1(src);
+	if (els_code->ls_code == LA_ELS_RJT) {
+		FCOEI_LOG(__FUNCTION__, "size :%d", size);
+		return;
+	}
+
+	switch (((ls_code_t *)(void *)xch->xch_fpkt->pkt_cmd)->ls_code) {
+	case LA_ELS_FLOGI:
+		bcopy((char *)frm->frm_hdr - 22,
+		    frm->frm_eport->eport_efh_dst, ETHERADDRL);
+		if (frm->frm_payload[8] & 0x10) {
+			/*
+			 * We are in fabric p2p mode
+			 */
+			uint8_t src_addr[ETHERADDRL];
+			frm->frm_eport->eport_flags &=
+			    ~EPORT_FLAG_IS_DIRECT_P2P;
+			FCOE_SET_DEFAULT_OUI(src_addr);
+			bcopy(frm->frm_hdr->hdr_d_id, src_addr + 3, 3);
+			frm->frm_eport->eport_set_mac_address(
+			    frm->frm_eport, src_addr, 1);
+		} else {
+			/*
+			 * We are in direct p2p mode
+			 */
+			frm->frm_eport->eport_flags |=
+			    EPORT_FLAG_IS_DIRECT_P2P;
+		}
+
+		if (!(FRM2SS(frm)->ss_eport->eport_flags &
+		    EPORT_FLAG_IS_DIRECT_P2P)) {
+			FRM2SS(frm)->ss_p2p_info.fca_d_id = FRM_D_ID(frm);
+		}
+
+		/* FALLTHROUGH */
+
+	case LA_ELS_PLOGI:
+		if (FRM2SS(frm)->ss_eport->eport_flags &
+		    EPORT_FLAG_IS_DIRECT_P2P) {
+			FRM2SS(frm)->ss_p2p_info.fca_d_id = FRM_D_ID(frm);
+			FRM2SS(frm)->ss_p2p_info.d_id = FRM_S_ID(frm);
+		}
+
+		offset = offsetof(la_els_logi_t, common_service);
+		els_logi->common_service.fcph_version = FCOE_B2V_2(src +
+		    offset);
+		offset += 2;
+		els_logi->common_service.btob_credit = FCOE_B2V_2(src +
+		    offset);
+		offset += 2;
+		els_logi->common_service.cmn_features = FCOE_B2V_2(src +
+		    offset);
+		offset += 2;
+		els_logi->common_service.rx_bufsize = FCOE_B2V_2(src +
+		    offset);
+		offset += 2;
+		els_logi->common_service.conc_sequences = FCOE_B2V_2(src +
+		    offset);
+		offset += 2;
+		els_logi->common_service.relative_offset = FCOE_B2V_2(src +
+		    offset);
+		offset += 2;
+		els_logi->common_service.e_d_tov = FCOE_B2V_4(src +
+		    offset);
+
+		/*
+		 * port/node WWN
+		 */
+		offset = offsetof(la_els_logi_t, nport_ww_name);
+		bcopy(src + offset, &els_logi->nport_ww_name, 8);
+		offset = offsetof(la_els_logi_t, node_ww_name);
+		bcopy(src + offset, &els_logi->node_ww_name, 8);
+
+		/*
+		 * class_3
+		 */
+		offset = offsetof(la_els_logi_t, class_3);
+		els_logi->class_3.class_opt = FCOE_B2V_2(src + offset);
+		offset += 2;
+		els_logi->class_3.initiator_ctl = FCOE_B2V_2(src + offset);
+		offset += 2;
+		els_logi->class_3.recipient_ctl = FCOE_B2V_2(src + offset);
+		offset += 2;
+		els_logi->class_3.rcv_size = FCOE_B2V_2(src + offset);
+		offset += 2;
+		els_logi->class_3.conc_sequences = FCOE_B2V_2(src + offset);
+		offset += 2;
+		els_logi->class_3.n_port_e_to_e_credit = FCOE_B2V_2(src +
+		    offset);
+		offset += 2;
+		els_logi->class_3.open_seq_per_xchng = FCOE_B2V_2(src + offset);
+
+		break;
+
+	case LA_ELS_PRLI:
+		/*
+		 * PRLI service parameter response page
+		 *
+		 * fcp_prli_acc doesn't include ls_code, don't use offsetof
+		 */
+		offset = 4;
+		prli_acc = (struct fcp_prli_acc *)(void *)(dest + offset);
+		prli_acc->type = FCOE_B2V_1(src + offset);
+		/*
+		 * Type code extension
+		 */
+		offset += 1;
+		/*
+		 * PRLI response flags
+		 */
+		offset += 1;
+		prli_acc->orig_process_assoc_valid =
+		    (FCOE_B2V_2(src + offset) & BIT_15) ? 1 : 0;
+		prli_acc->resp_process_assoc_valid =
+		    (FCOE_B2V_2(src + offset) & BIT_14) ? 1 : 0;
+		prli_acc->image_pair_established =
+		    (FCOE_B2V_2(src + offset) & BIT_13) ? 1 : 0;
+		prli_acc->accept_response_code =
+		    FCOE_B2V_2(src + offset) & 0x0F00;
+		/*
+		 * process associator
+		 */
+		offset += 2;
+		prli_acc->orig_process_associator = FCOE_B2V_4(src + offset);
+		offset += 4;
+		prli_acc->resp_process_associator = FCOE_B2V_4(src + offset);
+		/*
+		 * FC-4 type
+		 */
+		offset += 4;
+		prli_acc->initiator_fn =
+		    (FCOE_B2V_4(src + offset) & BIT_5) ? 1 : 0;
+		prli_acc->target_fn =
+		    (FCOE_B2V_4(src + offset) & BIT_4) ? 1 : 0;
+		prli_acc->cmd_data_mixed =
+		    (FCOE_B2V_4(src + offset) & BIT_3) ? 1 : 0;
+		prli_acc->data_resp_mixed =
+		    (FCOE_B2V_4(src + offset) & BIT_2) ? 1 : 0;
+		prli_acc->read_xfer_rdy_disabled =
+		    (FCOE_B2V_4(src + offset) & BIT_1) ? 1 : 0;
+		prli_acc->write_xfer_rdy_disabled =
+		    (FCOE_B2V_4(src + offset) & BIT_0) ? 1 : 0;
+
+		break;
+
+	case LA_ELS_LOGO:
+		/*
+		 * could only be LS_ACC, no additional information
+		 */
+		els_code->ls_code = FCOE_B2V_1(src);
+		break;
+
+	case LA_ELS_SCR:
+		/*
+		 * LS_ACC/LS_RJT, no additional information
+		 */
+		els_code->ls_code = FCOE_B2V_1(src);
+		break;
+
+	case LA_ELS_ADISC:
+		offset = 5;
+		els_adisc->hard_addr.hard_addr = FCOE_B2V_3(src + offset);
+		offset = offsetof(la_els_adisc_t, port_wwn);
+		bcopy(src + offset, &els_adisc->port_wwn, 8);
+		offset = offsetof(la_els_adisc_t, node_wwn);
+		bcopy(src + offset, &els_adisc->node_wwn, 8);
+		offset += 9;
+		els_adisc->nport_id.port_id = FCOE_B2V_3(src + offset);
+		break;
+	case LA_ELS_RLS:
+		els_rls = (la_els_rls_acc_t *)(void *)dest;
+		els_rls->ls_code.ls_code = FCOE_B2V_1(src);
+		offset = 4;
+		els_rls->rls_link_params.rls_link_fail =
+		    FCOE_B2V_4(src + offset);
+		offset = 8;
+		els_rls->rls_link_params.rls_sync_loss =
+		    FCOE_B2V_4(src + offset);
+		offset = 12;
+		els_rls->rls_link_params.rls_sig_loss =
+		    FCOE_B2V_4(src + offset);
+		offset = 16;
+		els_rls->rls_link_params.rls_prim_seq_err =
+		    FCOE_B2V_4(src + offset);
+		offset = 20;
+		els_rls->rls_link_params.rls_invalid_word =
+		    FCOE_B2V_4(src + offset);
+		offset = 24;
+		els_rls->rls_link_params.rls_invalid_crc =
+		    FCOE_B2V_4(src + offset);
+		break;
+	case LA_ELS_RNID:
+		els_rnid = (la_els_rnid_acc_t *)(void *)dest;
+		els_rnid->ls_code.ls_code = FCOE_B2V_1(src);
+		offset = 4;
+		bcopy(src + offset, &els_rnid->hdr.data_format, 1);
+		offset = 5;
+		bcopy(src + offset, &els_rnid->hdr.cmn_len, 1);
+		offset = 7;
+		bcopy(src + offset, &els_rnid->hdr.specific_len, 1);
+		offset = 8;
+		bcopy(src + offset, els_rnid->data, FCIO_RNID_MAX_DATA_LEN);
+		break;
+	default:
+		FCOEI_LOG(__FUNCTION__, "unsupported R_CTL");
+		break;
+	}
+}
+
+/*
+ * fcoei_fill_fcp_resp
+ *	Fill fpkt FCP response in host format according to frm payload
+ *
+ * Input:
+ *	src - frm payload in link format
+ *	dest - fpkt FCP response in host format
+ *	size - Maximum conversion size
+ *
+ * Returns:
+ *	N/A
+ *
+ * Comments:
+ *	This is called only for SCSI response with non good status
+ */
+static void
+fcoei_fill_fcp_resp(uint8_t *src, uint8_t *dest, int size)
+{
+	fcp_rsp_t	*fcp_rsp_iu = (fcp_rsp_t *)(void *)dest;
+	int		 offset;
+
+	/*
+	 * set fcp_status
+	 */
+	offset = offsetof(fcp_rsp_t, fcp_u);
+	offset += 2;
+	fcp_rsp_iu->fcp_u.fcp_status.resid_under =
+	    (FCOE_B2V_1(src + offset) & BIT_3) ? 1 : 0;
+	fcp_rsp_iu->fcp_u.fcp_status.resid_over =
+	    (FCOE_B2V_1(src + offset) & BIT_2) ? 1 : 0;
+	fcp_rsp_iu->fcp_u.fcp_status.sense_len_set =
+	    (FCOE_B2V_1(src + offset) & BIT_1) ? 1 : 0;
+	fcp_rsp_iu->fcp_u.fcp_status.rsp_len_set =
+	    (FCOE_B2V_1(src + offset) & BIT_0) ? 1 : 0;
+	offset += 1;
+	fcp_rsp_iu->fcp_u.fcp_status.scsi_status = FCOE_B2V_1(src + offset);
+	/*
+	 * fcp_resid/fcp_sense_len/fcp_response_len
+	 */
+	offset = offsetof(fcp_rsp_t, fcp_resid);
+	fcp_rsp_iu->fcp_resid = FCOE_B2V_4(src + offset);
+	offset = offsetof(fcp_rsp_t, fcp_sense_len);
+	fcp_rsp_iu->fcp_sense_len = FCOE_B2V_4(src + offset);
+	offset = offsetof(fcp_rsp_t, fcp_response_len);
+	fcp_rsp_iu->fcp_response_len = FCOE_B2V_4(src + offset);
+	/*
+	 * sense or response
+	 */
+	offset += 4;
+	if (fcp_rsp_iu->fcp_sense_len) {
+		if ((offset + fcp_rsp_iu->fcp_sense_len) > size) {
+			FCOEI_LOG(__FUNCTION__, "buffer too small - sens");
+			return;
+		}
+		bcopy(src + offset, dest + offset, fcp_rsp_iu->fcp_sense_len);
+		offset += fcp_rsp_iu->fcp_sense_len;
+	}
+
+	if (fcp_rsp_iu->fcp_response_len) {
+		if ((offset + fcp_rsp_iu->fcp_response_len) > size) {
+			FCOEI_LOG(__FUNCTION__, "buffer too small - resp");
+			return;
+		}
+		bcopy(src + offset, dest + offset,
+		    fcp_rsp_iu->fcp_response_len);
+	}
+}
+
+void
+fcoei_init_ect_vectors(fcoe_client_t *ect)
+{
+	ect->ect_rx_frame	   = fcoei_rx_frame;
+	ect->ect_port_event	   = fcoei_port_event;
+	ect->ect_release_sol_frame = fcoei_release_sol_frame;
+}
+
+/*
+ * fcoei_process_unsol_frame
+ *	Unsolicited frame is received
+ *
+ * Input:
+ *	frame = unsolicited frame that is received
+ *
+ * Returns:
+ *	N/A
+ *
+ * Comments:
+ *	watchdog will call this to process unsolicited frames that we
+ *	just received fcoei_process_xx is used to handle different
+ *	unsolicited frames
+ */
+void
+fcoei_process_unsol_frame(fcoe_frame_t *frm)
+{
+	fcoei_exchange_t	*xch;
+	uint16_t		 sol_oxid;
+
+	switch (FRM_R_CTL(frm)) {
+	case R_CTL_SOLICITED_DATA:
+		/*
+		 * READ data phase frame
+		 * Find the associated exchange
+		 */
+		sol_oxid = FRM_OXID(frm);
+		if (mod_hash_find(FRM2SS(frm)->ss_sol_oxid_hash,
+		    FMHK(sol_oxid), (mod_hash_val_t *)&xch) != 0) {
+			PRT_FRM_HDR(__FUNCTION__, frm);
+			FCOEI_LOG(__FUNCTION__, "associated xch not found: "
+			    "oxid/%x %lu - %lu", sol_oxid,
+			    CURRENT_CLOCK, frm->frm_clock);
+			break;
+		}
+
+		/*
+		 * Copy data into fpkt data buffer, and update the counter
+		 */
+		bcopy(frm->frm_payload, (uint8_t *)xch->xch_fpkt->pkt_data +
+		    FRM_PARAM(frm), frm->frm_payload_size);
+		xch->xch_resid -= frm->frm_payload_size;
+		xch->xch_rxid = FRM_RXID(frm);
+		break;
+
+	case R_CTL_XFER_RDY:
+		fcoei_process_unsol_xfer_rdy(frm);
+		break;
+
+	case R_CTL_STATUS:
+		fcoei_process_sol_fcp_resp(frm);
+		break;
+
+	case R_CTL_ELS_REQ:
+		fcoei_process_unsol_els_req(frm);
+		break;
+
+	case R_CTL_LS_ABTS:
+		fcoei_process_unsol_abts_req(frm);
+		break;
+
+	case R_CTL_ELS_RSP:
+		fcoei_process_sol_els_rsp(frm);
+		break;
+
+	case R_CTL_SOLICITED_CONTROL:
+		fcoei_process_sol_ct_rsp(frm);
+		break;
+
+	case R_CTL_LS_BA_ACC:
+		fcoei_process_sol_abts_acc(frm);
+		break;
+
+	case R_CTL_LS_BA_RJT:
+		fcoei_process_sol_abts_rjt(frm);
+		break;
+
+	default:
+		/*
+		 * Unsupported frame
+		 */
+		PRT_FRM_HDR("Unsupported unsol frame: ", frm);
+	}
+
+	/*
+	 * Release the frame and netb
+	 */
+	frm->frm_eport->eport_free_netb(frm->frm_netb);
+	frm->frm_eport->eport_release_frame(frm);
+}
+
+/*
+ * fcoei_handle_sol_frame_done
+ *	solicited frame is just sent out
+ *
+ * Input:
+ *	frame = solicited frame that has been sent out
+ *
+ * Returns:
+ *	N/A
+ *
+ * Comments:
+ *	watchdog will call this to handle solicited frames that FCOEI
+ *	has sent out Non-request frame post handling
+ */
+void
+fcoei_handle_sol_frame_done(fcoe_frame_t *frm)
+{
+	/*
+	 * the corresponding xch could be NULL at this time
+	 */
+	fcoei_exchange_t	*xch  = FRM2IFM(frm)->ifm_xch;
+
+	switch (FRM2IFM(frm)->ifm_rctl) {
+	case R_CTL_ELS_RSP:
+		/*
+		 * Complete it with frm as NULL
+		 */
+		fcoei_complete_xch(xch, NULL, FC_PKT_SUCCESS, 0);
+		break;
+
+	case R_CTL_LS_BA_ACC:
+		FCOEI_LOG(__FUNCTION__,  "BA_ACC out: xch-%p, frm-%p",
+		    xch, frm);
+		PRT_FRM_HDR("LS_BA_ACC", frm);
+		break;
+
+	case R_CTL_LS_BA_RJT:
+		FCOEI_LOG(__FUNCTION__,  "BA_RJT out: xch-%p, frm-%p",
+		    xch, frm);
+		PRT_FRM_HDR("LS_BA_RJT", frm);
+		break;
+
+	default:
+		/*
+		 * Unsupported frame
+		 */
+		PRT_FRM_HDR("Unsupported sol frame: ", frm);
+	}
+
+	/*
+	 * We should release only the frame, and we don't care its netb
+	 */
+	FRM2SS(frm)->ss_eport->eport_release_frame(frm);
+}
+
+/*
+ * fcoei_port_event
+ *	link/port state changed
+ *
+ * Input:
+ *	eport = to indicate which port has changed
+ *	event = what change
+ *
+ * Returns:
+ *	N/A
+ *
+ * Comments:
+ *	refer fctl.h for ss_link_state value
+ */
+void
+fcoei_port_event(fcoe_port_t *eport, uint32_t event)
+{
+	fcoei_event_t	*ae;
+
+	if (!(EPORT2SS(eport)->ss_flags & SS_FLAG_LV_BOUND)) {
+		FCOEI_LOG(__FUNCTION__, "not bound now");
+		return;
+	}
+
+	mutex_enter(&EPORT2SS(eport)->ss_watchdog_mutex);
+	switch (event) {
+	case FCOE_NOTIFY_EPORT_LINK_DOWN:
+		EPORT2SS(eport)->ss_link_state = FC_STATE_OFFLINE;
+		cmn_err(CE_NOTE, "%02x%02x%02x%02x%02x%02x%02x%02x Link down",
+		    eport->eport_portwwn[0], eport->eport_portwwn[1],
+		    eport->eport_portwwn[2], eport->eport_portwwn[3],
+		    eport->eport_portwwn[4], eport->eport_portwwn[5],
+		    eport->eport_portwwn[6], eport->eport_portwwn[7]);
+		break;
+
+	case FCOE_NOTIFY_EPORT_LINK_UP:
+		if (eport->eport_mtu >= 2200) {
+			EPORT2SS(eport)->ss_fcp_data_payload_size =
+			    FCOE_DEFAULT_FCP_DATA_PAYLOAD_SIZE;
+		} else {
+			FCOEI_LOG(__FUNCTION__, "fcoei: MTU is not big enough. "
+			    "we will use 1K frames in FCP data phase.");
+			EPORT2SS(eport)->ss_fcp_data_payload_size =
+			    FCOE_MIN_FCP_DATA_PAYLOAD_SIZE;
+		}
+
+		cmn_err(CE_NOTE, "%02x%02x%02x%02x%02x%02x%02x%02x Link up",
+		    eport->eport_portwwn[0], eport->eport_portwwn[1],
+		    eport->eport_portwwn[2], eport->eport_portwwn[3],
+		    eport->eport_portwwn[4], eport->eport_portwwn[5],
+		    eport->eport_portwwn[6], eport->eport_portwwn[7]);
+		EPORT2SS(eport)->ss_link_state = FC_STATE_ONLINE;
+		break;
+
+	default:
+		FCOEI_LOG(__FUNCTION__, "unsupported event");
+		mutex_exit(&EPORT2SS(eport)->ss_watchdog_mutex);
+
+		return;
+	}
+
+	EPORT2SS(eport)->ss_port_event_counter++;
+	ae = (fcoei_event_t *)kmem_zalloc(sizeof (fcoei_event_t), KM_SLEEP);
+	ae->ae_type = AE_EVENT_PORT;
+	ae->ae_obj = EPORT2SS(eport);
+	ae->ae_specific = EPORT2SS(eport)->ss_link_state;
+	list_insert_tail(&EPORT2SS(eport)->ss_event_list, ae);
+	mutex_exit(&EPORT2SS(eport)->ss_watchdog_mutex);
+}
+
+/*
+ * fcoei_process_event_port
+ *	link/port state changed
+ *
+ * Input:
+ *	ae = link fcoei_event
+ *
+ * Returns:
+ *	N/A
+ *
+ * Comments:
+ *	asynchronous events from FCOE
+ */
+void
+fcoei_process_event_port(fcoei_event_t *ae)
+{
+	fcoei_soft_state_t	*ss = (fcoei_soft_state_t *)ae->ae_obj;
+
+	if (ss->ss_eport->eport_link_speed == FCOE_PORT_SPEED_1G) {
+		ae->ae_specific |= FC_STATE_1GBIT_SPEED;
+	} else if (ss->ss_eport->eport_link_speed ==
+	    FCOE_PORT_SPEED_10G) {
+		ae->ae_specific |= FC_STATE_10GBIT_SPEED;
+	}
+
+	if (ss->ss_flags & SS_FLAG_LV_BOUND) {
+		ss->ss_bind_info.port_statec_cb(ss->ss_port,
+		    (uint32_t)ae->ae_specific);
+	} else {
+		FCOEI_LOG(__FUNCTION__, "ss %p not bound now", ss);
+	}
+
+	atomic_add_32(&ss->ss_port_event_counter, -1);
+	kmem_free(ae, sizeof (fcoei_event_t));
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/usr/src/uts/common/io/fibre-channel/fca/fcoei/fcoei_lv.c	Mon Aug 10 10:43:48 2009 -0400
@@ -0,0 +1,2065 @@
+/*
+ * CDDL HEADER START
+ *
+ * The contents of this file are subject to the terms of the
+ * Common Development and Distribution License (the "License").
+ * You may not use this file except in compliance with the License.
+ *
+ * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+ * or http://www.opensolaris.org/os/licensing.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL HEADER in each
+ * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+ * If applicable, add the following below this CDDL HEADER, with the
+ * fields enclosed by brackets "[]" replaced with your own identifying
+ * information: Portions Copyright [yyyy] [name of copyright owner]
+ *
+ * CDDL HEADER END
+ */
+
+/*
+ * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
+ * Use is subject to license terms.
+ */
+
+/*
+ * This file defines interfaces between FCOE and LEADVILLE
+ */
+
+/*
+ * Driver kernel header files
+ */
+#include <sys/conf.h>
+#include <sys/ddi.h>
+#include <sys/stat.h>
+#include <sys/pci.h>
+#include <sys/sunddi.h>
+#include <sys/modctl.h>
+#include <sys/file.h>
+#include <sys/cred.h>
+#include <sys/byteorder.h>
+#include <sys/atomic.h>
+#include <sys/scsi/scsi.h>
+#include <sys/mac_client.h>
+#include <sys/modhash.h>
+
+/*
+ * LEADVILLE header files
+ */
+#include <sys/fibre-channel/fc.h>
+#include <sys/fibre-channel/impl/fc_fcaif.h>
+
+/*
+ * COMSTAR head files (BIT_* macro)
+ */
+#include <sys/stmf_defines.h>
+
+/*
+ * FCOE header files
+ */
+#include <sys/fcoe/fcoe_common.h>
+
+/*
+ * Driver's own header files
+ */
+#include <fcoei.h>
+
+/*
+ * forward declaration of static functions
+ */
+static void fcoei_port_enabled(void *arg);
+
+static void fcoei_populate_hba_fru_details(fcoei_soft_state_t *ss,
+    fc_fca_port_info_t *port_info);
+
+static void fcoei_initiate_ct_req(fcoei_exchange_t *xch);
+static void fcoei_initiate_fcp_cmd(fcoei_exchange_t *xch);
+static void fcoei_initiate_els_req(fcoei_exchange_t *xch);
+static void fcoei_initiate_els_resp(fcoei_exchange_t *xch);
+
+static void fcoei_fill_els_logi_cmd(fc_packet_t *fpkt, fcoe_frame_t *frm);
+static void fcoei_fill_els_prli_cmd(fc_packet_t *fpkt, fcoe_frame_t *frm);
+static void fcoei_fill_els_logo_cmd(fc_packet_t *fpkt, fcoe_frame_t *frm);
+static void fcoei_fill_els_scr_cmd(fc_packet_t *fpkt, fcoe_frame_t *frm);
+static void fcoei_fill_els_adisc_cmd(fc_packet_t *fpkt, fcoe_frame_t *frm);
+static void fcoei_fill_els_linit_cmd(fc_packet_t *fpkt, fcoe_frame_t *frm);
+static void fcoei_fill_els_rls_cmd(fc_packet_t *fpkt, fcoe_frame_t *frm);
+static void fcoei_fill_els_rnid_cmd(fc_packet_t *fpkt, fcoe_frame_t *frm);
+
+static void fcoei_fill_els_acc_resp(fc_packet_t *fpkt, fcoe_frame_t *frm);
+static void fcoei_fill_els_rjt_resp(fc_packet_t *fpkt, fcoe_frame_t *frm);
+static void fcoei_fill_els_logi_resp(fc_packet_t *fpkt, fcoe_frame_t *frm);
+static void fcoei_fill_els_prli_resp(fc_packet_t *fpkt, fcoe_frame_t *frm);
+static void fcoei_fill_els_logo_resp(fc_packet_t *fpkt, fcoe_frame_t *frm);
+static void fcoei_fill_els_adisc_resp(fc_packet_t *fpkt, fcoe_frame_t *frm);
+
+static void fcoei_logo_peer(void *arg);
+static void fcoei_fpkt_comp(fc_packet_t *fpkt);
+
+static uint32_t
+fcoei_xch_abort(mod_hash_key_t key, mod_hash_val_t *val, void *arg);
+
+
+/*
+ * fcoei_bind_port
+ *	Bind LV port instance with fcoei soft state
+ *
+ * Input:
+ *	dip = dev info of fcoei soft state
+ *	port_info = fcoei specific parameters about LV port
+ *	bind_info = LV specific parameters about fcoei soft state
+ *
+ * Returns:
+ *	The pointer to fcoei soft state
+ *
+ * Comments:
+ *	Unpon the completion of this call, the port must be offline.
+ *	fcoei_port_enabled could trigger it to online
+ */
+static void *
+fcoei_bind_port(dev_info_t *dip, fc_fca_port_info_t *port_info,
+    fc_fca_bind_info_t *bind_info)
+{
+	fcoei_soft_state_t	*ss;
+
+	/*
+	 * get state info based on the dip
+	 */
+	ss = (fcoei_soft_state_t *)
+	    ddi_get_soft_state(fcoei_state, ddi_get_instance(dip));
+	if (!ss) {
+		FCOEI_LOG(__FUNCTION__, "ss is NULL");
+		return (NULL);
+	}
+
+	/*
+	 * make sure this port isn't bound
+	 */
+	if (ss->ss_flags & SS_FLAG_LV_BOUND) {
+		port_info->pi_error = FC_ALREADY;
+		FCOEI_LOG(__FUNCTION__, "ss has been bound");
+		return (NULL);
+	}
+
+	if (bind_info->port_num) {
+		/*
+		 * make sure request is in bounds
+		 */
+		port_info->pi_error = FC_OUTOFBOUNDS;
+		FCOEI_LOG(__FUNCTION__, "port_num is not 0");
+		return (NULL);
+	}
+
+	/*
+	 * stash the ss_bind_info supplied by the FC Transport
+	 */
+	bcopy(bind_info, &ss->ss_bind_info, sizeof (fc_fca_bind_info_t));
+	ss->ss_port = bind_info->port_handle;
+
+	/*
+	 * RNID parameter
+	 */
+	port_info->pi_rnid_params.status = FC_FAILURE;
+
+	/*
+	 * populate T11 FC-HBA details
+	 */
+	fcoei_populate_hba_fru_details(ss, port_info);
+
+	/*
+	 * set port's current state, and it is always offline before binding
+	 *
+	 * We hack pi_port_state to tell LV if it's NODMA_FCA
+	 */
+	port_info->pi_port_state = FC_STATE_FCA_IS_NODMA;
+
+	/*
+	 * copy login param
+	 */
+	bcopy(&ss->ss_els_logi, &port_info->pi_login_params,
+	    sizeof (la_els_logi_t));
+
+	/*
+	 * Mark it as bound
+	 */
+	atomic_or_32(&ss->ss_flags, SS_FLAG_LV_BOUND);
+
+	/*
+	 * Let fcoe to report the link status
+	 */
+	fcoei_port_enabled((void *)ss);
+
+	FCOEI_LOG(__FUNCTION__, "Exit fcoei_bind_port: %p", ss);
+	return (ss);
+}
+
+/*
+ * fcoei_unbind_port
+ *	Un-bind the fcoei port
+ *
+ * Input:
+ *	fca_handle = fcoei soft state set in fcoei_bind_port
+ *
+ * Returns:
+ *	N/A
+ *
+ * Comments:
+ *	Clear binding flag
+ */
+static void
+fcoei_unbind_port(void *fca_handle)
+{
+	fcoei_soft_state_t *ss = (fcoei_soft_state_t *)fca_handle;
+
+	atomic_and_32(&ss->ss_flags, ~SS_FLAG_LV_BOUND);
+	ss->ss_eport->eport_ctl(ss->ss_eport, FCOE_CMD_PORT_OFFLINE, NULL);
+	FCOEI_LOG(__FUNCTION__, "Exit fcoei_unbind_port: %p", ss);
+}
+
+/*
+ * fcoei_init_pkt
+ *	Initialize fcoei related part of fc_packet
+ *
+ * Input:
+ *	fca_handle = fcoei soft state set in fcoei_bind_port
+ *	fpkt = The pointer to fc_packet
+ *	sleep = This call can sleep or not
+ *
+ * Returns:
+ *	FC_SUCCESS - Initialization completed successfully
+ *
+ * Comments:
+ *	Link the exchange elements with proper objects
+ */
+static int
+fcoei_init_pkt(void *fca_handle, fc_packet_t *fpkt, int sleep)
+{
+	fcoei_soft_state_t	*ss  = (fcoei_soft_state_t *)fca_handle;
+	fcoei_exchange_t	*xch = FPKT2XCH(fpkt);
+
+	ASSERT(sleep + 1);
+	xch->xch_ss = ss;
+	xch->xch_fpkt = fpkt;
+	xch->xch_flags = 0;
+	return (FC_SUCCESS);
+}
+
+/*
+ * fcoei_un_init_pkt
+ *	Uninitialize fcoei related part of fc_packet
+ *
+ * Input:
+ *	fca_handle = fcoei soft state set in fcoei_bind_port
+ *	fpkt = The pointer to fc_packet
+ *
+ * Returns:
+ *	FC_SUCCESS - Uninitialize successfully
+ *
+ * Comments:
+ *	Very simple, just return successfully
+ */
+static int
+fcoei_un_init_pkt(void *fca_handle, fc_packet_t *fpkt)
+{
+	ASSERT(fca_handle && fpkt);
+	return (FC_SUCCESS);
+}
+
+/*
+ * fcoei_get_cap
+ *	Export FCA hardware and software capability.
+ *
+ * Input:
+ *	fca_handle = fcoei soft state set in fcoei_bind_port
+ *	cap = pointer to the capability string
+ *	ptr = buffer pointer for returning capability
+ *
+ * Returns:
+ *	FC_CAP_ERROR - no such capability
+ *	FC_CAP_FOUND - the capability was returned and cannot be set
+ *
+ * Comments:
+ *	FC_CAP_UNSOL_BUF is one important capability, it will affect the
+ *	implementation of fcoei_ub_alloc/free.
+ */
+static int
+fcoei_get_cap(void * fca_handle, char *cap, void *ptr)
+{
+	fcoei_soft_state_t	*ss   = (fcoei_soft_state_t *)fca_handle;
+	uint32_t		*rptr = (uint32_t *)ptr;
+	int			 rval = FC_CAP_FOUND;
+
+	ASSERT(fca_handle);
+	FCOEI_LOG(__FUNCTION__, "cap: %s", cap);
+	if (strcmp(cap, FC_NODE_WWN) == 0) {
+		bcopy(&ss->ss_els_logi.node_ww_name.raw_wwn[0], ptr, 8);
+	} else if (strcmp(cap, FC_LOGIN_PARAMS) == 0) {
+		bcopy((void *)&ss->ss_els_logi, ptr, sizeof (la_els_logi_t));
+	} else if (strcmp(cap, FC_CAP_UNSOL_BUF) == 0) {
+		*rptr = (uint32_t)0;
+	} else if (strcmp(cap, FC_CAP_NOSTREAM_ON_UNALIGN_BUF) == 0) {
+		*rptr = (uint32_t)FC_ALLOW_STREAMING;
+	} else if (strcmp(cap, FC_CAP_PAYLOAD_SIZE) == 0) {
+		*rptr = (uint32_t)2136;
+	} else if (strcmp(cap, FC_CAP_POST_RESET_BEHAVIOR) == 0) {
+		*rptr = FC_RESET_RETURN_ALL;
+	} else if (strcmp(cap, FC_CAP_FCP_DMA) == 0) {
+		*rptr = FC_NO_DVMA_SPACE;
+	} else {
+		rval = FC_CAP_ERROR;
+		FCOEI_LOG(__FUNCTION__, "not supported");
+	}
+
+	return (rval);
+}
+
+/*
+ * fcoei_set_cap
+ *	Allow the FC Transport to set FCA capabilities if possible
+ *
+ * Input:
+ *	fca_handle = fcoei soft state set in fcoei_bind_port
+ *	cap = pointer to the capabilities string.
+ *	ptr = buffer pointer for capability.
+ *
+ * Returns:
+ *	FC_CAP_ERROR - no such capability
+ *
+ * Comments:
+ *	Currently, all capabilities can't be changed.
+ */
+static int
+fcoei_set_cap(void * fca_handle, char *cap, void *ptr)
+{
+	FCOEI_LOG(__FUNCTION__, "cap: %s, %p, %p", cap, fca_handle, ptr);
+	return (FC_CAP_ERROR);
+}
+
+/*
+ * fcoei_getmap
+ *	Get lilp map
+ *
+ * Input:
+ *	fca_handle = fcoei soft state set in fcoei_bind_port
+ *	mapbuf = the buffer to store lilp map
+ *
+ * Returns:
+ *	FC_FAILURE - Can't get the lilp map
+ *
+ * Comments:
+ *	fcoei can't work in loop topology, so it should never get called
+ */
+static int
+fcoei_getmap(void * fca_handle, fc_lilpmap_t *mapbuf)
+{
+	FCOEI_LOG(__FUNCTION__, "not: %p-%p", fca_handle, mapbuf);
+	return (FC_FAILURE);
+}
+
+/*
+ * fcoei_ub_alloc
+ *	Pre-allocate unsolicited buffers at the request of LV
+ *
+ * Input:
+ *	fca_handle = fcoei soft state set in fcoei_bind_port
+ *	tokens = token array for each buffer.
+ *	size = number of tokens
+ *	count = the acutual number of allocated unsolicited buffers
+ *	type = unsolicited buffer type
+ *
+ * Returns:
+ *	FC_SUCCESS - The requested buffers have been freeed
+ *
+ * Comments:
+ *	fcoei_get_cap will set UNSOL_BUF to 0, so it should never get called.
+ */
+static int
+fcoei_ub_alloc(void * fca_handle, uint64_t tokens[], uint32_t size,
+    uint32_t *count, uint32_t type)
+{
+	FCOEI_LOG(__FUNCTION__, "not: %p-%p-%x-%p-%x", fca_handle, tokens,
+	    size, count, type);
+	return (FC_SUCCESS);
+}
+
+/*
+ * fcoei_ub_free
+ *	Free the pre-allocated unsolicited buffers at the request of LV
+ *
+ * Input:
+ *	fca_handle = fcoei soft state set in fcoei_bind_port
+ *	count = number of buffers.
+ *	tokens = token array for each buffer.
+ *
+ * Returns:
+ *	FC_SUCCESS - The requested buffers have been freeed
+ *
+ * Comments:
+ *	fcoei_get_cap will set UNSOL_BUF to 0, so it should never get called.
+ */
+static int
+fcoei_ub_free(void * fca_handle, uint32_t count, uint64_t tokens[])
+{
+	FCOEI_EXT_LOG(__FUNCTION__, "not: %p-%x-%p", fca_handle, count, tokens);
+	return (FC_SUCCESS);
+}
+
+/*
+ * fcoei_ub_release
+ *	Release unsolicited buffers from FC Transport to FCA for future use
+ *
+ * Input:
+ *	fca_handle = fcoei soft state set in fcoei_bind_port
+ *	count = number of buffers.
+ *	tokens = token array for each buffer.
+ *
+ * Returns:
+ *	FC_SUCCESS - The requested buffers have been released.
+ *	FC_FAILURE - The requested buffers have not been released.
+ *
+ * Comments:
+ *	It will always succeed. It has nothing to do with fcoei_ub_alloc/free.
+ */
+static int
+fcoei_ub_release(void * fca_handle, uint32_t count, uint64_t tokens[])
+{
+	fc_unsol_buf_t *ub = *((fc_unsol_buf_t **)tokens);
+
+	if (count != 1) {
+		FCOEI_LOG(__FUNCTION__, "count is not 1: %p", fca_handle);
+		return (FC_FAILURE);
+	}
+
+	kmem_free(ub->ub_buffer, ub->ub_bufsize);
+	kmem_free(ub, sizeof (fc_unsol_buf_t));
+	FCOEI_EXT_LOG(__FUNCTION__, "ub is freeed");
+	return (FC_SUCCESS);
+}
+
+/*
+ * fcoei_abort
+ *	Direct FCA driver to abort an outstanding exchange associated with a
+ *	specified fc_packet_t struct
+ *
+ * Input:
+ *	fca_handle - fcoei soft state set in fcoei_bind_port
+ *	fpkt - A pointer to the fc_packet_t for the exchange to be aborted.
+ *	flags - Set to KM_SLEEP if the function may sleep, or KM_NOSLEEP if
+ *		the function may not sleep.
+ *
+ * Returns:
+ *	FC_ABORTED - The specified exchange was successfully aborted.
+ *	FC_ABORTING - The specified exchange is being aborted.
+ *	FC_ABORT_FAILED - The specified exchange could not be aborted.
+ *	FC_TRANSPORT_ERROR - A transport error occurred while attempting to
+ *		abort the specified exchange.
+ *	FC_BADEXCHANGE - The specified exchange does not exist.
+ *
+ * Comments:
+ *	After the exchange is aborted, the FCA driver must update the relevant
+ *	fields in the fc_packet_t struct as per normal exchange completion and
+ *	call the pkt_comp function to return the fc_packet_t struct to the FC
+ *	Transport.
+ *	When an exchange is successfully aborted, the FCA driver must set the
+ *	pkt_reason field in the fc_packet_t to FC_REASON_ABORTED and the
+ *	pkt_state field in the fc_packet_t to FC_PKT_LOCAL_RJT before returning
+ *	the fc_packet_t to the FC Transport.
+ *
+ *	Unfortunately, LV doesn't conform to the spec. It will take all these
+ *	legal return value as failure to abort.
+ */
+static int
+fcoei_abort(void * fca_handle, fc_packet_t *fpkt, int flags)
+{
+	FCOEI_LOG(__FUNCTION__, "not: %p-%p-%x", fca_handle, fpkt, flags);
+	return (FC_SUCCESS);
+}
+
+/*
+ * fcoei_reset
+ *	Reset link or hardware
+ *
+ * Input:
+ *	fca_handle = fcoei soft state set in fcoei_bind_port
+ *	cmd = reset type command
+ *
+ * Returns:
+ *	FC_SUCCESS - Reset has completed successfully
+ *	FC_FAILURE - Reset has failed
+ *
+ * Comments:
+ *	N/A
+ */
+static int
+fcoei_reset(void * fca_handle, uint32_t cmd)
+{
+	int			 rval = FC_SUCCESS;
+	fcoei_soft_state_t	*ss   = (fcoei_soft_state_t *)fca_handle;
+	fcoei_event_t *ae;
+
+	switch (cmd) {
+	case FC_FCA_LINK_RESET:
+		if (ss->ss_link_state != FC_STATE_ONLINE) {
+			FCOEI_LOG(__FUNCTION__, "not online now: ss-%p", ss);
+			rval = FC_FAILURE;
+			break;
+		}
+
+		/*
+		 * This is linkreset phase I
+		 */
+		fcoei_logo_peer(ss);
+		delay(FCOE_SEC2TICK(1) / 10);
+		ss->ss_eport->eport_ctl(ss->ss_eport, FCOE_CMD_PORT_OFFLINE, 0);
+		fcoei_port_event(ss->ss_eport, FCOE_NOTIFY_EPORT_LINK_DOWN);
+
+		/*
+		 * Perpare linkreset phase II
+		 */
+		ae = kmem_zalloc(sizeof (*ae), KM_SLEEP);
+		ae->ae_type = AE_EVENT_RESET;
+		ae->ae_obj = ss;
+
+		mutex_enter(&ss->ss_watchdog_mutex);
+		list_insert_tail(&ss->ss_event_list, ae);
+		mutex_exit(&ss->ss_watchdog_mutex);
+		break;
+
+	case FC_FCA_RESET:
+		break;
+
+	case FC_FCA_CORE:
+		break;
+
+	case FC_FCA_RESET_CORE:
+		break;
+
+	default:
+		rval = FC_FAILURE;
+		FCOEI_LOG(__FUNCTION__, "cmd-%x not supported", cmd);
+		break;
+	}
+
+	return (rval);
+}
+
+/*
+ * fcoei_port_manage
+ *	Perform various port management operations at the request of LV
+ *
+ * Input:
+ *	fca_handle = fcoei soft state set in fcoei_bind_port
+ *	pm = the pointer to the struct specifying the port management operation
+ *
+ * Returns:
+ *	FC_SUCCESS - The request completed successfully
+ *	FC_FAILURE - The request did not complete successfully
+ *
+ * Comments:
+ *	N/A
+ */
+static int
+fcoei_port_manage(void * fca_handle, fc_fca_pm_t *pm)
+{
+	int	rval = FC_FAILURE;
+	fcoei_soft_state_t	*ss = (fcoei_soft_state_t *)fca_handle;
+
+	if (fca_handle == NULL || pm == NULL) {
+		return (rval);
+	}
+
+	FCOEI_LOG(__FUNCTION__, "code0x%x, %p", pm->pm_cmd_code, fca_handle);
+	switch (pm->pm_cmd_code) {
+
+	case FC_PORT_GET_NODE_ID:
+	{
+		if (pm->pm_data_len < sizeof (fc_rnid_t)) {
+			rval = FC_NOMEM;
+			break;
+		}
+		ss->ss_rnid.port_id = ss->ss_p2p_info.fca_d_id;
+		bcopy((void *)&ss->ss_rnid,
+		    pm->pm_data_buf, sizeof (fc_rnid_t));
+		rval = FC_SUCCESS;
+		break;
+	}
+
+	case FC_PORT_SET_NODE_ID:
+	{
+		if (pm->pm_data_len < sizeof (fc_rnid_t)) {
+			rval = FC_NOMEM;
+			break;
+		}
+		bcopy(pm->pm_data_buf,
+		    (void *)&ss->ss_rnid, sizeof (fc_rnid_t));
+		rval = FC_SUCCESS;
+		break;
+	}
+
+	default:
+		FCOEI_LOG(__FUNCTION__, "unsupported cmd-%x", pm->pm_cmd_code);
+		rval = FC_INVALID_REQUEST;
+		break;
+	}
+
+	return (rval);
+}
+
+/*
+ * fcoei_get_device
+ *	Get fcoei remote port with FCID of d_id
+ *
+ * Input:
+ *	fca_handle = fcoei soft state set in fcoei_bind_port
+ *	d_id = 24-bit FCID of remote port
+ *
+ * Returns:
+ *	The pointer to fcoei remote port
+ *
+ * Comments:
+ *	fcoei has no remote port device
+ */
+static void *
+fcoei_get_device(void *fca_handle, fc_portid_t d_id)
+{
+	FCOEI_EXT_LOG(__FUNCTION__, "not supported: %p-%x", fca_handle, d_id);
+	return (NULL);
+}
+
+/*
+ * fcoei_notify
+ *	Notify the change of target device
+ *
+ * Input:
+ *	fca_handle = fcoei soft state set in fcoei_bind_port
+ *	cmd = detailed cmd
+ *
+ * Returns:
+ *	FC_SUCCESS - Notification completed successfully
+ *
+ * Comments:
+ *	It's only needed to support non-COMSTAR FC target, so it should
+ *	never get called.
+ */
+static int
+fcoei_notify(void *fca_handle, uint32_t cmd)
+{
+	FCOEI_LOG(__FUNCTION__, "not supported: %p-%x", fca_handle, cmd);
+	return (FC_SUCCESS);
+}
+
+/*
+ * fcoei_transport
+ *	Submit FCP/CT requests
+ *
+ * Input:
+ *	fca_handle - fcoei soft state set in fcoei_bind_port
+ *	fpkt - LV fc_packet
+ *
+ * Returns:
+ *	N/A
+ *
+ * Comments:
+ *	N/A
+ */
+static int
+fcoei_transport(void *fca_handle, fc_packet_t *fpkt)
+{
+	fcoei_soft_state_t	*ss  = (fcoei_soft_state_t *)fca_handle;
+	fcoei_exchange_t	*xch = FPKT2XCH(fpkt);
+	uint16_t		 pkt_tran_flags = fpkt->pkt_tran_flags;
+
+	xch->xch_start_tick = ddi_get_lbolt();
+	xch->xch_end_tick = xch->xch_start_tick +
+	    FCOE_SEC2TICK(fpkt->pkt_timeout);
+	xch->xch_ae.ae_type = AE_EVENT_EXCHANGE;
+	xch->xch_ae.ae_obj = xch;
+
+	if (pkt_tran_flags & FC_TRAN_NO_INTR) {
+		FCOEI_LOG(__FUNCTION__, "AaA polling: %p-%p", fpkt, xch);
+		sema_init(&xch->xch_sema, 0, NULL, SEMA_DRIVER, NULL);
+	}
+
+	mutex_enter(&ss->ss_watchdog_mutex);
+	list_insert_tail(&ss->ss_event_list, &xch->xch_ae);
+	if (ss->ss_flags & SS_FLAG_WATCHDOG_IDLE) {
+		cv_signal(&ss->ss_watchdog_cv);
+	}
+	mutex_exit(&ss->ss_watchdog_mutex);
+
+	if (pkt_tran_flags & FC_TRAN_NO_INTR) {
+		FCOEI_LOG(__FUNCTION__, "BaB polling: %p-%p", fpkt, xch);
+		sema_p(&xch->xch_sema);
+		sema_destroy(&xch->xch_sema);
+		FCOEI_LOG(__FUNCTION__, "after polling: %p-%p", fpkt, xch);
+	}
+
+	return (FC_SUCCESS);
+}
+
+/*
+ * fcoei_els_send
+ *	Submit ELS request or response
+ *
+ * Input:
+ *	fca_handle - fcoei soft state set in fcoei_bind_port
+ *	fpkt = LV fc_packet
+ *
+ * Returns:
+ *	N/A
+ *
+ * Comments:
+ *	N/A
+ */
+static int
+fcoei_els_send(void *fca_handle, fc_packet_t *fpkt)
+{
+	fcoei_soft_state_t	*ss  = (fcoei_soft_state_t *)fca_handle;
+	fcoei_exchange_t	*xch = FPKT2XCH(fpkt);
+
+	if (fpkt->pkt_tran_flags & FC_TRAN_NO_INTR) {
+		FCOEI_LOG(__FUNCTION__, "ELS poll mode is not supported");
+		return (FC_BADPACKET);
+	}
+
+	xch->xch_start_tick = ddi_get_lbolt();
+	xch->xch_end_tick = xch->xch_start_tick +
+	    FCOE_SEC2TICK(fpkt->pkt_timeout);
+	xch->xch_ae.ae_type = AE_EVENT_EXCHANGE;
+	xch->xch_ae.ae_obj = xch;
+
+	/*
+	 * LV could release ub after this call, so we must save the ub type
+	 * for later use
+	 */
+	if (fpkt->pkt_cmd_fhdr.r_ctl == R_CTL_ELS_RSP) {
+		((uint8_t *)&fpkt->pkt_fca_rsvd1)[0] =
+		    ((fc_unsol_buf_t *)fpkt->pkt_ub_resp_token)->ub_buffer[0];
+	}
+
+	mutex_enter(&ss->ss_watchdog_mutex);
+	list_insert_tail(&ss->ss_event_list, &xch->xch_ae);
+	if (ss->ss_flags & SS_FLAG_WATCHDOG_IDLE) {
+		cv_signal(&ss->ss_watchdog_cv);
+	}
+	mutex_exit(&ss->ss_watchdog_mutex);
+
+	return (FC_SUCCESS);
+}
+
+/*
+ * fcoei_populate_hba_fru_details
+ *	Fill detailed information about HBA
+ *
+ * Input:
+ *	ss - fcoei soft state
+ *	port_info = fc_fca_port_info_t that need be updated
+ *
+ * Returns:
+ *	N/A
+ *
+ * Comments:
+ *	N/A
+ */
+static void
+fcoei_populate_hba_fru_details(fcoei_soft_state_t *ss,
+    fc_fca_port_info_t *port_info)
+{
+	fca_port_attrs_t *port_attrs = &(port_info->pi_attrs);
+	int	instance;
+
+	ASSERT(ss != NULL);
+	(void) snprintf(port_attrs->manufacturer, FCHBA_MANUFACTURER_LEN,
+	    "Sun Microsystems, Inc.");
+	(void) snprintf(port_attrs->driver_name, FCHBA_DRIVER_NAME_LEN,
+	    "%s", FCOEI_NAME_VERSION);
+	(void) snprintf(port_attrs->driver_version, FCHBA_DRIVER_VERSION_LEN,
+	    "%s", FCOEI_VERSION);
+	(void) strcpy(port_attrs->serial_number, "N/A");
+	(void) strcpy(port_attrs->hardware_version, "N/A");
+	(void) strcpy(port_attrs->model, "FCoE Virtual FC HBA");
+	(void) strcpy(port_attrs->model_description, "N/A");
+	(void) strcpy(port_attrs->firmware_version, "N/A");
+	(void) strcpy(port_attrs->option_rom_version, "N/A");
+
+	port_attrs->vendor_specific_id = 0xFC0E;
+	port_attrs->max_frame_size = FCOE_MAX_FC_FRAME_SIZE;
+	port_attrs->supported_cos = 0x10000000;
+	port_attrs->supported_speed = FC_HBA_PORTSPEED_1GBIT |
+	    FC_HBA_PORTSPEED_10GBIT;
+	instance = ddi_get_instance(ss->ss_dip);
+	port_attrs->hba_fru_details.high =
+	    (short)((instance & 0xffff0000) >> 16);
+	port_attrs->hba_fru_details.low =
+	    (short)(instance & 0x0000ffff);
+}
+
+/*
+ * fcoei_port_enabled
+ *	Notify fcoe that the port has been enabled
+ *
+ * Input:
+ *	arg = the related soft state
+ *
+ * Returns:
+ *	N/A
+ *
+ * Comments:
+ *	Only after this, fcoe will report the link status to us
+ */
+static void
+fcoei_port_enabled(void *arg)
+{
+	fcoei_soft_state_t	*ss  = (fcoei_soft_state_t *)arg;
+
+	ss->ss_eport->eport_ctl(ss->ss_eport, FCOE_CMD_PORT_ONLINE, NULL);
+}
+
+
+/*
+ * fcoei_initiate_ct_req
+ *	Fill and submit CT request
+ *
+ * Input:
+ *	xch - the exchange that will be initiated
+ *
+ * Returns:
+ *	N/A
+ *
+ * Comments:
+ *	N/A
+ */
+static void
+fcoei_initiate_ct_req(fcoei_exchange_t *xch)
+{
+	fc_packet_t	*fpkt	 = xch->xch_fpkt;
+	fc_ct_header_t	*ct	 = (fc_ct_header_t *)(void *)fpkt->pkt_cmd;
+	uint8_t		*bp	 = (uint8_t *)fpkt->pkt_cmd;
+	fcoe_frame_t	*frm;
+	int		 offset;
+	int		 idx;
+	uint32_t	 cmd_len = fpkt->pkt_cmdlen;
+
+	/*
+	 * Ensure it's 4-byte aligned
+	 */
+	cmd_len = P2ROUNDUP(cmd_len, 4);
+
+	/*
+	 * Allocate CT request frame
+	 */
+	frm = xch->xch_ss->ss_eport->eport_alloc_frame(xch->xch_ss->ss_eport,
+	    cmd_len + FCFH_SIZE, NULL);
+	if (frm == NULL) {
+		FCOEI_LOG(__FUNCTION__, "failed to alloc: %p", xch);
+		return;
+	}
+
+	bzero(frm->frm_payload, cmd_len);
+	xch->xch_cnt = xch->xch_ss->ss_sol_cnt;
+	atomic_add_32(xch->xch_cnt, 1);
+
+	FFM_R_CTL(fpkt->pkt_cmd_fhdr.r_ctl, frm);
+	FFM_D_ID(fpkt->pkt_cmd_fhdr.d_id, frm);
+	FFM_S_ID(fpkt->pkt_cmd_fhdr.s_id, frm);
+	FFM_TYPE(fpkt->pkt_cmd_fhdr.type, frm);
+	FFM_F_CTL(fpkt->pkt_cmd_fhdr.f_ctl, frm);
+	FFM_OXID(xch->xch_oxid, frm);
+	FFM_RXID(xch->xch_rxid, frm);
+	fcoei_init_ifm(frm, xch);
+
+	/*
+	 * CT header (FC payload)
+	 */
+	offset = 0;
+	FCOE_V2B_1(ct->ct_rev, FPLD + offset);
+
+	offset = 1;
+	FCOE_V2B_3(ct->ct_inid, FPLD + offset);
+
+	offset = 4;
+	FCOE_V2B_1(ct->ct_fcstype, FPLD + offset);
+
+	offset = 5;
+	FCOE_V2B_1(ct->ct_fcssubtype, FPLD + offset);
+
+	offset = 6;
+	FCOE_V2B_1(ct->ct_options, FPLD + offset);
+
+	offset = 8;
+	FCOE_V2B_2(ct->ct_cmdrsp, FPLD + offset);
+
+	offset = 10;
+	FCOE_V2B_2(ct->ct_aiusize, FPLD + offset);
+
+	offset = 13;
+	FCOE_V2B_1(ct->ct_reason, FPLD + offset);
+
+	offset = 14;
+	FCOE_V2B_1(ct->ct_expln, FPLD + offset);
+
+	offset = 15;
+	FCOE_V2B_1(ct->ct_vendor, FPLD + offset);
+
+	/*
+	 * CT payload (FC payload)
+	 */
+	switch (ct->ct_fcstype) {
+	case FCSTYPE_DIRECTORY:
+		switch (ct->ct_cmdrsp) {
+		case NS_GA_NXT:
+		case NS_GPN_ID:
+		case NS_GNN_ID:
+		case NS_GCS_ID:
+		case NS_GFT_ID:
+		case NS_GSPN_ID:
+		case NS_GPT_ID:
+		case NS_GID_FT:
+		case NS_GID_PT:
+		case NS_DA_ID:
+			offset = 16;
+			FCOE_V2B_4(((uint32_t *)(intptr_t)(bp + offset))[0],
+			    FPLD + offset);
+			break;
+
+		case NS_GID_PN:
+			offset = 16;
+			bcopy(bp + offset, FPLD + offset, 8);
+			break;
+
+		case NS_RNN_ID:
+		case NS_RPN_ID:
+			offset = 16;
+			FCOE_V2B_4(((uint32_t *)(intptr_t)(bp + offset))[0],
+			    FPLD + offset);
+
+			offset = 20;
+			bcopy(bp + offset, FPLD + offset, 8);
+			break;
+
+		case NS_RSPN_ID:
+			offset = 16;
+			FCOE_V2B_4(((uint32_t *)(intptr_t)(bp + offset))[0],
+			    FPLD + offset);
+
+			offset = 20;
+			bcopy(bp + offset, FPLD + offset, bp[20] + 1);
+			break;
+
+		case NS_RSNN_NN:
+			offset = 16;
+			bcopy(bp + offset, FPLD + offset, 8);
+
+			offset = 24;
+			bcopy(bp + offset, FPLD + offset, bp[24] + 1);
+			break;
+
+		case NS_RFT_ID:
+			offset = 16;
+			FCOE_V2B_4(((uint32_t *)(intptr_t)(bp + offset))[0],
+			    FPLD + offset);
+
+			/*
+			 * fp use bcopy to copy fp_fc4_types,
+			 * we need to swap order for each integer
+			 */
+			offset = 20;
+			for (idx = 0; idx < 8; idx++) {
+				FCOE_V2B_4(
+				    ((uint32_t *)(intptr_t)(bp + offset))[0],
+				    FPLD + offset);
+				offset += 4;
+			}
+			break;
+
+		case NS_RCS_ID:
+		case NS_RPT_ID:
+			offset = 16;
+			FCOE_V2B_4(((uint32_t *)(intptr_t)(bp + offset))[0],
+			    FPLD + offset);
+
+			offset = 20;
+			FCOE_V2B_4(((uint32_t *)(intptr_t)(bp + offset))[0],
+			    FPLD + offset);
+			break;
+
+		case NS_RIP_NN:
+			offset = 16;
+			bcopy(bp + offset, FPLD + offset, 24);
+			break;
+
+		default:
+			fcoei_complete_xch(xch, frm, FC_PKT_FAILURE,
+			    FC_REASON_CMD_UNSUPPORTED);
+			break;
+		}
+		break; /* FCSTYPE_DIRECTORY */
+
+	case FCSTYPE_MGMTSERVICE:
+		switch (ct->ct_cmdrsp) {
+		case MS_GIEL:
+			FCOEI_LOG(__FUNCTION__,
+			    "MS_GIEL ct_fcstype %x, ct_cmdrsp: %x",
+			    ct->ct_fcstype, ct->ct_cmdrsp);
+			break;
+
+		default:
+			fcoei_complete_xch(xch, frm, FC_PKT_FAILURE,
+			    FC_REASON_CMD_UNSUPPORTED);
+			break;
+		}
+		break; /* FCSTYPE_MGMTSERVICE */
+
+	default:
+		fcoei_complete_xch(xch, frm, FC_PKT_FAILURE,
+		    FC_REASON_CMD_UNSUPPORTED);
+		break;
+	}
+	xch->xch_ss->ss_eport->eport_tx_frame(frm);
+}
+
+/*
+ * fcoei_initiate_fcp_cmd
+ *	Submit FCP command
+ *
+ * Input:
+ *	xch - the exchange to be submitted
+ *
+ * Returns:
+ *	N/A
+ *
+ * Comments:
+ *	N/A
+ */
+static void
+fcoei_initiate_fcp_cmd(fcoei_exchange_t *xch)
+{
+	fc_packet_t	*fpkt = xch->xch_fpkt;
+	fcoe_frame_t	*frm;
+	fcp_cmd_t	*fcp_cmd_iu = (fcp_cmd_t *)(void *)fpkt->pkt_cmd;
+	int		 offset = 0;
+
+	ASSERT((fpkt->pkt_cmdlen % 4) == 0);
+	frm = xch->xch_ss->ss_eport->eport_alloc_frame(xch->xch_ss->ss_eport,
+	    fpkt->pkt_cmdlen + FCFH_SIZE, NULL);
+	if (!frm) {
+		ASSERT(0);
+	} else {
+		fcoei_init_ifm(frm, xch);
+		bzero(frm->frm_payload, fpkt->pkt_cmdlen);
+	}
+
+	/*
+	 * This will affect timing check
+	 */
+	xch->xch_cnt = xch->xch_ss->ss_sol_cnt;
+	atomic_add_32(xch->xch_cnt, 1);
+
+	/*
+	 * Set exchange residual bytes
+	 */
+	xch->xch_resid = (int)fpkt->pkt_datalen;
+
+	/*
+	 * Fill FCP command IU
+	 *
+	 * fcp_ent_addr
+	 */
+	FCOE_V2B_2(fcp_cmd_iu->fcp_ent_addr.ent_addr_0,
+	    frm->frm_payload + offset);
+	offset += 2;
+	FCOE_V2B_2(fcp_cmd_iu->fcp_ent_addr.ent_addr_1,
+	    frm->frm_payload + offset);
+	offset += 2;
+	FCOE_V2B_2(fcp_cmd_iu->fcp_ent_addr.ent_addr_2,
+	    frm->frm_payload + offset);
+	offset += 2;
+	FCOE_V2B_2(fcp_cmd_iu->fcp_ent_addr.ent_addr_3,
+	    frm->frm_payload + offset);
+	/*
+	 * fcp_cntl
+	 */
+	offset = offsetof(fcp_cmd_t, fcp_cntl);
+	frm->frm_payload[offset] = 0;
+
+	offset += 1;
+	frm->frm_payload[offset] = fcp_cmd_iu->fcp_cntl.cntl_qtype & 0x07;
+	offset += 1;
+	frm->frm_payload[offset] =
+	    (fcp_cmd_iu->fcp_cntl.cntl_kill_tsk * BIT_7) |
+	    (fcp_cmd_iu->fcp_cntl.cntl_clr_aca * BIT_6) |
+	    (fcp_cmd_iu->fcp_cntl.cntl_reset_tgt * BIT_5) |
+	    (fcp_cmd_iu->fcp_cntl.cntl_reset_lun * BIT_4) |
+	    (fcp_cmd_iu->fcp_cntl.cntl_clr_tsk * BIT_2) |
+	    (fcp_cmd_iu->fcp_cntl.cntl_abort_tsk * BIT_1);
+	offset += 1;
+	frm->frm_payload[offset] =
+	    (fcp_cmd_iu->fcp_cntl.cntl_read_data * BIT_1) |
+	    (fcp_cmd_iu->fcp_cntl.cntl_write_data * BIT_0);
+	/*
+	 * fcp_cdb
+	 */
+	offset = offsetof(fcp_cmd_t, fcp_cdb);
+	bcopy(fcp_cmd_iu->fcp_cdb, frm->frm_payload + offset, FCP_CDB_SIZE);
+	/*
+	 * fcp_data_len
+	 */
+	offset += FCP_CDB_SIZE;
+	FCOE_V2B_4(fcp_cmd_iu->fcp_data_len, frm->frm_payload + offset);
+
+	/*
+	 * FC frame header
+	 */
+	FRM2IFM(frm)->ifm_rctl = fpkt->pkt_cmd_fhdr.r_ctl;
+
+	FFM_R_CTL(fpkt->pkt_cmd_fhdr.r_ctl, frm);
+	FFM_D_ID(fpkt->pkt_cmd_fhdr.d_id, frm);
+	FFM_S_ID(fpkt->pkt_cmd_fhdr.s_id, frm);
+	FFM_TYPE(fpkt->pkt_cmd_fhdr.type, frm);
+	FFM_F_CTL(0x290000, frm);
+	FFM_OXID(xch->xch_oxid, frm);
+	FFM_RXID(xch->xch_rxid, frm);
+
+	xch->xch_ss->ss_eport->eport_tx_frame(frm);
+}
+
+/*
+ * fcoei_initiate_els_req
+ *	Initiate ELS request
+ *
+ * Input:
+ *	xch = the exchange that will be initiated
+ *
+ * Returns:
+ *	N/A
+ *
+ * Comments:
+ *	N/A
+ */
+static void
+fcoei_initiate_els_req(fcoei_exchange_t *xch)
+{
+	fc_packet_t	*fpkt = xch->xch_fpkt;
+	fcoe_frame_t	*frm;
+	ls_code_t	*els_code;
+
+	ASSERT((fpkt->pkt_cmdlen % 4) == 0);
+	frm = xch->xch_ss->ss_eport->eport_alloc_frame(xch->xch_ss->ss_eport,
+	    fpkt->pkt_cmdlen + FCFH_SIZE, NULL);
+	if (!frm) {
+		ASSERT(0);
+	} else {
+		fcoei_init_ifm(frm, xch);
+		bzero(frm->frm_payload, fpkt->pkt_cmdlen);
+	}
+
+	/*
+	 * This will affect timing check
+	 */
+	xch->xch_cnt = xch->xch_ss->ss_sol_cnt;
+	atomic_add_32(xch->xch_cnt, 1);
+
+	els_code = (ls_code_t *)(void *)fpkt->pkt_cmd;
+	switch (els_code->ls_code) {
+	case LA_ELS_FLOGI:
+		/*
+		 * For FLOGI, we expect response within E_D_TOV
+		 */
+		xch->xch_start_tick = ddi_get_lbolt();
+		xch->xch_end_tick = xch->xch_start_tick +
+		    FCOE_SEC2TICK(2);
+		xch->xch_ss->ss_flags &= ~SS_FLAG_FLOGI_FAILED;
+		/* FALLTHROUGH */
+
+	case LA_ELS_PLOGI:
+		fcoei_fill_els_logi_cmd(fpkt, frm);
+		break;
+
+	case LA_ELS_PRLI:
+		fcoei_fill_els_prli_cmd(fpkt, frm);
+		break;
+
+	case LA_ELS_SCR:
+		fcoei_fill_els_scr_cmd(fpkt, frm);
+		break;
+
+	case LA_ELS_LINIT:
+		fcoei_fill_els_linit_cmd(fpkt, frm);
+		break;
+
+	case LA_ELS_ADISC:
+		fcoei_fill_els_adisc_cmd(fpkt, frm);
+		break;
+
+	case LA_ELS_LOGO:
+		/*
+		 * For LOGO, we expect response within E_D_TOV
+		 */
+		xch->xch_start_tick = ddi_get_lbolt();
+		xch->xch_end_tick = xch->xch_start_tick +
+		    FCOE_SEC2TICK(2);
+		fcoei_fill_els_logo_cmd(fpkt, frm);
+		break;
+	case LA_ELS_RLS:
+		fcoei_fill_els_rls_cmd(fpkt, frm);
+		break;
+	case LA_ELS_RNID:
+		fcoei_fill_els_rnid_cmd(fpkt, frm);
+		break;
+	default:
+		fcoei_complete_xch(xch, frm, FC_PKT_FAILURE,
+		    FC_REASON_CMD_UNSUPPORTED);
+		return;
+	}
+
+	/*
+	 * set ifm_rtcl
+	 */
+	FRM2IFM(frm)->ifm_rctl = fpkt->pkt_cmd_fhdr.r_ctl;
+
+	/*
+	 * FCPH
+	 */
+	FFM_R_CTL(fpkt->pkt_cmd_fhdr.r_ctl, frm);
+	FFM_D_ID(fpkt->pkt_cmd_fhdr.d_id, frm);
+	FFM_S_ID(fpkt->pkt_cmd_fhdr.s_id, frm);
+	FFM_TYPE(fpkt->pkt_cmd_fhdr.type, frm);
+	FFM_F_CTL(0x290000, frm);
+	FFM_OXID(xch->xch_oxid, frm);
+	FFM_RXID(xch->xch_rxid, frm);
+
+	xch->xch_ss->ss_eport->eport_tx_frame(frm);
+}
+
+/*
+ * fcoei_initiate_els_resp
+ *	Originate ELS response
+ *
+ * Input:
+ *	xch = the associated exchange
+ *
+ * Returns:
+ *	N/A
+ *
+ * Comments:
+ *	N/A
+ */
+static void
+fcoei_initiate_els_resp(fcoei_exchange_t *xch)
+{
+	fc_packet_t	*fpkt = xch->xch_fpkt;
+	fcoe_frame_t	*frm;
+
+	ASSERT((fpkt->pkt_cmdlen % 4) == 0);
+	frm = xch->xch_ss->ss_eport->eport_alloc_frame(xch->xch_ss->ss_eport,
+	    fpkt->pkt_cmdlen + FCFH_SIZE, NULL);
+	if (!frm) {
+		ASSERT(0);
+	} else {
+		fcoei_init_ifm(frm, xch);
+		bzero(frm->frm_payload, fpkt->pkt_cmdlen);
+	}
+
+	/*
+	 * This will affect timing check
+	 */
+	xch->xch_cnt = xch->xch_ss->ss_unsol_cnt;
+	atomic_add_32(xch->xch_cnt, 1);
+
+	/*
+	 * Set ifm_rctl
+	 */
+	FRM2IFM(frm)->ifm_rctl = fpkt->pkt_cmd_fhdr.r_ctl;
+
+	/*
+	 * FCPH
+	 */
+	FFM_R_CTL(fpkt->pkt_cmd_fhdr.r_ctl, frm);
+	FFM_D_ID(fpkt->pkt_cmd_fhdr.d_id, frm);
+	FFM_S_ID(fpkt->pkt_cmd_fhdr.s_id, frm);
+	FFM_TYPE(fpkt->pkt_cmd_fhdr.type, frm);
+	FFM_F_CTL(0x980000, frm);
+	FFM_OXID(xch->xch_oxid, frm);
+	FFM_RXID(xch->xch_rxid, frm);
+
+	switch (((uint8_t *)&fpkt->pkt_fca_rsvd1)[0]) {
+	case LA_ELS_FLOGI:
+		fcoei_fill_els_logi_resp(fpkt, frm);
+		break;
+
+	case LA_ELS_PLOGI:
+		if (FRM2SS(frm)->ss_eport->eport_flags &
+		    EPORT_FLAG_IS_DIRECT_P2P) {
+			FRM2SS(frm)->ss_p2p_info.fca_d_id = FRM_S_ID(frm);
+			FRM2SS(frm)->ss_p2p_info.d_id = FRM_D_ID(frm);
+		}
+
+		fcoei_fill_els_logi_resp(fpkt, frm);
+		break;
+
+	case LA_ELS_PRLI:
+		fcoei_fill_els_prli_resp(fpkt, frm);
+		break;
+
+	case LA_ELS_ADISC:
+		fcoei_fill_els_adisc_resp(fpkt, frm);
+		break;
+
+	case LA_ELS_LOGO:
+		fcoei_fill_els_logo_resp(fpkt, frm);
+		break;
+	case LA_ELS_RSCN:
+		fcoei_fill_els_acc_resp(fpkt, frm);
+		break;
+
+	default:
+		fcoei_complete_xch(xch, frm, FC_PKT_FAILURE,
+		    FC_REASON_CMD_UNSUPPORTED);
+		return;
+	}
+
+	xch->xch_ss->ss_eport->eport_tx_frame(frm);
+}
+
+/*
+ * fcoei_fill_els_logi_cmd
+ *	Fill SCR (state change register) command frame
+ *
+ * Input:
+ *	fpkt = LV fc_packet
+ *	frm = Unsolicited frame containing LOGI response
+ *
+ * Returns:
+ *	N/A
+ *
+ * Comments:
+ *	N/A
+ */
+static void
+fcoei_fill_els_logi_cmd(fc_packet_t *fpkt, fcoe_frame_t *frm)
+{
+	la_els_logi_t	*els_logi = (la_els_logi_t *)(void *)fpkt->pkt_cmd;
+	int		 offset;
+
+	/*
+	 * fill ls_code
+	 */
+	offset = 0;
+	FCOE_V2B_1(els_logi->ls_code.ls_code, FPLD + offset);
+
+	/*
+	 * fill common service parameters
+	 */
+	offset = 4;
+	FCOE_V2B_2(els_logi->common_service.fcph_version, FPLD + offset);
+
+	offset = 6;
+	FCOE_V2B_2(els_logi->common_service.btob_credit, FPLD + offset);
+
+	offset = 8;
+	FCOE_V2B_2(els_logi->common_service.cmn_features, FPLD + offset);
+
+	offset = 10;
+	FCOE_V2B_2(els_logi->common_service.rx_bufsize, FPLD + offset);
+
+	offset = 12;
+	FCOE_V2B_2(els_logi->common_service.conc_sequences, FPLD + offset);
+
+	offset = 14;
+	FCOE_V2B_2(els_logi->common_service.relative_offset, FPLD + offset);
+
+	offset = 16;
+	FCOE_V2B_4(els_logi->common_service.e_d_tov, FPLD + offset);
+
+	/*
+	 * port/node wwn
+	 */
+	offset = 20;
+	bcopy(&els_logi->nport_ww_name, FPLD + offset, 8);
+
+	offset = 28;
+	bcopy(&els_logi->node_ww_name, FPLD + offset, 8);
+
+	/*
+	 * class_3
+	 */
+	offset = 68;
+	FCOE_V2B_2(els_logi->class_3.class_opt, FPLD + offset);
+
+	offset = 70;
+	FCOE_V2B_2(els_logi->class_3.initiator_ctl, FPLD + offset);
+
+	offset = 72;
+	FCOE_V2B_2(els_logi->class_3.recipient_ctl, FPLD + offset);
+
+	offset = 74;
+	FCOE_V2B_2(els_logi->class_3.rcv_size, FPLD + offset);
+
+	offset = 76;
+	FCOE_V2B_2(els_logi->class_3.conc_sequences, FPLD + offset);
+
+	offset = 78;
+	FCOE_V2B_2(els_logi->class_3.n_port_e_to_e_credit, FPLD + offset);
+
+	offset = 80;
+	FCOE_V2B_2(els_logi->class_3.open_seq_per_xchng, FPLD + offset);
+	/*
+	 * needn't touch other fields
+	 */
+}
+
+/*
+ * fcoei_fill_prli_cmd
+ *	Fill PRLI command frame
+ *
+ * Input:
+ *	fpkt = LV fc_packet
+ *	frm = Unsolicited frame containing PRLI response
+ *
+ * Returns:
+ *	N/A
+ *
+ * Comments:
+ *	N/A
+ */
+static void
+fcoei_fill_els_prli_cmd(fc_packet_t *fpkt, fcoe_frame_t *frm)
+{
+	int		 offset	    = 0;
+	la_els_prli_t	*els_prli   = (la_els_prli_t *)(void *)fpkt->pkt_cmd;
+	struct fcp_prli *fcp_spp    =
+	    (struct fcp_prli *)(void *)els_prli->service_params;
+
+	/*
+	 * fill basic PRLI fields
+	 */
+	offset = 0;
+	FCOE_V2B_1(els_prli->ls_code, FPLD + offset);
+
+	offset = 1;
+	FCOE_V2B_1(els_prli->page_length, FPLD + offset);
+
+	offset = 2;
+	FCOE_V2B_2(els_prli->payload_length, FPLD + offset);
+
+	/*
+	 * fill FCP service parameters page
+	 */
+	offset = 4;
+	FCOE_V2B_1(fcp_spp->type, FPLD + offset);
+
+	/*
+	 * PRLI flags, only 3 bits are valid
+	 */
+	offset = 6;
+	FCOE_V2B_2((fcp_spp->orig_process_assoc_valid * BIT_15) |
+	    (fcp_spp->resp_process_assoc_valid * BIT_14) |
+	    (fcp_spp->establish_image_pair * BIT_13), FPLD + offset);
+
+	/*
+	 * process associator
+	 */
+	offset = 8;
+	FCOE_V2B_4(fcp_spp->orig_process_associator, FPLD + offset);
+
+	offset = 12;
+	FCOE_V2B_4(fcp_spp->resp_process_associator, FPLD + offset);
+
+	/*
+	 * FC-4 type
+	 */
+	offset = 16;
+	FCOE_V2B_4((fcp_spp->retry * BIT_8) |
+	    (fcp_spp->confirmed_compl_allowed * BIT_7) |
+	    (fcp_spp->data_overlay_allowed * BIT_6) |
+	    (fcp_spp->initiator_fn * BIT_5) | (fcp_spp->target_fn * BIT_4) |
+	    (fcp_spp->read_xfer_rdy_disabled * BIT_1) |
+	    (fcp_spp->write_xfer_rdy_disabled * BIT_0), FPLD + offset);
+}
+
+/*
+ * fcoei_fill_els_scr_cmd
+ *	Fill SCR (state change register) command frame
+ *
+ * Input:
+ *	fpkt = LV fc_packet
+ *	frm = Unsolicited frame containing SCR command
+ *
+ * Returns:
+ *	N/A
+ *
+ * Comments:
+ *	N/A
+ */
+static void
+fcoei_fill_els_scr_cmd(fc_packet_t *fpkt, fcoe_frame_t *frm)
+{
+	fc_scr_req_t	*els_scr = (fc_scr_req_t *)(void *)fpkt->pkt_cmd;
+	int		 offset;
+
+	offset = 0;
+	FCOE_V2B_1(els_scr->ls_code.ls_code, FPLD + offset);
+
+	offset = 7;
+	FCOE_V2B_1(els_scr->scr_func, FPLD + offset);
+}
+
+/*
+ * fcoei_fill_els_adisc_cmd
+ *	Fill ADISC command frame
+ *
+ * Input:
+ *	fpkt = LV fc_packet
+ *	frm = Unsolicited frame containing ADISC command
+ *
+ * Returns:
+ *	N/A
+ *
+ * Comments:
+ *	N/A
+ */
+static void
+fcoei_fill_els_adisc_cmd(fc_packet_t *fpkt, fcoe_frame_t *frm)
+{
+	la_els_adisc_t	*els_adisc = (la_els_adisc_t *)(void *)fpkt->pkt_cmd;
+	int		 offset;
+
+	offset = 0;
+	FCOE_V2B_1(els_adisc->ls_code.ls_code, FPLD + offset);
+
+	offset = 5;
+	FCOE_V2B_3(els_adisc->hard_addr.hard_addr, FPLD + offset);
+
+	offset = 8;
+	bcopy(&els_adisc->port_wwn, FPLD + offset, 8);
+
+	offset = 16;
+	bcopy(&els_adisc->node_wwn, FPLD + offset, 8);
+
+	offset = 25;
+	FCOE_V2B_3(els_adisc->nport_id.port_id, FPLD + offset);
+}
+
+/*
+ * fcoei_fill_els_linit_cmd
+ *	Fill LINIT command frame
+ *
+ * Input:
+ *	fpkt = LV fc_packet
+ *	frm = Unsolicited frame containing LINIT command
+ *
+ * Returns:
+ *	N/A
+ *
+ * Comments:
+ *	N/A
+ */
+static void
+fcoei_fill_els_linit_cmd(fc_packet_t *fpkt, fcoe_frame_t *frm)
+{
+	ASSERT(fpkt && frm);
+}
+
+/*
+ * fcoei_fill_els_logo_cmd
+ *	Fill LOGO command frame
+ *
+ * Input:
+ *	fpkt = LV fc_packet
+ *	frm = Unsolicited frame containing LOGO command
+ *
+ * Returns:
+ *	N/A
+ *
+ * Comments:
+ *	N/A
+ */
+static void
+fcoei_fill_els_logo_cmd(fc_packet_t *fpkt, fcoe_frame_t *frm)
+{
+	la_els_logo_t	*els_logo   = (la_els_logo_t *)(void *)fpkt->pkt_cmd;
+	int		 offset;
+
+	offset = 0;
+	FCOE_V2B_1(els_logo->ls_code.ls_code, FPLD + offset);
+
+	offset = 5;
+	FCOE_V2B_3(els_logo->nport_id.port_id, FPLD + offset);
+
+	offset = 8;
+	bcopy(&els_logo->nport_ww_name, FPLD + offset, 8);
+}
+
+static void
+fcoei_fill_els_rls_cmd(fc_packet_t *fpkt, fcoe_frame_t *frm)
+{
+	la_els_rls_t	*els_rls = (la_els_rls_t *)(void *)fpkt->pkt_cmd;
+	int		offset;
+
+	offset = 0;
+	FCOE_V2B_1(els_rls->ls_code.ls_code, FPLD + offset);
+
+	offset = 5;
+	FCOE_V2B_3(els_rls->rls_portid.port_id, FPLD + offset);
+}
+
+static void
+fcoei_fill_els_rnid_cmd(fc_packet_t *fpkt, fcoe_frame_t *frm)
+{
+	la_els_rnid_t *els_rnid = (la_els_rnid_t *)(void *)fpkt->pkt_cmd;
+	int		offset;
+
+	offset = 0;
+	FCOE_V2B_1(els_rnid->ls_code.ls_code, FPLD + offset);
+
+	offset = 4;
+	bcopy(&els_rnid->data_format, FPLD + offset, 1);
+}
+/*
+ * fcoei_fill_els_acc_resp
+ *	Fill ELS ACC response frame
+ *
+ * Input:
+ *	fpkt = LV fc_packet
+ *	frm = Unsolicited frame containing ELS ACC response
+ *
+ * Returns:
+ *	N/A
+ *
+ * Comments:
+ *	N/A
+ */
+static void
+fcoei_fill_els_acc_resp(fc_packet_t *fpkt, fcoe_frame_t *frm)
+{
+	ls_code_t	*els_code = (ls_code_t *)(void *)fpkt->pkt_cmd;
+	int		 offset;
+
+	offset = 0;
+	FCOE_V2B_1(els_code->ls_code, FPLD + offset);
+
+	offset = 1;
+	FCOE_V2B_3(els_code->mbz, FPLD + offset);
+}
+
+/*
+ * fcoei_fill_els_rjt_resp
+ *	Fill ELS RJT response frame
+ *
+ * Input:
+ *	fpkt = LV fc_packet
+ *	frm = Unsolicited frame containg ELS RJT response
+ *
+ * Returns:
+ *	N/A
+ *
+ * Comments:
+ *	N/A
+ */
+static void
+fcoei_fill_els_rjt_resp(fc_packet_t *fpkt, fcoe_frame_t *frm)
+{
+	la_els_rjt_t	*els_rjt = (la_els_rjt_t *)(void *)fpkt->pkt_cmd;
+	int		 offset;
+
+	offset = 0; /* reset ls code */
+	FCOE_V2B_1(els_rjt->ls_code.ls_code, FPLD + offset);
+
+	offset = 5; /* reason code */
+	FCOE_V2B_1(els_rjt->action, FPLD + offset);
+
+	offset = 6; /* reason explanation */
+	FCOE_V2B_1(els_rjt->reason, FPLD + offset);
+
+	offset = 7; /* vendor unique */
+	FCOE_V2B_1(els_rjt->vu, FPLD + offset);
+}
+
+/*
+ * fcoei_fill_els_adisc_resp
+ *	Fill ADISC response frame
+ *
+ * Input:
+ *	fpkt = LV fc_packet
+ *	frm = Unsolicited frame containing ADISC response
+ *
+ * Returns:
+ *	N/A
+ *
+ * Comments:
+ *	N/A
+ */
+static void
+fcoei_fill_els_adisc_resp(fc_packet_t *fpkt, fcoe_frame_t *frm)
+{
+	la_els_adisc_t	*els_adisc = (la_els_adisc_t *)(void *)fpkt->pkt_cmd;
+	int		 offset;
+
+	if (els_adisc->ls_code.ls_code == LA_ELS_RJT) {
+		fcoei_fill_els_rjt_resp(fpkt, frm);
+	} else {
+		offset = 0;
+		FCOE_V2B_1(els_adisc->ls_code.ls_code, FPLD + offset);
+
+		offset = 5;
+		FCOE_V2B_3(els_adisc->hard_addr.hard_addr, FPLD + offset);
+
+		offset = 8;
+		bcopy(&els_adisc->port_wwn, FPLD + offset, FC_WWN_SIZE);
+
+		offset = 16;
+		bcopy(&els_adisc->node_wwn, FPLD + offset, FC_WWN_SIZE);
+
+		offset = 25;
+		FCOE_V2B_3(els_adisc->nport_id.port_id, FPLD + offset);
+	}
+}
+
+/*
+ * fcoei_fill_els_logi_resp
+ *	Fill FLOGI/PLOGI response frame
+ *
+ * Input:
+ *	fpkt = LV fc_packet
+ *	frm = Unsolicited frame containing LOGI response
+ *
+ * Returns:
+ *	N/A
+ *
+ * Comments:
+ *	N/A
+ */
+static void
+fcoei_fill_els_logi_resp(fc_packet_t *fpkt, fcoe_frame_t *frm)
+{
+	ls_code_t	*els_code = (ls_code_t *)(void *)fpkt->pkt_cmd;
+
+	if (els_code->ls_code == LA_ELS_RJT) {
+		fcoei_fill_els_rjt_resp(fpkt, frm);
+	} else {
+		fcoei_fill_els_logi_cmd(fpkt, frm);
+	}
+}
+
+/*
+ * fcoei_fill_els_prli_resp
+ *	Fill PRLI response frame
+ *
+ * Input:
+ *	fpkt = LV fc_packet
+ *	frm = Unsolicited frame containing PRLI response
+ *
+ * Returns:
+ *	N/A
+ *
+ * Comments:
+ *	N/A
+ */
+static void
+fcoei_fill_els_prli_resp(fc_packet_t *fpkt, fcoe_frame_t *frm)
+{
+	ls_code_t	*els_code = (ls_code_t *)(void *)fpkt->pkt_cmd;
+
+	if (els_code->ls_code == LA_ELS_RJT) {
+		fcoei_fill_els_rjt_resp(fpkt, frm);
+	} else {
+		fcoei_fill_els_prli_cmd(fpkt, frm);
+	}
+}
+
+/*
+ * fcoei_fill_els_logo_resp
+ *	Fill LOGO response frame
+ *
+ * Input:
+ *	fpkt = LV fc_packet
+ *	frm = Unsolicited frame containing LOGO response
+ *
+ * Returns:
+ *	N/A
+ *
+ * Comments:
+ *	N/A
+ */
+static void
+fcoei_fill_els_logo_resp(fc_packet_t *fpkt, fcoe_frame_t *frm)
+{
+	ls_code_t	*els_code   = (ls_code_t *)(void *)fpkt->pkt_cmd;
+
+	if (els_code->ls_code == LA_ELS_RJT) {
+		fcoei_fill_els_rjt_resp(fpkt, frm);
+	} else {
+		fcoei_fill_els_acc_resp(fpkt, frm);
+	}
+}
+
+/*
+ * fcoei_logo_peer
+ *	Send LOGO to the peer to emulate link offline event
+ *
+ * Input:
+ *	arg - fcoei soft state set in fcoei_bind_port
+ *
+ * Returns:
+ *	N/A
+ *
+ * Comments:
+ *	N/A
+ */
+static void
+fcoei_logo_peer(void *arg)
+{
+	fcoei_soft_state_t	*ss = (fcoei_soft_state_t *)arg;
+	fc_packet_t		*fpkt;
+	fcoei_exchange_t	*xch;
+	la_els_logo_t		*els_logo;
+
+	/*
+	 * Allocate space for exchange
+	 */
+	xch = kmem_zalloc(sizeof (*xch), KM_SLEEP);
+
+	/*
+	 * Allocate space for fc_packet
+	 */
+	fpkt = kmem_zalloc(sizeof (fc_packet_t), KM_SLEEP);
+	fpkt->pkt_cmdlen = 20;
+	fpkt->pkt_cmd = kmem_zalloc(fpkt->pkt_cmdlen, KM_SLEEP);
+	fpkt->pkt_rsplen = 20;
+	fpkt->pkt_resp = kmem_zalloc(fpkt->pkt_rsplen, KM_SLEEP);
+
+	/*
+	 * Link them together
+	 */
+	fpkt->pkt_fca_private = xch;
+	(void) fcoei_init_pkt(ss, fpkt, 0);
+
+	/*
+	 * Initialize FC frame header
+	 */
+	if (ss->ss_eport->eport_flags & EPORT_FLAG_IS_DIRECT_P2P) {
+		fpkt->pkt_cmd_fhdr.d_id = ss->ss_p2p_info.d_id;
+	} else {
+		fpkt->pkt_cmd_fhdr.d_id = 0xFFFFFE;
+	}
+
+	fpkt->pkt_cmd_fhdr.s_id = ss->ss_p2p_info.fca_d_id;
+	fpkt->pkt_cmd_fhdr.r_ctl = R_CTL_ELS_REQ;
+	fpkt->pkt_cmd_fhdr.type = FC_TYPE_EXTENDED_LS;
+	fpkt->pkt_cmd_fhdr.f_ctl = 0x290000;
+	fpkt->pkt_timeout = 1;
+
+	/*
+	 * Initialize LOGO payload
+	 */
+	els_logo = (la_els_logo_t *)(void *)fpkt->pkt_cmd;
+	els_logo->ls_code.ls_code = LA_ELS_LOGO;
+	els_logo->nport_id.port_id = ss->ss_p2p_info.fca_d_id;
+	bcopy(ss->ss_eport->eport_portwwn, &els_logo->nport_ww_name, 8);
+
+	/*
+	 * Set the completion function
+	 */
+	fpkt->pkt_comp = fcoei_fpkt_comp;
+	if (fcoei_transport(ss, fpkt) != FC_SUCCESS) {
+		FCOEI_LOG(__FUNCTION__, "fcoei_transport LOGO failed");
+		fcoei_fpkt_comp(fpkt);
+	}
+}
+
+/*
+ * fcoei_fpkt_comp
+ *	internal exchange completion
+ *
+ * Input:
+ *	fpkt - fc_packet_t to be completed
+ *
+ * Returns:
+ *	N/A
+ *
+ * Comments:
+ *
+ */
+static void
+fcoei_fpkt_comp(fc_packet_t *fpkt)
+{
+	fcoei_exchange_t	*xch = FPKT2XCH(fpkt);
+
+	FCOEI_LOG(__FUNCTION__, "internal exchange is completed: %p", xch);
+
+	(void) fcoei_un_init_pkt(xch->xch_ss, xch->xch_fpkt);
+	kmem_free(xch->xch_fpkt->pkt_cmd, xch->xch_fpkt->pkt_cmdlen);
+	kmem_free(xch->xch_fpkt->pkt_resp, xch->xch_fpkt->pkt_rsplen);
+	kmem_free(xch->xch_fpkt, sizeof (fc_packet_t));
+	kmem_free(xch, sizeof (fcoei_exchange_t));
+}
+
+/*
+ * fcoei_xch_abort
+ *	Prepare to abort the exchange
+ *
+ * Input:
+ *	key = oxid/rxid of the exchange
+ *	val = the exchange
+ *	arg = the soft state
+ *
+ * Returns:
+ *	MH_WALK_CONTINUE = continue to walk
+ *
+ * Comments:
+ *	N/A
+ */
+static uint32_t
+fcoei_xch_abort(mod_hash_key_t key, mod_hash_val_t *val, void *arg)
+{
+	fcoei_exchange_t	*xch = (fcoei_exchange_t *)val;
+
+	ASSERT(arg == xch->xch_ss);
+	ASSERT(CMHK(key) != 0xFFFF);
+	xch->xch_flags |= XCH_FLAG_ABORT;
+	xch->xch_fpkt->pkt_state = FC_PKT_LOCAL_RJT;
+	xch->xch_fpkt->pkt_reason = FC_REASON_OFFLINE;
+	list_insert_tail(&xch->xch_ss->ss_comp_xch_list, xch);
+	return (MH_WALK_CONTINUE);
+}
+
+/*
+ * fcoei_init_fcatran_vectors
+ *	Initialize fc_fca_tran vectors that are defined in this file
+ *
+ * Input:
+ *	fcatran - fc_fca_tran of the soft state
+ *
+ * Returns:
+ *	N/A
+ *
+ * Comments:
+ *	N/A
+ */
+void
+fcoei_init_fcatran_vectors(fc_fca_tran_t *fcatran)
+{
+	fcatran->fca_bind_port	 = fcoei_bind_port;
+	fcatran->fca_unbind_port = fcoei_unbind_port;
+	fcatran->fca_init_pkt	 = fcoei_init_pkt;
+	fcatran->fca_un_init_pkt = fcoei_un_init_pkt;
+	fcatran->fca_els_send	 = fcoei_els_send;
+	fcatran->fca_get_cap	 = fcoei_get_cap;
+	fcatran->fca_set_cap	 = fcoei_set_cap;
+	fcatran->fca_getmap	 = fcoei_getmap;
+	fcatran->fca_transport	 = fcoei_transport;
+	fcatran->fca_ub_alloc	 = fcoei_ub_alloc;
+	fcatran->fca_ub_free	 = fcoei_ub_free;
+	fcatran->fca_ub_release	 = fcoei_ub_release;
+	fcatran->fca_abort	 = fcoei_abort;
+	fcatran->fca_reset	 = fcoei_reset;
+	fcatran->fca_port_manage = fcoei_port_manage;
+	fcatran->fca_get_device	 = fcoei_get_device;
+	fcatran->fca_notify	 = fcoei_notify;
+}
+
+/*
+ * fcoei_process_event_reset
+ *	link reset phase II
+ *
+ * Input:
+ *	arg - fcoei soft state set in fcoei_bind_port
+ *
+ * Returns:
+ *	N/A
+ *
+ * Comments:
+ *
+ */
+void
+fcoei_process_event_reset(fcoei_event_t *ae)
+{
+	fcoei_soft_state_t	*ss = (fcoei_soft_state_t *)ae->ae_obj;
+
+	ASSERT(!MUTEX_HELD(&ss->ss_watchdog_mutex));
+	kmem_free(ae, sizeof (*ae));
+
+	mod_hash_walk(ss->ss_sol_oxid_hash, fcoei_xch_abort, ss);
+	mod_hash_walk(ss->ss_unsol_rxid_hash, fcoei_xch_abort, ss);
+	fcoei_handle_comp_xch_list(ss);
+
+	/*
+	 * Notify LV that the link is up now
+	 */
+	ss->ss_eport->eport_ctl(ss->ss_eport, FCOE_CMD_PORT_ONLINE, 0);
+}
+
+/*
+ * fcoei_process_event_exchange
+ *	Process exchange in the single thread context
+ *
+ * Input:
+ *	ae = the exchange event
+ *
+ * Returns:
+ *	N/A
+ *
+ * Comments:
+ *	N/A
+ */
+void
+fcoei_process_event_exchange(fcoei_event_t *ae)
+{
+	fcoei_exchange_t	*xch  = (fcoei_exchange_t *)ae->ae_obj;
+	fcoei_exchange_t	*xch_tmp;
+	fc_packet_t		*fpkt = xch->xch_fpkt;
+
+	/*
+	 * These 4 elements need reset, pkt_state & pkt_reason will be set
+	 */
+	fpkt->pkt_action = 0;
+	fpkt->pkt_expln = 0;
+	fpkt->pkt_data_resid = 0;
+	fpkt->pkt_resp_resid = 0;
+
+	/*
+	 * port state sanity checking
+	 */
+	if ((xch->xch_ss->ss_link_state != FC_STATE_ONLINE) ||
+	    xch->xch_ss->ss_port_event_counter) {
+		/*
+		 * LV will retry it after one second
+		 */
+		fcoei_complete_xch(xch, NULL, FC_PKT_PORT_OFFLINE,
+		    FC_REASON_OFFLINE);
+		return;
+	}
+
+	switch (fpkt->pkt_cmd_fhdr.r_ctl) {
+	case R_CTL_COMMAND:
+		FCOEI_INIT_SOL_ID_HASH(xch, xch_tmp);
+		fcoei_initiate_fcp_cmd(xch);
+		break;
+
+	case R_CTL_ELS_REQ:
+		FCOEI_INIT_SOL_ID_HASH(xch, xch_tmp);
+		fcoei_initiate_els_req(xch);
+		break;
+
+	case R_CTL_UNSOL_CONTROL:
+		FCOEI_INIT_SOL_ID_HASH(xch, xch_tmp);
+		fcoei_initiate_ct_req(xch);
+		break;
+
+	case R_CTL_ELS_RSP:
+		/*
+		 * Caution: in leadville, it still uses pkt_cmd_fhdr
+		 * oxid & rxid have been decided when we get unsolicited frames.
+		 * pkt_cmd_fhdr has contained the right oxid and rxid now.
+		 */
+		FCOEI_INIT_UNSOL_ID_HASH(xch);
+		fcoei_initiate_els_resp(xch);
+		break;
+
+	default:
+		fcoei_complete_xch(xch, NULL, FC_PKT_FAILURE,
+		    FC_REASON_CMD_UNSUPPORTED);
+	}
+}
--- a/usr/src/uts/common/io/fibre-channel/impl/fctl.c	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/uts/common/io/fibre-channel/impl/fctl.c	Mon Aug 10 10:43:48 2009 -0400
@@ -19,7 +19,7 @@
  * CDDL HEADER END
  */
 /*
- * Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
+ * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
  * Use is subject to license terms.
  *
  * Fibre channel Transport Library (fctl)
@@ -30,48 +30,48 @@
  *		Internal functions begin with fctl_
  *
  * Fibre channel packet layout:
- *        +---------------------+<--------+
- *        |                     |         |
- *        | ULP Packet private  |         |
- *        |                     |         |
- *        +---------------------+         |
- *        |                     |---------+
- *        |  struct  fc_packet  |---------+
- *        |                     |         |
- *        +---------------------+<--------+
- *        |                     |
- *        | FCA Packet private  |
- *        |                     |
- *        +---------------------+
+ *	  +---------------------+<--------+
+ *	  |			|	  |
+ *	  | ULP Packet private	|	  |
+ *	  |			|	  |
+ *	  +---------------------+	  |
+ *	  |			|---------+
+ *	  |  struct  fc_packet	|---------+
+ *	  |			|	  |
+ *	  +---------------------+<--------+
+ *	  |			|
+ *	  | FCA Packet private	|
+ *	  |			|
+ *	  +---------------------+
  *
- * So you  loved  the  ascii  art ?  It's  strongly  desirable  to  cache
+ * So you  loved  the  ascii  art ?  It's  strongly  desirable	to  cache
  * allocate the entire packet in one common  place.  So we define a set a
- * of rules.  In a  contiguous  block of memory,  the top  portion of the
- * block points to ulp packet  private  area, next follows the  fc_packet
+ * of rules.  In a  contiguous	block of memory,  the top  portion of the
+ * block points to ulp packet  private	area, next follows the	fc_packet
  * structure used  extensively by all the consumers and what follows this
- * is the FCA packet private.  Note that given a packet  structure, it is
- * possible  to get to the  ULP  and  FCA  Packet  private  fields  using
+ * is the FCA packet private.  Note that given a packet	 structure, it is
+ * possible  to get to the  ULP	 and  FCA  Packet  private  fields  using
  * ulp_private and fca_private fields (which hold pointers) respectively.
  *
  * It should be noted with a grain of salt that ULP Packet  private  size
  * varies  between two different  ULP types, So this poses a challenge to
- * compute the correct  size of the whole block on a per port basis.  The
+ * compute the correct	size of the whole block on a per port basis.  The
  * transport  layer  doesn't have a problem in dealing with  FCA   packet
  * private  sizes as it is the sole  manager of ports  underneath.  Since
  * it's not a good idea to cache allocate  different  sizes of memory for
  * different ULPs and have the ability to choose from one of these caches
  * based on ULP type during every packet  allocation,  the transport some
- * what  wisely (?)  hands off this job of cache  allocation  to the ULPs
+ * what	 wisely (?)  hands off this job of cache  allocation  to the ULPs
  * themselves.
  *
  * That means FCAs need to make their  packet  private size  known to the
- * transport   to  pass  it  up  to  the   ULPs.  This  is  done   during
+ * transport   to  pass	 it  up	 to  the   ULPs.  This	is  done   during
  * fc_fca_attach().  And the transport passes this size up to ULPs during
  * fc_ulp_port_attach() of each ULP.
  *
- * This  leaves  us with  another  possible  question;  How  are  packets
- * allocated for ELS's started by the transport  itself ?  Well, the port
- * driver  during  attach  time, cache  allocates  on a per port basis to
+ * This	 leaves	 us with  another  possible  question;	How  are  packets
+ * allocated for ELS's started by the transport	 itself ?  Well, the port
+ * driver  during  attach  time, cache	allocates  on a per port basis to
  * handle ELSs too.
  */
 
@@ -103,8 +103,8 @@
 int did_table_size = D_ID_HASH_TABLE_SIZE;
 int pwwn_table_size = PWWN_HASH_TABLE_SIZE;
 
-static fc_ulp_module_t 	*fctl_ulp_modules;
-static fc_fca_port_t 	*fctl_fca_portlist;
+static fc_ulp_module_t	*fctl_ulp_modules;
+static fc_fca_port_t	*fctl_fca_portlist;
 static fc_ulp_list_t	*fctl_ulp_list;
 
 static char fctl_greeting[] =
@@ -127,7 +127,7 @@
 
 /*
  * fctl_port_lock protects the linked list of local port structures
- * (fctl_fca_portlist).  When walking the list, this lock must be obtained
+ * (fctl_fca_portlist).	 When walking the list, this lock must be obtained
  * prior to any local port locks.
  */
 
@@ -149,10 +149,9 @@
     ulp_ports::port_dstate))
 #endif /* lint */
 
-#define	FCTL_VERSION		"1.69"
+#define	FCTL_VERSION		"20090729-1.70"
 #define	FCTL_NAME_VERSION	"SunFC Transport v" FCTL_VERSION
 
-
 char *fctl_version = FCTL_NAME_VERSION;
 
 extern struct mod_ops mod_miscops;
@@ -201,51 +200,51 @@
 struct kmem_cache *fctl_job_cache;
 
 static fc_errmap_t fc_errlist [] = {
-	{ FC_FAILURE, 		"Operation failed" 			},
-	{ FC_SUCCESS, 		"Operation success" 			},
-	{ FC_CAP_ERROR, 	"Capability error" 			},
-	{ FC_CAP_FOUND, 	"Capability found" 			},
-	{ FC_CAP_SETTABLE, 	"Capability settable" 			},
-	{ FC_UNBOUND, 		"Port not bound" 			},
-	{ FC_NOMEM, 		"No memory" 				},
-	{ FC_BADPACKET, 	"Bad packet" 				},
-	{ FC_OFFLINE, 		"Port offline" 				},
-	{ FC_OLDPORT, 		"Old Port" 				},
-	{ FC_NO_MAP, 		"No map available" 			},
-	{ FC_TRANSPORT_ERROR, 	"Transport error" 			},
-	{ FC_ELS_FREJECT, 	"ELS Frejected" 			},
-	{ FC_ELS_PREJECT, 	"ELS PRejected" 			},
-	{ FC_ELS_BAD, 		"Bad ELS request" 			},
-	{ FC_ELS_MALFORMED, 	"Malformed ELS request" 		},
-	{ FC_TOOMANY, 		"Too many commands" 			},
-	{ FC_UB_BADTOKEN, 	"Bad Unsolicited buffer token" 		},
-	{ FC_UB_ERROR, 		"Unsolicited buffer error" 		},
-	{ FC_UB_BUSY, 		"Unsolicited buffer busy" 		},
-	{ FC_BADULP, 		"Bad ULP" 				},
-	{ FC_BADTYPE, 		"Bad Type" 				},
-	{ FC_UNCLAIMED, 	"Not Claimed" 				},
-	{ FC_ULP_SAMEMODULE, 	"Same ULP Module" 			},
-	{ FC_ULP_SAMETYPE, 	"Same ULP Type" 			},
-	{ FC_ABORTED, 		"Command Aborted" 			},
-	{ FC_ABORT_FAILED, 	"Abort Failed" 				},
-	{ FC_BADEXCHANGE, 	"Bad Exchange" 				},
-	{ FC_BADWWN, 		"Bad World Wide Name" 			},
-	{ FC_BADDEV, 		"Bad Device" 				},
-	{ FC_BADCMD, 		"Bad Command" 				},
-	{ FC_BADOBJECT, 	"Bad Object" 				},
-	{ FC_BADPORT, 		"Bad Port" 				},
-	{ FC_NOTTHISPORT, 	"Not on this Port" 			},
-	{ FC_PREJECT, 		"Operation Prejected" 			},
-	{ FC_FREJECT, 		"Operation Frejected" 			},
-	{ FC_PBUSY, 		"Operation Pbusyed" 			},
-	{ FC_FBUSY, 		"Operation Fbusyed" 			},
-	{ FC_ALREADY, 		"Already done" 				},
-	{ FC_LOGINREQ, 		"PLOGI Required" 			},
-	{ FC_RESETFAIL, 	"Reset operation failed" 		},
-	{ FC_INVALID_REQUEST, 	"Invalid Request" 			},
-	{ FC_OUTOFBOUNDS, 	"Out of Bounds" 			},
-	{ FC_TRAN_BUSY, 	"Command transport Busy" 		},
-	{ FC_STATEC_BUSY, 	"State change Busy" 			},
+	{ FC_FAILURE,		"Operation failed"			},
+	{ FC_SUCCESS,		"Operation success"			},
+	{ FC_CAP_ERROR,		"Capability error"			},
+	{ FC_CAP_FOUND,		"Capability found"			},
+	{ FC_CAP_SETTABLE,	"Capability settable"			},
+	{ FC_UNBOUND,		"Port not bound"			},
+	{ FC_NOMEM,		"No memory"				},
+	{ FC_BADPACKET,		"Bad packet"				},
+	{ FC_OFFLINE,		"Port offline"				},
+	{ FC_OLDPORT,		"Old Port"				},
+	{ FC_NO_MAP,		"No map available"			},
+	{ FC_TRANSPORT_ERROR,	"Transport error"			},
+	{ FC_ELS_FREJECT,	"ELS Frejected"				},
+	{ FC_ELS_PREJECT,	"ELS PRejected"				},
+	{ FC_ELS_BAD,		"Bad ELS request"			},
+	{ FC_ELS_MALFORMED,	"Malformed ELS request"			},
+	{ FC_TOOMANY,		"Too many commands"			},
+	{ FC_UB_BADTOKEN,	"Bad Unsolicited buffer token"		},
+	{ FC_UB_ERROR,		"Unsolicited buffer error"		},
+	{ FC_UB_BUSY,		"Unsolicited buffer busy"		},
+	{ FC_BADULP,		"Bad ULP"				},
+	{ FC_BADTYPE,		"Bad Type"				},
+	{ FC_UNCLAIMED,		"Not Claimed"				},
+	{ FC_ULP_SAMEMODULE,	"Same ULP Module"			},
+	{ FC_ULP_SAMETYPE,	"Same ULP Type"				},
+	{ FC_ABORTED,		"Command Aborted"			},
+	{ FC_ABORT_FAILED,	"Abort Failed"				},
+	{ FC_BADEXCHANGE,	"Bad Exchange"				},
+	{ FC_BADWWN,		"Bad World Wide Name"			},
+	{ FC_BADDEV,		"Bad Device"				},
+	{ FC_BADCMD,		"Bad Command"				},
+	{ FC_BADOBJECT,		"Bad Object"				},
+	{ FC_BADPORT,		"Bad Port"				},
+	{ FC_NOTTHISPORT,	"Not on this Port"			},
+	{ FC_PREJECT,		"Operation Prejected"			},
+	{ FC_FREJECT,		"Operation Frejected"			},
+	{ FC_PBUSY,		"Operation Pbusyed"			},
+	{ FC_FBUSY,		"Operation Fbusyed"			},
+	{ FC_ALREADY,		"Already done"				},
+	{ FC_LOGINREQ,		"PLOGI Required"			},
+	{ FC_RESETFAIL,		"Reset operation failed"		},
+	{ FC_INVALID_REQUEST,	"Invalid Request"			},
+	{ FC_OUTOFBOUNDS,	"Out of Bounds"				},
+	{ FC_TRAN_BUSY,		"Command transport Busy"		},
+	{ FC_STATEC_BUSY,	"State change Busy"			},
 	{ FC_DEVICE_BUSY,	"Port driver is working on this device"	}
 };
 
@@ -256,7 +255,7 @@
 };
 
 fc_pkt_reason_t general_reasons [] = {
-	{ FC_REASON_HW_ERROR,		"Hardware Error" 		},
+	{ FC_REASON_HW_ERROR,		"Hardware Error"		},
 	{ FC_REASON_SEQ_TIMEOUT,	"Sequence Timeout"		},
 	{ FC_REASON_ABORTED,		"Aborted"			},
 	{ FC_REASON_ABORT_FAILED,	"Abort Failed"			},
@@ -292,7 +291,7 @@
 	{ FC_REASON_PERM_UNAVAILABLE,	"Permamnently Unavailable"	},
 	{ FC_REASON_CLASS_NOT_SUPP,	"Class Not Supported",		},
 	{ FC_REASON_DELIMTER_USAGE_ERROR,
-					"Delimeter Usage Error"		},
+	    "Delimeter Usage Error"		},
 	{ FC_REASON_TYPE_NOT_SUPP,	"Type Not Supported"		},
 	{ FC_REASON_INVALID_LINK_CTRL,	"Invalid Link Control"		},
 	{ FC_REASON_INVALID_R_CTL,	"Invalid R_CTL"			},
@@ -307,13 +306,13 @@
 	{ FC_REASON_PROTOCOL_ERROR,	"Protocol Error"		},
 	{ FC_REASON_INCORRECT_LENGTH,	"Incorrect Length"		},
 	{ FC_REASON_UNEXPECTED_ACK,	"Unexpected Ack"		},
-	{ FC_REASON_UNEXPECTED_LR,	"Unexpected Link reset" 	},
+	{ FC_REASON_UNEXPECTED_LR,	"Unexpected Link reset"		},
 	{ FC_REASON_LOGIN_REQUIRED,	"Login Required"		},
 	{ FC_REASON_EXCESSIVE_SEQS,	"Excessive Sequences"
-					" Attempted"			},
+	    " Attempted"			},
 	{ FC_REASON_EXCH_UNABLE,	"Exchange incapable"		},
 	{ FC_REASON_ESH_NOT_SUPP,	"Expiration Security Header "
-					"Not Supported"			},
+	    "Not Supported"			},
 	{ FC_REASON_NO_FABRIC_PATH,	"No Fabric Path"		},
 	{ FC_REASON_VENDOR_UNIQUE,	"Vendor Unique"			},
 	{ FC_REASON_INVALID,		NULL				}
@@ -384,10 +383,10 @@
 		NULL
 	},
 	{	FC_PKT_REMOTE_STOP,
-		"Remote Stop",
-		remote_stop_reasons,
-		NULL,
-		NULL
+	    "Remote Stop",
+	    remote_stop_reasons,
+	    NULL,
+	    NULL
 	},
 	{
 		FC_PKT_LOCAL_RJT,
@@ -608,9 +607,9 @@
  *		FC_SUCCESS
  *		FC_FAILURE
  *
- *   fc_ulp_add  prints  a warning message if there is  already a
+ *   fc_ulp_add	 prints	 a warning message if there is	already a
  *   similar ULP type  attached and this is unlikely to change as
- *   we trudge along.  Further, this  function  returns a failure
+ *   we trudge along.  Further, this  function	returns a failure
  *   code if the same  module  attempts to add more than once for
  *   the same FC-4 type.
  */
@@ -619,9 +618,9 @@
 {
 	fc_ulp_module_t *mod;
 	fc_ulp_module_t *prev;
-	job_request_t 	*job;
+	job_request_t	*job;
 	fc_ulp_list_t	*new;
-	fc_fca_port_t 	*fca_port;
+	fc_fca_port_t	*fca_port;
 	int		ntry = 0;
 
 	ASSERT(ulp_info != NULL);
@@ -653,8 +652,8 @@
 	while (rw_tryenter(&fctl_ulp_lock, RW_WRITER) == 0) {
 		delay(drv_usectohz(1000000));
 		if (ntry++ > FC_ULP_ADD_RETRY_COUNT) {
-			fc_ulp_list_t   *list;
-			fc_ulp_list_t   *last;
+			fc_ulp_list_t	*list;
+			fc_ulp_list_t	*last;
 			mutex_enter(&fctl_ulp_list_mutex);
 			for (last = NULL, list = fctl_ulp_list; list != NULL;
 			    list = list->ulp_next) {
@@ -712,7 +711,6 @@
 	mutex_enter(&fctl_port_lock);
 	for (fca_port = fctl_fca_portlist; fca_port != NULL;
 	    fca_port = fca_port->port_next) {
-
 		job = fctl_alloc_job(JOB_ATTACH_ULP, JOB_TYPE_FCTL_ASYNC,
 		    NULL, NULL, KM_SLEEP);
 
@@ -816,7 +814,7 @@
  * The caller is required to ensure that pkt_pd is populated with the
  * handle that it was given when the transport notified it about the
  * device this packet is associated with.  If there is no associated
- * device, pkt_pd must be set to NULL.  A non-NULL pkt_pd will cause an
+ * device, pkt_pd must be set to NULL.	A non-NULL pkt_pd will cause an
  * increment of the reference count for said pd.  When the packet is freed,
  * the reference count will be decremented.  This reference count, in
  * combination with the PD_GIVEN_TO_ULPS flag guarantees that the pd
@@ -1037,11 +1035,11 @@
 fc_ulp_login(opaque_t port_handle, fc_packet_t **ulp_pkt, uint32_t listlen)
 {
 	int			rval = FC_SUCCESS;
-	int 			job_flags;
+	int			job_flags;
 	uint32_t		count;
 	fc_packet_t		**tmp_array;
-	job_request_t 		*job;
-	fc_local_port_t 	*port = port_handle;
+	job_request_t		*job;
+	fc_local_port_t		*port = port_handle;
 	fc_ulp_rscn_info_t	*rscnp =
 	    (fc_ulp_rscn_info_t *)(ulp_pkt[0])->pkt_ulp_rscn_infop;
 
@@ -1153,9 +1151,9 @@
 fc_ulp_get_remote_port(opaque_t port_handle, la_wwn_t *pwwn, int *error,
     int create)
 {
-	fc_local_port_t 	*port;
+	fc_local_port_t		*port;
 	job_request_t		*job;
-	fc_remote_port_t 	*pd;
+	fc_remote_port_t	*pd;
 
 	port = port_handle;
 	pd = fctl_get_remote_port_by_pwwn(port, pwwn);
@@ -1174,7 +1172,7 @@
 	mutex_enter(&port->fp_mutex);
 	if (FC_IS_TOP_SWITCH(port->fp_topology) && create) {
 		uint32_t	d_id;
-		fctl_ns_req_t 	*ns_cmd;
+		fctl_ns_req_t	*ns_cmd;
 
 		mutex_exit(&port->fp_mutex);
 
@@ -1272,7 +1270,7 @@
 int
 fc_ulp_port_ns(opaque_t port_handle, opaque_t pd, fc_ns_cmd_t *ns_req)
 {
-	int 		rval;
+	int		rval;
 	int		fabric;
 	job_request_t	*job;
 	fctl_ns_req_t	*ns_cmd;
@@ -1357,7 +1355,7 @@
 fc_ulp_transport(opaque_t port_handle, fc_packet_t *pkt)
 {
 	int			rval;
-	fc_local_port_t 	*port;
+	fc_local_port_t		*port;
 	fc_remote_port_t	*pd, *newpd;
 	fc_ulp_rscn_info_t	*rscnp =
 	    (fc_ulp_rscn_info_t *)pkt->pkt_ulp_rscn_infop;
@@ -1480,7 +1478,7 @@
 fc_ulp_issue_els(opaque_t port_handle, fc_packet_t *pkt)
 {
 	int			rval;
-	fc_local_port_t 	*port = port_handle;
+	fc_local_port_t		*port = port_handle;
 	fc_remote_port_t	*pd;
 	fc_ulp_rscn_info_t	*rscnp =
 	    (fc_ulp_rscn_info_t *)pkt->pkt_ulp_rscn_infop;
@@ -1723,7 +1721,7 @@
 fc_ulp_get_port_handle(int port_instance)
 {
 	opaque_t	port_handle = NULL;
-	fc_fca_port_t 	*cur;
+	fc_fca_port_t	*cur;
 
 	mutex_enter(&fctl_port_lock);
 	for (cur = fctl_fca_portlist; cur; cur = cur->port_next) {
@@ -1805,7 +1803,7 @@
 {
 	fc_local_port_t		*port = port_handle;
 	fc_remote_node_t	*node;
-	fc_remote_port_t 	*pd;
+	fc_remote_port_t	*pd;
 
 	pd = fctl_get_remote_port_by_pwwn(port, bytes);
 	if (pd == NULL) {
@@ -1905,7 +1903,7 @@
 
 /*
  * fc_fca_init
- * 		Overload the FCA bus_ops vector in its dev_ops with
+ *		Overload the FCA bus_ops vector in its dev_ops with
  *		fctl_fca_busops to handle all the INITchilds for "sf"
  *		in one common place.
  *
@@ -2077,8 +2075,8 @@
 	*str = '\0';
 }
 
-#define	FC_ATOB(x)	(((x) >= '0' && (x) <= '9') ? ((x) - '0') :\
-			((x) >= 'a' && (x) <= 'f') ?\
+#define	FC_ATOB(x)	(((x) >= '0' && (x) <= '9') ? ((x) - '0') :	\
+			((x) >= 'a' && (x) <= 'f') ?			\
 			((x) - 'a' + 10) : ((x) - 'A' + 10))
 
 void
@@ -2101,7 +2099,7 @@
  */
 static int
 fctl_fca_bus_ctl(dev_info_t *fca_dip, dev_info_t *rip,
-	ddi_ctl_enum_t op, void *arg, void *result)
+    ddi_ctl_enum_t op, void *arg, void *result)
 {
 	switch (op) {
 	case DDI_CTLOPS_REPORTDEV:
@@ -2133,11 +2131,11 @@
 static int
 fctl_initchild(dev_info_t *fca_dip, dev_info_t *port_dip)
 {
-	int 		rval;
-	int 		port_no;
-	int 		port_len;
-	char 		name[20];
-	fc_fca_tran_t 	*tran;
+	int		rval;
+	int		port_no;
+	int		port_len;
+	char		name[20];
+	fc_fca_tran_t	*tran;
 	dev_info_t	*dip;
 	int		portprop;
 
@@ -2218,8 +2216,9 @@
 
 	for (dip = ddi_get_child(pdip); dip != NULL;
 	    dip = ddi_get_next_sibling(dip)) {
-		if (strcmp(cname, ddi_node_name(dip)) != 0)
+		if (strcmp(cname, ddi_node_name(dip)) != 0) {
 			continue;
+		}
 
 		if ((addr = ddi_get_name_addr(dip)) == NULL) {
 			if (ddi_prop_lookup_string(DDI_DEV_T_ANY, dip,
@@ -2232,8 +2231,9 @@
 				ddi_prop_free(addr);
 			}
 		} else {
-			if (strcmp(caddr, addr) == 0)
+			if (strcmp(caddr, addr) == 0) {
 				return (dip);
+			}
 		}
 	}
 
@@ -2308,7 +2308,7 @@
     dev_info_t *phydip, char *nname, char *pname, uint32_t *vindex)
 {
 	int rval = 0, devstrlen;
-	char    *devname, *cname, *caddr, *devstr;
+	char	*devname, *cname, *caddr, *devstr;
 	dev_info_t	*child = NULL;
 	int		portnum;
 
@@ -2425,9 +2425,9 @@
 void
 fctl_remove_port(fc_local_port_t *port)
 {
-	fc_ulp_module_t 	*mod;
-	fc_fca_port_t 		*prev;
-	fc_fca_port_t 		*list;
+	fc_ulp_module_t		*mod;
+	fc_fca_port_t		*prev;
+	fc_fca_port_t		*list;
 	fc_ulp_ports_t		*ulp_port;
 
 	rw_enter(&fctl_ulp_lock, RW_WRITER);
@@ -2477,8 +2477,8 @@
 	int			rval;
 	uint32_t		s_id;
 	uint32_t		state;
-	fc_ulp_module_t 	*mod;
-	fc_ulp_port_info_t 	info;
+	fc_ulp_module_t		*mod;
+	fc_ulp_port_info_t	info;
 	fc_ulp_ports_t		*ulp_port;
 
 	ASSERT(!MUTEX_HELD(&port->fp_mutex));
@@ -2531,14 +2531,22 @@
 	rw_enter(&fctl_mod_ports_lock, RW_WRITER);
 
 	for (mod = fctl_ulp_modules; mod; mod = mod->mod_next) {
+		if ((port->fp_soft_state & FP_SOFT_FCA_IS_NODMA) &&
+		    (mod->mod_info->ulp_type == FC_TYPE_IS8802_SNAP)) {
+			/*
+			 * We don't support IP over FC on FCOE HBA
+			 */
+			continue;
+		}
+
 		if ((ulp_port = fctl_get_ulp_port(mod, port)) == NULL) {
 			ulp_port = fctl_add_ulp_port(mod, port, KM_SLEEP);
 			ASSERT(ulp_port != NULL);
 
 			mutex_enter(&ulp_port->port_mutex);
-			ulp_port->port_statec = (info.port_state &
+			ulp_port->port_statec = ((info.port_state &
 			    FC_STATE_ONLINE) ? FC_ULP_STATEC_ONLINE :
-			    FC_ULP_STATEC_OFFLINE;
+			    FC_ULP_STATEC_OFFLINE);
 			mutex_exit(&ulp_port->port_mutex);
 		}
 	}
@@ -2546,6 +2554,14 @@
 	rw_downgrade(&fctl_mod_ports_lock);
 
 	for (mod = fctl_ulp_modules; mod; mod = mod->mod_next) {
+		if ((port->fp_soft_state & FP_SOFT_FCA_IS_NODMA) &&
+		    (mod->mod_info->ulp_type == FC_TYPE_IS8802_SNAP)) {
+			/*
+			 * We don't support IP over FC on FCOE HBA
+			 */
+			continue;
+		}
+
 		ulp_port = fctl_get_ulp_port(mod, port);
 		ASSERT(ulp_port != NULL);
 
@@ -2674,8 +2690,8 @@
     struct modlinkage *linkage)
 {
 	int			rval = FC_SUCCESS;
-	fc_ulp_module_t 	*mod;
-	fc_ulp_port_info_t 	info;
+	fc_ulp_module_t		*mod;
+	fc_ulp_port_info_t	info;
 	fc_ulp_ports_t		*ulp_port;
 
 	ASSERT(!MUTEX_HELD(&port->fp_mutex));
@@ -2727,36 +2743,36 @@
 
 static	void
 fctl_init_dma_attr(fc_local_port_t *port, fc_ulp_module_t *mod,
-    fc_ulp_port_info_t 	*info)
+    fc_ulp_port_info_t	*info)
 {
 
-		if ((strcmp(mod->mod_info->ulp_name, "fcp") == 0) ||
-		    (strcmp(mod->mod_info->ulp_name, "ltct") == 0)) {
-			info->port_cmd_dma_attr =
-			    port->fp_fca_tran->fca_dma_fcp_cmd_attr;
-			info->port_data_dma_attr =
-			    port->fp_fca_tran->fca_dma_fcp_data_attr;
-			info->port_resp_dma_attr =
-			    port->fp_fca_tran->fca_dma_fcp_rsp_attr;
-		} else if (strcmp(mod->mod_info->ulp_name, "fcsm") == 0) {
-			info->port_cmd_dma_attr =
-			    port->fp_fca_tran->fca_dma_fcsm_cmd_attr;
-			info->port_data_dma_attr =
-			    port->fp_fca_tran->fca_dma_attr;
-			info->port_resp_dma_attr =
-			    port->fp_fca_tran->fca_dma_fcsm_rsp_attr;
-		} else if (strcmp(mod->mod_info->ulp_name, "fcip") == 0) {
-			info->port_cmd_dma_attr =
-			    port->fp_fca_tran->fca_dma_fcip_cmd_attr;
-			info->port_data_dma_attr =
-			    port->fp_fca_tran->fca_dma_attr;
-			info->port_resp_dma_attr =
-			    port->fp_fca_tran->fca_dma_fcip_rsp_attr;
-		} else {
-			info->port_cmd_dma_attr = info->port_data_dma_attr =
-			    info->port_resp_dma_attr =
-			    port->fp_fca_tran->fca_dma_attr; /* default */
-		}
+	if ((strcmp(mod->mod_info->ulp_name, "fcp") == 0) ||
+	    (strcmp(mod->mod_info->ulp_name, "ltct") == 0)) {
+		info->port_cmd_dma_attr =
+		    port->fp_fca_tran->fca_dma_fcp_cmd_attr;
+		info->port_data_dma_attr =
+		    port->fp_fca_tran->fca_dma_fcp_data_attr;
+		info->port_resp_dma_attr =
+		    port->fp_fca_tran->fca_dma_fcp_rsp_attr;
+	} else if (strcmp(mod->mod_info->ulp_name, "fcsm") == 0) {
+		info->port_cmd_dma_attr =
+		    port->fp_fca_tran->fca_dma_fcsm_cmd_attr;
+		info->port_data_dma_attr =
+		    port->fp_fca_tran->fca_dma_attr;
+		info->port_resp_dma_attr =
+		    port->fp_fca_tran->fca_dma_fcsm_rsp_attr;
+	} else if (strcmp(mod->mod_info->ulp_name, "fcip") == 0) {
+		info->port_cmd_dma_attr =
+		    port->fp_fca_tran->fca_dma_fcip_cmd_attr;
+		info->port_data_dma_attr =
+		    port->fp_fca_tran->fca_dma_attr;
+		info->port_resp_dma_attr =
+		    port->fp_fca_tran->fca_dma_fcip_rsp_attr;
+	} else {
+		info->port_cmd_dma_attr = info->port_data_dma_attr =
+		    info->port_resp_dma_attr =
+		    port->fp_fca_tran->fca_dma_attr; /* default */
+	}
 }
 
 static int
@@ -2984,8 +3000,8 @@
 	uint32_t		new_state;
 	fc_local_port_t		*port;
 	fc_ulp_ports_t		*ulp_port;
-	fc_ulp_module_t 	*mod;
-	fc_port_clist_t 	*clist = (fc_port_clist_t *)arg;
+	fc_ulp_module_t		*mod;
+	fc_port_clist_t		*clist = (fc_port_clist_t *)arg;
 
 	ASSERT(clist != NULL);
 
@@ -3018,15 +3034,15 @@
 	 * sanity check for presence of OLD devices in the hash lists
 	 */
 	if (clist->clist_size) {
-		int 			count;
+		int			count;
 		fc_remote_port_t	*pd;
 
 		ASSERT(clist->clist_map != NULL);
 		for (count = 0; count < clist->clist_len; count++) {
 			if (clist->clist_map[count].map_state ==
 			    PORT_DEVICE_INVALID) {
-				la_wwn_t 	pwwn;
-				fc_portid_t 	d_id;
+				la_wwn_t	pwwn;
+				fc_portid_t	d_id;
 
 				pd = clist->clist_map[count].map_pd;
 				if (pd != NULL) {
@@ -3055,7 +3071,7 @@
 	 * Check for duplicate map entries
 	 */
 	if (clist->clist_size) {
-		int 			count;
+		int			count;
 		fc_remote_port_t	*pd1, *pd2;
 
 		ASSERT(clist->clist_map != NULL);
@@ -3142,7 +3158,7 @@
 	rw_exit(&fctl_ulp_lock);
 
 	if (clist->clist_size) {
-		int 			count;
+		int			count;
 		fc_remote_node_t	*node;
 		fc_remote_port_t	*pd;
 
@@ -3197,7 +3213,7 @@
 
 /*
  * Allocate an fc_remote_node_t struct to represent a remote node for the
- * given nwwn.  This will also add the nwwn to the global nwwn table.
+ * given nwwn.	This will also add the nwwn to the global nwwn table.
  *
  * Returns a pointer to the newly-allocated struct.  Returns NULL if
  * the kmem_zalloc fails or if the enlist_wwn attempt fails.
@@ -3264,9 +3280,9 @@
 int
 fctl_enlist_nwwn_table(fc_remote_node_t *rnodep, int sleep)
 {
-	int 			index;
-	fctl_nwwn_elem_t 	*new;
-	fctl_nwwn_list_t 	*head;
+	int			index;
+	fctl_nwwn_elem_t	*new;
+	fctl_nwwn_list_t	*head;
 
 	ASSERT(!MUTEX_HELD(&rnodep->fd_mutex));
 
@@ -3302,10 +3318,10 @@
 void
 fctl_delist_nwwn_table(fc_remote_node_t *rnodep)
 {
-	int 			index;
-	fctl_nwwn_list_t 	*head;
-	fctl_nwwn_elem_t 	*elem;
-	fctl_nwwn_elem_t 	*prev;
+	int			index;
+	fctl_nwwn_list_t	*head;
+	fctl_nwwn_elem_t	*elem;
+	fctl_nwwn_elem_t	*prev;
 
 	ASSERT(MUTEX_HELD(&fctl_nwwn_hash_mutex));
 	ASSERT(MUTEX_HELD(&rnodep->fd_mutex));
@@ -3355,10 +3371,10 @@
 fc_remote_node_t *
 fctl_get_remote_node_by_nwwn(la_wwn_t *node_wwn)
 {
-	int 			index;
-	fctl_nwwn_elem_t 	*elem;
+	int			index;
+	fctl_nwwn_elem_t	*elem;
 	fc_remote_node_t	*next;
-	fc_remote_node_t 	*rnodep = NULL;
+	fc_remote_node_t	*rnodep = NULL;
 
 	index = HASH_FUNC(WWN_HASH_KEY(node_wwn->raw_wwn),
 	    fctl_nwwn_table_size);
@@ -3395,10 +3411,10 @@
 fc_remote_node_t *
 fctl_lock_remote_node_by_nwwn(la_wwn_t *node_wwn)
 {
-	int 			index;
-	fctl_nwwn_elem_t 	*elem;
+	int			index;
+	fctl_nwwn_elem_t	*elem;
 	fc_remote_node_t	*next;
-	fc_remote_node_t 	*rnodep = NULL;
+	fc_remote_node_t	*rnodep = NULL;
 
 	index = HASH_FUNC(WWN_HASH_KEY(node_wwn->raw_wwn),
 	    fctl_nwwn_table_size);
@@ -3428,7 +3444,7 @@
 
 /*
  * Allocate and initialize an fc_remote_port_t struct & returns a pointer to
- * the newly allocated struct.  Only fails if the kmem_zalloc() fails.
+ * the newly allocated struct.	Only fails if the kmem_zalloc() fails.
  */
 fc_remote_port_t *
 fctl_alloc_remote_port(fc_local_port_t *port, la_wwn_t *port_wwn,
@@ -3535,8 +3551,8 @@
     fc_remote_port_t *pd)
 {
 	int			rcount = 0;
-	fc_remote_port_t 	*last;
-	fc_remote_port_t 	*ports;
+	fc_remote_port_t	*last;
+	fc_remote_port_t	*ports;
 
 	ASSERT(!MUTEX_HELD(&rnodep->fd_mutex));
 	ASSERT(!MUTEX_HELD(&pd->pd_mutex));
@@ -3613,7 +3629,7 @@
 #ifdef	DEBUG
 	{
 		int			index;
-		fc_remote_port_t 	*tmp_pd;
+		fc_remote_port_t	*tmp_pd;
 		struct d_id_hash	*tmp_head;
 
 		/*
@@ -3663,9 +3679,9 @@
 fctl_delist_did_table(fc_local_port_t *port, fc_remote_port_t *pd)
 {
 	uint32_t		d_id;
-	struct d_id_hash 	*head;
-	fc_remote_port_t 	*pd_next;
-	fc_remote_port_t 	*last;
+	struct d_id_hash	*head;
+	fc_remote_port_t	*pd_next;
+	fc_remote_port_t	*last;
 
 	ASSERT(MUTEX_HELD(&port->fp_mutex));
 	ASSERT(MUTEX_HELD(&pd->pd_mutex));
@@ -3726,7 +3742,7 @@
 #ifdef	DEBUG
 	{
 		int			index;
-		fc_remote_port_t 	*tmp_pd;
+		fc_remote_port_t	*tmp_pd;
 		struct pwwn_hash	*tmp_head;
 
 		/*
@@ -3781,9 +3797,9 @@
 {
 	int			index;
 	la_wwn_t		pwwn;
-	struct pwwn_hash 	*head;
-	fc_remote_port_t 	*pd_next;
-	fc_remote_port_t 	*last;
+	struct pwwn_hash	*head;
+	fc_remote_port_t	*pd_next;
+	fc_remote_port_t	*last;
 
 	ASSERT(MUTEX_HELD(&port->fp_mutex));
 	ASSERT(MUTEX_HELD(&pd->pd_mutex));
@@ -3835,8 +3851,8 @@
 fc_remote_port_t *
 fctl_get_remote_port_by_did(fc_local_port_t *port, uint32_t d_id)
 {
-	struct d_id_hash 	*head;
-	fc_remote_port_t 	*pd;
+	struct d_id_hash	*head;
+	fc_remote_port_t	*pd;
 
 	ASSERT(!MUTEX_HELD(&port->fp_mutex));
 
@@ -3888,8 +3904,8 @@
 fc_remote_port_t *
 fctl_hold_remote_port_by_did(fc_local_port_t *port, uint32_t d_id)
 {
-	struct d_id_hash 	*head;
-	fc_remote_port_t 	*pd;
+	struct d_id_hash	*head;
+	fc_remote_port_t	*pd;
 
 	ASSERT(!MUTEX_HELD(&port->fp_mutex));
 
@@ -3929,8 +3945,8 @@
 fctl_get_remote_port_by_pwwn(fc_local_port_t *port, la_wwn_t *pwwn)
 {
 	int			index;
-	struct pwwn_hash 	*head;
-	fc_remote_port_t 	*pd;
+	struct pwwn_hash	*head;
+	fc_remote_port_t	*pd;
 
 	ASSERT(!MUTEX_HELD(&port->fp_mutex));
 
@@ -3964,8 +3980,8 @@
 fctl_get_remote_port_by_pwwn_mutex_held(fc_local_port_t *port, la_wwn_t *pwwn)
 {
 	int			index;
-	struct pwwn_hash 	*head;
-	fc_remote_port_t 	*pd;
+	struct pwwn_hash	*head;
+	fc_remote_port_t	*pd;
 
 	ASSERT(MUTEX_HELD(&port->fp_mutex));
 
@@ -4002,8 +4018,8 @@
 fctl_hold_remote_port_by_pwwn(fc_local_port_t *port, la_wwn_t *pwwn)
 {
 	int			index;
-	struct pwwn_hash 	*head;
-	fc_remote_port_t 	*pd;
+	struct pwwn_hash	*head;
+	fc_remote_port_t	*pd;
 
 	ASSERT(!MUTEX_HELD(&port->fp_mutex));
 
@@ -4043,15 +4059,15 @@
  * PD_ELS_IN_PROGRESS & PD_ELS_MARK settings in the pd_flags), then
  * fctl_destroy_remote_port_t() is called to deconstruct/free the given
  * fc_remote_port_t (which will also remove it from the d_id and pwwn tables
- * on the associated fc_local_port_t).  If the associated fc_remote_node_t is no
+ * on the associated fc_local_port_t).	If the associated fc_remote_node_t is no
  * longer in use, then it too is deconstructed/freed.
  */
 void
 fctl_release_remote_port(fc_remote_port_t *pd)
 {
 	int			remove = 0;
-	fc_remote_node_t 	*node;
-	fc_local_port_t 	*port;
+	fc_remote_node_t	*node;
+	fc_local_port_t		*port;
 
 	mutex_enter(&pd->pd_mutex);
 	port = pd->pd_port;
@@ -4099,9 +4115,9 @@
 	int			full_list;
 	int			initiator;
 	uint32_t		topology;
-	struct pwwn_hash 	*head;
-	fc_remote_port_t 	*pd;
-	fc_remote_port_t 	*old_pd;
+	struct pwwn_hash	*head;
+	fc_remote_port_t	*pd;
+	fc_remote_port_t	*old_pd;
 	fc_remote_port_t	*last_pd;
 	fc_portmap_t		*listptr;
 
@@ -4390,11 +4406,8 @@
 
 
 /*
- * Compare two WWNs. The NAA is omitted for comparison.
- *
- * Note particularly that the indentation used in this
- * function  isn't according to Sun recommendations. It
- * is indented to make reading a bit easy.
+ * Compare two WWNs.
+ * The NAA can't be omitted for comparison.
  *
  * Return Values:
  *   if src == dst return  0
@@ -4404,25 +4417,29 @@
 int
 fctl_wwn_cmp(la_wwn_t *src, la_wwn_t *dst)
 {
-	la_wwn_t tmpsrc, tmpdst;
-
-	/*
-	 * Fibre Channel protocol is big endian, so compare
-	 * as big endian values
-	 */
-	tmpsrc.i_wwn[0] = BE_32(src->i_wwn[0]);
-	tmpsrc.i_wwn[1] = BE_32(src->i_wwn[1]);
-
-	tmpdst.i_wwn[0] = BE_32(dst->i_wwn[0]);
-	tmpdst.i_wwn[1] = BE_32(dst->i_wwn[1]);
-
-	return (
-	    (tmpsrc.w.nport_id == tmpdst.w.nport_id) ?
-		((tmpsrc.w.wwn_hi == tmpdst.w.wwn_hi) ?
-		    ((tmpsrc.w.wwn_lo == tmpdst.w.wwn_lo) ? 0 :
-		    (tmpsrc.w.wwn_lo > tmpdst.w.wwn_lo) ? 1 : -1) :
-		(tmpsrc.w.wwn_hi > tmpdst.w.wwn_hi) ? 1 : -1) :
-	    (tmpsrc.w.nport_id > tmpdst.w.nport_id) ? 1 : -1);
+	uint8_t *l, *r;
+	int i;
+	uint64_t wl, wr;
+
+	l = (uint8_t *)src;
+	r = (uint8_t *)dst;
+
+	for (i = 0, wl = 0; i < 8; i++) {
+		wl <<= 8;
+		wl |= l[i];
+	}
+	for (i = 0, wr = 0; i < 8; i++) {
+		wr <<= 8;
+		wr |= r[i];
+	}
+
+	if (wl > wr) {
+		return (1);
+	} else if (wl == wr) {
+		return (0);
+	} else {
+		return (-1);
+	}
 }
 
 
@@ -4499,7 +4516,7 @@
 {
 	int			invalid = 0;
 	fc_remote_node_t	*rnodep;
-	fc_remote_port_t 	*pd;
+	fc_remote_port_t	*pd;
 
 	rnodep = fctl_get_remote_node_by_nwwn(node_wwn);
 	if (rnodep) {
@@ -4526,7 +4543,7 @@
 
 	/*
 	 * See if there already is an fc_remote_port_t struct in existence
-	 * on the specified fc_local_port_t for the given pwwn.  If so, then
+	 * on the specified fc_local_port_t for the given pwwn.	 If so, then
 	 * grab a reference to it. The 'held' here just means that fp_mutex
 	 * is held by the caller -- no reference counts are updated.
 	 */
@@ -4643,7 +4660,7 @@
 			 * OK the old & new d_id's match, and the remote
 			 * port struct is not marked as PORT_DEVICE_OLD, so
 			 * presume that it's still the same device and is
-			 * still in good shape.  Also this presumes that we
+			 * still in good shape.	 Also this presumes that we
 			 * do not need to update d_id or pwwn hash tables.
 			 */
 			/* sanitize device values */
@@ -4684,7 +4701,7 @@
 	}
 
 	/*
-	 * Add  the fc_remote_port_t onto the linked list of remote port
+	 * Add	the fc_remote_port_t onto the linked list of remote port
 	 * devices associated with the given fc_remote_node_t (remote node).
 	 */
 	fctl_link_remote_port_to_remote_node(rnodep, pd);
@@ -4705,7 +4722,7 @@
  * If pd_ref_count in the given fc_remote_port_t is nonzero, then this
  * function just sets the pd->pd_aux_flags |= PD_NEEDS_REMOVAL and the
  * pd->pd_type = PORT_DEVICE_OLD and lets some other function(s) worry about
- * the cleanup.  The function then also returns '1'
+ * the cleanup.	 The function then also returns '1'
  * instead of the actual number of remaining fc_remote_port_t structs
  *
  * If there are no more remote ports on the remote node, return 0.
@@ -4714,7 +4731,7 @@
 int
 fctl_destroy_remote_port(fc_local_port_t *port, fc_remote_port_t *pd)
 {
-	fc_remote_node_t 	*rnodep;
+	fc_remote_node_t	*rnodep;
 	int			rcount = 0;
 
 	mutex_enter(&pd->pd_mutex);
@@ -4775,7 +4792,7 @@
  * For each fc_remote_port_t found, this will:
  *
  *  - Remove the fc_remote_port_t from the linked list of remote ports for
- *    the associated fc_remote_node_t.  If the linked list goes empty, then this
+ *    the associated fc_remote_node_t.	If the linked list goes empty, then this
  *    tries to deconstruct & free the fc_remote_node_t (that also removes the
  *    fc_remote_node_t from the global fctl_nwwn_hash_table[]).
  *
@@ -4793,7 +4810,7 @@
 	int			index;
 	fc_remote_port_t	*pd;
 	fc_remote_node_t	*rnodep;
-	struct d_id_hash 	*head;
+	struct d_id_hash	*head;
 
 	mutex_enter(&port->fp_mutex);
 
@@ -4889,7 +4906,7 @@
 	int			check_type;
 	int			rval;
 	uint32_t		claimed;
-	fc_ulp_module_t 	*mod;
+	fc_ulp_module_t		*mod;
 	fc_ulp_ports_t		*ulp_port;
 
 	claimed = 0;
@@ -5048,14 +5065,14 @@
 static int
 fctl_update_host_ns_values(fc_local_port_t *port, fc_ns_cmd_t *ns_req)
 {
-	int 	rval = FC_SUCCESS;
+	int	rval = FC_SUCCESS;
 
 	switch (ns_req->ns_cmd) {
 	case NS_RFT_ID: {
 		int		count;
 		uint32_t	*src;
 		uint32_t	*dst;
-		ns_rfc_type_t 	*rfc;
+		ns_rfc_type_t	*rfc;
 
 		rfc = (ns_rfc_type_t *)ns_req->ns_req_payload;
 
@@ -5140,7 +5157,7 @@
 static int
 fctl_retrieve_host_ns_values(fc_local_port_t *port, fc_ns_cmd_t *ns_req)
 {
-	int 	rval = FC_SUCCESS;
+	int	rval = FC_SUCCESS;
 
 	switch (ns_req->ns_cmd) {
 	case NS_GFT_ID: {
@@ -5279,8 +5296,8 @@
 {
 	int			ret;
 	int			save;
-	uint32_t 		claimed;
-	fc_ulp_module_t 	*mod;
+	uint32_t		claimed;
+	fc_ulp_module_t		*mod;
 	fc_ulp_ports_t		*ulp_port;
 
 	save = *rval;
@@ -5456,14 +5473,14 @@
  * only ONE port on the adapter will be returned.
  * pathList should be (count * MAXPATHLEN) long.
  * The return value will be set to the number of
- * HBAs that were found on the system.  If the value
+ * HBAs that were found on the system.	If the value
  * is greater than count, the routine should be retried
  * with a larger buffer.
  */
 int
 fc_ulp_get_adapter_paths(char *pathList, int count)
 {
-	fc_fca_port_t 	*fca_port;
+	fc_fca_port_t	*fca_port;
 	int		in = 0, out = 0, check, skip, maxPorts = 0;
 	fc_local_port_t		**portList;
 	fc_local_port_t		*new_port, *stored_port;
@@ -5493,67 +5510,73 @@
 
 		/* Filter out secondary ports from the list */
 		for (check = 0; check < out; check++) {
-		if (portList[check] == NULL) {
-			continue;
-		}
-		/* Guard against duplicates (should never happen) */
-		if (portList[check] == fca_port->port_handle) {
-			/* Same port */
-			skip = 1;
-			break;
-		}
-
-		/* Lock the already stored port for comparison */
-		stored_port = portList[check];
-		mutex_enter(&stored_port->fp_mutex);
-		stored_fru = &stored_port->fp_hba_port_attrs.hba_fru_details;
-
-		/* Are these ports on the same HBA? */
-		if (new_fru->high == stored_fru->high &&
-			new_fru->low == stored_fru->low) {
-		    /* Now double check driver */
-		    if (strncmp(new_port->fp_hba_port_attrs.driver_name,
-			    stored_port->fp_hba_port_attrs.driver_name,
-			    FCHBA_DRIVER_NAME_LEN) == 0) {
-			/* we no we don't need to grow the list */
-			skip = 1;
-			/* Are we looking at a lower port index? */
-			if (new_fru->port_index < stored_fru->port_index) {
-				/* Replace the port in the list */
-				mutex_exit(&stored_port->fp_mutex);
-				if (new_port->fp_npiv_type == FC_NPIV_PORT) {
-					break;
+			if (portList[check] == NULL) {
+				continue;
+			}
+			/* Guard against duplicates (should never happen) */
+			if (portList[check] == fca_port->port_handle) {
+				/* Same port */
+				skip = 1;
+				break;
+			}
+
+			/* Lock the already stored port for comparison */
+			stored_port = portList[check];
+			mutex_enter(&stored_port->fp_mutex);
+			stored_fru =
+			    &stored_port->fp_hba_port_attrs.hba_fru_details;
+
+			/* Are these ports on the same HBA? */
+			if (new_fru->high == stored_fru->high &&
+			    new_fru->low == stored_fru->low) {
+				/* Now double check driver */
+				if (strncmp(
+				    new_port->fp_hba_port_attrs.driver_name,
+				    stored_port->fp_hba_port_attrs.driver_name,
+				    FCHBA_DRIVER_NAME_LEN) == 0) {
+					/* we don't need to grow the list */
+					skip = 1;
+					/* looking at a lower port index? */
+					if (new_fru->port_index <
+					    stored_fru->port_index) {
+						/* Replace the port in list */
+						mutex_exit(
+						    &stored_port->fp_mutex);
+						if (new_port->fp_npiv_type ==
+						    FC_NPIV_PORT) {
+							break;
+						}
+						portList[check] = new_port;
+						break;
+					} /* Else, just skip this port */
 				}
-				portList[check] = new_port;
-				break;
-			} /* Else, just skip this port */
-		    }
-		}
-
-		mutex_exit(&stored_port->fp_mutex);
-	    }
-	    mutex_exit(&new_port->fp_mutex);
-
-	    if (!skip) {
-		/*
-		 * Either this is the first port for this HBA, or
-		 * it's a secondary port and we haven't stored the
-		 * primary/first port for that HBA.  In the latter case,
-		 * will just filter it out as we proceed to loop.
-		 */
-		if (fca_port->port_handle->fp_npiv_type == FC_NPIV_PORT) {
-			continue;
-		} else {
-			portList[out++] = fca_port->port_handle;
-		}
-	    }
+			}
+
+			mutex_exit(&stored_port->fp_mutex);
+		}
+		mutex_exit(&new_port->fp_mutex);
+
+		if (!skip) {
+			/*
+			 * Either this is the first port for this HBA, or
+			 * it's a secondary port and we haven't stored the
+			 * primary/first port for that HBA.  In the latter case,
+			 * will just filter it out as we proceed to loop.
+			 */
+			if (fca_port->port_handle->fp_npiv_type ==
+			    FC_NPIV_PORT) {
+				continue;
+			} else {
+				portList[out++] = fca_port->port_handle;
+			}
+		}
 	}
 
 	if (out <= count) {
-	    for (in = 0; in < out; in++) {
-		(void) ddi_pathname(portList[in]->fp_port_dip,
-		    &pathList[MAXPATHLEN * in]);
-	    }
+		for (in = 0; in < out; in++) {
+			(void) ddi_pathname(portList[in]->fp_port_dip,
+			    &pathList[MAXPATHLEN * in]);
+		}
 	}
 	mutex_exit(&fctl_port_lock);
 	kmem_free(portList, sizeof (*portList) * maxPorts);
@@ -5588,7 +5611,7 @@
 {
 	int		rval = FC_FAILURE;
 	la_wwn_t	pwwn;
-	fc_orphan_t 	*orp;
+	fc_orphan_t	*orp;
 	fc_orphan_t	*orphan;
 
 	ASSERT(MUTEX_HELD(&port->fp_mutex));
@@ -5625,7 +5648,7 @@
 {
 	int		rval = FC_FAILURE;
 	la_wwn_t	pwwn;
-	fc_orphan_t 	*orp;
+	fc_orphan_t	*orp;
 	fc_orphan_t	*orphan;
 
 	mutex_enter(&port->fp_mutex);
@@ -5669,7 +5692,7 @@
 {
 	int		rval = FC_FAILURE;
 	fc_orphan_t	*prev = NULL;
-	fc_orphan_t 	*orp;
+	fc_orphan_t	*orp;
 
 	mutex_enter(&port->fp_mutex);
 	for (orp = port->fp_orphan_list; orp != NULL; orp = orp->orp_next) {
@@ -5699,9 +5722,9 @@
 static void
 fctl_print_if_not_orphan(fc_local_port_t *port, fc_remote_port_t *pd)
 {
-	char 		ww_name[17];
-	la_wwn_t 	pwwn;
-	fc_orphan_t 	*orp;
+	char		ww_name[17];
+	la_wwn_t	pwwn;
+	fc_orphan_t	*orp;
 
 	mutex_enter(&port->fp_mutex);
 
@@ -5772,7 +5795,7 @@
     char **action, char **expln)
 {
 	int		ret;
-	int 		len;
+	int		len;
 	int		index;
 	fc_pkt_error_t	*error;
 	fc_pkt_reason_t	*reason_b;	/* Base pointer */
@@ -5840,9 +5863,9 @@
 	int			index;
 	int			initiator;
 	fc_remote_node_t	*node;
-	struct pwwn_hash 	*head;
-	fc_remote_port_t 	*pd;
-	fc_remote_port_t 	*old_pd;
+	struct pwwn_hash	*head;
+	fc_remote_port_t	*pd;
+	fc_remote_port_t	*old_pd;
 	fc_remote_port_t	*last_pd;
 
 	/*
@@ -5954,7 +5977,7 @@
 {
 	int			index;
 	struct pwwn_hash	*head;
-	fc_remote_port_t 	*pd;
+	fc_remote_port_t	*pd;
 
 	ASSERT(MUTEX_HELD(&port->fp_mutex));
 
@@ -5984,7 +6007,7 @@
 fc_trace_debug(fc_trace_logq_t *logq, caddr_t name, int dflag, int dlevel,
     int errno, const char *fmt, ...)
 {
-	char 	buf[FC_MAX_TRACE_BUF_LEN + 3]; /* 3 is for "\n" */
+	char	buf[FC_MAX_TRACE_BUF_LEN + 3]; /* 3 is for "\n" */
 	char	*bufptr = buf;
 	va_list	ap;
 	int	cnt = 0;
@@ -5995,16 +6018,16 @@
 
 	if (name) {
 		cnt = snprintf(buf, FC_MAX_TRACE_BUF_LEN + 1, "%d=>%s::",
-			logq->il_id++, name);
+		    logq->il_id++, name);
 	} else {
 		cnt = snprintf(buf, FC_MAX_TRACE_BUF_LEN + 1, "%d=>trace::",
-			logq->il_id++);
+		    logq->il_id++);
 	}
 
 	if (cnt < FC_MAX_TRACE_BUF_LEN) {
 		va_start(ap, fmt);
 		cnt += vsnprintf(buf + cnt, FC_MAX_TRACE_BUF_LEN + 1 - cnt,
-			fmt, ap);
+		    fmt, ap);
 		va_end(ap);
 	}
 
@@ -6013,7 +6036,7 @@
 	}
 	if (errno && (cnt < FC_MAX_TRACE_BUF_LEN)) {
 		cnt += snprintf(buf + cnt, FC_MAX_TRACE_BUF_LEN + 1 - cnt,
-			"error=0x%x\n", errno);
+		    "error=0x%x\n", errno);
 	}
 	(void) snprintf(buf + cnt, FC_MAX_TRACE_BUF_LEN + 3 - cnt, "\n");
 
@@ -6175,21 +6198,21 @@
 	int			outer;
 	int			match = 0;
 	struct pwwn_hash	*head;
-	fc_remote_port_t 	*pd;
+	fc_remote_port_t	*pd;
 
 	ASSERT(MUTEX_HELD(&port->fp_mutex));
 
 	for (outer = 0;
-		outer < pwwn_table_size && match <= index;
-		outer++) {
-	    head = &port->fp_pwwn_table[outer];
-	    pd = head->pwwn_head;
-	    if (pd != NULL) match ++;
-
-	    while (pd != NULL && match <= index) {
-		pd = pd->pd_wwn_hnext;
+	    outer < pwwn_table_size && match <= index;
+	    outer++) {
+		head = &port->fp_pwwn_table[outer];
+		pd = head->pwwn_head;
 		if (pd != NULL) match ++;
-	    }
+
+		while (pd != NULL && match <= index) {
+			pd = pd->pd_wwn_hnext;
+			if (pd != NULL) match ++;
+		}
 	}
 
 	return (pd);
@@ -6203,7 +6226,7 @@
 {
 	int			index;
 	struct pwwn_hash	*head;
-	fc_remote_port_t 	*pd;
+	fc_remote_port_t	*pd;
 
 	ASSERT(MUTEX_HELD(&port->fp_mutex));
 
@@ -6211,21 +6234,21 @@
 		head = &port->fp_pwwn_table[index];
 		pd = head->pwwn_head;
 
-	    while (pd != NULL) {
-		mutex_enter(&pd->pd_mutex);
-		if (bcmp(pd->pd_port_name.raw_wwn, wwn.raw_wwn,
-			sizeof (la_wwn_t)) == 0) {
-		    mutex_exit(&pd->pd_mutex);
-		    return (pd);
-		}
-		if (bcmp(pd->pd_remote_nodep->fd_node_name.raw_wwn, wwn.raw_wwn,
-			sizeof (la_wwn_t)) == 0) {
-		    mutex_exit(&pd->pd_mutex);
-		    return (pd);
-		}
-		mutex_exit(&pd->pd_mutex);
-		pd = pd->pd_wwn_hnext;
-	    }
+		while (pd != NULL) {
+			mutex_enter(&pd->pd_mutex);
+			if (bcmp(pd->pd_port_name.raw_wwn, wwn.raw_wwn,
+			    sizeof (la_wwn_t)) == 0) {
+				mutex_exit(&pd->pd_mutex);
+				return (pd);
+			}
+			if (bcmp(pd->pd_remote_nodep->fd_node_name.raw_wwn,
+			    wwn.raw_wwn, sizeof (la_wwn_t)) == 0) {
+				mutex_exit(&pd->pd_mutex);
+				return (pd);
+			}
+			mutex_exit(&pd->pd_mutex);
+			pd = pd->pd_wwn_hnext;
+		}
 	}
 	/* No match */
 	return (NULL);
@@ -6244,7 +6267,7 @@
 fctl_count_fru_ports(fc_local_port_t *port, int npivflag)
 {
 	fca_hba_fru_details_t	*fru;
-	fc_fca_port_t 	*fca_port;
+	fc_fca_port_t	*fca_port;
 	fc_local_port_t	*tmpPort = NULL;
 	uint32_t	count = 1;
 
@@ -6262,11 +6285,11 @@
 
 	for (fca_port = fctl_fca_portlist; fca_port != NULL;
 	    fca_port = fca_port->port_next) {
-	    tmpPort = fca_port->port_handle;
-	    if (tmpPort == port) {
-		continue;
-	    }
-	    mutex_enter(&tmpPort->fp_mutex);
+		tmpPort = fca_port->port_handle;
+		if (tmpPort == port) {
+			continue;
+		}
+		mutex_enter(&tmpPort->fp_mutex);
 
 		/*
 		 * If an FCA driver returns unique fru->high and fru->low for
@@ -6344,7 +6367,7 @@
 fctl_get_adapter_port_by_index(fc_local_port_t *port, uint32_t port_index)
 {
 	fca_hba_fru_details_t	*fru;
-	fc_fca_port_t 	*fca_port;
+	fc_fca_port_t	*fca_port;
 	fc_local_port_t	*tmpPort = NULL;
 	fc_fca_port_t	*list = NULL, *tmpEntry;
 	fc_local_port_t		*phyPort, *virPort = NULL;
@@ -6374,41 +6397,43 @@
 	/* Loop through all known ports */
 	for (fca_port = fctl_fca_portlist; fca_port != NULL;
 	    fca_port = fca_port->port_next) {
-	    tmpPort = fca_port->port_handle;
-	    if (tmpPort == port) {
-		/* Skip over the port that was passed in as the argument */
-		continue;
-	    }
-	    mutex_enter(&tmpPort->fp_mutex);
-
-	    /* See if this port is on the same HBA FRU (fast check) */
-	    if (tmpPort->fp_hba_port_attrs.hba_fru_details.high ==
+		tmpPort = fca_port->port_handle;
+		if (tmpPort == port) {
+			/* Skip the port that was passed in as the argument */
+			continue;
+		}
+		mutex_enter(&tmpPort->fp_mutex);
+
+		/* See if this port is on the same HBA FRU (fast check) */
+		if (tmpPort->fp_hba_port_attrs.hba_fru_details.high ==
 		    fru->high &&
 		    tmpPort->fp_hba_port_attrs.hba_fru_details.low ==
 		    fru->low) {
-		/* Now double check driver (slower check) */
-		if (strncmp(port->fp_hba_port_attrs.driver_name,
-			tmpPort->fp_hba_port_attrs.driver_name,
-			FCHBA_DRIVER_NAME_LEN) == 0) {
-
-		    fru = &tmpPort->fp_hba_port_attrs.hba_fru_details;
-		    /* Check for the matching port_index */
-			if ((tmpPort->fp_npiv_type != FC_NPIV_PORT) &&
-			    (fru->port_index == port_index)) {
-				/* Found it! */
-				mutex_exit(&tmpPort->fp_mutex);
-				mutex_exit(&port->fp_mutex);
-				mutex_exit(&fctl_port_lock);
-				fctl_local_port_list_free(list);
-				return (tmpPort);
-			}
-			if (tmpPort->fp_npiv_type != FC_NPIV_PORT) {
-				(void) fctl_local_port_list_add(list, tmpPort);
-				phyPortNum++;
-			}
-		} /* Else, different FCA driver */
-	    } /* Else not the same HBA FRU */
-	    mutex_exit(&tmpPort->fp_mutex);
+			/* Now double check driver (slower check) */
+			if (strncmp(port->fp_hba_port_attrs.driver_name,
+			    tmpPort->fp_hba_port_attrs.driver_name,
+			    FCHBA_DRIVER_NAME_LEN) == 0) {
+
+				fru =
+				    &tmpPort->fp_hba_port_attrs.hba_fru_details;
+				/* Check for the matching port_index */
+				if ((tmpPort->fp_npiv_type != FC_NPIV_PORT) &&
+				    (fru->port_index == port_index)) {
+					/* Found it! */
+					mutex_exit(&tmpPort->fp_mutex);
+					mutex_exit(&port->fp_mutex);
+					mutex_exit(&fctl_port_lock);
+					fctl_local_port_list_free(list);
+					return (tmpPort);
+				}
+				if (tmpPort->fp_npiv_type != FC_NPIV_PORT) {
+					(void) fctl_local_port_list_add(list,
+					    tmpPort);
+					phyPortNum++;
+				}
+			} /* Else, different FCA driver */
+		} /* Else not the same HBA FRU */
+		mutex_exit(&tmpPort->fp_mutex);
 
 	}
 
@@ -6461,7 +6486,7 @@
 		 * This wouldn't be a problem except that if we have
 		 * registered our PM components in the meantime, we will
 		 * then be idling a component that was never busied.  PM
-		 * will be very unhappy if we do this.  Thus, we keep
+		 * will be very unhappy if we do this.	Thus, we keep
 		 * track of this with port->fp_pm_busy_nocomp.
 		 */
 		port->fp_pm_busy_nocomp++;
@@ -6533,12 +6558,10 @@
  *
  * Return Value: Nothing
  *
- *      Context: Kernel context.
+ *	Context: Kernel context.
  */
 static void
-fctl_tc_timer(
-    void	*arg
-)
+fctl_tc_timer(void *arg)
 {
 	timed_counter_t	*tc = (timed_counter_t *)arg;
 
@@ -6559,21 +6582,17 @@
  *  Description: Constructs a timed counter.
  *
  *    Arguments: *tc		Address where the timed counter will reside.
- *		 max_value      Maximum value the counter is allowed to take.
+ *		 max_value	Maximum value the counter is allowed to take.
  *		 timer		Number of microseconds after which the counter
  *				will be reset. The timer is started when the
  *				value of the counter goes from 0 to 1.
  *
  * Return Value: Nothing
  *
- *      Context: Kernel context.
+ *	Context: Kernel context.
  */
 void
-fctl_tc_constructor(
-    timed_counter_t	*tc,
-    uint32_t		max_value,
-    clock_t		timer
-)
+fctl_tc_constructor(timed_counter_t *tc, uint32_t max_value, clock_t timer)
 {
 	ASSERT(tc != NULL);
 	ASSERT(tc->sig != tc);
@@ -6596,12 +6615,10 @@
  *
  * Return Value: Nothing
  *
- *      Context: Kernel context.
+ *	Context: Kernel context.
  */
 void
-fctl_tc_destructor(
-    timed_counter_t	*tc
-)
+fctl_tc_destructor(timed_counter_t *tc)
 {
 	ASSERT(tc != NULL);
 	ASSERT(tc->sig == tc);
@@ -6627,12 +6644,10 @@
  * Return Value: B_TRUE		Counter reached the max value.
  *		 B_FALSE	Counter hasn't reached the max value.
  *
- *      Context: Kernel or interrupt context.
+ *	Context: Kernel or interrupt context.
  */
 boolean_t
-fctl_tc_increment(
-    timed_counter_t *tc
-)
+fctl_tc_increment(timed_counter_t *tc)
 {
 	ASSERT(tc != NULL);
 	ASSERT(tc->sig == tc);
@@ -6667,12 +6682,10 @@
  * Return Value: 0		Counter reached the max value.
  *		 Not 0		Counter hasn't reached the max value.
  *
- *      Context: Kernel or interrupt context.
+ *	Context: Kernel or interrupt context.
  */
 void
-fctl_tc_reset(
-    timed_counter_t *tc
-)
+fctl_tc_reset(timed_counter_t *tc)
 {
 	ASSERT(tc != NULL);
 	ASSERT(tc->sig == tc);
--- a/usr/src/uts/common/io/fibre-channel/impl/fp.c	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/uts/common/io/fibre-channel/impl/fp.c	Mon Aug 10 10:43:48 2009 -0400
@@ -95,7 +95,7 @@
 	ddi_quiesce_not_needed 		/* quiesce */
 };
 
-#define	FP_VERSION		"1.99"
+#define	FP_VERSION		"20090729-1.100"
 #define	FP_NAME_VERSION		"SunFC Port v" FP_VERSION
 
 char *fp_version = FP_NAME_VERSION;
@@ -928,13 +928,10 @@
 	char pwwn[17], nwwn[17];
 
 	instance = ddi_get_instance(dip);
-
 	port_len = sizeof (port_num);
-
 	rval = ddi_prop_op(DDI_DEV_T_ANY, dip, PROP_LEN_AND_VAL_BUF,
 	    DDI_PROP_DONTPASS | DDI_PROP_CANSLEEP, "port",
 	    (caddr_t)&port_num, &port_len);
-
 	if (rval != DDI_SUCCESS) {
 		cmn_err(CE_WARN, "fp(%d): No port property in devinfo",
 		    instance);
@@ -1884,17 +1881,22 @@
 	cmd->cmd_port = port;
 	pkt = &cmd->cmd_pkt;
 
-	if (ddi_dma_alloc_handle(port->fp_fca_dip,
-	    port->fp_fca_tran->fca_dma_attr, cb, NULL,
-	    &pkt->pkt_cmd_dma) != DDI_SUCCESS) {
-		return (-1);
-	}
-
-	if (ddi_dma_alloc_handle(port->fp_fca_dip,
-	    port->fp_fca_tran->fca_dma_attr, cb, NULL,
-	    &pkt->pkt_resp_dma) != DDI_SUCCESS) {
-		ddi_dma_free_handle(&pkt->pkt_cmd_dma);
-		return (-1);
+	if (!(port->fp_soft_state & FP_SOFT_FCA_IS_NODMA)) {
+		if (ddi_dma_alloc_handle(port->fp_fca_dip,
+		    port->fp_fca_tran->fca_dma_attr, cb, NULL,
+		    &pkt->pkt_cmd_dma) != DDI_SUCCESS) {
+			return (-1);
+		}
+
+		if (ddi_dma_alloc_handle(port->fp_fca_dip,
+		    port->fp_fca_tran->fca_dma_attr, cb, NULL,
+		    &pkt->pkt_resp_dma) != DDI_SUCCESS) {
+			ddi_dma_free_handle(&pkt->pkt_cmd_dma);
+			return (-1);
+		}
+	} else {
+		pkt->pkt_cmd_dma = 0;
+		pkt->pkt_resp_dma = 0;
 	}
 
 	pkt->pkt_cmd_acc = pkt->pkt_resp_acc = NULL;
@@ -1951,6 +1953,13 @@
  * ensures that the pd_ref_count for the fc_remote_port_t is valid.
  * If there is no fc_remote_port_t associated with the fc_packet_t, then
  * fp_alloc_pkt() must be called with pd set to NULL.
+ *
+ * fp/fctl will resue fp_cmd_t somewhere, and change pkt_cmdlen/rsplen,
+ * actually, it's a design fault. But there's no problem for physical
+ * FCAs. But it will cause memory leak or panic for virtual FCAs like fcoei.
+ *
+ * For FCAs that don't support DMA, such as fcoei, we will use
+ * pkt_fctl_rsvd1/rsvd2 to keep the real cmd_len/resp_len.
  */
 
 static fp_cmd_t *
@@ -1986,6 +1995,10 @@
 	pkt->pkt_action = 0;
 	pkt->pkt_reason = 0;
 	pkt->pkt_expln = 0;
+	pkt->pkt_cmd = NULL;
+	pkt->pkt_resp = NULL;
+	pkt->pkt_fctl_rsvd1 = NULL;
+	pkt->pkt_fctl_rsvd2 = NULL;
 
 	/*
 	 * Init pkt_pd with the given pointer; this must be done _before_
@@ -1998,7 +2011,7 @@
 		goto alloc_pkt_failed;
 	}
 
-	if (cmd_len) {
+	if (cmd_len && !(port->fp_soft_state & FP_SOFT_FCA_IS_NODMA)) {
 		ASSERT(pkt->pkt_cmd_dma != NULL);
 
 		rval = ddi_dma_mem_alloc(pkt->pkt_cmd_dma, cmd_len,
@@ -2047,9 +2060,12 @@
 			ddi_dma_nextcookie(pkt->pkt_cmd_dma, &pkt_cookie);
 			*cp = pkt_cookie;
 		}
-	}
-
-	if (resp_len) {
+	} else if (cmd_len != 0) {
+		pkt->pkt_cmd = kmem_alloc(cmd_len, KM_SLEEP);
+		pkt->pkt_fctl_rsvd1 = (opaque_t)(uintptr_t)cmd_len;
+	}
+
+	if (resp_len && !(port->fp_soft_state & FP_SOFT_FCA_IS_NODMA)) {
 		ASSERT(pkt->pkt_resp_dma != NULL);
 
 		rval = ddi_dma_mem_alloc(pkt->pkt_resp_dma, resp_len,
@@ -2099,6 +2115,9 @@
 			ddi_dma_nextcookie(pkt->pkt_resp_dma, &pkt_cookie);
 			*cp = pkt_cookie;
 		}
+	} else if (resp_len != 0) {
+		pkt->pkt_resp = kmem_alloc(resp_len, KM_SLEEP);
+		pkt->pkt_fctl_rsvd2 = (opaque_t)(uintptr_t)resp_len;
 	}
 
 	pkt->pkt_cmdlen = cmd_len;
@@ -2123,6 +2142,16 @@
 		pkt->pkt_resp_cookie = NULL;
 	}
 
+	if (port->fp_soft_state & FP_SOFT_FCA_IS_NODMA) {
+		if (pkt->pkt_cmd) {
+			kmem_free(pkt->pkt_cmd, cmd_len);
+		}
+
+		if (pkt->pkt_resp) {
+			kmem_free(pkt->pkt_resp, resp_len);
+		}
+	}
+
 	kmem_cache_free(port->fp_pkt_cache, cmd);
 
 	return (NULL);
@@ -2160,6 +2189,18 @@
 		pkt->pkt_resp_cookie = NULL;
 	}
 
+	if (port->fp_soft_state & FP_SOFT_FCA_IS_NODMA) {
+		if (pkt->pkt_cmd) {
+			kmem_free(pkt->pkt_cmd,
+			    (uint32_t)(uintptr_t)pkt->pkt_fctl_rsvd1);
+		}
+
+		if (pkt->pkt_resp) {
+			kmem_free(pkt->pkt_resp,
+			    (uint32_t)(uintptr_t)pkt->pkt_fctl_rsvd2);
+		}
+	}
+
 	fp_free_dma(cmd);
 	(void) fc_ulp_uninit_packet((opaque_t)port, pkt);
 	kmem_cache_free(port->fp_pkt_cache, (void *)cmd);
@@ -4153,16 +4194,16 @@
 	}
 
 	if (handle) {
-		ddi_rep_get8(*handle, (uint8_t *)&pd->pd_csp,
+		FC_GET_RSP(pd->pd_port, *handle, (uint8_t *)&pd->pd_csp,
 		    (uint8_t *)&acc->common_service,
 		    sizeof (acc->common_service), DDI_DEV_AUTOINCR);
-		ddi_rep_get8(*handle, (uint8_t *)&pd->pd_clsp1,
+		FC_GET_RSP(pd->pd_port, *handle, (uint8_t *)&pd->pd_clsp1,
 		    (uint8_t *)&acc->class_1, sizeof (acc->class_1),
 		    DDI_DEV_AUTOINCR);
-		ddi_rep_get8(*handle, (uint8_t *)&pd->pd_clsp2,
+		FC_GET_RSP(pd->pd_port, *handle, (uint8_t *)&pd->pd_clsp2,
 		    (uint8_t *)&acc->class_2, sizeof (acc->class_2),
 		    DDI_DEV_AUTOINCR);
-		ddi_rep_get8(*handle, (uint8_t *)&pd->pd_clsp3,
+		FC_GET_RSP(pd->pd_port, *handle, (uint8_t *)&pd->pd_clsp3,
 		    (uint8_t *)&acc->class_3, sizeof (acc->class_3),
 		    DDI_DEV_AUTOINCR);
 	} else {
@@ -4183,7 +4224,7 @@
 
 	mutex_enter(&node->fd_mutex);
 	if (handle) {
-		ddi_rep_get8(*handle, (uint8_t *)node->fd_vv,
+		FC_GET_RSP(pd->pd_port, *handle, (uint8_t *)node->fd_vv,
 		    (uint8_t *)acc->vendor_version, sizeof (node->fd_vv),
 		    DDI_DEV_AUTOINCR);
 	} else {
@@ -4405,12 +4446,12 @@
 	payload.ls_code = ls_code;
 	payload.mbz = 0;
 
-	ddi_rep_put8(cmd->cmd_pkt.pkt_cmd_acc,
+	FC_SET_CMD(port, cmd->cmd_pkt.pkt_cmd_acc,
 	    (uint8_t *)&port->fp_service_params,
 	    (uint8_t *)cmd->cmd_pkt.pkt_cmd, sizeof (port->fp_service_params),
 	    DDI_DEV_AUTOINCR);
 
-	ddi_rep_put8(cmd->cmd_pkt.pkt_cmd_acc, (uint8_t *)&payload,
+	FC_SET_CMD(port, cmd->cmd_pkt.pkt_cmd_acc, (uint8_t *)&payload,
 	    (uint8_t *)cmd->cmd_pkt.pkt_cmd, sizeof (payload),
 	    DDI_DEV_AUTOINCR);
 }
@@ -4444,7 +4485,7 @@
 	payload.nport_ww_name = port->fp_service_params.nport_ww_name;
 	payload.nport_id = port->fp_port_id;
 
-	ddi_rep_put8(pkt->pkt_cmd_acc, (uint8_t *)&payload,
+	FC_SET_CMD(port, pkt->pkt_cmd_acc, (uint8_t *)&payload,
 	    (uint8_t *)pkt->pkt_cmd, sizeof (payload), DDI_DEV_AUTOINCR);
 }
 
@@ -4477,7 +4518,7 @@
 	payload.ls_code.mbz = 0;
 	payload.data_format = flag;
 
-	ddi_rep_put8(pkt->pkt_cmd_acc, (uint8_t *)&payload,
+	FC_SET_CMD(port, pkt->pkt_cmd_acc, (uint8_t *)&payload,
 	    (uint8_t *)pkt->pkt_cmd, sizeof (payload), DDI_DEV_AUTOINCR);
 }
 
@@ -4510,7 +4551,7 @@
 	payload.ls_code.mbz = 0;
 	payload.rls_portid = port->fp_port_id;
 
-	ddi_rep_put8(pkt->pkt_cmd_acc, (uint8_t *)&payload,
+	FC_SET_CMD(port, pkt->pkt_cmd_acc, (uint8_t *)&payload,
 	    (uint8_t *)pkt->pkt_cmd, sizeof (payload), DDI_DEV_AUTOINCR);
 }
 
@@ -4547,7 +4588,7 @@
 	payload.node_wwn = port->fp_service_params.node_ww_name;
 	payload.hard_addr = port->fp_hard_addr;
 
-	ddi_rep_put8(pkt->pkt_cmd_acc, (uint8_t *)&payload,
+	FC_SET_CMD(port, pkt->pkt_cmd_acc, (uint8_t *)&payload,
 	    (uint8_t *)pkt->pkt_cmd, sizeof (payload), DDI_DEV_AUTOINCR);
 }
 
@@ -4943,31 +4984,31 @@
 			ls_code.ls_code = LA_ELS_ACC;
 			ls_code.mbz = 0;
 
-			ddi_rep_put8(ulp_pkt->pkt_resp_acc,
+			FC_SET_CMD(pd->pd_port, ulp_pkt->pkt_resp_acc,
 			    (uint8_t *)&ls_code, (uint8_t *)&els_data->ls_code,
 			    sizeof (ls_code_t), DDI_DEV_AUTOINCR);
 
-			ddi_rep_put8(ulp_pkt->pkt_resp_acc,
+			FC_SET_CMD(pd->pd_port, ulp_pkt->pkt_resp_acc,
 			    (uint8_t *)&pd->pd_csp,
 			    (uint8_t *)&els_data->common_service,
 			    sizeof (pd->pd_csp), DDI_DEV_AUTOINCR);
 
-			ddi_rep_put8(ulp_pkt->pkt_resp_acc,
+			FC_SET_CMD(pd->pd_port, ulp_pkt->pkt_resp_acc,
 			    (uint8_t *)&pd->pd_port_name,
 			    (uint8_t *)&els_data->nport_ww_name,
 			    sizeof (pd->pd_port_name), DDI_DEV_AUTOINCR);
 
-			ddi_rep_put8(ulp_pkt->pkt_resp_acc,
+			FC_SET_CMD(pd->pd_port, ulp_pkt->pkt_resp_acc,
 			    (uint8_t *)&pd->pd_clsp1,
 			    (uint8_t *)&els_data->class_1,
 			    sizeof (pd->pd_clsp1), DDI_DEV_AUTOINCR);
 
-			ddi_rep_put8(ulp_pkt->pkt_resp_acc,
+			FC_SET_CMD(pd->pd_port, ulp_pkt->pkt_resp_acc,
 			    (uint8_t *)&pd->pd_clsp2,
 			    (uint8_t *)&els_data->class_2,
 			    sizeof (pd->pd_clsp2), DDI_DEV_AUTOINCR);
 
-			ddi_rep_put8(ulp_pkt->pkt_resp_acc,
+			FC_SET_CMD(pd->pd_port, ulp_pkt->pkt_resp_acc,
 			    (uint8_t *)&pd->pd_clsp3,
 			    (uint8_t *)&els_data->class_3,
 			    sizeof (pd->pd_clsp3), DDI_DEV_AUTOINCR);
@@ -4979,13 +5020,12 @@
 			mutex_exit(&pd->pd_mutex);
 
 			mutex_enter(&node->fd_mutex);
-			ddi_rep_put8(ulp_pkt->pkt_resp_acc,
+			FC_SET_CMD(pd->pd_port, ulp_pkt->pkt_resp_acc,
 			    (uint8_t *)&node->fd_node_name,
 			    (uint8_t *)(&els_data->node_ww_name),
 			    sizeof (node->fd_node_name), DDI_DEV_AUTOINCR);
 
-
-			ddi_rep_put8(ulp_pkt->pkt_resp_acc,
+			FC_SET_CMD(pd->pd_port, ulp_pkt->pkt_resp_acc,
 			    (uint8_t *)&node->fd_vv,
 			    (uint8_t *)(&els_data->vendor_version),
 			    sizeof (node->fd_vv), DDI_DEV_AUTOINCR);
@@ -5299,7 +5339,7 @@
 	payload.ls_code.mbz = 0;
 	payload.nport_ww_name = port->fp_service_params.nport_ww_name;
 
-	ddi_rep_put8(pkt->pkt_cmd_acc, (uint8_t *)&payload,
+	FC_SET_CMD(port, pkt->pkt_cmd_acc, (uint8_t *)&payload,
 	    (uint8_t *)pkt->pkt_cmd, sizeof (payload), DDI_DEV_AUTOINCR);
 
 	if (fp_sendcmd(port, cmd, port->fp_fca_handle) != FC_SUCCESS) {
@@ -5379,7 +5419,7 @@
 		}
 		rxn.rxn_port_id = s_id;
 
-		ddi_rep_put8(pkt->pkt_cmd_acc, (uint8_t *)&rxn,
+		FC_SET_CMD(port, pkt->pkt_cmd_acc, (uint8_t *)&rxn,
 		    (uint8_t *)(pkt->pkt_cmd + sizeof (fc_ct_header_t)),
 		    sizeof (rxn), DDI_DEV_AUTOINCR);
 
@@ -5406,7 +5446,7 @@
 		}
 		rcos.rcos_port_id = s_id;
 
-		ddi_rep_put8(pkt->pkt_cmd_acc, (uint8_t *)&rcos,
+		FC_SET_CMD(port, pkt->pkt_cmd_acc, (uint8_t *)&rcos,
 		    (uint8_t *)(pkt->pkt_cmd + sizeof (fc_ct_header_t)),
 		    sizeof (rcos), DDI_DEV_AUTOINCR);
 
@@ -5438,7 +5478,7 @@
 		}
 		rfc.rfc_port_id = s_id;
 
-		ddi_rep_put8(pkt->pkt_cmd_acc, (uint8_t *)&rfc,
+		FC_SET_CMD(port, pkt->pkt_cmd_acc, (uint8_t *)&rfc,
 		    (uint8_t *)(pkt->pkt_cmd + sizeof (fc_ct_header_t)),
 		    sizeof (rfc), DDI_DEV_AUTOINCR);
 
@@ -5474,23 +5514,24 @@
 
 		spn = s_id;
 
-		ddi_rep_put8(pkt->pkt_cmd_acc, (uint8_t *)&spn, (uint8_t *)
+		FC_SET_CMD(port, pkt->pkt_cmd_acc, (uint8_t *)&spn, (uint8_t *)
 		    (pkt->pkt_cmd + sizeof (fc_ct_header_t)), sizeof (spn),
 		    DDI_DEV_AUTOINCR);
-		ddi_rep_put8(pkt->pkt_cmd_acc, (uint8_t *)&name_len,
+		FC_SET_CMD(port, pkt->pkt_cmd_acc, (uint8_t *)&name_len,
 		    (uint8_t *)(pkt->pkt_cmd + sizeof (fc_ct_header_t)
 		    + sizeof (fc_portid_t)), 1, DDI_DEV_AUTOINCR);
 
 		if (pd == NULL) {
 			mutex_enter(&port->fp_mutex);
-			ddi_rep_put8(pkt->pkt_cmd_acc,
+			FC_SET_CMD(port, pkt->pkt_cmd_acc,
 			    (uint8_t *)port->fp_sym_port_name, (uint8_t *)
 			    (pkt->pkt_cmd + sizeof (fc_ct_header_t) +
 			    sizeof (spn) + 1), name_len, DDI_DEV_AUTOINCR);
 			mutex_exit(&port->fp_mutex);
 		} else {
 			mutex_enter(&pd->pd_mutex);
-			ddi_rep_put8(pkt->pkt_cmd_acc, (uint8_t *)pd->pd_spn,
+			FC_SET_CMD(port, pkt->pkt_cmd_acc,
+			    (uint8_t *)pd->pd_spn,
 			    (uint8_t *)(pkt->pkt_cmd + sizeof (fc_ct_header_t) +
 			    sizeof (spn) + 1), name_len, DDI_DEV_AUTOINCR);
 			mutex_exit(&pd->pd_mutex);
@@ -5518,7 +5559,7 @@
 		}
 		rpt.rpt_port_id = s_id;
 
-		ddi_rep_put8(pkt->pkt_cmd_acc, (uint8_t *)&rpt,
+		FC_SET_CMD(port, pkt->pkt_cmd_acc, (uint8_t *)&rpt,
 		    (uint8_t *)(pkt->pkt_cmd + sizeof (fc_ct_header_t)),
 		    sizeof (rpt), DDI_DEV_AUTOINCR);
 
@@ -5562,7 +5603,7 @@
 			mutex_exit(&node->fd_mutex);
 		}
 
-		ddi_rep_put8(pkt->pkt_cmd_acc, (uint8_t *)&rip,
+		FC_SET_CMD(port, pkt->pkt_cmd_acc, (uint8_t *)&rip,
 		    (uint8_t *)(pkt->pkt_cmd + sizeof (fc_ct_header_t)),
 		    sizeof (rip), DDI_DEV_AUTOINCR);
 
@@ -5599,7 +5640,7 @@
 			mutex_exit(&node->fd_mutex);
 		}
 
-		ddi_rep_put8(pkt->pkt_cmd_acc, (uint8_t *)&ipa,
+		FC_SET_CMD(port, pkt->pkt_cmd_acc, (uint8_t *)&ipa,
 		    (uint8_t *)(pkt->pkt_cmd + sizeof (fc_ct_header_t)),
 		    sizeof (ipa), DDI_DEV_AUTOINCR);
 
@@ -5642,7 +5683,7 @@
 
 		if (pd == NULL) {
 			mutex_enter(&port->fp_mutex);
-			ddi_rep_put8(pkt->pkt_cmd_acc,
+			FC_SET_CMD(port, pkt->pkt_cmd_acc,
 			    (uint8_t *)port->fp_sym_node_name, (uint8_t *)
 			    (pkt->pkt_cmd + sizeof (fc_ct_header_t) +
 			    sizeof (snn) + 1), name_len, DDI_DEV_AUTOINCR);
@@ -5650,17 +5691,17 @@
 		} else {
 			ASSERT(node != NULL);
 			mutex_enter(&node->fd_mutex);
-			ddi_rep_put8(pkt->pkt_cmd_acc,
+			FC_SET_CMD(port, pkt->pkt_cmd_acc,
 			    (uint8_t *)node->fd_snn,
 			    (uint8_t *)(pkt->pkt_cmd + sizeof (fc_ct_header_t) +
 			    sizeof (snn) + 1), name_len, DDI_DEV_AUTOINCR);
 			mutex_exit(&node->fd_mutex);
 		}
 
-		ddi_rep_put8(pkt->pkt_cmd_acc, (uint8_t *)&snn,
+		FC_SET_CMD(port, pkt->pkt_cmd_acc, (uint8_t *)&snn,
 		    (uint8_t *)(pkt->pkt_cmd + sizeof (fc_ct_header_t)),
 		    sizeof (snn), DDI_DEV_AUTOINCR);
-		ddi_rep_put8(pkt->pkt_cmd_acc, (uint8_t *)&name_len,
+		FC_SET_CMD(port, pkt->pkt_cmd_acc, (uint8_t *)&name_len,
 		    (uint8_t *)(pkt->pkt_cmd
 		    + sizeof (fc_ct_header_t) + sizeof (snn)),
 		    1, DDI_DEV_AUTOINCR);
@@ -5693,7 +5734,7 @@
 #else
 		rall.rem_port_id = s_id;
 #endif
-		ddi_rep_put8(pkt->pkt_cmd_acc, (uint8_t *)&rall,
+		FC_SET_CMD(port, pkt->pkt_cmd_acc, (uint8_t *)&rall,
 		    (uint8_t *)(pkt->pkt_cmd + sizeof (fc_ct_header_t)),
 		    sizeof (rall), DDI_DEV_AUTOINCR);
 
@@ -5843,7 +5884,7 @@
 	 */
 	acc = (la_els_logi_t *)pkt->pkt_resp;
 
-	ddi_rep_get8(pkt->pkt_resp_acc, (uint8_t *)&resp, (uint8_t *)acc,
+	FC_GET_RSP(port, pkt->pkt_resp_acc, (uint8_t *)&resp, (uint8_t *)acc,
 	    sizeof (resp), DDI_DEV_AUTOINCR);
 
 	ASSERT(resp.ls_code == LA_ELS_ACC);
@@ -5852,7 +5893,7 @@
 		return;
 	}
 
-	ddi_rep_get8(pkt->pkt_resp_acc, (uint8_t *)&csp,
+	FC_GET_RSP(port, pkt->pkt_resp_acc, (uint8_t *)&csp,
 	    (uint8_t *)&acc->common_service, sizeof (csp), DDI_DEV_AUTOINCR);
 
 	f_port = FP_IS_F_PORT(csp.cmn_features) ? 1 : 0;
@@ -5863,15 +5904,15 @@
 	state = FC_PORT_STATE_MASK(port->fp_state);
 	mutex_exit(&port->fp_mutex);
 
-	if (pkt->pkt_resp_fhdr.d_id == 0) {
-		if (f_port == 0 && state != FC_STATE_LOOP) {
+	if (f_port == 0) {
+		if (state != FC_STATE_LOOP) {
 			swwn = &port->fp_service_params.nport_ww_name;
 
-			ddi_rep_get8(pkt->pkt_resp_acc, (uint8_t *)&dwwn,
+			FC_GET_RSP(port, pkt->pkt_resp_acc, (uint8_t *)&dwwn,
 			    (uint8_t *)&acc->nport_ww_name, sizeof (la_wwn_t),
 			    DDI_DEV_AUTOINCR);
 
-			ddi_rep_get8(pkt->pkt_resp_acc, (uint8_t *)&nwwn,
+			FC_GET_RSP(port, pkt->pkt_resp_acc, (uint8_t *)&nwwn,
 			    (uint8_t *)&acc->node_ww_name, sizeof (la_wwn_t),
 			    DDI_DEV_AUTOINCR);
 
@@ -5948,7 +5989,7 @@
 			} else {
 				port->fp_topology = FC_TOP_FABRIC;
 
-				ddi_rep_get8(pkt->pkt_resp_acc,
+				FC_GET_RSP(port, pkt->pkt_resp_acc,
 				    (uint8_t *)&port->fp_fabric_name,
 				    (uint8_t *)&acc->node_ww_name,
 				    sizeof (la_wwn_t),
@@ -6088,7 +6129,7 @@
 
 	acc = (la_els_logi_t *)pkt->pkt_resp;
 
-	ddi_rep_get8(pkt->pkt_resp_acc, (uint8_t *)&resp, (uint8_t *)acc,
+	FC_GET_RSP(port, pkt->pkt_resp_acc, (uint8_t *)&resp, (uint8_t *)acc,
 	    sizeof (resp), DDI_DEV_AUTOINCR);
 
 	ASSERT(resp.ls_code == LA_ELS_ACC);
@@ -6107,11 +6148,11 @@
 
 	ASSERT(acc == (la_els_logi_t *)pkt->pkt_resp);
 
-	ddi_rep_get8(pkt->pkt_resp_acc, (uint8_t *)&pwwn,
+	FC_GET_RSP(port, pkt->pkt_resp_acc, (uint8_t *)&pwwn,
 	    (uint8_t *)&acc->nport_ww_name, sizeof (la_wwn_t),
 	    DDI_DEV_AUTOINCR);
 
-	ddi_rep_get8(pkt->pkt_resp_acc, (uint8_t *)&nwwn,
+	FC_GET_RSP(port, pkt->pkt_resp_acc, (uint8_t *)&nwwn,
 	    (uint8_t *)&acc->node_ww_name, sizeof (la_wwn_t),
 	    DDI_DEV_AUTOINCR);
 
@@ -6507,13 +6548,13 @@
 	if (pkt->pkt_state == FC_PKT_SUCCESS && pkt->pkt_resp_resid == 0) {
 		acc = (la_els_adisc_t *)pkt->pkt_resp;
 
-		ddi_rep_get8(pkt->pkt_resp_acc, (uint8_t *)&resp,
+		FC_GET_RSP(port, pkt->pkt_resp_acc, (uint8_t *)&resp,
 		    (uint8_t *)acc, sizeof (resp), DDI_DEV_AUTOINCR);
 
 		if (resp.ls_code == LA_ELS_ACC) {
 			int	is_private;
 
-			ddi_rep_get8(pkt->pkt_resp_acc, (uint8_t *)&ha,
+			FC_GET_RSP(port, pkt->pkt_resp_acc, (uint8_t *)&ha,
 			    (uint8_t *)&acc->hard_addr, sizeof (ha),
 			    DDI_DEV_AUTOINCR);
 
@@ -6625,7 +6666,7 @@
 		if (adiscfail) {
 			mutex_enter(&pd->pd_mutex);
 			initiator =
-			    (pd->pd_recepient == PD_PLOGI_INITIATOR) ? 1 : 0;
+			    ((pd->pd_recepient == PD_PLOGI_INITIATOR) ? 1 : 0);
 			pd->pd_state = PORT_DEVICE_VALID;
 			pd->pd_aux_flags |= PD_LOGGED_OUT;
 			if (pd->pd_aux_flags & PD_DISABLE_RELOGIN) {
@@ -6670,12 +6711,13 @@
 fp_logo_intr(fc_packet_t *pkt)
 {
 	ls_code_t	resp;
+	fc_local_port_t *port = ((fp_cmd_t *)pkt->pkt_ulp_private)->cmd_port;
 
 	mutex_enter(&((fp_cmd_t *)pkt->pkt_ulp_private)->cmd_port->fp_mutex);
 	((fp_cmd_t *)pkt->pkt_ulp_private)->cmd_port->fp_out_fpcmds--;
 	mutex_exit(&((fp_cmd_t *)pkt->pkt_ulp_private)->cmd_port->fp_mutex);
 
-	ddi_rep_get8(pkt->pkt_resp_acc, (uint8_t *)&resp,
+	FC_GET_RSP(port, pkt->pkt_resp_acc, (uint8_t *)&resp,
 	    (uint8_t *)pkt->pkt_resp, sizeof (resp), DDI_DEV_AUTOINCR);
 
 	if (FP_IS_PKT_ERROR(pkt)) {
@@ -6707,8 +6749,9 @@
 	job_request_t		*job;
 	fp_cmd_t		*cmd;
 	la_els_rnid_acc_t	*acc;
-
-	ddi_rep_get8(pkt->pkt_resp_acc, (uint8_t *)&resp,
+	fc_local_port_t *port = ((fp_cmd_t *)pkt->pkt_ulp_private)->cmd_port;
+
+	FC_GET_RSP(port, pkt->pkt_resp_acc, (uint8_t *)&resp,
 	    (uint8_t *)pkt->pkt_resp, sizeof (resp), DDI_DEV_AUTOINCR);
 	cmd = pkt->pkt_ulp_private;
 
@@ -6728,7 +6771,7 @@
 	/* Save node_id memory allocated in ioctl code */
 	acc = (la_els_rnid_acc_t *)pkt->pkt_resp;
 
-	ddi_rep_get8(pkt->pkt_resp_acc, (uint8_t *)job->job_private,
+	FC_GET_RSP(port, pkt->pkt_resp_acc, (uint8_t *)job->job_private,
 	    (uint8_t *)acc, sizeof (la_els_rnid_acc_t), DDI_DEV_AUTOINCR);
 
 	/* wakeup the ioctl thread and free the pkt */
@@ -6746,8 +6789,9 @@
 	job_request_t		*job;
 	fp_cmd_t		*cmd;
 	la_els_rls_acc_t	*acc;
-
-	ddi_rep_get8(pkt->pkt_resp_acc, (uint8_t *)&resp,
+	fc_local_port_t *port = ((fp_cmd_t *)pkt->pkt_ulp_private)->cmd_port;
+
+	FC_GET_RSP(port, pkt->pkt_resp_acc, (uint8_t *)&resp,
 	    (uint8_t *)pkt->pkt_resp, sizeof (resp), DDI_DEV_AUTOINCR);
 	cmd = pkt->pkt_ulp_private;
 
@@ -6767,7 +6811,7 @@
 	/* Save link error status block in memory allocated in ioctl code */
 	acc = (la_els_rls_acc_t *)pkt->pkt_resp;
 
-	ddi_rep_get8(pkt->pkt_resp_acc, (uint8_t *)job->job_private,
+	FC_GET_RSP(port, pkt->pkt_resp_acc, (uint8_t *)job->job_private,
 	    (uint8_t *)&acc->rls_link_params, sizeof (fc_rls_acc_t),
 	    DDI_DEV_AUTOINCR);
 
@@ -6984,7 +7028,7 @@
 	payload.scr_rsvd = 0;
 	payload.scr_func = scr_func;
 
-	ddi_rep_put8(pkt->pkt_cmd_acc, (uint8_t *)&payload,
+	FC_SET_CMD(port, pkt->pkt_cmd_acc, (uint8_t *)&payload,
 	    (uint8_t *)pkt->pkt_cmd, sizeof (payload), DDI_DEV_AUTOINCR);
 
 	job->job_counter = 1;
@@ -10521,6 +10565,7 @@
 	fp_cmd_t		*cmd;
 	job_request_t		*job;
 	fc_linit_resp_t		acc;
+	fc_local_port_t *port = ((fp_cmd_t *)pkt->pkt_ulp_private)->cmd_port;
 
 	cmd = (fp_cmd_t *)pkt->pkt_ulp_private;
 
@@ -10534,7 +10579,8 @@
 	}
 
 	job = cmd->cmd_job;
-	ddi_rep_get8(pkt->pkt_resp_acc, (uint8_t *)&acc,
+
+	FC_GET_RSP(port, pkt->pkt_resp_acc, (uint8_t *)&acc,
 	    (uint8_t *)pkt->pkt_resp, sizeof (acc), DDI_DEV_AUTOINCR);
 	if (acc.status != FC_LINIT_SUCCESS) {
 		job->job_result = FC_FAILURE;
@@ -11068,7 +11114,7 @@
 	payload.explanation = FC_EXPLN_NONE;
 	payload.vendor = 0;
 
-	ddi_rep_put8(pkt->pkt_cmd_acc, (uint8_t *)&payload,
+	FC_SET_CMD(port, pkt->pkt_cmd_acc, (uint8_t *)&payload,
 	    (uint8_t *)pkt->pkt_cmd, sizeof (payload), DDI_DEV_AUTOINCR);
 }
 
@@ -11105,7 +11151,7 @@
 	payload.reserved = 0;
 	payload.vu = 0;
 
-	ddi_rep_put8(pkt->pkt_cmd_acc, (uint8_t *)&payload,
+	FC_SET_CMD(port, pkt->pkt_cmd_acc, (uint8_t *)&payload,
 	    (uint8_t *)pkt->pkt_cmd, sizeof (payload), DDI_DEV_AUTOINCR);
 }
 
@@ -11171,7 +11217,7 @@
 		flags |= SP_RESP_CODE_REQ_EXECUTED;
 		req->flags = htons(flags);
 
-		ddi_rep_put8(pkt->pkt_cmd_acc, (uint8_t *)req,
+		FC_SET_CMD(port, pkt->pkt_cmd_acc, (uint8_t *)req,
 		    (uint8_t *)pkt->pkt_cmd, len, DDI_DEV_AUTOINCR);
 	}
 	return (cmd);
@@ -11203,7 +11249,7 @@
 	payload.ls_code = LA_ELS_ACC;
 	payload.mbz = 0;
 
-	ddi_rep_put8(pkt->pkt_cmd_acc, (uint8_t *)&payload,
+	FC_SET_CMD(port, pkt->pkt_cmd_acc, (uint8_t *)&payload,
 	    (uint8_t *)pkt->pkt_cmd, sizeof (payload), DDI_DEV_AUTOINCR);
 }
 
@@ -11535,6 +11581,7 @@
 	pkt->pkt_cmd_fhdr.rsvd = 0;
 	pkt->pkt_comp = fp_unsol_intr;
 	pkt->pkt_timeout = FP_ELS_TIMEOUT;
+	pkt->pkt_ub_resp_token = (opaque_t)buf;
 }
 
 /*
@@ -11655,18 +11702,6 @@
 				cmd->cmd_pkt.pkt_rsplen = 0;
 
 				/*
-				 * Sometime later, we should validate
-				 * the service parameters instead of
-				 * just accepting it.
-				 */
-				fp_login_acc_init(port, cmd, buf, NULL,
-				    KM_NOSLEEP);
-				FP_TRACE(FP_NHEAD1(3, 0),
-				    "fp_i_handle_unsol_els: Accepting PLOGI,"
-				    " f_port=%d, small=%d, do_acc=%d,"
-				    " sent=%d.", f_port, small, do_acc,
-				    sent);
-				/*
 				 * If fp_port_id is zero and topology is
 				 * Point-to-Point, get the local port id from
 				 * the d_id in the PLOGI request.
@@ -11684,6 +11719,19 @@
 					    buf->ub_frame.d_id;
 				}
 				mutex_exit(&port->fp_mutex);
+
+				/*
+				 * Sometime later, we should validate
+				 * the service parameters instead of
+				 * just accepting it.
+				 */
+				fp_login_acc_init(port, cmd, buf, NULL,
+				    KM_NOSLEEP);
+				FP_TRACE(FP_NHEAD1(3, 0),
+				    "fp_i_handle_unsol_els: Accepting PLOGI,"
+				    " f_port=%d, small=%d, do_acc=%d,"
+				    " sent=%d.", f_port, small, do_acc,
+				    sent);
 			}
 		} else {
 			if (FP_IS_CLASS_1_OR_2(buf->ub_class) ||
@@ -12163,7 +12211,7 @@
 	payload = port->fp_service_params;
 	payload.ls_code.ls_code = LA_ELS_ACC;
 
-	ddi_rep_put8(pkt->pkt_cmd_acc, (uint8_t *)&payload,
+	FC_SET_CMD(port, pkt->pkt_cmd_acc, (uint8_t *)&payload,
 	    (uint8_t *)pkt->pkt_cmd, sizeof (payload), DDI_DEV_AUTOINCR);
 
 	FP_TRACE(FP_NHEAD1(3, 0), "login_acc_init: ELS:0x%x d_id:0x%x "
@@ -12494,13 +12542,13 @@
 	ASSERT(!MUTEX_HELD(&port->fp_mutex));
 
 	if (handle) {
-		ddi_rep_get8(*handle, (uint8_t *)&port_map->map_pwwn,
+		FC_GET_RSP(port, *handle, (uint8_t *)&port_map->map_pwwn,
 		    (uint8_t *)&gan_resp->gan_pwwn, sizeof (gan_resp->gan_pwwn),
 		    DDI_DEV_AUTOINCR);
-		ddi_rep_get8(*handle, (uint8_t *)&port_map->map_nwwn,
+		FC_GET_RSP(port, *handle, (uint8_t *)&port_map->map_nwwn,
 		    (uint8_t *)&gan_resp->gan_nwwn, sizeof (gan_resp->gan_nwwn),
 		    DDI_DEV_AUTOINCR);
-		ddi_rep_get8(*handle, (uint8_t *)port_map->map_fc4_types,
+		FC_GET_RSP(port, *handle, (uint8_t *)port_map->map_fc4_types,
 		    (uint8_t *)gan_resp->gan_fc4types,
 		    sizeof (gan_resp->gan_fc4types), DDI_DEV_AUTOINCR);
 	} else {
@@ -12686,7 +12734,7 @@
 	payload.lip_b3 = 0xF7;		/* Normal LIP */
 	payload.lip_b4 = 0xF7;		/* No valid source AL_PA */
 
-	ddi_rep_put8(pkt->pkt_cmd_acc, (uint8_t *)&payload,
+	FC_SET_CMD(port, pkt->pkt_cmd_acc, (uint8_t *)&payload,
 	    (uint8_t *)pkt->pkt_cmd, sizeof (payload), DDI_DEV_AUTOINCR);
 
 	job->job_counter = 1;
@@ -12727,7 +12775,7 @@
 
 	mutex_enter(&pd->pd_mutex);
 
-	ddi_rep_get8(*handle, (uint8_t *)&type,
+	FC_GET_RSP(port, *handle, (uint8_t *)&type,
 	    (uint8_t *)&gan_resp->gan_type_id, sizeof (type), DDI_DEV_AUTOINCR);
 
 	pd->pd_porttype.port_type = type.port_type;
@@ -12735,18 +12783,18 @@
 
 	pd->pd_spn_len = gan_resp->gan_spnlen;
 	if (pd->pd_spn_len) {
-		ddi_rep_get8(*handle, (uint8_t *)pd->pd_spn,
+		FC_GET_RSP(port, *handle, (uint8_t *)pd->pd_spn,
 		    (uint8_t *)gan_resp->gan_spname, pd->pd_spn_len,
 		    DDI_DEV_AUTOINCR);
 	}
 
-	ddi_rep_get8(*handle, (uint8_t *)pd->pd_ip_addr,
+	FC_GET_RSP(port, *handle, (uint8_t *)pd->pd_ip_addr,
 	    (uint8_t *)gan_resp->gan_ip, sizeof (pd->pd_ip_addr),
 	    DDI_DEV_AUTOINCR);
-	ddi_rep_get8(*handle, (uint8_t *)&pd->pd_cos,
+	FC_GET_RSP(port, *handle, (uint8_t *)&pd->pd_cos,
 	    (uint8_t *)&gan_resp->gan_cos, sizeof (pd->pd_cos),
 	    DDI_DEV_AUTOINCR);
-	ddi_rep_get8(*handle, (uint8_t *)pd->pd_fc4types,
+	FC_GET_RSP(port, *handle, (uint8_t *)pd->pd_fc4types,
 	    (uint8_t *)gan_resp->gan_fc4types, sizeof (pd->pd_fc4types),
 	    DDI_DEV_AUTOINCR);
 
@@ -12755,13 +12803,13 @@
 
 	mutex_enter(&node->fd_mutex);
 
-	ddi_rep_get8(*handle, (uint8_t *)node->fd_ipa,
+	FC_GET_RSP(port, *handle, (uint8_t *)node->fd_ipa,
 	    (uint8_t *)gan_resp->gan_ipa, sizeof (node->fd_ipa),
 	    DDI_DEV_AUTOINCR);
 
 	node->fd_snn_len = gan_resp->gan_snnlen;
 	if (node->fd_snn_len) {
-		ddi_rep_get8(*handle, (uint8_t *)node->fd_snn,
+		FC_GET_RSP(port, *handle, (uint8_t *)node->fd_snn,
 		    (uint8_t *)gan_resp->gan_snname, node->fd_snn_len,
 		    DDI_DEV_AUTOINCR);
 	}
@@ -12865,8 +12913,8 @@
 	ct.ct_expln = 0;
 	ct.ct_vendor = 0;
 
-	ddi_rep_put8(pkt->pkt_cmd_acc, (uint8_t *)&ct, (uint8_t *)pkt->pkt_cmd,
-	    sizeof (ct), DDI_DEV_AUTOINCR);
+	FC_SET_CMD(port, pkt->pkt_cmd_acc, (uint8_t *)&ct,
+	    (uint8_t *)pkt->pkt_cmd, sizeof (ct), DDI_DEV_AUTOINCR);
 
 	pkt->pkt_cmd_fhdr.r_ctl = R_CTL_UNSOL_CONTROL;
 	pkt->pkt_cmd_fhdr.d_id = 0xFFFFFC;
@@ -12887,7 +12935,7 @@
 	pkt->pkt_timeout = FP_NS_TIMEOUT;
 
 	if (cmd_buf) {
-		ddi_rep_put8(pkt->pkt_cmd_acc, (uint8_t *)cmd_buf,
+		FC_SET_CMD(port, pkt->pkt_cmd_acc, (uint8_t *)cmd_buf,
 		    (uint8_t *)(pkt->pkt_cmd + sizeof (fc_ct_header_t)),
 		    cmd_len, DDI_DEV_AUTOINCR);
 	}
@@ -12921,12 +12969,12 @@
 	port->fp_out_fpcmds--;
 	mutex_exit(&port->fp_mutex);
 
-	ddi_rep_get8(pkt->pkt_cmd_acc, (uint8_t *)&cmd_hdr,
+	FC_GET_RSP(port, pkt->pkt_cmd_acc, (uint8_t *)&cmd_hdr,
 	    (uint8_t *)pkt->pkt_cmd, sizeof (cmd_hdr), DDI_DEV_AUTOINCR);
 	ns_cmd = (fctl_ns_req_t *)
 	    (((fp_cmd_t *)(pkt->pkt_ulp_private))->cmd_private);
 	if (!FP_IS_PKT_ERROR(pkt)) {
-		ddi_rep_get8(pkt->pkt_resp_acc, (uint8_t *)&resp_hdr,
+		FC_GET_RSP(port, pkt->pkt_resp_acc, (uint8_t *)&resp_hdr,
 		    (uint8_t *)pkt->pkt_resp, sizeof (resp_hdr),
 		    DDI_DEV_AUTOINCR);
 
@@ -13035,7 +13083,7 @@
 
 	gan_resp = (ns_resp_gan_t *)(pkt->pkt_resp + sizeof (fc_ct_header_t));
 
-	ddi_rep_get8(pkt->pkt_resp_acc, (uint8_t *)&d_id,
+	FC_GET_RSP(port, pkt->pkt_resp_acc, (uint8_t *)&d_id,
 	    (uint8_t *)&gan_resp->gan_type_id, sizeof (d_id), DDI_DEV_AUTOINCR);
 
 	*(uint32_t *)&d_id = BE_32(*(uint32_t *)&d_id);
@@ -13093,11 +13141,11 @@
 		    gan_resp->gan_nwwn.raw_wwn[6],
 		    gan_resp->gan_nwwn.raw_wwn[7]);
 
-		ddi_rep_get8(pkt->pkt_resp_acc, (uint8_t *)&nwwn,
+		FC_GET_RSP(port, pkt->pkt_resp_acc, (uint8_t *)&nwwn,
 		    (uint8_t *)&gan_resp->gan_nwwn, sizeof (nwwn),
 		    DDI_DEV_AUTOINCR);
 
-		ddi_rep_get8(pkt->pkt_resp_acc, (uint8_t *)&pwwn,
+		FC_GET_RSP(port, pkt->pkt_resp_acc, (uint8_t *)&pwwn,
 		    (uint8_t *)&gan_resp->gan_pwwn, sizeof (pwwn),
 		    DDI_DEV_AUTOINCR);
 
@@ -13128,7 +13176,7 @@
 
 				userbuf->dev_did = d_id;
 
-				ddi_rep_get8(pkt->pkt_resp_acc,
+				FC_GET_RSP(port, pkt->pkt_resp_acc,
 				    (uint8_t *)userbuf->dev_type,
 				    (uint8_t *)gan_resp->gan_fc4types,
 				    sizeof (userbuf->dev_type),
@@ -13174,7 +13222,7 @@
 				dst_ptr = ns_cmd->ns_data_buf +
 				    (NS_GAN_RESP_LEN) * ns_cmd->ns_gan_index++;
 
-				ddi_rep_get8(pkt->pkt_resp_acc,
+				FC_GET_RSP(port, pkt->pkt_resp_acc,
 				    (uint8_t *)dst_ptr, (uint8_t *)gan_resp,
 				    NS_GAN_RESP_LEN, DDI_DEV_AUTOINCR);
 			}
@@ -13189,7 +13237,7 @@
 
 	gan_req.pid = d_id;
 
-	ddi_rep_put8(pkt->pkt_cmd_acc, (uint8_t *)&gan_req,
+	FC_SET_CMD(port, pkt->pkt_cmd_acc, (uint8_t *)&gan_req,
 	    (uint8_t *)(pkt->pkt_cmd + sizeof (fc_ct_header_t)),
 	    sizeof (gan_req), DDI_DEV_AUTOINCR);
 
@@ -13232,7 +13280,8 @@
 
 	if (xfer_len <= ns_cmd->ns_data_len) {
 		src_ptr = (caddr_t)pkt->pkt_resp + sizeof (fc_ct_header_t);
-		ddi_rep_get8(pkt->pkt_resp_acc, (uint8_t *)ns_cmd->ns_data_buf,
+		FC_GET_RSP(port, pkt->pkt_resp_acc,
+		    (uint8_t *)ns_cmd->ns_data_buf,
 		    (uint8_t *)src_ptr, xfer_len, DDI_DEV_AUTOINCR);
 	}
 
@@ -13341,7 +13390,7 @@
 	payload.port_wwn = port->fp_service_params.nport_ww_name;
 	payload.node_wwn = port->fp_service_params.node_ww_name;
 
-	ddi_rep_put8(pkt->pkt_cmd_acc, (uint8_t *)&payload,
+	FC_SET_CMD(port, pkt->pkt_cmd_acc, (uint8_t *)&payload,
 	    (uint8_t *)pkt->pkt_cmd, sizeof (payload), DDI_DEV_AUTOINCR);
 }
 
@@ -13716,6 +13765,14 @@
 		goto exit;
 	}
 
+	/*
+	 * Only fcoei will set this bit
+	 */
+	if (port_info->pi_port_state & FC_STATE_FCA_IS_NODMA) {
+		port->fp_soft_state |= FP_SOFT_FCA_IS_NODMA;
+		port_info->pi_port_state &= ~(FC_STATE_FCA_IS_NODMA);
+	}
+
 	port->fp_bind_state = port->fp_state = port_info->pi_port_state;
 	port->fp_service_params = port_info->pi_login_params;
 	port->fp_hard_addr = port_info->pi_hard_addr;
@@ -14133,7 +14190,6 @@
 					job->job_result = rval;
 					fp_jobdone(job);
 				}
-
 				FP_TRACE(FP_NHEAD2(4, 0),
 				    "PLOGI succeeded:no skip(1) for "
 				    "D_ID %x", d_id);
--- a/usr/src/uts/common/io/fibre-channel/ulp/fcp.c	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/uts/common/io/fibre-channel/ulp/fcp.c	Mon Aug 10 10:43:48 2009 -0400
@@ -625,6 +625,21 @@
 static int fcp_should_mask(la_wwn_t *wwn, uint32_t lun_id);
 static void fcp_cleanup_blacklist(struct fcp_black_list_entry **lun_blacklist);
 
+/*
+ * New functions to support software FCA (like fcoei)
+ */
+static struct scsi_pkt *fcp_pseudo_init_pkt(
+	struct scsi_address *ap, struct scsi_pkt *pkt,
+	struct buf *bp, int cmdlen, int statuslen,
+	int tgtlen, int flags, int (*callback)(), caddr_t arg);
+static void fcp_pseudo_destroy_pkt(
+	struct scsi_address *ap, struct scsi_pkt *pkt);
+static void fcp_pseudo_sync_pkt(
+	struct scsi_address *ap, struct scsi_pkt *pkt);
+static int fcp_pseudo_start(struct scsi_address *ap, struct scsi_pkt *pkt);
+static void fcp_pseudo_dmafree(
+	struct scsi_address *ap, struct scsi_pkt *pkt);
+
 extern struct mod_ops	mod_driverops;
 /*
  * This variable is defined in modctl.c and set to '1' after the root driver
@@ -717,7 +732,7 @@
 	(es)->es_add_code == 0x25 &&		\
 	(es)->es_qual_code == 0x0)
 
-#define	FCP_VERSION		"1.189"
+#define	FCP_VERSION		"20090729-1.190"
 #define	FCP_NAME_VERSION	"SunFC FCP v" FCP_VERSION
 
 #define	FCP_NUM_ELEMENTS(array)			\
@@ -1078,6 +1093,29 @@
 	sizeof (fcp_symmetric_disk_table)/sizeof (char *);
 
 /*
+ * This structure is bogus. scsi_hba_attach_setup() requires, as in the kernel
+ * will panic if you don't pass this in to the routine, this information.
+ * Need to determine what the actual impact to the system is by providing
+ * this information if any. Since dma allocation is done in pkt_init it may
+ * not have any impact. These values are straight from the Writing Device
+ * Driver manual.
+ */
+static ddi_dma_attr_t pseudo_fca_dma_attr = {
+	DMA_ATTR_V0,	/* ddi_dma_attr version */
+	0,		/* low address */
+	0xffffffff,	/* high address */
+	0x00ffffff,	/* counter upper bound */
+	1,		/* alignment requirements */
+	0x3f,		/* burst sizes */
+	1,		/* minimum DMA access */
+	0xffffffff,	/* maximum DMA access */
+	(1 << 24) - 1,	/* segment boundary restrictions */
+	1,		/* scater/gather list length */
+	512,		/* device granularity */
+	0		/* DMA flags */
+};
+
+/*
  * The _init(9e) return value should be that of mod_install(9f). Under
  * some circumstances, a failure may not be related mod_install(9f) and
  * one would then require a return value to indicate the failure. Looking
@@ -2836,6 +2874,7 @@
 	struct fcp_reportlun_resp	*report_lun;
 	uint8_t			reconfig_needed = FALSE;
 	uint8_t			lun_exists = FALSE;
+	fcp_port_t			*pptr		 = ptgt->tgt_port;
 
 	report_lun = kmem_zalloc(fpkt->pkt_datalen, KM_SLEEP);
 
@@ -3255,8 +3294,9 @@
 
 	/* Alloc internal packet */
 	icmd = fcp_icmd_alloc(pptr, ptgt, sizeof (la_els_logi_t),
-	    sizeof (la_els_logi_t), 0, 0, lcount, tcount, 0,
-	    FC_INVALID_RSCN_COUNT);
+	    sizeof (la_els_logi_t), 0,
+	    pptr->port_state & FCP_STATE_FCA_IS_NODMA,
+	    lcount, tcount, 0, FC_INVALID_RSCN_COUNT);
 
 	if (icmd == NULL) {
 		ret = ENOMEM;
@@ -5056,7 +5096,8 @@
 
 	alloc = FCP_MAX(sizeof (la_els_logi_t), sizeof (la_els_prli_t));
 
-	icmd = fcp_icmd_alloc(pptr, ptgt, alloc, alloc, 0, 0, lcount, tcount,
+	icmd = fcp_icmd_alloc(pptr, ptgt, alloc, alloc, 0,
+	    pptr->port_state & FCP_STATE_FCA_IS_NODMA, lcount, tcount,
 	    cause, map_entry->map_rscn_info.ulp_rscn_count);
 
 	if (icmd == NULL) {
@@ -5134,7 +5175,8 @@
 	if (icmd == NULL) {
 		alloc = FCP_MAX(sizeof (la_els_logi_t),
 		    sizeof (la_els_prli_t));
-		icmd = fcp_icmd_alloc(pptr, ptgt, alloc, alloc, 0, 0,
+		icmd = fcp_icmd_alloc(pptr, ptgt, alloc, alloc, 0,
+		    pptr->port_state & FCP_STATE_FCA_IS_NODMA,
 		    lcount, tcount, cause, FC_INVALID_RSCN_COUNT);
 		if (icmd == NULL) {
 			FCP_TGT_TRACE(ptgt, tcount, FCP_TGT_TRACE_10);
@@ -5545,6 +5587,7 @@
 	pkt->pkt_cmd_fhdr.rsvd = 0;
 	pkt->pkt_comp = fcp_unsol_callback;
 	pkt->pkt_pd = NULL;
+	pkt->pkt_ub_resp_token = (opaque_t)buf;
 }
 
 
@@ -5564,22 +5607,24 @@
 
 	from = (struct la_els_prli *)buf->ub_buffer;
 	orig = (struct fcp_prli *)from->service_params;
-
 	if ((ptgt = fcp_get_target_by_did(pptr, buf->ub_frame.s_id)) !=
 	    NULL) {
 		mutex_enter(&ptgt->tgt_mutex);
 		tcount = ptgt->tgt_change_cnt;
 		mutex_exit(&ptgt->tgt_mutex);
 	}
+
 	mutex_enter(&pptr->port_mutex);
 	lcount = pptr->port_link_cnt;
 	mutex_exit(&pptr->port_mutex);
 
 	if ((icmd = fcp_icmd_alloc(pptr, ptgt, sizeof (la_els_prli_t),
-	    sizeof (la_els_prli_t), 0, 0, lcount, tcount, 0,
-	    FC_INVALID_RSCN_COUNT)) == NULL) {
+	    sizeof (la_els_prli_t), 0,
+	    pptr->port_state & FCP_STATE_FCA_IS_NODMA,
+	    lcount, tcount, 0, FC_INVALID_RSCN_COUNT)) == NULL) {
 		return (FC_FAILURE);
 	}
+
 	fpkt = icmd->ipkt_fpkt;
 	fpkt->pkt_tran_flags = FC_TRAN_CLASS3 | FC_TRAN_INTR;
 	fpkt->pkt_tran_type = FC_PKT_OUTBOUND;
@@ -5637,7 +5682,8 @@
 
 		if ((rval = fc_ulp_issue_els(pptr->port_fp_handle, fpkt)) !=
 		    FC_SUCCESS) {
-			if (rval == FC_STATEC_BUSY || rval == FC_OFFLINE) {
+			if ((rval == FC_STATEC_BUSY || rval == FC_OFFLINE) &&
+			    ptgt != NULL) {
 				fcp_queue_ipkt(pptr, fpkt);
 				return (FC_SUCCESS);
 			}
@@ -5951,7 +5997,8 @@
 		cmd_resp++;
 	}
 
-	if (fpkt->pkt_datalen != 0) {
+	if ((fpkt->pkt_datalen != 0) &&
+	    !(pptr->port_state & FCP_STATE_FCA_IS_NODMA)) {
 		/*
 		 * set up DMA handle and memory for the data in this packet
 		 */
@@ -5998,6 +6045,16 @@
 			*cp = pkt_data_cookie;
 		}
 
+	} else if (fpkt->pkt_datalen != 0) {
+		/*
+		 * If it's a pseudo FCA, then it can't support DMA even in
+		 * SCSI data phase.
+		 */
+		fpkt->pkt_data = kmem_alloc(fpkt->pkt_datalen, flags);
+		if (fpkt->pkt_data == NULL) {
+			goto fail;
+		}
+
 	}
 
 	return (FC_SUCCESS);
@@ -6012,6 +6069,10 @@
 			ddi_dma_mem_free(&fpkt->pkt_data_acc);
 		}
 		ddi_dma_free_handle(&fpkt->pkt_data_dma);
+	} else {
+		if (fpkt->pkt_data) {
+			kmem_free(fpkt->pkt_data, fpkt->pkt_datalen);
+		}
 	}
 
 	if (nodma) {
@@ -6042,6 +6103,13 @@
 			ddi_dma_mem_free(&fpkt->pkt_data_acc);
 		}
 		ddi_dma_free_handle(&fpkt->pkt_data_dma);
+	} else {
+		if (fpkt->pkt_data) {
+			kmem_free(fpkt->pkt_data, fpkt->pkt_datalen);
+		}
+		/*
+		 * Need we reset pkt_* to zero???
+		 */
 	}
 
 	if (icmd->ipkt_nodma) {
@@ -6471,7 +6539,6 @@
 	    "fcp_send_scsi: d_id=0x%x opcode=0x%x", ptgt->tgt_d_id, opcode);
 
 	nodma = (pptr->port_fcp_dma == FC_NO_DVMA_SPACE) ? 1 : 0;
-
 	icmd = fcp_icmd_alloc(pptr, ptgt, sizeof (struct fcp_cmd),
 	    FCP_MAX_RSP_IU_SIZE, alloc_len, nodma, lcount, tcount, cause,
 	    rscn_count);
@@ -6838,6 +6905,10 @@
 	struct fcp_lun	*plun;
 	struct fcp_rsp		response, *rsp;
 
+	ptgt = icmd->ipkt_tgt;
+	pptr = ptgt->tgt_port;
+	plun = icmd->ipkt_lun;
+
 	if (icmd->ipkt_nodma) {
 		rsp = (struct fcp_rsp *)fpkt->pkt_resp;
 	} else {
@@ -6846,10 +6917,6 @@
 		    sizeof (struct fcp_rsp));
 	}
 
-	ptgt = icmd->ipkt_tgt;
-	pptr = ptgt->tgt_port;
-	plun = icmd->ipkt_lun;
-
 	FCP_TRACE(fcp_logq, pptr->port_instbuf,
 	    fcp_trace, FCP_BUF_LEVEL_2, 0,
 	    "SCSI callback state=0x%x for %x, op_code=0x%x, "
@@ -7079,8 +7146,10 @@
 	}
 
 	ASSERT(rsp->fcp_u.fcp_status.scsi_status == STATUS_GOOD);
-
-	(void) ddi_dma_sync(fpkt->pkt_data_dma, 0, 0, DDI_DMA_SYNC_FORCPU);
+	if (!(pptr->port_state & FCP_STATE_FCA_IS_NODMA)) {
+		(void) ddi_dma_sync(fpkt->pkt_data_dma, 0, 0,
+		    DDI_DMA_SYNC_FORCPU);
+	}
 
 	switch (icmd->ipkt_opcode) {
 	case SCMD_INQUIRY:
@@ -8730,7 +8799,7 @@
 
 		pkt->pkt_resid = 0;
 
-		if (cmd->cmd_pkt->pkt_numcookies) {
+		if (fpkt->pkt_datalen) {
 			pkt->pkt_state |= STATE_XFERRED_DATA;
 			if (fpkt->pkt_data_resid) {
 				error++;
@@ -9762,17 +9831,30 @@
 			kmem_free(pathname, MAXPATHLEN);
 		}
 	}
-	_NOTE(NOW_INVISIBLE_TO_OTHER_THREADS(pptr->port_link_cnt))
+	_NOTE(NOW_INVISIBLE_TO_OTHER_THREADS(pptr->port_link_cnt));
 	pptr->port_link_cnt = 1;
-	_NOTE(NOW_VISIBLE_TO_OTHER_THREADS(pptr->port_link_cnt))
+	_NOTE(NOW_VISIBLE_TO_OTHER_THREADS(pptr->port_link_cnt));
 	pptr->port_id = s_id;
 	pptr->port_instance = instance;
-	_NOTE(NOW_INVISIBLE_TO_OTHER_THREADS(pptr->port_state))
+	_NOTE(NOW_INVISIBLE_TO_OTHER_THREADS(pptr->port_state));
 	pptr->port_state = FCP_STATE_INIT;
-	_NOTE(NOW_VISIBLE_TO_OTHER_THREADS(pptr->port_state))
-
-	pptr->port_dmacookie_sz = (pptr->port_data_dma_attr.dma_attr_sgllen *
-	    sizeof (ddi_dma_cookie_t));
+	if (pinfo->port_acc_attr == NULL) {
+		/*
+		 * The corresponding FCA doesn't support DMA at all
+		 */
+		pptr->port_state |= FCP_STATE_FCA_IS_NODMA;
+	}
+
+	_NOTE(NOW_VISIBLE_TO_OTHER_THREADS(pptr->port_state));
+
+	if (!(pptr->port_state & FCP_STATE_FCA_IS_NODMA)) {
+		/*
+		 * If FCA supports DMA in SCSI data phase, we need preallocate
+		 * dma cookie, so stash the cookie size
+		 */
+		pptr->port_dmacookie_sz = sizeof (ddi_dma_cookie_t) *
+		    pptr->port_data_dma_attr.dma_attr_sgllen;
+	}
 
 	/*
 	 * The two mutexes of fcp_port are initialized.	 The variable
@@ -9832,6 +9914,22 @@
 	tran->tran_teardown_pkt		= fcp_pkt_teardown;
 	tran->tran_hba_len		= pptr->port_priv_pkt_len +
 	    sizeof (struct fcp_pkt) + pptr->port_dmacookie_sz;
+	if (pptr->port_state & FCP_STATE_FCA_IS_NODMA) {
+		/*
+		 * If FCA don't support DMA, then we use different vectors to
+		 * minimize the effects on DMA code flow path
+		 */
+		tran->tran_start	   = fcp_pseudo_start;
+		tran->tran_init_pkt	   = fcp_pseudo_init_pkt;
+		tran->tran_destroy_pkt	   = fcp_pseudo_destroy_pkt;
+		tran->tran_sync_pkt	   = fcp_pseudo_sync_pkt;
+		tran->tran_dmafree	   = fcp_pseudo_dmafree;
+		tran->tran_setup_pkt	   = NULL;
+		tran->tran_teardown_pkt	   = NULL;
+		tran->tran_pkt_constructor = NULL;
+		tran->tran_pkt_destructor  = NULL;
+		pptr->port_data_dma_attr   = pseudo_fca_dma_attr;
+	}
 
 	/*
 	 * Allocate an ndi event handle
@@ -12214,10 +12312,15 @@
 	pptr->port_fp_modlinkage = *pinfo->port_linkage;
 	pptr->port_dip = pinfo->port_dip;
 	pptr->port_fp_handle = pinfo->port_handle;
-	pptr->port_data_dma_attr = *pinfo->port_data_dma_attr;
-	pptr->port_cmd_dma_attr = *pinfo->port_cmd_dma_attr;
-	pptr->port_resp_dma_attr = *pinfo->port_resp_dma_attr;
-	pptr->port_dma_acc_attr = *pinfo->port_acc_attr;
+	if (pinfo->port_acc_attr != NULL) {
+		/*
+		 * FCA supports DMA
+		 */
+		pptr->port_data_dma_attr = *pinfo->port_data_dma_attr;
+		pptr->port_cmd_dma_attr = *pinfo->port_cmd_dma_attr;
+		pptr->port_resp_dma_attr = *pinfo->port_resp_dma_attr;
+		pptr->port_dma_acc_attr = *pinfo->port_acc_attr;
+	}
 	pptr->port_priv_pkt_len = pinfo->port_fca_pkt_size;
 	pptr->port_max_exch = pinfo->port_fca_max_exch;
 	pptr->port_phys_state = pinfo->port_state;
@@ -13043,9 +13146,13 @@
 		 */
 		if (!i_ddi_devi_attached(ddi_get_parent(cdip))) {
 			rval = ndi_devi_bind_driver(cdip, flags);
+			FCP_TRACE(fcp_logq, pptr->port_instbuf,
+			    fcp_trace, FCP_BUF_LEVEL_3, 0,
+			    "!Invoking ndi_devi_bind_driver: rval=%d", rval);
 		} else {
 			rval = ndi_devi_online(cdip, flags);
 		}
+
 		/*
 		 * We log the message into trace buffer if the device
 		 * is "ses" and into syslog for any other device
@@ -15917,3 +16024,248 @@
 	}
 	*pplun_blacklist = NULL;
 }
+
+/*
+ * In fcp module,
+ *   pkt@scsi_pkt, cmd@fcp_pkt, icmd@fcp_ipkt, fpkt@fc_packet, pptr@fcp_port
+ */
+static struct scsi_pkt *
+fcp_pseudo_init_pkt(struct scsi_address *ap, struct scsi_pkt *pkt,
+    struct buf *bp, int cmdlen, int statuslen, int tgtlen,
+    int flags, int (*callback)(), caddr_t arg)
+{
+	fcp_port_t	*pptr = ADDR2FCP(ap);
+	fcp_pkt_t	*cmd  = NULL;
+	fc_frame_hdr_t	*hp;
+
+	/*
+	 * First step: get the packet
+	 */
+	if (pkt == NULL) {
+		pkt = scsi_hba_pkt_alloc(pptr->port_dip, ap, cmdlen, statuslen,
+		    tgtlen, sizeof (fcp_pkt_t) + pptr->port_priv_pkt_len,
+		    callback, arg);
+		if (pkt == NULL) {
+			return (NULL);
+		}
+
+		/*
+		 * All fields in scsi_pkt will be initialized properly or
+		 * set to zero. We need do nothing for scsi_pkt.
+		 */
+		/*
+		 * But it's our responsibility to link other related data
+		 * structures. Their initialization will be done, just
+		 * before the scsi_pkt will be sent to FCA.
+		 */
+		cmd		= PKT2CMD(pkt);
+		cmd->cmd_pkt	= pkt;
+		cmd->cmd_fp_pkt = &cmd->cmd_fc_packet;
+		/*
+		 * fc_packet_t
+		 */
+		cmd->cmd_fp_pkt->pkt_ulp_private = (opaque_t)cmd;
+		cmd->cmd_fp_pkt->pkt_fca_private = (opaque_t)((caddr_t)cmd +
+		    sizeof (struct fcp_pkt));
+		cmd->cmd_fp_pkt->pkt_cmd = (caddr_t)&cmd->cmd_fcp_cmd;
+		cmd->cmd_fp_pkt->pkt_cmdlen = sizeof (struct fcp_cmd);
+		cmd->cmd_fp_pkt->pkt_resp = cmd->cmd_fcp_rsp;
+		cmd->cmd_fp_pkt->pkt_rsplen = FCP_MAX_RSP_IU_SIZE;
+		/*
+		 * Fill in the Fabric Channel Header
+		 */
+		hp = &cmd->cmd_fp_pkt->pkt_cmd_fhdr;
+		hp->r_ctl = R_CTL_COMMAND;
+		hp->rsvd = 0;
+		hp->type = FC_TYPE_SCSI_FCP;
+		hp->f_ctl = F_CTL_SEQ_INITIATIVE | F_CTL_FIRST_SEQ;
+		hp->seq_id = 0;
+		hp->df_ctl  = 0;
+		hp->seq_cnt = 0;
+		hp->ox_id = 0xffff;
+		hp->rx_id = 0xffff;
+		hp->ro = 0;
+	} else {
+		/*
+		 * We need think if we should reset any elements in
+		 * related data structures.
+		 */
+		FCP_TRACE(fcp_logq, pptr->port_instbuf,
+		    fcp_trace, FCP_BUF_LEVEL_6, 0,
+		    "reusing pkt, flags %d", flags);
+		cmd = PKT2CMD(pkt);
+		if (cmd->cmd_fp_pkt->pkt_pd) {
+			cmd->cmd_fp_pkt->pkt_pd = NULL;
+		}
+	}
+
+	/*
+	 * Second step:	 dma allocation/move
+	 */
+	if (bp && bp->b_bcount != 0) {
+		/*
+		 * Mark if it's read or write
+		 */
+		if (bp->b_flags & B_READ) {
+			cmd->cmd_flags |= CFLAG_IS_READ;
+		} else {
+			cmd->cmd_flags &= ~CFLAG_IS_READ;
+		}
+
+		bp_mapin(bp);
+		cmd->cmd_fp_pkt->pkt_data = bp->b_un.b_addr;
+		cmd->cmd_fp_pkt->pkt_datalen = bp->b_bcount;
+		cmd->cmd_fp_pkt->pkt_data_resid = 0;
+	} else {
+		/*
+		 * It seldom happens, except when CLUSTER or SCSI_VHCI wants
+		 * to send zero-length read/write.
+		 */
+		cmd->cmd_fp_pkt->pkt_data = NULL;
+		cmd->cmd_fp_pkt->pkt_datalen = 0;
+	}
+
+	return (pkt);
+}
+
+static void
+fcp_pseudo_destroy_pkt(struct scsi_address *ap, struct scsi_pkt *pkt)
+{
+	fcp_port_t	*pptr = ADDR2FCP(ap);
+
+	/*
+	 * First we let FCA to uninitilize private part.
+	 */
+	fc_ulp_uninit_packet(pptr->port_fp_handle, PKT2CMD(pkt)->cmd_fp_pkt);
+
+	/*
+	 * Then we uninitialize fc_packet.
+	 */
+
+	/*
+	 * Thirdly, we uninitializae fcp_pkt.
+	 */
+
+	/*
+	 * In the end, we free scsi_pkt.
+	 */
+	scsi_hba_pkt_free(ap, pkt);
+}
+
+static int
+fcp_pseudo_start(struct scsi_address *ap, struct scsi_pkt *pkt)
+{
+	fcp_port_t	*pptr = ADDR2FCP(ap);
+	fcp_lun_t	*plun = ADDR2LUN(ap);
+	fcp_tgt_t	*ptgt = plun->lun_tgt;
+	fcp_pkt_t	*cmd  = PKT2CMD(pkt);
+	fcp_cmd_t	*fcmd = &cmd->cmd_fcp_cmd;
+	fc_packet_t	*fpkt = cmd->cmd_fp_pkt;
+	int		 rval;
+
+	fpkt->pkt_pd = ptgt->tgt_pd_handle;
+	fc_ulp_init_packet(pptr->port_fp_handle, cmd->cmd_fp_pkt, 1);
+
+	/*
+	 * Firstly, we need initialize fcp_pkt_t
+	 * Secondly, we need initialize fcp_cmd_t.
+	 */
+	bcopy(pkt->pkt_cdbp, fcmd->fcp_cdb, pkt->pkt_cdblen);
+	fcmd->fcp_data_len = fpkt->pkt_datalen;
+	fcmd->fcp_ent_addr = plun->lun_addr;
+	if (pkt->pkt_flags & FLAG_HTAG) {
+		fcmd->fcp_cntl.cntl_qtype = FCP_QTYPE_HEAD_OF_Q;
+	} else if (pkt->pkt_flags & FLAG_OTAG) {
+		fcmd->fcp_cntl.cntl_qtype = FCP_QTYPE_ORDERED;
+	} else if (pkt->pkt_flags & FLAG_STAG) {
+		fcmd->fcp_cntl.cntl_qtype = FCP_QTYPE_SIMPLE;
+	} else {
+		fcmd->fcp_cntl.cntl_qtype = FCP_QTYPE_UNTAGGED;
+	}
+
+	if (cmd->cmd_flags & CFLAG_IS_READ) {
+		fcmd->fcp_cntl.cntl_read_data = 1;
+		fcmd->fcp_cntl.cntl_write_data = 0;
+	} else {
+		fcmd->fcp_cntl.cntl_read_data = 0;
+		fcmd->fcp_cntl.cntl_write_data = 1;
+	}
+
+	/*
+	 * Then we need initialize fc_packet_t too.
+	 */
+	fpkt->pkt_timeout = pkt->pkt_time + 2;
+	fpkt->pkt_cmd_fhdr.d_id = ptgt->tgt_d_id;
+	fpkt->pkt_cmd_fhdr.s_id = pptr->port_id;
+	if (cmd->cmd_flags & CFLAG_IS_READ) {
+		fpkt->pkt_tran_type = FC_PKT_FCP_READ;
+	} else {
+		fpkt->pkt_tran_type = FC_PKT_FCP_WRITE;
+	}
+
+	if (pkt->pkt_flags & FLAG_NOINTR) {
+		fpkt->pkt_comp = NULL;
+		fpkt->pkt_tran_flags = (FC_TRAN_CLASS3 | FC_TRAN_NO_INTR);
+	} else {
+		fpkt->pkt_comp = fcp_cmd_callback;
+		fpkt->pkt_tran_flags = (FC_TRAN_CLASS3 | FC_TRAN_INTR);
+		if (pkt->pkt_flags & FLAG_IMMEDIATE_CB) {
+			fpkt->pkt_tran_flags |= FC_TRAN_IMMEDIATE_CB;
+		}
+	}
+
+	/*
+	 * Lastly, we need initialize scsi_pkt
+	 */
+	pkt->pkt_reason = CMD_CMPLT;
+	pkt->pkt_state = 0;
+	pkt->pkt_statistics = 0;
+	pkt->pkt_resid = 0;
+
+	/*
+	 * if interrupts aren't allowed (e.g. at dump time) then we'll
+	 * have to do polled I/O
+	 */
+	if (pkt->pkt_flags & FLAG_NOINTR) {
+		return (fcp_dopoll(pptr, cmd));
+	}
+
+	cmd->cmd_state = FCP_PKT_ISSUED;
+	rval = fcp_transport(pptr->port_fp_handle, fpkt, 0);
+	if (rval == FC_SUCCESS) {
+		return (TRAN_ACCEPT);
+	}
+
+	/*
+	 * Need more consideration
+	 *
+	 * pkt->pkt_flags & FLAG_NOQUEUE could abort other pkt
+	 */
+	cmd->cmd_state = FCP_PKT_IDLE;
+	if (rval == FC_TRAN_BUSY) {
+		return (TRAN_BUSY);
+	} else {
+		return (TRAN_FATAL_ERROR);
+	}
+}
+
+/*
+ * scsi_poll will always call tran_sync_pkt for pseudo FC-HBAs
+ * SCSA will initialize it to scsi_sync_cache_pkt for physical FC-HBAs
+ */
+static void
+fcp_pseudo_sync_pkt(struct scsi_address *ap, struct scsi_pkt *pkt)
+{
+	FCP_TRACE(fcp_logq, "fcp_pseudo_sync_pkt", fcp_trace,
+	    FCP_BUF_LEVEL_2, 0, "ap-%p, scsi_pkt-%p", ap, pkt);
+}
+
+/*
+ * scsi_dmafree will always call tran_dmafree, when STATE_ARQ_DONE
+ */
+static void
+fcp_pseudo_dmafree(struct scsi_address *ap, struct scsi_pkt *pkt)
+{
+	FCP_TRACE(fcp_logq, "fcp_pseudo_dmafree", fcp_trace,
+	    FCP_BUF_LEVEL_2, 0, "ap-%p, scsi_pkt-%p", ap, pkt);
+}
--- a/usr/src/uts/common/io/fibre-channel/ulp/fcsm.c	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/uts/common/io/fibre-channel/ulp/fcsm.c	Mon Aug 10 10:43:48 2009 -0400
@@ -33,17 +33,14 @@
 #include <sys/scsi/scsi.h>
 #include <sys/var.h>
 #include <sys/byteorder.h>
-
 #include <sys/fibre-channel/fc.h>
 #include <sys/fibre-channel/impl/fc_ulpif.h>
 #include <sys/fibre-channel/ulp/fcsm.h>
 
 /* Definitions */
-#define	FCSM_VERSION		"1.27"
+#define	FCSM_VERSION		"20090729-1.28"
 #define	FCSM_NAME_VERSION	"SunFC FCSM v" FCSM_VERSION
 
-
-
 /* Global Variables */
 static char		fcsm_name[] = "FCSM";
 static void		*fcsm_state = NULL;
@@ -68,7 +65,7 @@
 
 #ifdef DEBUG
 uint32_t		fcsm_debug = (SMDL_TRACE | SMDL_IO |
-			    SMDL_ERR | SMDL_INFO);
+    SMDL_ERR | SMDL_INFO);
 #endif
 
 
@@ -289,7 +286,7 @@
 _fini(void)
 {
 	int	rval;
-#ifdef  DEBUG
+#ifdef	DEBUG
 	int	status;
 #endif /* DEBUG */
 
@@ -668,6 +665,12 @@
 	fcsm->sm_flags |= FCSM_ATTACHED;
 	fcsm->sm_port_top = pinfo->port_flags;
 	fcsm->sm_port_state = pinfo->port_state;
+	if (pinfo->port_acc_attr == NULL) {
+		/*
+		 * The corresponding FCA doesn't support DMA at all
+		 */
+		fcsm->sm_flags |= FCSM_USING_NODMA_FCA;
+	}
 	mutex_exit(&fcsm->sm_mutex);
 
 	(void) ddi_pathname(fcsm->sm_port_info.port_dip, fcsm_pathname);
@@ -972,18 +975,18 @@
 	 */
 
 	switch (cmd) {
-		case FC_CMD_DETACH:
-		case FC_CMD_SUSPEND:
-		case FC_CMD_POWER_DOWN:
-			break;
-
-		default:
-			FCSM_DEBUG(SMDL_TRACE, (CE_CONT, SM_LOG, fcsm, NULL,
-			    "port_detach: port unknown cmd 0x%x", cmd));
-			mutex_enter(&fcsm_global_mutex);
-			fcsm_num_detaching--;
-			mutex_exit(&fcsm_global_mutex);
-			return (rval);
+	case FC_CMD_DETACH:
+	case FC_CMD_SUSPEND:
+	case FC_CMD_POWER_DOWN:
+		break;
+
+	default:
+		FCSM_DEBUG(SMDL_TRACE, (CE_CONT, SM_LOG, fcsm, NULL,
+		    "port_detach: port unknown cmd 0x%x", cmd));
+		mutex_enter(&fcsm_global_mutex);
+		fcsm_num_detaching--;
+		mutex_exit(&fcsm_global_mutex);
+		return (rval);
 	};
 
 	if (fcsm_handle_port_detach(pinfo, fcsm, cmd) == DDI_SUCCESS) {
@@ -1020,25 +1023,25 @@
 	mutex_enter(&fcsm->sm_mutex);
 
 	switch (cmd) {
-		case FC_CMD_DETACH:
-			flag = FCSM_DETACHING;
-			break;
-
-		case FC_CMD_SUSPEND:
-		case FC_CMD_POWER_DOWN:
-			(cmd == FC_CMD_SUSPEND) ? (flag = FCSM_SUSPENDED) : \
-			    (flag = FCSM_POWER_DOWN);
-			if (fcsm->sm_flags &
-			    (FCSM_POWER_DOWN | FCSM_SUSPENDED)) {
-				fcsm->sm_flags |= flag;
-				mutex_exit(&fcsm->sm_mutex);
-				return (DDI_SUCCESS);
-			}
-			break;
-
-		default:
+	case FC_CMD_DETACH:
+		flag = FCSM_DETACHING;
+		break;
+
+	case FC_CMD_SUSPEND:
+	case FC_CMD_POWER_DOWN:
+		((cmd == FC_CMD_SUSPEND) ? (flag = FCSM_SUSPENDED) :
+		    (flag = FCSM_POWER_DOWN));
+		if (fcsm->sm_flags &
+		    (FCSM_POWER_DOWN | FCSM_SUSPENDED)) {
+			fcsm->sm_flags |= flag;
 			mutex_exit(&fcsm->sm_mutex);
-			return (DDI_FAILURE);
+			return (DDI_SUCCESS);
+		}
+		break;
+
+	default:
+		mutex_exit(&fcsm->sm_mutex);
+		return (DDI_FAILURE);
 	};
 
 	fcsm->sm_flags |= flag;
@@ -1625,7 +1628,7 @@
 
 	case  FCSMIO_ADAPTER_LIST: {
 		fc_hba_list_t	*list;
-		int		count;
+		int			count;
 
 		if ((fcio->fcio_xfer != FCIO_XFER_RW) ||
 		    (fcio->fcio_olen == 0) || (fcio->fcio_obuf == 0)) {
@@ -1648,7 +1651,8 @@
 
 		count = fc_ulp_get_adapter_paths((char *)list->hbaPaths,
 		    list->numAdapters);
-		if (count < 0) { /* Did something go wrong? */
+		if (count < 0) {
+			/* Did something go wrong? */
 			FCSM_DEBUG(SMDL_TRACE, (CE_CONT, SM_LOG, NULL, NULL,
 			    "Error fetching adapter list."));
 			retval = ENXIO;
@@ -1851,17 +1855,17 @@
 	}
 
 	switch (flags) {
-		case SM_LOG:
-			cmn_err(level, "!%s", buf);
-			break;
-
-		case SM_CONSOLE:
-			cmn_err(level, "^%s", buf);
-			break;
-
-		default:
-			cmn_err(level, "%s", buf);
-			break;
+	case SM_LOG:
+		cmn_err(level, "!%s", buf);
+		break;
+
+	case SM_CONSOLE:
+		cmn_err(level, "^%s", buf);
+		break;
+
+	default:
+		cmn_err(level, "%s", buf);
+		break;
 	}
 
 	kmem_free(buf, 256);
@@ -1974,16 +1978,25 @@
 	pkt->pkt_fca_private = (opaque_t)((caddr_t)cmd + sizeof (fcsm_cmd_t));
 	pkt->pkt_ulp_private = (opaque_t)cmd;
 
-	pinfo = &fcsm->sm_port_info;
-	if (ddi_dma_alloc_handle(pinfo->port_dip, pinfo->port_cmd_dma_attr,
-	    callback, NULL, &pkt->pkt_cmd_dma) != DDI_SUCCESS) {
-		return (1);
-	}
-
-	if (ddi_dma_alloc_handle(pinfo->port_dip, pinfo->port_resp_dma_attr,
-	    callback, NULL, &pkt->pkt_resp_dma) != DDI_SUCCESS) {
-		ddi_dma_free_handle(&pkt->pkt_cmd_dma);
-		return (1);
+	if (!(fcsm->sm_flags & FCSM_USING_NODMA_FCA)) {
+		pinfo = &fcsm->sm_port_info;
+		if (ddi_dma_alloc_handle(pinfo->port_dip,
+		    pinfo->port_cmd_dma_attr,
+		    callback, NULL, &pkt->pkt_cmd_dma) != DDI_SUCCESS) {
+			return (1);
+		}
+
+		if (ddi_dma_alloc_handle(pinfo->port_dip,
+		    pinfo->port_resp_dma_attr,
+		    callback, NULL, &pkt->pkt_resp_dma) != DDI_SUCCESS) {
+			ddi_dma_free_handle(&pkt->pkt_cmd_dma);
+			return (1);
+		}
+	} else {
+		pkt->pkt_cmd_dma  = NULL;
+		pkt->pkt_cmd	  = NULL;
+		pkt->pkt_resp_dma = NULL;
+		pkt->pkt_resp	  = NULL;
 	}
 
 	pkt->pkt_cmd_acc = pkt->pkt_resp_acc = NULL;
@@ -2071,7 +2084,7 @@
 		return (NULL);
 	}
 
-	if (cmd_len) {
+	if ((cmd_len) && !(fcsm->sm_flags & FCSM_USING_NODMA_FCA)) {
 		ASSERT(pkt->pkt_cmd_dma != NULL);
 
 		rval = ddi_dma_mem_alloc(pkt->pkt_cmd_dma, cmd_len,
@@ -2140,9 +2153,11 @@
 			ddi_dma_nextcookie(pkt->pkt_cmd_dma, &pkt_cookie);
 			*cp = pkt_cookie;
 		}
+	} else if (cmd_len != 0) {
+		pkt->pkt_cmd = kmem_zalloc(cmd_len, KM_SLEEP);
 	}
 
-	if (resp_len) {
+	if ((resp_len) && !(fcsm->sm_flags & FCSM_USING_NODMA_FCA)) {
 		ASSERT(pkt->pkt_resp_dma != NULL);
 
 		rval = ddi_dma_mem_alloc(pkt->pkt_resp_dma, resp_len,
@@ -2211,6 +2226,8 @@
 			ddi_dma_nextcookie(pkt->pkt_resp_dma, &pkt_cookie);
 			*cp = pkt_cookie;
 		}
+	} else if (resp_len != 0) {
+		pkt->pkt_resp = kmem_zalloc(resp_len, KM_SLEEP);
 	}
 
 	pkt->pkt_cmdlen = cmd_len;
@@ -2247,6 +2264,18 @@
 	pkt = cmd->cmd_fp_pkt;
 	ASSERT(pkt != NULL);
 
+	if (cmd->cmd_fcsm->sm_flags & FCSM_USING_NODMA_FCA) {
+		if (pkt->pkt_cmd) {
+			kmem_free(pkt->pkt_cmd, pkt->pkt_cmdlen);
+			pkt->pkt_cmd = NULL;
+		}
+
+		if (pkt->pkt_resp) {
+			kmem_free(pkt->pkt_resp, pkt->pkt_rsplen);
+			pkt->pkt_resp = NULL;
+		}
+	}
+
 	pkt->pkt_cmdlen = 0;
 	pkt->pkt_rsplen = 0;
 	pkt->pkt_tran_type = 0;
@@ -2320,7 +2349,7 @@
 		job->job_code		= FCSM_JOB_NONE;
 		job->job_flags		= 0;
 		job->job_port_instance	= -1;
-		job->job_result 	= -1;
+		job->job_result		= -1;
 		job->job_arg		= (opaque_t)0;
 		job->job_caller_priv	= (opaque_t)0;
 		job->job_comp		= NULL;
@@ -2349,8 +2378,8 @@
 	job->job_port_instance	= instance;
 	job->job_code		= command;
 	job->job_flags		= flags;
-	job->job_arg 		= arg;
-	job->job_caller_priv 	= caller_priv;
+	job->job_arg		= arg;
+	job->job_caller_priv	= caller_priv;
 	job->job_comp		= comp;
 	job->job_comp_arg	= comp_arg;
 	job->job_retry_count	= 0;
@@ -2743,6 +2772,7 @@
 	fc_packet_t	*pkt;
 	fcsm_job_t	*job;
 	fcio_t		*fcio;
+	fcsm_t		*fcsm;
 
 	pkt = cmd->cmd_fp_pkt;
 	job = cmd->cmd_job;
@@ -2758,6 +2788,7 @@
 		    pkt->pkt_cmd_fhdr.d_id));
 	} else {
 		/* Get the CT response payload */
+		fcsm = cmd->cmd_fcsm;
 		FCSM_REP_RD(pkt->pkt_resp_acc, fcio->fcio_obuf,
 		    pkt->pkt_resp, fcio->fcio_olen);
 	}
@@ -3121,7 +3152,6 @@
 		    pkt->pkt_resp, sizeof (la_els_logi_t));
 	}
 
-
 	job->job_result =
 	    fcsm_pkt_state_to_rval(pkt->pkt_state, pkt->pkt_reason);
 
@@ -3257,7 +3287,7 @@
 	if (fcsm->sm_flags & FCSM_LINK_DOWN) {
 		/*
 		 * No need to retry the command. The link previously
-		 * suffered an offline  timeout.
+		 * suffered an offline	timeout.
 		 */
 		mutex_exit(&fcsm->sm_mutex);
 		FCSM_DEBUG(SMDL_TRACE, (CE_CONT, SM_LOG, cmd->cmd_fcsm, NULL,
@@ -3548,7 +3578,7 @@
 
 			/*
 			 * No need to retry the command. The link has
-			 * suffered an offline  timeout.
+			 * suffered an offline	timeout.
 			 */
 			pkt = cmd->cmd_fp_pkt;
 			pkt->pkt_state = FC_PKT_PORT_OFFLINE;
--- a/usr/src/uts/common/io/iwh/iwh.c	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/uts/common/io/iwh/iwh.c	Mon Aug 10 10:43:48 2009 -0400
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (c) 2008, Intel Corporation
+ * Copyright (c) 2009, Intel Corporation
  * All rights reserved.
  */
 
@@ -52,6 +52,7 @@
 #include <sys/mac_wifi.h>
 #include <sys/net80211.h>
 #include <sys/net80211_proto.h>
+#include <sys/net80211_ht.h>
 #include <sys/varargs.h>
 #include <sys/policy.h>
 #include <sys/pci.h>
@@ -79,6 +80,11 @@
 #define	IWH_DEBUG_RADIO		(1 << 13)
 #define	IWH_DEBUG_RESUME	(1 << 14)
 #define	IWH_DEBUG_CALIBRATION	(1 << 15)
+#define	IWH_DEBUG_BA		(1 << 16)
+#define	IWH_DEBUG_RXON		(1 << 17)
+#define	IWH_DEBUG_HWRATE	(1 << 18)
+#define	IWH_DEBUG_HTRATE	(1 << 19)
+#define	IWH_DEBUG_QOS		(1 << 20)
 /*
  * if want to see debug message of a given section,
  * please set this flag to one of above values
@@ -90,6 +96,8 @@
 #define	IWH_DBG(x)
 #endif
 
+#define	MS(v, f)    (((v) & f) >> f##_S)
+
 static void	*iwh_soft_state_p = NULL;
 
 /*
@@ -324,8 +332,34 @@
 static void	iwh_destroy_locks(iwh_sc_t *);
 static int	iwh_send(ieee80211com_t *, mblk_t *, uint8_t);
 static void	iwh_thread(iwh_sc_t *);
-static int	iwh_run_state_config(iwh_sc_t *sc);
-static int	iwh_fast_recover(iwh_sc_t *sc);
+static int	iwh_run_state_config(iwh_sc_t *);
+static int	iwh_fast_recover(iwh_sc_t *);
+static int	iwh_wme_update(ieee80211com_t *);
+static int	iwh_qosparam_to_hw(iwh_sc_t *, int);
+static int	iwh_wme_to_qos_ac(int);
+static uint16_t	iwh_cw_e_to_cw(uint8_t);
+static int	iwh_wmeparam_check(struct wmeParams *);
+static inline int	iwh_wme_tid_qos_ac(int);
+static inline int	iwh_qos_ac_to_txq(int);
+static int	iwh_wme_tid_to_txq(int);
+static void	iwh_init_ht_conf(iwh_sc_t *);
+static void	iwh_overwrite_11n_rateset(iwh_sc_t *);
+static void	iwh_overwrite_ic_default(iwh_sc_t *);
+static void	iwh_config_rxon_chain(iwh_sc_t *);
+static int	iwh_add_ap_sta(iwh_sc_t *);
+static int	iwh_ap_lq(iwh_sc_t *);
+static void	iwh_recv_action(struct ieee80211_node *,
+    const uint8_t *, const uint8_t *);
+static int	iwh_send_action(struct ieee80211_node *,
+    int, int, uint16_t[4]);
+static int	iwh_is_max_rate(ieee80211_node_t *);
+static int	iwh_is_min_rate(ieee80211_node_t *);
+static void	iwh_increase_rate(ieee80211_node_t *);
+static void	iwh_decrease_rate(ieee80211_node_t *);
+static int	iwh_alloc_dma_mem(iwh_sc_t *, size_t,
+    ddi_dma_attr_t *, ddi_device_acc_attr_t *,
+    uint_t, iwh_dma_t *);
+static void	iwh_free_dma_mem(iwh_dma_t *);
 
 /*
  * GLD specific operations
@@ -346,7 +380,6 @@
 
 /*
  * Supported rates for 802.11b/g modes (in 500Kbps unit).
- * 11n support will be added later.
  */
 static const struct ieee80211_rateset iwh_rateset_11b =
 	{ 4, { 2, 4, 11, 22 } };
@@ -355,6 +388,11 @@
 	{ 12, { 2, 4, 11, 22, 12, 18, 24, 36, 48, 72, 96, 108 } };
 
 /*
+ * Default 11n reates supported by this station.
+ */
+extern struct ieee80211_htrateset ieee80211_rateset_11n;
+
+/*
  * For mfthread only
  */
 extern pri_t minclsyspri;
@@ -452,7 +490,7 @@
 		va_end(ap);
 	}
 }
-#endif
+#endif	/* DEBUG */
 
 /*
  * device operations
@@ -462,41 +500,41 @@
 {
 	iwh_sc_t		*sc;
 	ieee80211com_t		*ic;
-	int			instance, err, i;
+	int			instance, i;
 	char			strbuf[32];
 	wifi_data_t		wd = { 0 };
 	mac_register_t		*macp;
 	int			intr_type;
 	int			intr_count;
 	int			intr_actual;
+	int			err = DDI_FAILURE;
 
 	switch (cmd) {
 	case DDI_ATTACH:
 		break;
+
 	case DDI_RESUME:
+		instance = ddi_get_instance(dip);
 		sc = ddi_get_soft_state(iwh_soft_state_p,
-		    ddi_get_instance(dip));
+		    instance);
 		ASSERT(sc != NULL);
 
-		mutex_enter(&sc->sc_glock);
+		mutex_enter(&sc->sc_suspend_lock);
 		sc->sc_flags &= ~IWH_F_SUSPEND;
-		mutex_exit(&sc->sc_glock);
-
-		if (sc->sc_flags & IWH_F_RUNNING)
+
+		if (sc->sc_flags & IWH_F_RUNNING) {
 			(void) iwh_init(sc);
-
-		mutex_enter(&sc->sc_glock);
-		sc->sc_flags |= IWH_F_LAZY_RESUME;
-		mutex_exit(&sc->sc_glock);
-
-		IWH_DBG((IWH_DEBUG_RESUME, "iwh: resume\n"));
+		}
+		mutex_exit(&sc->sc_suspend_lock);
+
+		IWH_DBG((IWH_DEBUG_RESUME, "iwh_attach(): "
+		    "resume\n"));
 		return (DDI_SUCCESS);
+
 	default:
-		err = DDI_FAILURE;
 		goto attach_fail1;
 	}
 
-
 	instance = ddi_get_instance(dip);
 	err = ddi_soft_state_zalloc(iwh_soft_state_p, instance);
 	if (err != DDI_SUCCESS) {
@@ -504,7 +542,10 @@
 		    "failed to allocate soft state\n");
 		goto attach_fail1;
 	}
+
 	sc = ddi_get_soft_state(iwh_soft_state_p, instance);
+	ASSERT(sc != NULL);
+
 	sc->sc_dip = dip;
 
 	/*
@@ -518,6 +559,20 @@
 		goto attach_fail2;
 	}
 
+	sc->sc_dev_id = ddi_get16(sc->sc_cfg_handle,
+	    (uint16_t *)(sc->sc_cfg_base + PCI_CONF_DEVID));
+	if ((sc->sc_dev_id != 0x4232) &&
+	    (sc->sc_dev_id != 0x4235) &&
+	    (sc->sc_dev_id != 0x4236) &&
+	    (sc->sc_dev_id != 0x4237) &&
+	    (sc->sc_dev_id != 0x423a)) {
+		cmn_err(CE_WARN, "iwh_attach(): "
+		    "Do not support this device\n");
+		goto attach_fail3;
+	}
+
+	iwh_init_ht_conf(sc);
+	iwh_overwrite_11n_rateset(sc);
 
 	sc->sc_rev = ddi_get8(sc->sc_cfg_handle,
 	    (uint8_t *)(sc->sc_cfg_base + PCI_CONF_REVID));
@@ -526,17 +581,18 @@
 	 * keep from disturbing C3 state of CPU
 	 */
 	ddi_put8(sc->sc_cfg_handle, (uint8_t *)(sc->sc_cfg_base + 0x41), 0);
+
+	/*
+	 * determine the size of buffer for frame and command to ucode
+	 */
 	sc->sc_clsz = ddi_get16(sc->sc_cfg_handle,
 	    (uint16_t *)(sc->sc_cfg_base + PCI_CONF_CACHE_LINESZ));
 	if (!sc->sc_clsz) {
 		sc->sc_clsz = 16;
 	}
-
-	/*
-	 * determine the size of buffer for frame and command to ucode
-	 */
 	sc->sc_clsz = (sc->sc_clsz << 2);
-	sc->sc_dmabuf_sz = roundup(0x1000 + sizeof (struct ieee80211_frame) +
+
+	sc->sc_dmabuf_sz = roundup(0x2000 + sizeof (struct ieee80211_frame) +
 	    IEEE80211_MTU + IEEE80211_CRC_LEN +
 	    (IEEE80211_WEP_IVLEN + IEEE80211_WEP_KIDLEN +
 	    IEEE80211_WEP_CRCLEN), sc->sc_clsz);
@@ -594,10 +650,9 @@
 	    DDI_INTR_PRI(sc->sc_intr_pri));
 	mutex_init(&sc->sc_mt_lock, NULL, MUTEX_DRIVER,
 	    DDI_INTR_PRI(sc->sc_intr_pri));
-	mutex_init(&sc->sc_ucode_lock, NULL, MUTEX_DRIVER,
+	mutex_init(&sc->sc_suspend_lock, NULL, MUTEX_DRIVER,
 	    DDI_INTR_PRI(sc->sc_intr_pri));
 
-
 	cv_init(&sc->sc_fw_cv, NULL, CV_DRIVER, NULL);
 	cv_init(&sc->sc_cmd_cv, NULL, CV_DRIVER, NULL);
 	cv_init(&sc->sc_tx_cv, "tx-ring", CV_DRIVER, NULL);
@@ -647,14 +702,15 @@
 	 * get hardware configurations from eeprom
 	 */
 	err = iwh_eep_load(sc);
-	if (err != 0) {
+	if (err != IWH_SUCCESS) {
 		cmn_err(CE_WARN, "iwh_attach(): "
 		    "failed to load eeprom\n");
 		goto attach_fail9;
 	}
 
 	if (IWH_READ_EEP_SHORT(sc, EEP_VERSION) < 0x011a) {
-		IWH_DBG((IWH_DEBUG_EEPROM, "unsupported eeprom detected"));
+		IWH_DBG((IWH_DEBUG_EEPROM, "iwh_attach(): "
+		    "unsupported eeprom detected\n"));
 		goto attach_fail9;
 	}
 
@@ -696,7 +752,7 @@
 	 * 802.11 module
 	 */
 	ic = &sc->sc_ic;
-	ic->ic_phytype  = IEEE80211_T_OFDM;
+	ic->ic_phytype  = IEEE80211_T_HT;
 	ic->ic_opmode   = IEEE80211_M_STA; /* default to BSS mode */
 	ic->ic_state    = IEEE80211_S_INIT;
 	ic->ic_maxrssi  = 100; /* experimental number */
@@ -709,6 +765,21 @@
 	ic->ic_caps |= IEEE80211_C_WPA;
 
 	/*
+	 * Support QoS/WME
+	 */
+	ic->ic_caps |= IEEE80211_C_WME;
+	ic->ic_wme.wme_update = iwh_wme_update;
+
+	/*
+	 * Support 802.11n/HT
+	 */
+	if (sc->sc_ht_conf.ht_support) {
+		ic->ic_htcaps = IEEE80211_HTC_HT |
+		    IEEE80211_HTC_AMSDU;
+		ic->ic_htcaps |= IEEE80211_HTCAP_MAXAMSDU_7935;
+	}
+
+	/*
 	 * set supported .11b and .11g rates
 	 */
 	ic->ic_sup_rates[IEEE80211_MODE_11B] = iwh_rateset_11b;
@@ -724,6 +795,14 @@
 		    IEEE80211_CHAN_CCK | IEEE80211_CHAN_OFDM |
 		    IEEE80211_CHAN_DYN | IEEE80211_CHAN_2GHZ |
 		    IEEE80211_CHAN_PASSIVE;
+
+		if (sc->sc_ht_conf.cap & HT_CAP_SUP_WIDTH) {
+			ic->ic_sup_channels[i].ich_flags |=
+			    IEEE80211_CHAN_HT40;
+		} else {
+			ic->ic_sup_channels[i].ich_flags |=
+			    IEEE80211_CHAN_HT20;
+		}
 	}
 
 	ic->ic_ibss_chan = &ic->ic_sup_channels[0];
@@ -742,12 +821,9 @@
 	    ddi_get_instance(dip));
 
 	/*
-	 * Override 80211 default routines
+	 * Overwrite 80211 default configurations.
 	 */
-	sc->sc_newstate = ic->ic_newstate;
-	ic->ic_newstate = iwh_newstate;
-	ic->ic_node_alloc = iwh_node_alloc;
-	ic->ic_node_free = iwh_node_free;
+	iwh_overwrite_ic_default(sc);
 
 	/*
 	 * initialize 802.11 module
@@ -793,7 +869,7 @@
 	 * create relation to GLD
 	 */
 	macp = mac_alloc(MAC_VERSION);
-	if (macp == NULL) {
+	if (NULL == macp) {
 		cmn_err(CE_WARN, "iwh_attach(): "
 		    "failed to do mac_alloc()\n");
 		goto attach_fail15;
@@ -826,9 +902,10 @@
 	(void) snprintf(strbuf, sizeof (strbuf), DRV_NAME_SP"%d", instance);
 	err = ddi_create_minor_node(dip, strbuf, S_IFCHR,
 	    instance + 1, DDI_NT_NET_WIFI, 0);
-	if (err != DDI_SUCCESS)
+	if (err != DDI_SUCCESS) {
 		cmn_err(CE_WARN, "iwh_attach(): "
 		    "failed to do ddi_create_minor_node()\n");
+	}
 
 	/*
 	 * Notify link is down now
@@ -893,32 +970,41 @@
 	ddi_soft_state_free(iwh_soft_state_p, instance);
 
 attach_fail1:
-	return (err);
+	return (DDI_FAILURE);
 }
 
 int
 iwh_detach(dev_info_t *dip, ddi_detach_cmd_t cmd)
 {
 	iwh_sc_t *sc;
+	ieee80211com_t	*ic;
 	int err;
 
 	sc = ddi_get_soft_state(iwh_soft_state_p, ddi_get_instance(dip));
 	ASSERT(sc != NULL);
+	ic = &sc->sc_ic;
 
 	switch (cmd) {
 	case DDI_DETACH:
 		break;
+
 	case DDI_SUSPEND:
-		mutex_enter(&sc->sc_glock);
+		mutex_enter(&sc->sc_suspend_lock);
 		sc->sc_flags |= IWH_F_SUSPEND;
-		mutex_exit(&sc->sc_glock);
 
 		if (sc->sc_flags & IWH_F_RUNNING) {
 			iwh_stop(sc);
+			ieee80211_new_state(ic, IEEE80211_S_INIT, -1);
+
+			sc->sc_flags &= ~IWH_F_HW_ERR_RECOVER;
+			sc->sc_flags &= ~IWH_F_RATE_AUTO_CTL;
 		}
-
-		IWH_DBG((IWH_DEBUG_RESUME, "iwh: suspend\n"));
+		mutex_exit(&sc->sc_suspend_lock);
+
+		IWH_DBG((IWH_DEBUG_RESUME, "iwh_detach(): "
+		    "suspend\n"));
 		return (DDI_SUCCESS);
+
 	default:
 		return (DDI_FAILURE);
 	}
@@ -926,23 +1012,25 @@
 	if (!(sc->sc_flags & IWH_F_ATTACHED)) {
 		return (DDI_FAILURE);
 	}
-	err = mac_disable(sc->sc_ic.ic_mach);
-	if (err != DDI_SUCCESS)
-		return (err);
 
 	/*
 	 * Destroy the mf_thread
 	 */
+	sc->sc_mf_thread_switch = 0;
+
 	mutex_enter(&sc->sc_mt_lock);
-	sc->sc_mf_thread_switch = 0;
 	while (sc->sc_mf_thread != NULL) {
 		if (cv_wait_sig(&sc->sc_mt_cv, &sc->sc_mt_lock) == 0) {
 			break;
 		}
 	}
-
 	mutex_exit(&sc->sc_mt_lock);
 
+	err = mac_disable(sc->sc_ic.ic_mach);
+	if (err != DDI_SUCCESS) {
+		return (err);
+	}
+
 	/*
 	 * stop chipset
 	 */
@@ -967,7 +1055,6 @@
 	iwh_free_shared(sc);
 	mutex_exit(&sc->sc_glock);
 
-
 	(void) ddi_intr_disable(sc->sc_intr_htable[0]);
 	(void) ddi_intr_remove_handler(sc->sc_intr_htable[0]);
 	(void) ddi_intr_free(sc->sc_intr_htable[0]);
@@ -976,7 +1063,6 @@
 	(void) ddi_intr_remove_softint(sc->sc_soft_hdl);
 	sc->sc_soft_hdl = NULL;
 
-
 	/*
 	 * detach from 80211 module
 	 */
@@ -1007,7 +1093,7 @@
 	mutex_destroy(&sc->sc_mt_lock);
 	mutex_destroy(&sc->sc_tx_lock);
 	mutex_destroy(&sc->sc_glock);
-	mutex_destroy(&sc->sc_ucode_lock);
+	mutex_destroy(&sc->sc_suspend_lock);
 }
 
 /*
@@ -1019,7 +1105,7 @@
     uint_t dma_flags, iwh_dma_t *dma_p)
 {
 	caddr_t vaddr;
-	int err;
+	int err = DDI_FAILURE;
 
 	/*
 	 * Allocate handle
@@ -1093,7 +1179,7 @@
 static int
 iwh_alloc_fw_dma(iwh_sc_t *sc)
 {
-	int err = DDI_SUCCESS;
+	int err = DDI_FAILURE;
 	iwh_dma_t *dma_p;
 	char *t;
 
@@ -1110,19 +1196,19 @@
 	    &fw_dma_attr, &iwh_dma_accattr,
 	    DDI_DMA_RDWR | DDI_DMA_CONSISTENT,
 	    &sc->sc_dma_fw_text);
-
-	dma_p = &sc->sc_dma_fw_text;
-
-	IWH_DBG((IWH_DEBUG_DMA, "text[ncookies:%d addr:%lx size:%lx]\n",
-	    dma_p->ncookies, dma_p->cookie.dmac_address,
-	    dma_p->cookie.dmac_size));
-
 	if (err != DDI_SUCCESS) {
 		cmn_err(CE_WARN, "iwh_alloc_fw_dma(): "
 		    "failed to allocate text dma memory.\n");
 		goto fail;
 	}
 
+	dma_p = &sc->sc_dma_fw_text;
+
+	IWH_DBG((IWH_DEBUG_DMA, "iwh_alloc_fw_dma(): "
+	    "text[ncookies:%d addr:%lx size:%lx]\n",
+	    dma_p->ncookies, dma_p->cookie.dmac_address,
+	    dma_p->cookie.dmac_size));
+
 	(void) memcpy(dma_p->mem_va, t, LE_32(sc->sc_hdr->textsz));
 
 	/*
@@ -1133,39 +1219,39 @@
 	    &fw_dma_attr, &iwh_dma_accattr,
 	    DDI_DMA_RDWR | DDI_DMA_CONSISTENT,
 	    &sc->sc_dma_fw_data);
-
-	dma_p = &sc->sc_dma_fw_data;
-
-	IWH_DBG((IWH_DEBUG_DMA, "data[ncookies:%d addr:%lx size:%lx]\n",
-	    dma_p->ncookies, dma_p->cookie.dmac_address,
-	    dma_p->cookie.dmac_size));
-
 	if (err != DDI_SUCCESS) {
 		cmn_err(CE_WARN, "iwh_alloc_fw_dma(): "
 		    "failed to allocate data dma memory\n");
 		goto fail;
 	}
 
+	dma_p = &sc->sc_dma_fw_data;
+
+	IWH_DBG((IWH_DEBUG_DMA, "iwh_alloc_fw_dma(): "
+	    "data[ncookies:%d addr:%lx size:%lx]\n",
+	    dma_p->ncookies, dma_p->cookie.dmac_address,
+	    dma_p->cookie.dmac_size));
+
 	(void) memcpy(dma_p->mem_va, t, LE_32(sc->sc_hdr->datasz));
 
 	err = iwh_alloc_dma_mem(sc, LE_32(sc->sc_hdr->datasz),
 	    &fw_dma_attr, &iwh_dma_accattr,
 	    DDI_DMA_RDWR | DDI_DMA_CONSISTENT,
 	    &sc->sc_dma_fw_data_bak);
-
-	dma_p = &sc->sc_dma_fw_data_bak;
-
-	IWH_DBG((IWH_DEBUG_DMA, "data_bak[ncookies:%d addr:%lx "
-	    "size:%lx]\n",
-	    dma_p->ncookies, dma_p->cookie.dmac_address,
-	    dma_p->cookie.dmac_size));
-
 	if (err != DDI_SUCCESS) {
 		cmn_err(CE_WARN, "iwh_alloc_fw_dma(): "
 		    "failed to allocate data bakup dma memory\n");
 		goto fail;
 	}
 
+	dma_p = &sc->sc_dma_fw_data_bak;
+
+	IWH_DBG((IWH_DEBUG_DMA, "iwh_alloc_fw_dma(): "
+	    "data_bak[ncookies:%d addr:%lx "
+	    "size:%lx]\n",
+	    dma_p->ncookies, dma_p->cookie.dmac_address,
+	    dma_p->cookie.dmac_size));
+
 	(void) memcpy(dma_p->mem_va, t, LE_32(sc->sc_hdr->datasz));
 
 	/*
@@ -1176,20 +1262,20 @@
 	    &fw_dma_attr, &iwh_dma_accattr,
 	    DDI_DMA_RDWR | DDI_DMA_CONSISTENT,
 	    &sc->sc_dma_fw_init_text);
-
-	dma_p = &sc->sc_dma_fw_init_text;
-
-	IWH_DBG((IWH_DEBUG_DMA, "init_text[ncookies:%d addr:%lx "
-	    "size:%lx]\n",
-	    dma_p->ncookies, dma_p->cookie.dmac_address,
-	    dma_p->cookie.dmac_size));
-
 	if (err != DDI_SUCCESS) {
 		cmn_err(CE_WARN, "iwh_alloc_fw_dma(): "
 		    "failed to allocate init text dma memory\n");
 		goto fail;
 	}
 
+	dma_p = &sc->sc_dma_fw_init_text;
+
+	IWH_DBG((IWH_DEBUG_DMA, "iwh_alloc_fw_dma(): "
+	    "init_text[ncookies:%d addr:%lx "
+	    "size:%lx]\n",
+	    dma_p->ncookies, dma_p->cookie.dmac_address,
+	    dma_p->cookie.dmac_size));
+
 	(void) memcpy(dma_p->mem_va, t, LE_32(sc->sc_hdr->init_textsz));
 
 	/*
@@ -1200,20 +1286,20 @@
 	    &fw_dma_attr, &iwh_dma_accattr,
 	    DDI_DMA_RDWR | DDI_DMA_CONSISTENT,
 	    &sc->sc_dma_fw_init_data);
-
-	dma_p = &sc->sc_dma_fw_init_data;
-
-	IWH_DBG((IWH_DEBUG_DMA, "init_data[ncookies:%d addr:%lx "
-	    "size:%lx]\n",
-	    dma_p->ncookies, dma_p->cookie.dmac_address,
-	    dma_p->cookie.dmac_size));
-
 	if (err != DDI_SUCCESS) {
 		cmn_err(CE_WARN, "iwh_alloc_fw_dma(): "
 		    "failed to allocate init data dma memory\n");
 		goto fail;
 	}
 
+	dma_p = &sc->sc_dma_fw_init_data;
+
+	IWH_DBG((IWH_DEBUG_DMA, "iwh_alloc_fw_dma(): "
+	    "init_data[ncookies:%d addr:%lx "
+	    "size:%lx]\n",
+	    dma_p->ncookies, dma_p->cookie.dmac_address,
+	    dma_p->cookie.dmac_size));
+
 	(void) memcpy(dma_p->mem_va, t, LE_32(sc->sc_hdr->init_datasz));
 
 	sc->sc_boot = t + LE_32(sc->sc_hdr->init_datasz);
@@ -1240,7 +1326,7 @@
 #ifdef	DEBUG
 	iwh_dma_t *dma_p;
 #endif
-	int err = DDI_SUCCESS;
+	int err = DDI_FAILURE;
 
 	/*
 	 * must be aligned on a 4K-page boundary
@@ -1258,7 +1344,8 @@
 #ifdef	DEBUG
 	dma_p = &sc->sc_dma_sh;
 #endif
-	IWH_DBG((IWH_DEBUG_DMA, "sh[ncookies:%d addr:%lx size:%lx]\n",
+	IWH_DBG((IWH_DEBUG_DMA, "iwh_alloc_shared(): "
+	    "sh[ncookies:%d addr:%lx size:%lx]\n",
 	    dma_p->ncookies, dma_p->cookie.dmac_address,
 	    dma_p->cookie.dmac_size));
 
@@ -1283,7 +1370,7 @@
 #ifdef	DEBUG
 	iwh_dma_t *dma_p;
 #endif
-	int err = DDI_SUCCESS;
+	int err = DDI_FAILURE;
 
 	/*
 	 * must be aligned on a 4K-page boundary
@@ -1299,7 +1386,8 @@
 #ifdef	DEBUG
 	dma_p = &sc->sc_dma_kw;
 #endif
-	IWH_DBG((IWH_DEBUG_DMA, "kw[ncookies:%d addr:%lx size:%lx]\n",
+	IWH_DBG((IWH_DEBUG_DMA, "iwh_alloc_kw(): "
+	    "kw[ncookies:%d addr:%lx size:%lx]\n",
 	    dma_p->ncookies, dma_p->cookie.dmac_address,
 	    dma_p->cookie.dmac_size));
 
@@ -1326,7 +1414,7 @@
 #ifdef	DEBUG
 	iwh_dma_t *dma_p;
 #endif
-	int i, err = DDI_SUCCESS;
+	int i, err = DDI_FAILURE;
 
 	ring = &sc->sc_rxq;
 	ring->cur = 0;
@@ -1339,7 +1427,8 @@
 	    DDI_DMA_RDWR | DDI_DMA_CONSISTENT,
 	    &ring->dma_desc);
 	if (err != DDI_SUCCESS) {
-		IWH_DBG((IWH_DEBUG_DMA, "dma alloc rx ring desc "
+		IWH_DBG((IWH_DEBUG_DMA, "iwh_alloc_rx_ring(): "
+		    "dma alloc rx ring desc "
 		    "failed\n"));
 		goto fail;
 	}
@@ -1348,7 +1437,8 @@
 #ifdef	DEBUG
 	dma_p = &ring->dma_desc;
 #endif
-	IWH_DBG((IWH_DEBUG_DMA, "rx bd[ncookies:%d addr:%lx size:%lx]\n",
+	IWH_DBG((IWH_DEBUG_DMA, "iwh_alloc_rx_ring(): "
+	    "rx bd[ncookies:%d addr:%lx size:%lx]\n",
 	    dma_p->ncookies, dma_p->cookie.dmac_address,
 	    dma_p->cookie.dmac_size));
 
@@ -1362,7 +1452,8 @@
 		    DDI_DMA_READ | DDI_DMA_STREAMING,
 		    &data->dma_data);
 		if (err != DDI_SUCCESS) {
-			IWH_DBG((IWH_DEBUG_DMA, "dma alloc rx ring "
+			IWH_DBG((IWH_DEBUG_DMA, "iwh_alloc_rx_ring(): "
+			    "dma alloc rx ring "
 			    "buf[%d] failed\n", i));
 			goto fail;
 		}
@@ -1377,7 +1468,8 @@
 #ifdef	DEBUG
 	dma_p = &ring->data[0].dma_data;
 #endif
-	IWH_DBG((IWH_DEBUG_DMA, "rx buffer[0][ncookies:%d addr:%lx "
+	IWH_DBG((IWH_DEBUG_DMA, "iwh_alloc_rx_ring(): "
+	    "rx buffer[0][ncookies:%d addr:%lx "
 	    "size:%lx]\n",
 	    dma_p->ncookies, dma_p->cookie.dmac_address,
 	    dma_p->cookie.dmac_size));
@@ -1409,7 +1501,8 @@
 	}
 #ifdef DEBUG
 	if (2000 == n) {
-		IWH_DBG((IWH_DEBUG_DMA, "timeout resetting Rx ring\n"));
+		IWH_DBG((IWH_DEBUG_DMA, "iwh_reset_rx_ring(): "
+		    "timeout resetting Rx ring\n"));
 	}
 #endif
 	iwh_mac_access_exit(sc);
@@ -1453,8 +1546,7 @@
 #ifdef	DEBUG
 	iwh_dma_t *dma_p;
 #endif
-	int i, err = DDI_SUCCESS;
-
+	int i, err = DDI_FAILURE;
 	ring->qid = qid;
 	ring->count = TFD_QUEUE_SIZE_MAX;
 	ring->window = slots;
@@ -1470,15 +1562,17 @@
 	    DDI_DMA_RDWR | DDI_DMA_CONSISTENT,
 	    &ring->dma_desc);
 	if (err != DDI_SUCCESS) {
-		IWH_DBG((IWH_DEBUG_DMA, "dma alloc tx ring desc[%d]"
-		    " failed\n", qid));
+		IWH_DBG((IWH_DEBUG_DMA, "iwh_alloc_tx_ring(): "
+		    "dma alloc tx ring desc[%d] "
+		    "failed\n", qid));
 		goto fail;
 	}
 
 #ifdef	DEBUG
 	dma_p = &ring->dma_desc;
 #endif
-	IWH_DBG((IWH_DEBUG_DMA, "tx bd[ncookies:%d addr:%lx size:%lx]\n",
+	IWH_DBG((IWH_DEBUG_DMA, "iwh_alloc_tx_ring(): "
+	    "tx bd[ncookies:%d addr:%lx size:%lx]\n",
 	    dma_p->ncookies, dma_p->cookie.dmac_address,
 	    dma_p->cookie.dmac_size));
 
@@ -1494,7 +1588,8 @@
 	    DDI_DMA_RDWR | DDI_DMA_CONSISTENT,
 	    &ring->dma_cmd);
 	if (err != DDI_SUCCESS) {
-		IWH_DBG((IWH_DEBUG_DMA, "dma alloc tx ring cmd[%d]"
+		IWH_DBG((IWH_DEBUG_DMA, "iwh_alloc_tx_ring(): "
+		    "dma alloc tx ring cmd[%d]"
 		    " failed\n", qid));
 		goto fail;
 	}
@@ -1502,7 +1597,8 @@
 #ifdef	DEBUG
 	dma_p = &ring->dma_cmd;
 #endif
-	IWH_DBG((IWH_DEBUG_DMA, "tx cmd[ncookies:%d addr:%lx size:%lx]\n",
+	IWH_DBG((IWH_DEBUG_DMA, "iwh_alloc_tx_ring(): "
+	    "tx cmd[ncookies:%d addr:%lx size:%lx]\n",
 	    dma_p->ncookies, dma_p->cookie.dmac_address,
 	    dma_p->cookie.dmac_size));
 
@@ -1515,7 +1611,8 @@
 	ring->data = kmem_zalloc(sizeof (iwh_tx_data_t) * TFD_QUEUE_SIZE_MAX,
 	    KM_NOSLEEP);
 	if (NULL == ring->data) {
-		IWH_DBG((IWH_DEBUG_DMA, "could not allocate "
+		IWH_DBG((IWH_DEBUG_DMA, "iwh_alloc_tx_ring(): "
+		    "could not allocate "
 		    "tx data slots\n"));
 		goto fail;
 	}
@@ -1527,7 +1624,8 @@
 		    DDI_DMA_WRITE | DDI_DMA_STREAMING,
 		    &data->dma_data);
 		if (err != DDI_SUCCESS) {
-			IWH_DBG((IWH_DEBUG_DMA, "dma alloc tx "
+			IWH_DBG((IWH_DEBUG_DMA, "iwh_alloc_tx_ring(): "
+			    "dma alloc tx "
 			    "ring buf[%d] failed\n", i));
 			goto fail;
 		}
@@ -1535,15 +1633,15 @@
 		data->desc = desc_h + i;
 		data->paddr_desc = paddr_desc_h +
 		    _PTRDIFF(data->desc, desc_h);
-		data->cmd = cmd_h +  i; /* (i % slots); */
+		data->cmd = cmd_h +  i;
 		data->paddr_cmd = paddr_cmd_h +
 		    _PTRDIFF(data->cmd, cmd_h);
-		    /* ((i % slots) * sizeof (iwh_cmd_t)); */
 	}
 #ifdef	DEBUG
 	dma_p = &ring->data[0].dma_data;
 #endif
-	IWH_DBG((IWH_DEBUG_DMA, "tx buffer[0][ncookies:%d addr:%lx "
+	IWH_DBG((IWH_DEBUG_DMA, "iwh_alloc_tx_ring(): "
+	    "tx buffer[0][ncookies:%d addr:%lx "
 	    "size:%lx]\n",
 	    dma_p->ncookies, dma_p->cookie.dmac_address,
 	    dma_p->cookie.dmac_size));
@@ -1551,11 +1649,6 @@
 	return (err);
 
 fail:
-	if (ring->data) {
-		kmem_free(ring->data,
-		    sizeof (iwh_tx_data_t) * TFD_QUEUE_SIZE_MAX);
-	}
-
 	iwh_free_tx_ring(ring);
 
 	return (err);
@@ -1580,10 +1673,15 @@
 		}
 		DELAY(10);
 	}
+
+#ifdef	DEBUG
 	if (200 == n) {
-		IWH_DBG((IWH_DEBUG_DMA, "timeout reset tx ring %d\n",
+		IWH_DBG((IWH_DEBUG_DMA, "iwh_reset_tx_ring(): "
+		    "timeout reset tx ring %d\n",
 		    ring->qid));
 	}
+#endif
+
 	iwh_mac_access_exit(sc);
 
 	/* by pass, if it's quiesce */
@@ -1631,7 +1729,7 @@
 static int
 iwh_ring_init(iwh_sc_t *sc)
 {
-	int i, err = DDI_SUCCESS;
+	int i, err = DDI_FAILURE;
 
 	for (i = 0; i < IWH_NUM_QUEUES; i++) {
 		if (IWH_CMD_QUEUE_NUM == i) {
@@ -1676,19 +1774,20 @@
 	}
 }
 
-/*
- * allocate buffer for a node
- */
-/*ARGSUSED*/
+/* ARGSUSED */
 static ieee80211_node_t *
 iwh_node_alloc(ieee80211com_t *ic)
 {
 	iwh_amrr_t *amrr;
 
 	amrr = kmem_zalloc(sizeof (iwh_amrr_t), KM_SLEEP);
-	if (amrr != NULL) {
-		iwh_amrr_init(amrr);
-	}
+	if (NULL == amrr) {
+		cmn_err(CE_WARN, "iwh_node_alloc(): "
+		    "failed to allocate memory for amrr structure\n");
+		return (NULL);
+	}
+
+	iwh_amrr_init(amrr);
 
 	return (&amrr->in);
 }
@@ -1696,16 +1795,36 @@
 static void
 iwh_node_free(ieee80211_node_t *in)
 {
-	ieee80211com_t *ic = in->in_ic;
-
-	ic->ic_node_cleanup(in);
+	ieee80211com_t *ic;
+
+	if ((NULL == in) ||
+	    (NULL == in->in_ic)) {
+		cmn_err(CE_WARN, "iwh_node_free() "
+		    "Got a NULL point from Net80211 module\n");
+		return;
+	}
+	ic = in->in_ic;
+
+	if (ic->ic_node_cleanup != NULL) {
+		ic->ic_node_cleanup(in);
+	}
+
 	if (in->in_wpa_ie != NULL) {
 		ieee80211_free(in->in_wpa_ie);
 	}
 
+	if (in->in_wme_ie != NULL) {
+		ieee80211_free(in->in_wme_ie);
+	}
+
+	if (in->in_htcap_ie != NULL) {
+		ieee80211_free(in->in_htcap_ie);
+	}
+
 	kmem_free(in, sizeof (iwh_amrr_t));
 }
 
+
 /*
  * change station's state. this function will be invoked by 80211 module
  * when need to change staton's state.
@@ -1713,10 +1832,20 @@
 static int
 iwh_newstate(ieee80211com_t *ic, enum ieee80211_state nstate, int arg)
 {
-	iwh_sc_t *sc = (iwh_sc_t *)ic;
-	ieee80211_node_t *in = ic->ic_bss;
-	enum ieee80211_state ostate = ic->ic_state;
-	int i, err = IWH_SUCCESS;
+	iwh_sc_t *sc;
+	ieee80211_node_t *in;
+	enum ieee80211_state ostate;
+	iwh_add_sta_t node;
+	iwh_amrr_t *amrr;
+	uint8_t r;
+	int i, err = IWH_FAIL;
+
+	if (NULL == ic) {
+		return (err);
+	}
+	sc = (iwh_sc_t *)ic;
+	in = ic->ic_bss;
+	ostate = ic->ic_state;
 
 	mutex_enter(&sc->sc_glock);
 
@@ -1724,8 +1853,6 @@
 	case IEEE80211_S_SCAN:
 		switch (ostate) {
 		case IEEE80211_S_INIT:
-		{
-			iwh_add_sta_t node;
 			sc->sc_flags |= IWH_F_SCANNING;
 			iwh_set_led(sc, 2, 10, 2);
 
@@ -1737,7 +1864,8 @@
 			sc->sc_config.filter_flags &=
 			    ~LE_32(RXON_FILTER_ASSOC_MSK);
 
-			IWH_DBG((IWH_DEBUG_80211, "config chan %d "
+			IWH_DBG((IWH_DEBUG_80211, "iwh_newstate(): "
+			    "config chan %d "
 			    "flags %x filter_flags %x\n",
 			    LE_16(sc->sc_config.chan),
 			    LE_32(sc->sc_config.flags),
@@ -1746,7 +1874,7 @@
 			err = iwh_cmd(sc, REPLY_RXON, &sc->sc_config,
 			    sizeof (iwh_rxon_cmd_t), 1);
 			if (err != IWH_SUCCESS) {
-				cmn_err(CE_WARN,
+				cmn_err(CE_WARN, "iwh_newstate(): "
 				    "could not clear association\n");
 				sc->sc_flags &= ~IWH_F_SCANNING;
 				mutex_exit(&sc->sc_glock);
@@ -1760,21 +1888,20 @@
 			err = iwh_cmd(sc, REPLY_ADD_STA, &node,
 			    sizeof (node), 1);
 			if (err != IWH_SUCCESS) {
-				cmn_err(CE_WARN, "could not add "
-				    "broadcast node\n");
+				cmn_err(CE_WARN, "iwh_newstate(): "
+				    "could not add broadcast node\n");
 				sc->sc_flags &= ~IWH_F_SCANNING;
 				mutex_exit(&sc->sc_glock);
 				return (err);
 			}
 			break;
-		}
 		case IEEE80211_S_SCAN:
 			mutex_exit(&sc->sc_glock);
 			/* step to next channel before actual FW scan */
 			err = sc->sc_newstate(ic, nstate, arg);
 			mutex_enter(&sc->sc_glock);
 			if ((err != 0) || ((err = iwh_scan(sc)) != 0)) {
-				cmn_err(CE_WARN,
+				cmn_err(CE_WARN, "iwh_newstate(): "
 				    "could not initiate scan\n");
 				sc->sc_flags &= ~IWH_F_SCANNING;
 				ieee80211_cancel_scan(ic);
@@ -1804,7 +1931,7 @@
 		 * channel same to the target AP...
 		 */
 		if ((err = iwh_hw_set_before_auth(sc)) != 0) {
-			IWH_DBG((IWH_DEBUG_80211,
+			IWH_DBG((IWH_DEBUG_80211, "iwh_newstate(): "
 			    "could not send authentication request\n"));
 			mutex_exit(&sc->sc_glock);
 			return (err);
@@ -1822,7 +1949,8 @@
 			break;
 		}
 
-		IWH_DBG((IWH_DEBUG_80211, "iwh: associated."));
+		IWH_DBG((IWH_DEBUG_80211, "iwh_newstate(): "
+		    "associated.\n"));
 
 		err = iwh_run_state_config(sc);
 		if (err != IWH_SUCCESS) {
@@ -1835,23 +1963,42 @@
 		/*
 		 * start automatic rate control
 		 */
-		mutex_enter(&sc->sc_mt_lock);
-		if (IEEE80211_FIXED_RATE_NONE == ic->ic_fixed_rate) {
-			sc->sc_flags |= IWH_F_RATE_AUTO_CTL;
-			/*
-			 * set rate to some reasonable initial value
-			 */
-			i = in->in_rates.ir_nrates - 1;
-			while (i > 0 && IEEE80211_RATE(i) > 72) {
-				i--;
+		if ((in->in_flags & IEEE80211_NODE_HT) &&
+		    (sc->sc_ht_conf.ht_support) &&
+		    (in->in_htrates.rs_nrates > 0) &&
+		    (in->in_htrates.rs_nrates <= IEEE80211_HTRATE_MAXSIZE)) {
+			amrr = (iwh_amrr_t *)in;
+
+			for (i = in->in_htrates.rs_nrates - 1; i > 0; i--) {
+
+				r = in->in_htrates.rs_rates[i] &
+				    IEEE80211_RATE_VAL;
+				if ((r != 0) && (r <= 0xd) &&
+				    (sc->sc_ht_conf.tx_support_mcs[r/8] &
+				    (1 << (r%8)))) {
+					amrr->ht_mcs_idx = r;
+					sc->sc_flags |= IWH_F_RATE_AUTO_CTL;
+					break;
+				}
 			}
-			in->in_txrate = i;
 		} else {
-			sc->sc_flags &= ~IWH_F_RATE_AUTO_CTL;
+			if (IEEE80211_FIXED_RATE_NONE == ic->ic_fixed_rate) {
+				sc->sc_flags |= IWH_F_RATE_AUTO_CTL;
+
+				/*
+				 * set rate to some reasonable initial value
+				 */
+				i = in->in_rates.ir_nrates - 1;
+				while (i > 0 && IEEE80211_RATE(i) > 72) {
+					i--;
+				}
+				in->in_txrate = i;
+
+			} else {
+				sc->sc_flags &= ~IWH_F_RATE_AUTO_CTL;
+			}
 		}
 
-		mutex_exit(&sc->sc_mt_lock);
-
 		/*
 		 * set LED on after associated
 		 */
@@ -1906,7 +2053,8 @@
 
 #ifdef	DEBUG
 	if (1000 == n) {
-		IWH_DBG((IWH_DEBUG_PIO, "could not lock memory\n"));
+		IWH_DBG((IWH_DEBUG_PIO, "iwh_mac_access_enter(): "
+		    "could not lock memory\n"));
 	}
 #endif
 }
@@ -1973,7 +2121,7 @@
 static int
 iwh_load_init_firmware(iwh_sc_t *sc)
 {
-	int	err;
+	int	err = IWH_FAIL;
 	clock_t	clk;
 
 	sc->sc_flags &= ~IWH_F_PUT_SEG;
@@ -2042,7 +2190,7 @@
 static int
 iwh_load_run_firmware(iwh_sc_t *sc)
 {
-	int	err;
+	int	err = IWH_FAIL;
 	clock_t	clk;
 
 	sc->sc_flags &= ~IWH_F_PUT_SEG;
@@ -2189,7 +2337,8 @@
 	    sizeof (struct iwh_rx_mpdu_body_size) + len);
 	bcopy(tail, &crc, 4);
 
-	IWH_DBG((IWH_DEBUG_RX, "rx intr: idx=%d phy_len=%x len=%d "
+	IWH_DBG((IWH_DEBUG_RX, "iwh_rx_mpdu_intr(): "
+	    "rx intr: idx=%d phy_len=%x len=%d "
 	    "rate=%x chan=%d tstamp=%x non_cfg_phy_count=%x "
 	    "cfg_phy_count=%x tail=%x", ring->cur, sizeof (*stat),
 	    len, stat->rate.r.s.rate, stat->channel,
@@ -2197,7 +2346,8 @@
 	    stat->cfg_phy_cnt, LE_32(crc)));
 
 	if ((len < 16) || (len > sc->sc_dmabuf_sz)) {
-		IWH_DBG((IWH_DEBUG_RX, "rx frame oversize\n"));
+		IWH_DBG((IWH_DEBUG_RX, "iwh_rx_mpdu_intr(): "
+		    "rx frame oversize\n"));
 		return;
 	}
 
@@ -2207,7 +2357,8 @@
 	if ((LE_32(crc) &
 	    (RX_RES_STATUS_NO_CRC32_ERROR | RX_RES_STATUS_NO_RXE_OVERFLOW)) !=
 	    (RX_RES_STATUS_NO_CRC32_ERROR | RX_RES_STATUS_NO_RXE_OVERFLOW)) {
-		IWH_DBG((IWH_DEBUG_RX, "rx crc error tail: %x\n",
+		IWH_DBG((IWH_DEBUG_RX, "iwh_rx_mpdu_intr(): "
+		    "rx crc error tail: %x\n",
 		    LE_32(crc)));
 		sc->sc_rx_err++;
 		return;
@@ -2218,7 +2369,8 @@
 
 	if (IEEE80211_FC0_SUBTYPE_ASSOC_RESP == *(uint8_t *)wh) {
 		sc->sc_assoc_id = *((uint16_t *)(wh + 1) + 2);
-		IWH_DBG((IWH_DEBUG_RX, "rx : association id = %x\n",
+		IWH_DBG((IWH_DEBUG_RX, "iwh_rx_mpdu_intr(): "
+		    "rx : association id = %x\n",
 		    sc->sc_assoc_id));
 	}
 
@@ -2240,8 +2392,8 @@
 		(void) ieee80211_input(ic, mp, in, rssi, 0);
 	} else {
 		sc->sc_rx_nobuf++;
-		IWH_DBG((IWH_DEBUG_RX,
-		    "iwh_rx_mpdu_intr(): alloc rx buf failed\n"));
+		IWH_DBG((IWH_DEBUG_RX, "iwh_rx_mpdu_intr(): "
+		    "alloc rx buf failed\n"));
 	}
 
 	/*
@@ -2259,19 +2411,29 @@
 	ieee80211com_t *ic = &sc->sc_ic;
 	iwh_tx_ring_t *ring = &sc->sc_txq[desc->hdr.qid & 0x3];
 	iwh_tx_stat_t *stat = (iwh_tx_stat_t *)(desc + 1);
-	iwh_amrr_t *amrr = (iwh_amrr_t *)ic->ic_bss;
+	iwh_amrr_t *amrr;
+
+	if (NULL == ic->ic_bss) {
+		return;
+	}
+
+	amrr = (iwh_amrr_t *)ic->ic_bss;
 
 	amrr->txcnt++;
-	IWH_DBG((IWH_DEBUG_RATECTL, "tx: %d cnt\n", amrr->txcnt));
+	IWH_DBG((IWH_DEBUG_RATECTL, "iwh_tx_intr(): "
+	    "tx: %d cnt\n", amrr->txcnt));
 
 	if (stat->ntries > 0) {
 		amrr->retrycnt++;
 		sc->sc_tx_retries++;
-		IWH_DBG((IWH_DEBUG_TX, "tx: %d retries\n",
+		IWH_DBG((IWH_DEBUG_TX, "iwh_tx_intr(): "
+		    "tx: %d retries\n",
 		    sc->sc_tx_retries));
 	}
 
+	mutex_enter(&sc->sc_mt_lock);
 	sc->sc_tx_timer = 0;
+	mutex_exit(&sc->sc_mt_lock);
 
 	mutex_enter(&sc->sc_tx_lock);
 
@@ -2280,7 +2442,7 @@
 		ring->queued = 0;
 	}
 
-	if ((sc->sc_need_reschedule) && (ring->queued <= (ring->count << 3))) {
+	if ((sc->sc_need_reschedule) && (ring->queued <= (ring->count >> 3))) {
 		sc->sc_need_reschedule = 0;
 		mutex_exit(&sc->sc_tx_lock);
 		mac_tx_update(ic->ic_mach);
@@ -2300,14 +2462,20 @@
 		return;
 	}
 
+	if (sc->sc_cmd_accum > 0) {
+		sc->sc_cmd_accum--;
+		return;
+	}
+
 	mutex_enter(&sc->sc_glock);
 
-	sc->sc_flags |= IWH_F_CMD_DONE;
+	sc->sc_cmd_flag = SC_CMD_FLG_DONE;
+
 	cv_signal(&sc->sc_cmd_cv);
 
 	mutex_exit(&sc->sc_glock);
 
-	IWH_DBG((IWH_DEBUG_CMD, "rx cmd: "
+	IWH_DBG((IWH_DEBUG_CMD, "iwh_cmd_intr(): "
 	    "qid=%x idx=%d flags=%x type=0x%x\n",
 	    desc->hdr.qid, desc->hdr.idx, desc->hdr.flags,
 	    desc->hdr.type));
@@ -2328,14 +2496,14 @@
 	/*
 	 * the microcontroller is ready
 	 */
-	IWH_DBG((IWH_DEBUG_FW,
-	    "microcode alive notification minor: %x major: %x type:"
-	    " %x subtype: %x\n",
+	IWH_DBG((IWH_DEBUG_FW, "iwh_ucode_alive(): "
+	    "microcode alive notification minor: %x major: %x type: "
+	    "%x subtype: %x\n",
 	    ar->ucode_minor, ar->ucode_minor, ar->ver_type, ar->ver_subtype));
 
 #ifdef	DEBUG
 	if (LE_32(ar->is_valid) != UCODE_VALID_OK) {
-		IWH_DBG((IWH_DEBUG_FW,
+		IWH_DBG((IWH_DEBUG_FW, "iwh_ucode_alive(): "
 		    "microcontroller initialization failed\n"));
 	}
 #endif
@@ -2344,7 +2512,7 @@
 	 * determine if init alive or runtime alive.
 	 */
 	if (INITIALIZE_SUBTYPE == ar->ver_subtype) {
-		IWH_DBG((IWH_DEBUG_FW,
+		IWH_DBG((IWH_DEBUG_FW, "iwh_ucode_alive(): "
 		    "initialization alive received.\n"));
 
 		(void) memcpy(&sc->sc_card_alive_init, ar,
@@ -2385,7 +2553,8 @@
 
 	} else {	/* runtime alive */
 
-		IWH_DBG((IWH_DEBUG_FW, "runtime alive received.\n"));
+		IWH_DBG((IWH_DEBUG_FW, "iwh_ucode_alive(): "
+		    "runtime alive received.\n"));
 
 		(void) memcpy(&sc->sc_card_alive_run, ar,
 		    sizeof (struct iwh_alive_resp));
@@ -2455,10 +2624,10 @@
 			DELAY(1000);
 		}
 
-		mutex_exit(&sc->sc_glock);
-
 		sc->sc_flags |= IWH_F_FW_INIT;
 		cv_signal(&sc->sc_ucode_cv);
+
+		mutex_exit(&sc->sc_glock);
 	}
 
 }
@@ -2467,29 +2636,21 @@
  * deal with receiving frames, command response
  * and all notifications from ucode.
  */
+/* ARGSUSED */
 static uint_t
-/* LINTED: argument unused in function: unused */
 iwh_rx_softintr(caddr_t arg, caddr_t unused)
 {
-	iwh_sc_t *sc = (iwh_sc_t *)arg;
-	ieee80211com_t *ic = &sc->sc_ic;
+	iwh_sc_t *sc;
+	ieee80211com_t *ic;
 	iwh_rx_desc_t *desc;
 	iwh_rx_data_t *data;
 	uint32_t index;
 
-	mutex_enter(&sc->sc_glock);
-
-	if (sc->sc_rx_softint_pending != 1) {
-		mutex_exit(&sc->sc_glock);
+	if (NULL == arg) {
 		return (DDI_INTR_UNCLAIMED);
 	}
-
-	/*
-	 * disable interrupts
-	 */
-	IWH_WRITE(sc, CSR_INT_MASK, 0);
-
-	mutex_exit(&sc->sc_glock);
+	sc = (iwh_sc_t *)arg;
+	ic = &sc->sc_ic;
 
 	/*
 	 * firmware has moved the index of the rx queue, driver get it,
@@ -2501,7 +2662,8 @@
 		data = &sc->sc_rxq.data[sc->sc_rxq.cur];
 		desc = (iwh_rx_desc_t *)data->dma_data.mem_va;
 
-		IWH_DBG((IWH_DEBUG_INTR, "rx notification index = %d"
+		IWH_DBG((IWH_DEBUG_INTR, "iwh_rx_softintr(): "
+		    "rx notification index = %d"
 		    " cur = %d qid=%x idx=%d flags=%x type=%x len=%d\n",
 		    index, sc->sc_rxq.cur, desc->hdr.qid, desc->hdr.idx,
 		    desc->hdr.flags, desc->hdr.type, LE_32(desc->len)));
@@ -2510,10 +2672,8 @@
 		 * a command other than a tx need to be replied
 		 */
 		if (!(desc->hdr.qid & 0x80) &&
-		    (desc->hdr.type != REPLY_RX_PHY_CMD) &&
-		    (desc->hdr.type != REPLY_RX_MPDU_CMD) &&
-		    (desc->hdr.type != REPLY_TX) &&
-		    (desc->hdr.type != REPLY_PHY_CALIBRATION_CMD)) {
+		    (desc->hdr.type != REPLY_SCAN_CMD) &&
+		    (desc->hdr.type != REPLY_TX)) {
 			iwh_cmd_intr(sc, desc);
 		}
 
@@ -2538,7 +2698,8 @@
 		{
 			uint32_t *status = (uint32_t *)(desc + 1);
 
-			IWH_DBG((IWH_DEBUG_RADIO, "state changed to %x\n",
+			IWH_DBG((IWH_DEBUG_RADIO, "iwh_rx_softintr(): "
+			    "state changed to %x\n",
 			    LE_32(*status)));
 
 			if (LE_32(*status) & 1) {
@@ -2556,6 +2717,7 @@
 				sc->sc_flags |=
 				    (IWH_F_HW_ERR_RECOVER | IWH_F_RADIO_OFF);
 			}
+
 			break;
 		}
 
@@ -2564,7 +2726,7 @@
 			iwh_start_scan_t *scan =
 			    (iwh_start_scan_t *)(desc + 1);
 
-			IWH_DBG((IWH_DEBUG_SCAN,
+			IWH_DBG((IWH_DEBUG_SCAN, "iwh_rx_softintr(): "
 			    "scanning channel %d status %x\n",
 			    scan->chan, LE_32(scan->status)));
 
@@ -2574,12 +2736,14 @@
 
 		case SCAN_COMPLETE_NOTIFICATION:
 		{
+#ifdef	DEBUG
 			iwh_stop_scan_t *scan =
 			    (iwh_stop_scan_t *)(desc + 1);
 
-			IWH_DBG((IWH_DEBUG_SCAN,
+			IWH_DBG((IWH_DEBUG_SCAN, "iwh_rx_softintr(): "
 			    "completed channel %d (burst of %d) status %02x\n",
 			    scan->chan, scan->nchan, scan->status));
+#endif
 
 			sc->sc_scan_pending++;
 			break;
@@ -2598,8 +2762,10 @@
 			break;
 
 		case CALIBRATION_COMPLETE_NOTIFICATION:
+			mutex_enter(&sc->sc_glock);
 			sc->sc_flags |= IWH_F_FW_INIT;
 			cv_signal(&sc->sc_ucode_cv);
+			mutex_exit(&sc->sc_glock);
 			break;
 
 		case MISSED_BEACONS_NOTIFICATION:
@@ -2608,7 +2774,7 @@
 			    (struct iwh_beacon_missed *)(desc + 1);
 
 			if ((ic->ic_state == IEEE80211_S_RUN) &&
-			    (LE_32(miss->consecutive) > 10)) {
+			    (LE_32(miss->consecutive) > 50)) {
 				cmn_err(CE_NOTE, "iwh: iwh_rx_softintr(): "
 				    "beacon missed %d/%d\n",
 				    LE_32(miss->consecutive),
@@ -2630,15 +2796,10 @@
 	index = (0 == index) ? RX_QUEUE_SIZE - 1 : index - 1;
 	IWH_WRITE(sc, FH_RSCSR_CHNL0_RBDCB_WPTR_REG, index & (~7));
 
-	mutex_enter(&sc->sc_glock);
-
 	/*
 	 * re-enable interrupts
 	 */
 	IWH_WRITE(sc, CSR_INT_MASK, CSR_INI_SET_MASK);
-	sc->sc_rx_softint_pending = 0;
-
-	mutex_exit(&sc->sc_glock);
 
 	return (DDI_INTR_CLAIMED);
 }
@@ -2646,30 +2807,38 @@
 /*
  * the handle of interrupt
  */
+/* ARGSUSED */
 static uint_t
-/* LINTED: argument unused in function: unused */
 iwh_intr(caddr_t arg, caddr_t unused)
 {
-	iwh_sc_t *sc = (iwh_sc_t *)arg;
+	iwh_sc_t *sc;
 	uint32_t r, rfh;
 
-	mutex_enter(&sc->sc_glock);
+	if (NULL == arg) {
+		return (DDI_INTR_UNCLAIMED);
+	}
+	sc = (iwh_sc_t *)arg;
+
+	mutex_enter(&sc->sc_suspend_lock);
 
 	if (sc->sc_flags & IWH_F_SUSPEND) {
-		mutex_exit(&sc->sc_glock);
+		mutex_exit(&sc->sc_suspend_lock);
 		return (DDI_INTR_UNCLAIMED);
 	}
+
 	r = IWH_READ(sc, CSR_INT);
 	if (0 == r || 0xffffffff == r) {
-		mutex_exit(&sc->sc_glock);
+		mutex_exit(&sc->sc_suspend_lock);
 		return (DDI_INTR_UNCLAIMED);
 	}
 
-	IWH_DBG((IWH_DEBUG_INTR, "interrupt reg %x\n", r));
+	IWH_DBG((IWH_DEBUG_INTR, "iwh_intr(): "
+	    "interrupt reg %x\n", r));
 
 	rfh = IWH_READ(sc, CSR_FH_INT_STATUS);
 
-	IWH_DBG((IWH_DEBUG_INTR, "FH interrupt reg %x\n", rfh));
+	IWH_DBG((IWH_DEBUG_INTR, "iwh_intr(): "
+	    "FH interrupt reg %x\n", rfh));
 
 	/*
 	 * disable interrupts
@@ -2682,20 +2851,17 @@
 	IWH_WRITE(sc, CSR_INT, r);
 	IWH_WRITE(sc, CSR_FH_INT_STATUS, rfh);
 
-	if (NULL == sc->sc_soft_hdl) {
-		mutex_exit(&sc->sc_glock);
-		return (DDI_INTR_CLAIMED);
-	}
-
 	if (r & (BIT_INT_SWERROR | BIT_INT_ERR)) {
-		IWH_DBG((IWH_DEBUG_FW, "fatal firmware error\n"));
-		mutex_exit(&sc->sc_glock);
+		IWH_DBG((IWH_DEBUG_FW, "iwh_intr(): "
+		    "fatal firmware error\n"));
+		mutex_exit(&sc->sc_suspend_lock);
 		iwh_stop(sc);
 		sc->sc_ostate = sc->sc_ic.ic_state;
 
 		/* notify upper layer */
-		if (!IWH_CHK_FAST_RECOVER(sc))
+		if (!IWH_CHK_FAST_RECOVER(sc)) {
 			ieee80211_new_state(&sc->sc_ic, IEEE80211_S_INIT, -1);
+		}
 
 		sc->sc_flags |= IWH_F_HW_ERR_RECOVER;
 		return (DDI_INTR_CLAIMED);
@@ -2703,24 +2869,29 @@
 
 	if (r & BIT_INT_RF_KILL) {
 		uint32_t tmp = IWH_READ(sc, CSR_GP_CNTRL);
-		if (tmp & (1 << 27))
+		if (tmp & (1 << 27)) {
 			cmn_err(CE_NOTE, "RF switch: radio on\n");
+		}
 	}
 
 	if ((r & (BIT_INT_FH_RX | BIT_INT_SW_RX)) ||
 	    (rfh & FH_INT_RX_MASK)) {
-		sc->sc_rx_softint_pending = 1;
 		(void) ddi_intr_trigger_softint(sc->sc_soft_hdl, NULL);
+		mutex_exit(&sc->sc_suspend_lock);
+		return (DDI_INTR_CLAIMED);
 	}
 
 	if (r & BIT_INT_FH_TX) {
+		mutex_enter(&sc->sc_glock);
 		sc->sc_flags |= IWH_F_PUT_SEG;
 		cv_signal(&sc->sc_put_seg_cv);
+		mutex_exit(&sc->sc_glock);
 	}
 
 #ifdef	DEBUG
 	if (r & BIT_INT_ALIVE)	{
-		IWH_DBG((IWH_DEBUG_FW, "firmware initialized.\n"));
+		IWH_DBG((IWH_DEBUG_FW, "iwh_intr(): "
+		    "firmware initialized.\n"));
 	}
 #endif
 
@@ -2729,7 +2900,7 @@
 	 */
 	IWH_WRITE(sc, CSR_INT_MASK, CSR_INI_SET_MASK);
 
-	mutex_exit(&sc->sc_glock);
+	mutex_exit(&sc->sc_suspend_lock);
 
 	return (DDI_INTR_CLAIMED);
 }
@@ -2808,14 +2979,15 @@
 static mblk_t *
 iwh_m_tx(void *arg, mblk_t *mp)
 {
-	iwh_sc_t	*sc = (iwh_sc_t *)arg;
-	ieee80211com_t	*ic = &sc->sc_ic;
+	iwh_sc_t	*sc;
+	ieee80211com_t	*ic;
 	mblk_t		*next;
 
-	if (sc->sc_flags & IWH_F_SUSPEND) {
-		freemsgchain(mp);
+	if (NULL == arg) {
 		return (NULL);
 	}
+	sc = (iwh_sc_t *)arg;
+	ic = &sc->sc_ic;
 
 	if (ic->ic_state != IEEE80211_S_RUN) {
 		freemsgchain(mp);
@@ -2824,10 +2996,18 @@
 
 	if ((sc->sc_flags & IWH_F_HW_ERR_RECOVER) &&
 	    IWH_CHK_FAST_RECOVER(sc)) {
-		IWH_DBG((IWH_DEBUG_FW, "iwh_m_tx(): hold queue\n"));
+		IWH_DBG((IWH_DEBUG_FW, "iwh_m_tx(): "
+		    "hold queue\n"));
 		return (mp);
 	}
 
+	mutex_enter(&sc->sc_suspend_lock);
+	if (sc->sc_flags & IWH_F_SUSPEND) {
+		mutex_exit(&sc->sc_suspend_lock);
+		freemsgchain(mp);
+		return (NULL);
+	}
+
 	while (mp != NULL) {
 		next = mp->b_next;
 		mp->b_next = NULL;
@@ -2838,6 +3018,10 @@
 		mp = next;
 	}
 
+	if (mutex_owned(&sc->sc_suspend_lock)) {
+		mutex_exit(&sc->sc_suspend_lock);
+	}
+
 	return (mp);
 }
 
@@ -2847,7 +3031,7 @@
 static int
 iwh_send(ieee80211com_t *ic, mblk_t *mp, uint8_t type)
 {
-	iwh_sc_t *sc = (iwh_sc_t *)ic;
+	iwh_sc_t *sc;
 	iwh_tx_ring_t *ring;
 	iwh_tx_desc_t *desc;
 	iwh_tx_data_t *data;
@@ -2857,20 +3041,23 @@
 	struct ieee80211_frame *wh;
 	struct ieee80211_key *k = NULL;
 	mblk_t *m, *m0;
-	int rate, hdrlen, len, len0, mblen, off, err = IWH_SUCCESS;
+	int hdrlen, len, len0, mblen, off, err = IWH_SUCCESS;
 	uint16_t masks = 0;
-	uint32_t 	s_id = 0;
-
-	ring = &sc->sc_txq[0];
-	data = &ring->data[ring->cur];
-	desc = data->desc;
-	cmd = data->cmd;
-	bzero(desc, sizeof (*desc));
-	bzero(cmd, sizeof (*cmd));
-
-	mutex_enter(&sc->sc_tx_lock);
+	uint32_t rate, s_id = 0;
+	int txq_id = NON_QOS_TXQ;
+	struct ieee80211_qosframe *qwh = NULL;
+	int tid = WME_TID_INVALID;
+
+	if (NULL == ic) {
+		return (IWH_FAIL);
+	}
+	sc = (iwh_sc_t *)ic;
+
+	if (!mutex_owned(&sc->sc_suspend_lock)) {
+		mutex_enter(&sc->sc_suspend_lock);
+	}
+
 	if (sc->sc_flags & IWH_F_SUSPEND) {
-		mutex_exit(&sc->sc_tx_lock);
 		if ((type & IEEE80211_FC0_TYPE_MASK) !=
 		    IEEE80211_FC0_TYPE_DATA) {
 			freemsg(mp);
@@ -2878,23 +3065,8 @@
 		err = IWH_FAIL;
 		goto exit;
 	}
-	if (ring->queued > ring->count - 64) {
-		IWH_DBG((IWH_DEBUG_TX, "iwh_send(): no txbuf\n"));
-
-		sc->sc_need_reschedule = 1;
-		mutex_exit(&sc->sc_tx_lock);
-		if ((type & IEEE80211_FC0_TYPE_MASK) !=
-		    IEEE80211_FC0_TYPE_DATA) {
-			freemsg(mp);
-		}
-		sc->sc_tx_nobuf++;
-		err = IWH_FAIL;
-		goto exit;
-	}
-
-	mutex_exit(&sc->sc_tx_lock);
-
-	hdrlen = sizeof (struct ieee80211_frame);
+
+	hdrlen = ieee80211_hdrspace(ic, mp->b_rptr);
 
 	m = allocb(msgdsize(mp) + 32, BPRI_MED);
 	if (NULL == m) { /* can not alloc buf, drop this package */
@@ -2913,8 +3085,6 @@
 
 	m->b_wptr += off;
 
-	freemsg(mp);
-
 	wh = (struct ieee80211_frame *)m->b_rptr;
 
 	/*
@@ -2924,13 +3094,92 @@
 	if (NULL == in) {
 		cmn_err(CE_WARN, "iwh_send(): "
 		    "failed to find tx node\n");
+		freemsg(mp);
 		freemsg(m);
 		sc->sc_tx_err++;
 		err = IWH_SUCCESS;
 		goto exit;
 	}
 
-	(void) ieee80211_encap(ic, m, in);
+	/*
+	 * Net80211 module encapsulate outbound data frames.
+	 * Add some feilds of 80211 frame.
+	 */
+	if ((type & IEEE80211_FC0_TYPE_MASK) ==
+	    IEEE80211_FC0_TYPE_DATA) {
+		(void) ieee80211_encap(ic, m, in);
+	}
+
+	/*
+	 * Determine TX queue according to traffic ID in frame
+	 * if working in QoS mode.
+	 */
+	if (in->in_flags & IEEE80211_NODE_QOS) {
+
+		if ((type & IEEE80211_FC0_TYPE_MASK) ==
+		    IEEE80211_FC0_TYPE_DATA) {
+
+			if (wh->i_fc[0] & IEEE80211_FC0_SUBTYPE_QOS) {
+				qwh = (struct ieee80211_qosframe *)wh;
+
+				tid = qwh->i_qos[0] & IEEE80211_QOS_TID;
+				txq_id = iwh_wme_tid_to_txq(tid);
+
+				if (txq_id < TXQ_FOR_AC_MIN ||
+				    (txq_id > TXQ_FOR_AC_MAX)) {
+					freemsg(m);
+					freemsg(mp);
+					sc->sc_tx_err++;
+					err = IWH_SUCCESS;
+					goto exit;
+				}
+
+			} else {
+				txq_id = NON_QOS_TXQ;
+			}
+
+		} else if ((type & IEEE80211_FC0_TYPE_MASK) ==
+		    IEEE80211_FC0_TYPE_MGT) {
+			txq_id = QOS_TXQ_FOR_MGT;
+		} else {
+			txq_id = NON_QOS_TXQ;
+		}
+
+	} else {
+		txq_id = NON_QOS_TXQ;
+	}
+
+	ring = &sc->sc_txq[txq_id];
+	data = &ring->data[ring->cur];
+	desc = data->desc;
+	cmd = data->cmd;
+	bzero(desc, sizeof (*desc));
+	bzero(cmd, sizeof (*cmd));
+
+	mutex_enter(&sc->sc_tx_lock);
+
+	/*
+	 * Need reschedule TX if TX buffer is full.
+	 */
+	if (ring->queued > ring->count - IWH_MAX_WIN_SIZE) {
+		IWH_DBG((IWH_DEBUG_TX, "iwh_send(): "
+		"no txbuf\n"));
+
+		sc->sc_need_reschedule = 1;
+		mutex_exit(&sc->sc_tx_lock);
+
+		freemsg(m);
+		if ((type & IEEE80211_FC0_TYPE_MASK) !=
+		    IEEE80211_FC0_TYPE_DATA) {
+			freemsg(mp);
+		}
+		sc->sc_tx_nobuf++;
+		err = IWH_FAIL;
+		goto exit;
+	}
+	mutex_exit(&sc->sc_tx_lock);
+
+	freemsg(mp);
 
 	cmd->hdr.type = REPLY_TX;
 	cmd->hdr.flags = 0;
@@ -2967,44 +3216,88 @@
 	}
 #endif
 
+	tx->rts_retry_limit = IWH_TX_RTS_RETRY_LIMIT;
+	tx->data_retry_limit = IWH_TX_DATA_RETRY_LIMIT;
+
 	/*
-	 * pickup a rate
+	 * specific TX parameters for management frames
 	 */
 	if ((wh->i_fc[0] & IEEE80211_FC0_TYPE_MASK) ==
 	    IEEE80211_FC0_TYPE_MGT) {
 		/*
 		 * mgmt frames are sent at 1M
 		 */
-		rate = in->in_rates.ir_rates[0];
+		if ((in->in_rates.ir_rates[0] &
+		    IEEE80211_RATE_VAL) != 0) {
+			rate = in->in_rates.ir_rates[0] & IEEE80211_RATE_VAL;
+		} else {
+			rate = 2;
+		}
+
+		tx->tx_flags |= LE_32(TX_CMD_FLG_SEQ_CTL_MSK);
+
+		/*
+		 * tell h/w to set timestamp in probe responses
+		 */
+		if ((wh->i_fc[0] & IEEE80211_FC0_SUBTYPE_MASK) ==
+		    IEEE80211_FC0_SUBTYPE_PROBE_RESP) {
+			tx->tx_flags |= LE_32(TX_CMD_FLG_TSF_MSK);
+
+			tx->data_retry_limit = 3;
+			if (tx->data_retry_limit < tx->rts_retry_limit) {
+				tx->rts_retry_limit = tx->data_retry_limit;
+			}
+		}
+
+		if (((wh->i_fc[0] & IEEE80211_FC0_SUBTYPE_MASK) ==
+		    IEEE80211_FC0_SUBTYPE_ASSOC_REQ) ||
+		    ((wh->i_fc[0] & IEEE80211_FC0_SUBTYPE_MASK) ==
+		    IEEE80211_FC0_SUBTYPE_REASSOC_REQ)) {
+			tx->timeout.pm_frame_timeout = LE_16(3);
+		} else {
+			tx->timeout.pm_frame_timeout = LE_16(2);
+		}
+
 	} else {
 		/*
-		 * do it here for the software way rate control.
+		 * do it here for the software way rate scaling.
 		 * later for rate scaling in hardware.
-		 * maybe like the following, for management frame:
-		 * tx->initial_rate_index = LINK_QUAL_MAX_RETRY_NUM - 1;
-		 * for data frame:
-		 * tx->tx_flags |= (LE_32(TX_CMD_FLG_STA_RATE_MSK));
-		 * rate = in->in_rates.ir_rates[in->in_txrate];
-		 * tx->initial_rate_index = 1;
 		 *
 		 * now the txrate is determined in tx cmd flags, set to the
-		 * max value 54M for 11g and 11M for 11b.
+		 * max value 54M for 11g and 11M for 11b and 96M for 11n
+		 * originally.
 		 */
-
 		if (ic->ic_fixed_rate != IEEE80211_FIXED_RATE_NONE) {
 			rate = ic->ic_fixed_rate;
 		} else {
-			rate = in->in_rates.ir_rates[in->in_txrate];
+			if ((in->in_flags & IEEE80211_NODE_HT) &&
+			    (sc->sc_ht_conf.ht_support)) {
+				iwh_amrr_t *amrr = (iwh_amrr_t *)in;
+				rate = amrr->ht_mcs_idx;
+			} else {
+				if ((in->in_rates.ir_rates[in->in_txrate] &
+				    IEEE80211_RATE_VAL) != 0) {
+					rate = in->in_rates.
+					    ir_rates[in->in_txrate] &
+					    IEEE80211_RATE_VAL;
+				}
+			}
 		}
-	}
-
-	rate &= IEEE80211_RATE_VAL;
-
-	IWH_DBG((IWH_DEBUG_TX, "tx rate[%d of %d] = %x",
+
+		if (tid != WME_TID_INVALID) {
+			tx->tid_tspec = (uint8_t)tid;
+			tx->tx_flags &= LE_32(~TX_CMD_FLG_SEQ_CTL_MSK);
+		} else {
+			tx->tx_flags |= LE_32(TX_CMD_FLG_SEQ_CTL_MSK);
+		}
+
+		tx->timeout.pm_frame_timeout = 0;
+	}
+
+	IWH_DBG((IWH_DEBUG_TX, "iwh_send(): "
+	    "tx rate[%d of %d] = %x",
 	    in->in_txrate, in->in_rates.ir_nrates, rate));
 
-	tx->tx_flags |= (LE_32(TX_CMD_FLG_SEQ_CTL_MSK));
-
 	len0 = roundup(4 + sizeof (iwh_tx_cmd_t) + hdrlen, 4);
 	if (len0 != (4 + sizeof (iwh_tx_cmd_t) + hdrlen)) {
 		tx->tx_flags |= LE_32(TX_CMD_FLG_MH_PAD_MSK);
@@ -3019,39 +3312,33 @@
 		tx->sta_id = IWH_AP_ID;
 	}
 
-	if ((wh->i_fc[0] & IEEE80211_FC0_TYPE_MASK) ==
-	    IEEE80211_FC0_TYPE_MGT) {
-		/* tell h/w to set timestamp in probe responses */
-		if ((wh->i_fc[0] & IEEE80211_FC0_SUBTYPE_MASK) ==
-		    IEEE80211_FC0_SUBTYPE_PROBE_RESP) {
-			tx->tx_flags |= LE_32(TX_CMD_FLG_TSF_MSK);
-		}
-
-		if (((wh->i_fc[0] & IEEE80211_FC0_SUBTYPE_MASK) ==
-		    IEEE80211_FC0_SUBTYPE_ASSOC_REQ) ||
-		    ((wh->i_fc[0] & IEEE80211_FC0_SUBTYPE_MASK) ==
-		    IEEE80211_FC0_SUBTYPE_REASSOC_REQ)) {
-			tx->timeout.pm_frame_timeout = LE_16(3);
+	if ((in->in_flags & IEEE80211_NODE_HT) &&
+	    (sc->sc_ht_conf.ht_support) &&
+	    ((wh->i_fc[0] & IEEE80211_FC0_TYPE_MASK) ==
+	    IEEE80211_FC0_TYPE_DATA)) {
+		if (rate >= HT_2CHAIN_RATE_MIN_IDX) {
+			rate |= LE_32(RATE_MCS_ANT_AB_MSK);
 		} else {
-			tx->timeout.pm_frame_timeout = LE_16(2);
+			rate |= LE_32(RATE_MCS_ANT_B_MSK);
 		}
+
+		rate |= LE_32((1 << RATE_MCS_HT_POS));
+
+		tx->rate.r.rate_n_flags = rate;
+
 	} else {
-		tx->timeout.pm_frame_timeout = 0;
-	}
-
-	if (2 == rate || 4 == rate || 11 == rate || 22 == rate) {
-		masks |= RATE_MCS_CCK_MSK;
-	}
-
-	masks |= RATE_MCS_ANT_B_MSK;
-	tx->rate.r.rate_n_flags = LE_32(iwh_rate_to_plcp(rate) | masks);
-
-	IWH_DBG((IWH_DEBUG_TX, "tx flag = %x",
+		if (2 == rate || 4 == rate || 11 == rate || 22 == rate) {
+			masks |= RATE_MCS_CCK_MSK;
+		}
+
+		masks |= RATE_MCS_ANT_B_MSK;
+		tx->rate.r.rate_n_flags = LE_32(iwh_rate_to_plcp(rate) | masks);
+	}
+
+	IWH_DBG((IWH_DEBUG_TX, "iwh_send(): "
+	    "tx flag = %x",
 	    tx->tx_flags));
 
-	tx->rts_retry_limit = 60;
-	tx->data_retry_limit = 15;
-
 	tx->stop_time.life_time  = LE_32(0xffffffff);
 
 	tx->len = LE_16(len);
@@ -3066,7 +3353,8 @@
 	m->b_rptr += hdrlen;
 	(void) memcpy(data->dma_data.mem_va, m->b_rptr, len - hdrlen);
 
-	IWH_DBG((IWH_DEBUG_TX, "sending data: qid=%d idx=%d len=%d",
+	IWH_DBG((IWH_DEBUG_TX, "iwh_send(): "
+	    "sending data: qid=%d idx=%d len=%d",
 	    ring->qid, ring->cur, len));
 
 	/*
@@ -3080,7 +3368,8 @@
 	desc->pa[0].val2 =
 	    ((data->dma_data.cookie.dmac_address & 0xffff0000) >> 16) |
 	    ((len - hdrlen) << 20);
-	IWH_DBG((IWH_DEBUG_TX, "phy addr1 = 0x%x phy addr2 = 0x%x "
+	IWH_DBG((IWH_DEBUG_TX, "iwh_send(): "
+	    "phy addr1 = 0x%x phy addr2 = 0x%x "
 	    "len1 = 0x%x, len2 = 0x%x val1 = 0x%x val2 = 0x%x",
 	    data->paddr_cmd, data->dma_data.cookie.dmac_address,
 	    len0, len - hdrlen, desc->pa[0].val1, desc->pa[0].val2));
@@ -3118,11 +3407,17 @@
 	ic->ic_stats.is_tx_bytes += len;
 	ic->ic_stats.is_tx_frags++;
 
+	mutex_enter(&sc->sc_mt_lock);
 	if (0 == sc->sc_tx_timer) {
 		sc->sc_tx_timer = 4;
 	}
+	mutex_exit(&sc->sc_mt_lock);
 
 exit:
+	if (mutex_owned(&sc->sc_suspend_lock)) {
+		mutex_exit(&sc->sc_suspend_lock);
+	}
+
 	return (err);
 }
 
@@ -3132,9 +3427,15 @@
 static void
 iwh_m_ioctl(void* arg, queue_t *wq, mblk_t *mp)
 {
-	iwh_sc_t	*sc  = (iwh_sc_t *)arg;
-	ieee80211com_t	*ic = &sc->sc_ic;
-	int		err;
+	iwh_sc_t	*sc;
+	ieee80211com_t	*ic;
+	int		err = EINVAL;
+
+	if (NULL == arg) {
+		return;
+	}
+	sc = (iwh_sc_t *)arg;
+	ic = &sc->sc_ic;
 
 	err = ieee80211_ioctl(ic, wq, mp);
 	if (ENETRESET == err) {
@@ -3164,8 +3465,13 @@
 iwh_m_getprop(void *arg, const char *pr_name, mac_prop_id_t wldp_pr_num,
     uint_t pr_flags, uint_t wldp_length, void *wldp_buf, uint_t *perm)
 {
-	iwh_sc_t		*sc = (iwh_sc_t *)arg;
-	int			err = 0;
+	iwh_sc_t	*sc;
+	int		err = EINVAL;
+
+	if (NULL == arg) {
+		return (EINVAL);
+	}
+	sc = (iwh_sc_t *)arg;
 
 	err = ieee80211_getprop(&sc->sc_ic, pr_name, wldp_pr_num,
 	    pr_flags, wldp_length, wldp_buf, perm);
@@ -3177,9 +3483,15 @@
 iwh_m_setprop(void *arg, const char *pr_name, mac_prop_id_t wldp_pr_num,
     uint_t wldp_length, const void *wldp_buf)
 {
-	iwh_sc_t		*sc = (iwh_sc_t *)arg;
-	ieee80211com_t		*ic = &sc->sc_ic;
-	int			err;
+	iwh_sc_t		*sc;
+	ieee80211com_t		*ic;
+	int			err = EINVAL;
+
+	if (NULL == arg) {
+		return (EINVAL);
+	}
+	sc = (iwh_sc_t *)arg;
+	ic = &sc->sc_ic;
 
 	err = ieee80211_setprop(ic, pr_name, wldp_pr_num, wldp_length,
 	    wldp_buf);
@@ -3204,10 +3516,16 @@
 static int
 iwh_m_stat(void *arg, uint_t stat, uint64_t *val)
 {
-	iwh_sc_t	*sc  = (iwh_sc_t *)arg;
-	ieee80211com_t	*ic = &sc->sc_ic;
+	iwh_sc_t	*sc;
+	ieee80211com_t	*ic;
 	ieee80211_node_t *in;
 
+	if (NULL == arg) {
+		return (EINVAL);
+	}
+	sc = (iwh_sc_t *)arg;
+	ic = &sc->sc_ic;
+
 	mutex_enter(&sc->sc_glock);
 
 	switch (stat) {
@@ -3285,29 +3603,30 @@
 static int
 iwh_m_start(void *arg)
 {
-	iwh_sc_t *sc = (iwh_sc_t *)arg;
-	ieee80211com_t	*ic = &sc->sc_ic;
-	int err;
+	iwh_sc_t *sc;
+	ieee80211com_t	*ic;
+	int err = IWH_FAIL;
+
+	if (NULL == arg) {
+		return (EINVAL);
+	}
+	sc = (iwh_sc_t *)arg;
+	ic = &sc->sc_ic;
 
 	err = iwh_init(sc);
-
 	if (err != IWH_SUCCESS) {
 		/*
 		 * The hw init err(eg. RF is OFF). Return Success to make
 		 * the 'plumb' succeed. The iwh_thread() tries to re-init
 		 * background.
 		 */
-		mutex_enter(&sc->sc_glock);
 		sc->sc_flags |= IWH_F_HW_ERR_RECOVER;
-		mutex_exit(&sc->sc_glock);
 		return (IWH_SUCCESS);
 	}
 
 	ieee80211_new_state(ic, IEEE80211_S_INIT, -1);
 
-	mutex_enter(&sc->sc_glock);
 	sc->sc_flags |= IWH_F_RUNNING;
-	mutex_exit(&sc->sc_glock);
 
 	return (IWH_SUCCESS);
 }
@@ -3318,8 +3637,14 @@
 static void
 iwh_m_stop(void *arg)
 {
-	iwh_sc_t *sc = (iwh_sc_t *)arg;
-	ieee80211com_t	*ic = &sc->sc_ic;
+	iwh_sc_t *sc;
+	ieee80211com_t	*ic;
+
+	if (NULL == arg) {
+		return;
+	}
+	sc = (iwh_sc_t *)arg;
+	ic = &sc->sc_ic;
 
 	iwh_stop(sc);
 
@@ -3330,16 +3655,11 @@
 
 	ieee80211_new_state(ic, IEEE80211_S_INIT, -1);
 
-	mutex_enter(&sc->sc_mt_lock);
-
 	sc->sc_flags &= ~IWH_F_HW_ERR_RECOVER;
 	sc->sc_flags &= ~IWH_F_RATE_AUTO_CTL;
-	mutex_exit(&sc->sc_mt_lock);
-	mutex_enter(&sc->sc_glock);
+
 	sc->sc_flags &= ~IWH_F_RUNNING;
 	sc->sc_flags &= ~IWH_F_SCANNING;
-
-	mutex_exit(&sc->sc_glock);
 }
 
 /*
@@ -3348,9 +3668,15 @@
 static int
 iwh_m_unicst(void *arg, const uint8_t *macaddr)
 {
-	iwh_sc_t *sc = (iwh_sc_t *)arg;
-	ieee80211com_t	*ic = &sc->sc_ic;
-	int err;
+	iwh_sc_t *sc;
+	ieee80211com_t	*ic;
+	int err = IWH_SUCCESS;
+
+	if (NULL == arg) {
+		return (EINVAL);
+	}
+	sc = (iwh_sc_t *)arg;
+	ic = &sc->sc_ic;
 
 	if (!IEEE80211_ADDR_EQ(ic->ic_macaddr, macaddr)) {
 		IEEE80211_ADDR_COPY(ic->ic_macaddr, macaddr);
@@ -3364,21 +3690,21 @@
 		}
 	}
 
-	return (IWH_SUCCESS);
+	return (err);
 
 fail:
 	return (err);
 }
 
+/* ARGSUSED */
 static int
-/* LINTED: argument unused in function: arg add m */
 iwh_m_multicst(void *arg, boolean_t add, const uint8_t *m)
 {
 	return (IWH_SUCCESS);
 }
 
+/* ARGSUSED */
 static int
-/* LINTED: argument unused in function: arg on */
 iwh_m_promisc(void *arg, boolean_t on)
 {
 	return (IWH_SUCCESS);
@@ -3398,8 +3724,6 @@
 	int times = 0;
 #endif
 
-	mutex_enter(&sc->sc_mt_lock);
-
 	while (sc->sc_mf_thread_switch) {
 		tmp = IWH_READ(sc, CSR_GP_CNTRL);
 		if (tmp & CSR_GP_CNTRL_REG_FLAG_HW_RF_KILL_SW) {
@@ -3411,11 +3735,8 @@
 		/*
 		 * If  in SUSPEND or the RF is OFF, do nothing.
 		 */
-		if ((sc->sc_flags & IWH_F_SUSPEND) ||
-		    (sc->sc_flags & IWH_F_RADIO_OFF)) {
-			mutex_exit(&sc->sc_mt_lock);
+		if (sc->sc_flags & IWH_F_RADIO_OFF) {
 			delay(drv_usectohz(100000));
-			mutex_enter(&sc->sc_mt_lock);
 			continue;
 		}
 
@@ -3425,8 +3746,7 @@
 		if (ic->ic_mach &&
 		    (sc->sc_flags & IWH_F_HW_ERR_RECOVER)) {
 
-			IWH_DBG((IWH_DEBUG_FW,
-			    "iwh_thread(): "
+			IWH_DBG((IWH_DEBUG_FW, "iwh_thread(): "
 			    "try to recover fatal hw error: %d\n", times++));
 
 			iwh_stop(sc);
@@ -3436,10 +3756,8 @@
 				bcopy(&sc->sc_config, &sc->sc_config_save,
 				    sizeof (sc->sc_config));
 			} else {
-				mutex_exit(&sc->sc_mt_lock);
 				ieee80211_new_state(ic, IEEE80211_S_INIT, -1);
 				delay(drv_usectohz(2000000 + n*500000));
-				mutex_enter(&sc->sc_mt_lock);
 			}
 
 			err = iwh_init(sc);
@@ -3460,43 +3778,22 @@
 			    iwh_fast_recover(sc) != IWH_SUCCESS) {
 				sc->sc_flags &= ~IWH_F_HW_ERR_RECOVER;
 
-				mutex_exit(&sc->sc_mt_lock);
 				delay(drv_usectohz(2000000));
-				if (sc->sc_ostate != IEEE80211_S_INIT)
+				if (sc->sc_ostate != IEEE80211_S_INIT) {
 					ieee80211_new_state(ic,
 					    IEEE80211_S_SCAN, 0);
-				mutex_enter(&sc->sc_mt_lock);
+				}
 			}
 		}
 
-		if (ic->ic_mach && (sc->sc_flags & IWH_F_LAZY_RESUME)) {
-			IWH_DBG((IWH_DEBUG_RESUME,
-			    "iwh_thread(): "
-			    "lazy resume\n"));
-			sc->sc_flags &= ~IWH_F_LAZY_RESUME;
-			mutex_exit(&sc->sc_mt_lock);
-			/*
-			 * NB: under WPA mode, this call hangs (door problem?)
-			 * when called in iwh_attach() and iwh_detach() while
-			 * system is in the procedure of CPR. To be safe, let
-			 * the thread do this.
-			 */
-			ieee80211_new_state(&sc->sc_ic, IEEE80211_S_INIT, -1);
-			mutex_enter(&sc->sc_mt_lock);
-		}
-
 		if (ic->ic_mach &&
 		    (sc->sc_flags & IWH_F_SCANNING) && sc->sc_scan_pending) {
-			IWH_DBG((IWH_DEBUG_SCAN,
-			    "iwh_thread(): "
+			IWH_DBG((IWH_DEBUG_SCAN, "iwh_thread(): "
 			    "wait for probe response\n"));
 
 			sc->sc_scan_pending--;
-			mutex_exit(&sc->sc_mt_lock);
 			delay(drv_usectohz(200000));
-			if (sc->sc_flags & IWH_F_SCANNING)
-				ieee80211_next_scan(ic);
-			mutex_enter(&sc->sc_mt_lock);
+			ieee80211_next_scan(ic);
 		}
 
 		/*
@@ -3505,15 +3802,14 @@
 		if (ic->ic_mach &&
 		    (sc->sc_flags & IWH_F_RATE_AUTO_CTL)) {
 			clk = ddi_get_lbolt();
-			if (clk > sc->sc_clk + drv_usectohz(500000)) {
+			if (clk > sc->sc_clk + drv_usectohz(1000000)) {
 				iwh_amrr_timeout(sc);
 			}
 		}
 
-		mutex_exit(&sc->sc_mt_lock);
 		delay(drv_usectohz(100000));
+
 		mutex_enter(&sc->sc_mt_lock);
-
 		if (sc->sc_tx_timer) {
 			timeout++;
 			if (10 == timeout) {
@@ -3521,16 +3817,17 @@
 				if (0 == sc->sc_tx_timer) {
 					sc->sc_flags |= IWH_F_HW_ERR_RECOVER;
 					sc->sc_ostate = IEEE80211_S_RUN;
-					IWH_DBG((IWH_DEBUG_FW,
-					    "iwh_thread(): try to recover from"
-					    " 'send fail\n"));
+					IWH_DBG((IWH_DEBUG_FW, "iwh_thread(): "
+					    "try to recover from "
+					    "send fail\n"));
 				}
 				timeout = 0;
 			}
 		}
-
-	}
-
+		mutex_exit(&sc->sc_mt_lock);
+	}
+
+	mutex_enter(&sc->sc_mt_lock);
 	sc->sc_mf_thread = NULL;
 	cv_signal(&sc->sc_mt_cv);
 	mutex_exit(&sc->sc_mt_lock);
@@ -3550,7 +3847,8 @@
 	ASSERT(size <= sizeof (cmd->data));
 	ASSERT(mutex_owned(&sc->sc_glock));
 
-	IWH_DBG((IWH_DEBUG_CMD, "iwh_cmd() code[%d]", code));
+	IWH_DBG((IWH_DEBUG_CMD, "iwh_cmd() "
+	    "code[%d]", code));
 	desc = ring->data[ring->cur].desc;
 	cmd = ring->data[ring->cur].cmd;
 
@@ -3566,6 +3864,10 @@
 	    (uint32_t)(ring->data[ring->cur].paddr_cmd & 0xffffffff);
 	desc->pa[0].val1 = ((4 + size) << 4) & 0xfff0;
 
+	if (async) {
+		sc->sc_cmd_accum++;
+	}
+
 	/*
 	 * kick cmd ring XXX
 	 */
@@ -3582,18 +3884,20 @@
 		return (IWH_SUCCESS);
 	} else {
 		clock_t clk;
-		sc->sc_flags &= ~IWH_F_CMD_DONE;
+
 		clk = ddi_get_lbolt() + drv_usectohz(2000000);
-		while (!(sc->sc_flags & IWH_F_CMD_DONE)) {
+		while (sc->sc_cmd_flag != SC_CMD_FLG_DONE) {
 			if (cv_timedwait(&sc->sc_cmd_cv,
 			    &sc->sc_glock, clk) < 0) {
 				break;
 			}
 		}
 
-		if (sc->sc_flags & IWH_F_CMD_DONE) {
+		if (SC_CMD_FLG_DONE == sc->sc_cmd_flag) {
+			sc->sc_cmd_flag = SC_CMD_FLG_NONE;
 			return (IWH_SUCCESS);
 		} else {
+			sc->sc_cmd_flag = SC_CMD_FLG_NONE;
 			return (IWH_FAIL);
 		}
 	}
@@ -3623,11 +3927,7 @@
 {
 	ieee80211com_t *ic = &sc->sc_ic;
 	ieee80211_node_t *in = ic->ic_bss;
-	iwh_add_sta_t node;
-	iwh_link_quality_cmd_t link_quality;
-	struct ieee80211_rateset rs;
-	uint16_t masks = 0, rate;
-	int i, err;
+	int err = IWH_FAIL;
 
 	/*
 	 * update adapter's configuration according
@@ -3635,16 +3935,24 @@
 	 */
 	IEEE80211_ADDR_COPY(sc->sc_config.bssid, in->in_bssid);
 	sc->sc_config.chan = LE_16(ieee80211_chan2ieee(ic, in->in_chan));
-	if (IEEE80211_MODE_11B == ic->ic_curmode) {
-		sc->sc_config.cck_basic_rates  = 0x03;
-		sc->sc_config.ofdm_basic_rates = 0;
-	} else if ((in->in_chan != IEEE80211_CHAN_ANYC) &&
-	    (IEEE80211_IS_CHAN_5GHZ(in->in_chan))) {
-		sc->sc_config.cck_basic_rates  = 0;
-		sc->sc_config.ofdm_basic_rates = 0x15;
-	} else { /* assume 802.11b/g */
-		sc->sc_config.cck_basic_rates  = 0x0f;
-		sc->sc_config.ofdm_basic_rates = 0xff;
+
+	if (ic->ic_curmode != IEEE80211_MODE_11NG) {
+
+		sc->sc_config.ofdm_ht_triple_stream_basic_rates = 0;
+		sc->sc_config.ofdm_ht_dual_stream_basic_rates = 0;
+		sc->sc_config.ofdm_ht_single_stream_basic_rates = 0;
+
+		if (IEEE80211_MODE_11B == ic->ic_curmode) {
+			sc->sc_config.cck_basic_rates  = 0x03;
+			sc->sc_config.ofdm_basic_rates = 0;
+		} else if ((in->in_chan != IEEE80211_CHAN_ANYC) &&
+		    (IEEE80211_IS_CHAN_5GHZ(in->in_chan))) {
+			sc->sc_config.cck_basic_rates  = 0;
+			sc->sc_config.ofdm_basic_rates = 0x15;
+		} else { /* assume 802.11b/g */
+			sc->sc_config.cck_basic_rates  = 0x0f;
+			sc->sc_config.ofdm_basic_rates = 0xff;
+		}
 	}
 
 	sc->sc_config.flags &= ~LE_32(RXON_FLG_SHORT_PREAMBLE_MSK |
@@ -3662,7 +3970,8 @@
 		sc->sc_config.flags &= LE_32(~RXON_FLG_SHORT_PREAMBLE_MSK);
 	}
 
-	IWH_DBG((IWH_DEBUG_80211, "config chan %d flags %x "
+	IWH_DBG((IWH_DEBUG_80211, "iwh_hw_set_before_auth(): "
+	    "config chan %d flags %x "
 	    "filter_flags %x  cck %x ofdm %x"
 	    " bssid:%02x:%02x:%02x:%02x:%02x:%2x\n",
 	    LE_16(sc->sc_config.chan), LE_32(sc->sc_config.flags),
@@ -3682,61 +3991,26 @@
 
 	err = iwh_tx_power_table(sc, 1);
 	if (err != IWH_SUCCESS) {
-		cmn_err(CE_WARN, "iwh_config(): "
-		    "failed to set tx power table.\n");
 		return (err);
 	}
 
 	/*
 	 * add default AP node
 	 */
-	(void) memset(&node, 0, sizeof (node));
-	IEEE80211_ADDR_COPY(node.sta.addr, in->in_bssid);
-	node.mode = 0;
-	node.sta.sta_id = IWH_AP_ID;
-	node.station_flags = 0;
-	err = iwh_cmd(sc, REPLY_ADD_STA, &node, sizeof (node), 1);
+	err = iwh_add_ap_sta(sc);
 	if (err != IWH_SUCCESS) {
-		cmn_err(CE_WARN, "iwh_hw_set_before_auth(): "
-		    "failed to add BSS node\n");
 		return (err);
 	}
 
 	/*
-	 * TX_LINK_QUALITY cmd
+	 * set up retry rate table for AP node
 	 */
-	(void) memset(&link_quality, 0, sizeof (link_quality));
-	rs = ic->ic_sup_rates[ieee80211_chan2mode(ic, ic->ic_curchan)];
-	for (i = 0; i < LINK_QUAL_MAX_RETRY_NUM; i++) {
-		if (i < rs.ir_nrates) {
-			rate = rs.ir_rates[rs.ir_nrates - i];
-		} else {
-			rate = 2;
-		}
-
-		if (2 == rate || 4 == rate || 11 == rate || 22 == rate) {
-			masks |= RATE_MCS_CCK_MSK;
-		}
-		masks |= RATE_MCS_ANT_B_MSK;
-		masks &= ~RATE_MCS_ANT_A_MSK;
-		link_quality.rate_n_flags[i] =
-		    LE_32(iwh_rate_to_plcp(rate) | masks);
-	}
-
-	link_quality.general_params.single_stream_ant_msk = 2;
-	link_quality.general_params.dual_stream_ant_msk = 3;
-	link_quality.agg_params.agg_dis_start_th = 3;
-	link_quality.agg_params.agg_time_limit = LE_16(4000);
-	link_quality.sta_id = IWH_AP_ID;
-	err = iwh_cmd(sc, REPLY_TX_LINK_QUALITY_CMD, &link_quality,
-	    sizeof (link_quality), 1);
+	err = iwh_ap_lq(sc);
 	if (err != IWH_SUCCESS) {
-		cmn_err(CE_WARN, "iwh_hw_set_before_auth(): "
-		    "failed to config link quality table\n");
 		return (err);
 	}
 
-	return (IWH_SUCCESS);
+	return (err);
 }
 
 /*
@@ -3796,7 +4070,8 @@
 	if (ic->ic_des_esslen) {
 		bcopy(ic->ic_des_essid, essid, ic->ic_des_esslen);
 		essid[ic->ic_des_esslen] = '\0';
-		IWH_DBG((IWH_DEBUG_SCAN, "directed scan %s\n", essid));
+		IWH_DBG((IWH_DEBUG_SCAN, "iwh_scan(): "
+		    "directed scan %s\n", essid));
 
 		bcopy(ic->ic_des_essid, hdr->direct_scan[0].ssid,
 		    ic->ic_des_esslen);
@@ -3826,7 +4101,8 @@
 	if (in->in_esslen) {
 		bcopy(in->in_essid, essid, in->in_esslen);
 		essid[in->in_esslen] = '\0';
-		IWH_DBG((IWH_DEBUG_SCAN, "probe with ESSID %s\n",
+		IWH_DBG((IWH_DEBUG_SCAN, "iwh_scan(): "
+		    "probe with ESSID %s\n",
 		    essid));
 	}
 	*frm++ = IEEE80211_ELEMID_SSID;
@@ -3936,7 +4212,7 @@
 	iwh_rem_sta_t	rm_sta;
 	const uint8_t bcast[6] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};
 	iwh_link_quality_cmd_t link_quality;
-	int i, err;
+	int i, err = IWH_FAIL;
 	uint16_t masks = 0;
 
 	/*
@@ -3975,12 +4251,14 @@
 	IEEE80211_ADDR_COPY(sc->sc_config.wlap_bssid, ic->ic_macaddr);
 	sc->sc_config.chan = LE_16(ieee80211_chan2ieee(ic, ic->ic_curchan));
 	sc->sc_config.flags = LE_32(RXON_FLG_BAND_24G_MSK);
+	sc->sc_config.flags &= LE_32(~(RXON_FLG_CHANNEL_MODE_MIXED_MSK |
+	    RXON_FLG_CHANNEL_MODE_PURE_40_MSK));
 
 	switch (ic->ic_opmode) {
 	case IEEE80211_M_STA:
 		sc->sc_config.dev_type = RXON_DEV_TYPE_ESS;
-		sc->sc_config.filter_flags |=
-		    LE_32(RXON_FILTER_DIS_DECRYPT_MSK |
+		sc->sc_config.filter_flags |= LE_32(RXON_FILTER_ACCEPT_GRP_MSK |
+		    RXON_FILTER_DIS_DECRYPT_MSK |
 		    RXON_FILTER_DIS_GRP_DECRYPT_MSK);
 		break;
 
@@ -4005,16 +4283,43 @@
 		break;
 	}
 
+	/*
+	 * Support all CCK rates.
+	 */
 	sc->sc_config.cck_basic_rates  = 0x0f;
+
+	/*
+	 * Support all OFDM rates.
+	 */
 	sc->sc_config.ofdm_basic_rates = 0xff;
 
 	/*
-	 * set antenna
+	 * Determine HT supported rates.
 	 */
-	sc->sc_config.rx_chain = LE_16(RXON_RX_CHAIN_DRIVER_FORCE_MSK |
-	    (0x7 << RXON_RX_CHAIN_VALID_POS) |
-	    (0x2 << RXON_RX_CHAIN_FORCE_SEL_POS) |
-	    (0x2 << RXON_RX_CHAIN_FORCE_MIMO_SEL_POS));
+	switch (sc->sc_ht_conf.rx_stream_count) {
+	case 3:
+		sc->sc_config.ofdm_ht_triple_stream_basic_rates = 0xff;
+		sc->sc_config.ofdm_ht_dual_stream_basic_rates = 0xff;
+		sc->sc_config.ofdm_ht_single_stream_basic_rates = 0xff;
+		break;
+	case 2:
+		sc->sc_config.ofdm_ht_dual_stream_basic_rates = 0xff;
+		sc->sc_config.ofdm_ht_single_stream_basic_rates = 0xff;
+		break;
+	case 1:
+		sc->sc_config.ofdm_ht_single_stream_basic_rates = 0xff;
+		break;
+	default:
+		cmn_err(CE_WARN, "iwh_config(): "
+		    "RX stream count %d is not in suitable range\n",
+		    sc->sc_ht_conf.rx_stream_count);
+		return (IWH_FAIL);
+	}
+
+	/*
+	 * set RX chains/antennas.
+	 */
+	iwh_config_rxon_chain(sc);
 
 	err = iwh_cmd(sc, REPLY_RXON, &sc->sc_config,
 	    sizeof (iwh_rxon_cmd_t), 0);
@@ -4039,12 +4344,10 @@
 	}
 
 	/*
-	 * configure TX pwoer table
+	 * configure TX power table
 	 */
 	err = iwh_tx_power_table(sc, 0);
 	if (err != IWH_SUCCESS) {
-		cmn_err(CE_WARN, "iwh_config(): "
-		    "failed to set tx power table.\n");
 		return (err);
 	}
 
@@ -4089,7 +4392,7 @@
 		return (err);
 	}
 
-	return (IWH_SUCCESS);
+	return (err);
 }
 
 /*
@@ -4106,8 +4409,9 @@
 	iwh_sc_t *sc;
 
 	sc = ddi_get_soft_state(iwh_soft_state_p, ddi_get_instance(dip));
-	if (sc == NULL)
+	if (sc == NULL) {
 		return (DDI_FAILURE);
+	}
 
 #ifdef DEBUG
 	/* by pass any messages, if it's quiesce */
@@ -4153,7 +4457,7 @@
 
 #ifdef	DEBUG
 	if (2000 == n) {
-		IWH_DBG((IWH_DEBUG_HW,
+		IWH_DBG((IWH_DEBUG_HW, "iwh_stop_master(): "
 		    "timeout waiting for master stop\n"));
 	}
 #endif
@@ -4334,13 +4638,15 @@
 	eep_gp = IWH_READ(sc, CSR_EEPROM_GP);
 	if ((eep_gp & CSR_EEPROM_GP_VALID_MSK) ==
 	    CSR_EEPROM_GP_BAD_SIGNATURE) {
-		IWH_DBG((IWH_DEBUG_EEPROM, "not find eeprom\n"));
+		IWH_DBG((IWH_DEBUG_EEPROM, "iwh_eep_load(): "
+		    "not find eeprom\n"));
 		return (IWH_FAIL);
 	}
 
 	rr = iwh_eep_sem_down(sc);
 	if (rr != 0) {
-		IWH_DBG((IWH_DEBUG_EEPROM, "driver failed to own EEPROM\n"));
+		IWH_DBG((IWH_DEBUG_EEPROM, "iwh_eep_load(): "
+		    "driver failed to own EEPROM\n"));
 		return (IWH_FAIL);
 	}
 
@@ -4358,7 +4664,7 @@
 		}
 
 		if (!(rv & 1)) {
-			IWH_DBG((IWH_DEBUG_EEPROM,
+			IWH_DBG((IWH_DEBUG_EEPROM, "iwh_eep_load(): "
 			    "time out when read eeprome\n"));
 			iwh_eep_sem_up(sc);
 			return (IWH_FAIL);
@@ -4381,7 +4687,8 @@
 
 	IEEE80211_ADDR_COPY(ic->ic_macaddr, &sc->sc_eep_map[EEP_MAC_ADDRESS]);
 
-	IWH_DBG((IWH_DEBUG_EEPROM, "mac:%2x:%2x:%2x:%2x:%2x:%2x\n",
+	IWH_DBG((IWH_DEBUG_EEPROM, "iwh_get_mac_from_eep(): "
+	    "mac:%2x:%2x:%2x:%2x:%2x:%2x\n",
 	    ic->ic_macaddr[0], ic->ic_macaddr[1], ic->ic_macaddr[2],
 	    ic->ic_macaddr[3], ic->ic_macaddr[4], ic->ic_macaddr[5]));
 }
@@ -4392,7 +4699,7 @@
 static int
 iwh_init(iwh_sc_t *sc)
 {
-	int n, err;
+	int err = IWH_FAIL;
 	clock_t clk;
 
 	/*
@@ -4416,36 +4723,24 @@
 	    sc->sc_dma_fw_data.mem_va,
 	    sc->sc_dma_fw_data.alength);
 
-	for (n = 0; n < 2; n++) {
-		/* load firmware init segment into NIC */
-		err = iwh_load_init_firmware(sc);
-		if (err != IWH_SUCCESS) {
-			cmn_err(CE_WARN, "iwh_init(): "
-			    "failed to setup init firmware\n");
-			continue;
-		}
-
-		/*
-		 * now press "execute" start running
-		 */
-		IWH_WRITE(sc, CSR_RESET, 0);
-		break;
-	}
-
-	mutex_exit(&sc->sc_glock);
-
-	if (2 == n) {
+	/* load firmware init segment into NIC */
+	err = iwh_load_init_firmware(sc);
+	if (err != IWH_SUCCESS) {
 		cmn_err(CE_WARN, "iwh_init(): "
-		    "failed to load init firmware\n");
+		    "failed to setup init firmware\n");
+		mutex_exit(&sc->sc_glock);
 		return (IWH_FAIL);
 	}
 
-	mutex_enter(&sc->sc_ucode_lock);
+	/*
+	 * now press "execute" start running
+	 */
+	IWH_WRITE(sc, CSR_RESET, 0);
 
 	clk = ddi_get_lbolt() + drv_usectohz(1000000);
 	while (!(sc->sc_flags & IWH_F_FW_INIT)) {
 		if (cv_timedwait(&sc->sc_ucode_cv,
-		    &sc->sc_ucode_lock, clk) < 0) {
+		    &sc->sc_glock, clk) < 0) {
 			break;
 		}
 	}
@@ -4453,11 +4748,11 @@
 	if (!(sc->sc_flags & IWH_F_FW_INIT)) {
 		cmn_err(CE_WARN, "iwh_init(): "
 		    "failed to process init alive.\n");
-		mutex_exit(&sc->sc_ucode_lock);
+		mutex_exit(&sc->sc_glock);
 		return (IWH_FAIL);
 	}
 
-	mutex_exit(&sc->sc_ucode_lock);
+	mutex_exit(&sc->sc_glock);
 
 	/*
 	 * stop chipset for initializing chipset again
@@ -4473,38 +4768,26 @@
 		return (IWH_FAIL);
 	}
 
-	for (n = 0; n < 2; n++) {
-		/*
-		 * load firmware run segment into NIC
-		 */
-		err = iwh_load_run_firmware(sc);
-		if (err != IWH_SUCCESS) {
-			cmn_err(CE_WARN, "iwh_init(): "
-			    "failed to setup run firmware\n");
-			continue;
-		}
-
-		/*
-		 * now press "execute" start running
-		 */
-		IWH_WRITE(sc, CSR_RESET, 0);
-		break;
-	}
-
-	mutex_exit(&sc->sc_glock);
-
-	if (2 == n) {
+	/*
+	 * load firmware run segment into NIC
+	 */
+	err = iwh_load_run_firmware(sc);
+	if (err != IWH_SUCCESS) {
 		cmn_err(CE_WARN, "iwh_init(): "
-		    "failed to load run firmware\n");
+		    "failed to setup run firmware\n");
+		mutex_exit(&sc->sc_glock);
 		return (IWH_FAIL);
 	}
 
-	mutex_enter(&sc->sc_ucode_lock);
+	/*
+	 * now press "execute" start running
+	 */
+	IWH_WRITE(sc, CSR_RESET, 0);
 
 	clk = ddi_get_lbolt() + drv_usectohz(1000000);
 	while (!(sc->sc_flags & IWH_F_FW_INIT)) {
 		if (cv_timedwait(&sc->sc_ucode_cv,
-		    &sc->sc_ucode_lock, clk) < 0) {
+		    &sc->sc_glock, clk) < 0) {
 			break;
 		}
 	}
@@ -4512,11 +4795,13 @@
 	if (!(sc->sc_flags & IWH_F_FW_INIT)) {
 		cmn_err(CE_WARN, "iwh_init(): "
 		    "failed to process runtime alive.\n");
-		mutex_exit(&sc->sc_ucode_lock);
+		mutex_exit(&sc->sc_glock);
 		return (IWH_FAIL);
 	}
 
-	mutex_exit(&sc->sc_ucode_lock);
+	mutex_exit(&sc->sc_glock);
+
+	DELAY(1000);
 
 	mutex_enter(&sc->sc_glock);
 	sc->sc_flags &= ~IWH_F_FW_INIT;
@@ -4550,8 +4835,9 @@
 	int i;
 
 	/* by pass if it's quiesced */
-	if (!(sc->sc_flags & IWH_F_QUIESCED))
+	if (!(sc->sc_flags & IWH_F_QUIESCED)) {
 		mutex_enter(&sc->sc_glock);
+	}
 
 	IWH_WRITE(sc, CSR_RESET, CSR_RESET_REG_FLAG_NEVO_RESET);
 	/*
@@ -4581,13 +4867,17 @@
 
 	iwh_stop_master(sc);
 
+	mutex_enter(&sc->sc_mt_lock);
 	sc->sc_tx_timer = 0;
+	mutex_exit(&sc->sc_mt_lock);
+
 	tmp = IWH_READ(sc, CSR_RESET);
 	IWH_WRITE(sc, CSR_RESET, tmp | CSR_RESET_REG_FLAG_SW_RESET);
 
 	/* by pass if it's quiesced */
-	if (!(sc->sc_flags & IWH_F_QUIESCED))
+	if (!(sc->sc_flags & IWH_F_QUIESCED)) {
 		mutex_exit(&sc->sc_glock);
+	}
 }
 
 /*
@@ -4602,7 +4892,9 @@
 #define	is_failure(amrr)	\
 	((amrr)->retrycnt > (amrr)->txcnt / 3)
 #define	is_enough(amrr)		\
-	((amrr)->txcnt > 100)
+	((amrr)->txcnt > 200)
+#define	not_very_few(amrr)	\
+	((amrr)->txcnt > 40)
 #define	is_min_rate(in)		\
 	(0 == (in)->in_txrate)
 #define	is_max_rate(in)		\
@@ -4624,6 +4916,7 @@
 	amrr->recovery = 0;
 	amrr->txcnt = amrr->retrycnt = 0;
 	amrr->success_threshold = IWH_AMRR_MIN_SUCCESS_THRESHOLD;
+	amrr->ht_mcs_idx = 0;	/* 6Mbps */
 }
 
 static void
@@ -4631,7 +4924,8 @@
 {
 	ieee80211com_t *ic = &sc->sc_ic;
 
-	IWH_DBG((IWH_DEBUG_RATECTL, "iwh_amrr_timeout() enter\n"));
+	IWH_DBG((IWH_DEBUG_RATECTL, "iwh_amrr_timeout(): "
+	    "enter\n"));
 
 	if (IEEE80211_M_STA == ic->ic_opmode) {
 		iwh_amrr_ratectl(NULL, ic->ic_bss);
@@ -4642,8 +4936,120 @@
 	sc->sc_clk = ddi_get_lbolt();
 }
 
+static int
+iwh_is_max_rate(ieee80211_node_t *in)
+{
+	int i;
+	iwh_amrr_t *amrr = (iwh_amrr_t *)in;
+	uint8_t r = (uint8_t)amrr->ht_mcs_idx;
+	ieee80211com_t *ic = in->in_ic;
+	iwh_sc_t *sc = (iwh_sc_t *)ic;
+
+	if (in->in_flags & IEEE80211_NODE_HT) {
+		for (i = in->in_htrates.rs_nrates - 1; i >= 0; i--) {
+			r = in->in_htrates.rs_rates[i] &
+			    IEEE80211_RATE_VAL;
+			if (sc->sc_ht_conf.tx_support_mcs[r/8] &
+			    (1 << (r%8))) {
+				break;
+			}
+		}
+
+		return (r == (uint8_t)amrr->ht_mcs_idx);
+	} else {
+		return (is_max_rate(in));
+	}
+}
+
+static int
+iwh_is_min_rate(ieee80211_node_t *in)
+{
+	int i;
+	uint8_t r = 0;
+	iwh_amrr_t *amrr = (iwh_amrr_t *)in;
+	ieee80211com_t *ic = in->in_ic;
+	iwh_sc_t *sc = (iwh_sc_t *)ic;
+
+	if (in->in_flags & IEEE80211_NODE_HT) {
+		for (i = 0; i < in->in_htrates.rs_nrates; i++) {
+			r = in->in_htrates.rs_rates[i] &
+			    IEEE80211_RATE_VAL;
+			if (sc->sc_ht_conf.tx_support_mcs[r/8] &
+			    (1 << (r%8))) {
+				break;
+			}
+		}
+
+		return (r == (uint8_t)amrr->ht_mcs_idx);
+	} else {
+		return (is_min_rate(in));
+	}
+}
+
 static void
-/* LINTED: argument unused in function: arg */
+iwh_increase_rate(ieee80211_node_t *in)
+{
+	int i;
+	uint8_t r;
+	iwh_amrr_t *amrr = (iwh_amrr_t *)in;
+	ieee80211com_t *ic = in->in_ic;
+	iwh_sc_t *sc = (iwh_sc_t *)ic;
+
+	if (in->in_flags & IEEE80211_NODE_HT) {
+again:
+		amrr->ht_mcs_idx++;
+
+		for (i = 0; i < in->in_htrates.rs_nrates; i++) {
+			r = in->in_htrates.rs_rates[i] &
+			    IEEE80211_RATE_VAL;
+			if ((r == (uint8_t)amrr->ht_mcs_idx) &&
+			    (sc->sc_ht_conf.tx_support_mcs[r/8] &
+			    (1 << (r%8)))) {
+				break;
+			}
+		}
+
+		if (i >= in->in_htrates.rs_nrates) {
+			goto again;
+		}
+	} else {
+		increase_rate(in);
+	}
+}
+
+static void
+iwh_decrease_rate(ieee80211_node_t *in)
+{
+	int i;
+	uint8_t r;
+	iwh_amrr_t *amrr = (iwh_amrr_t *)in;
+	ieee80211com_t *ic = in->in_ic;
+	iwh_sc_t *sc = (iwh_sc_t *)ic;
+
+	if (in->in_flags & IEEE80211_NODE_HT) {
+again:
+		amrr->ht_mcs_idx--;
+
+		for (i = 0; i < in->in_htrates.rs_nrates; i++) {
+			r = in->in_htrates.rs_rates[i] &
+			    IEEE80211_RATE_VAL;
+			if ((r == (uint8_t)amrr->ht_mcs_idx) &&
+			    (sc->sc_ht_conf.tx_support_mcs[r/8] &
+			    (1 << (r%8)))) {
+				break;
+			}
+		}
+
+		if (i >= in->in_htrates.rs_nrates) {
+			goto again;
+		}
+	} else {
+		decrease_rate(in);
+	}
+}
+
+/* ARGSUSED */
+static void
 iwh_amrr_ratectl(void *arg, ieee80211_node_t *in)
 {
 	iwh_amrr_t *amrr = (iwh_amrr_t *)in;
@@ -4652,20 +5058,22 @@
 	if (is_success(amrr) && is_enough(amrr)) {
 		amrr->success++;
 		if (amrr->success >= amrr->success_threshold &&
-		    !is_max_rate(in)) {
+		    !iwh_is_max_rate(in)) {
 			amrr->recovery = 1;
 			amrr->success = 0;
-			increase_rate(in);
-			IWH_DBG((IWH_DEBUG_RATECTL,
-			    "AMRR increasing rate %d (txcnt=%d retrycnt=%d)\n",
-			    in->in_txrate, amrr->txcnt, amrr->retrycnt));
+			iwh_increase_rate(in);
+			IWH_DBG((IWH_DEBUG_RATECTL, "iwh_amrr_ratectl(): "
+			    "AMRR increasing rate %d "
+			    "(txcnt=%d retrycnt=%d), mcs_idx=%d\n",
+			    in->in_txrate, amrr->txcnt,
+			    amrr->retrycnt, amrr->ht_mcs_idx));
 			need_change = 1;
 		} else {
 			amrr->recovery = 0;
 		}
-	} else if (is_failure(amrr)) {
+	} else if (not_very_few(amrr) && is_failure(amrr)) {
 		amrr->success = 0;
-		if (!is_min_rate(in)) {
+		if (!iwh_is_min_rate(in)) {
 			if (amrr->recovery) {
 				amrr->success_threshold++;
 				if (amrr->success_threshold >
@@ -4677,10 +5085,12 @@
 				amrr->success_threshold =
 				    IWH_AMRR_MIN_SUCCESS_THRESHOLD;
 			}
-			decrease_rate(in);
-			IWH_DBG((IWH_DEBUG_RATECTL,
-			    "AMRR decreasing rate %d (txcnt=%d retrycnt=%d)\n",
-			    in->in_txrate, amrr->txcnt, amrr->retrycnt));
+			iwh_decrease_rate(in);
+			IWH_DBG((IWH_DEBUG_RATECTL, "iwh_amrr_ratectl(): "
+			    "AMRR decreasing rate %d "
+			    "(txcnt=%d retrycnt=%d), mcs_idx=%d\n",
+			    in->in_txrate, amrr->txcnt,
+			    amrr->retrycnt, amrr->ht_mcs_idx));
 			need_change = 1;
 		}
 		amrr->recovery = 0;	/* paper is incorrect */
@@ -4788,7 +5198,7 @@
 	uint32_t	i;
 	iwh_wimax_coex_cmd_t	w_cmd;
 	iwh_calibration_crystal_cmd_t	c_cmd;
-	uint32_t	rv;
+	uint32_t	rv = IWH_FAIL;
 
 	/*
 	 * initialize SCD related registers to make TX work.
@@ -4980,7 +5390,7 @@
 iwh_tx_power_table(iwh_sc_t *sc, int async)
 {
 	iwh_tx_power_table_cmd_t txpower;
-	int i, err;
+	int i, err = IWH_FAIL;
 
 	(void) memset(&txpower, 0, sizeof (txpower));
 
@@ -5015,7 +5425,7 @@
 		return (err);
 	}
 
-	return (IWH_SUCCESS);
+	return (err);
 }
 
 static void
@@ -5042,7 +5452,7 @@
 }
 
 /*
- * a section of intialization
+ * common section of intialization
  */
 static int
 iwh_init_common(iwh_sc_t *sc)
@@ -5076,7 +5486,7 @@
 	IWH_WRITE(sc, FH_MEM_RCSR_CHNL0_CONFIG_REG,
 	    FH_RCSR_RX_CONFIG_CHNL_EN_ENABLE_VAL |
 	    FH_RCSR_CHNL0_RX_CONFIG_IRQ_DEST_INT_HOST_VAL |
-	    IWH_FH_RCSR_RX_CONFIG_REG_VAL_RB_SIZE_4K |
+	    IWH_FH_RCSR_RX_CONFIG_REG_VAL_RB_SIZE_8K |
 	    (RX_QUEUE_SIZE_LOG <<
 	    FH_RCSR_RX_CONFIG_RBDCB_SIZE_BITSHIFT));
 	iwh_mac_access_exit(sc);
@@ -5132,7 +5542,7 @@
 iwh_fast_recover(iwh_sc_t *sc)
 {
 	ieee80211com_t *ic = &sc->sc_ic;
-	int err;
+	int err = IWH_FAIL;
 
 	mutex_enter(&sc->sc_glock);
 
@@ -5143,7 +5553,7 @@
 	sc->sc_config.assoc_id = 0;
 	sc->sc_config.filter_flags &= ~LE_32(RXON_FILTER_ASSOC_MSK);
 
-	if ((err = iwh_hw_set_before_auth(sc)) != 0) {
+	if ((err = iwh_hw_set_before_auth(sc)) != IWH_SUCCESS) {
 		cmn_err(CE_WARN, "iwh_fast_recover(): "
 		    "could not setup authentication\n");
 		mutex_exit(&sc->sc_glock);
@@ -5169,7 +5579,8 @@
 	sc->sc_flags &= ~IWH_F_HW_ERR_RECOVER;
 
 	/* start queue */
-	IWH_DBG((IWH_DEBUG_FW, "iwh_fast_recover(): resume xmit\n"));
+	IWH_DBG((IWH_DEBUG_FW, "iwh_fast_recover(): "
+	    "resume xmit\n"));
 	mac_tx_update(ic->ic_mach);
 
 	return (IWH_SUCCESS);
@@ -5180,17 +5591,12 @@
 {
 	struct ieee80211com *ic = &sc->sc_ic;
 	ieee80211_node_t *in = ic->ic_bss;
-	int err = IWH_SUCCESS;
+	uint32_t ht_protec = (uint32_t)(-1);
+	int err = IWH_FAIL;
 
 	/*
 	 * update adapter's configuration
 	 */
-	if (sc->sc_assoc_id != in->in_associd) {
-		cmn_err(CE_WARN,
-		    "associate ID mismatch: expected %d, "
-		    "got %d\n",
-		    in->in_associd, sc->sc_assoc_id);
-	}
 	sc->sc_config.assoc_id = in->in_associd & 0x3fff;
 
 	/*
@@ -5211,6 +5617,25 @@
 		    LE_32(RXON_FLG_SHORT_PREAMBLE_MSK);
 	}
 
+	if (in->in_flags & IEEE80211_NODE_HT) {
+		ht_protec = in->in_htopmode;
+		if (ht_protec > 3) {
+			cmn_err(CE_WARN, "iwh_run_state_config(): "
+			    "HT protection mode is not correct.\n");
+			return (IWH_FAIL);
+		} else if (NO_HT_PROT == ht_protec) {
+			ht_protec = sc->sc_ht_conf.ht_protection;
+		}
+
+		sc->sc_config.flags |=
+		    LE_32(ht_protec << RXON_FLG_HT_OPERATING_MODE_POS);
+	}
+
+	/*
+	 * set RX chains/antennas.
+	 */
+	iwh_config_rxon_chain(sc);
+
 	sc->sc_config.filter_flags |=
 	    LE_32(RXON_FILTER_ASSOC_MSK);
 
@@ -5219,7 +5644,8 @@
 		    LE_32(RXON_FILTER_BCON_AWARE_MSK);
 	}
 
-	IWH_DBG((IWH_DEBUG_80211, "config chan %d flags %x"
+	IWH_DBG((IWH_DEBUG_80211, "iwh_run_state_config(): "
+	    "config chan %d flags %x"
 	    " filter_flags %x\n",
 	    sc->sc_config.chan, sc->sc_config.flags,
 	    sc->sc_config.filter_flags));
@@ -5237,10 +5663,716 @@
 	 */
 	err = iwh_tx_power_table(sc, 1);
 	if (err != IWH_SUCCESS) {
-		cmn_err(CE_WARN, "iwh_run_state_config(): "
-		    "failed to set tx power table.\n");
+		return (err);
+	}
+
+	/*
+	 * Not need to update retry rate table for AP node
+	 */
+	err = iwh_qosparam_to_hw(sc, 1);
+	if (err != IWH_SUCCESS) {
 		return (err);
 	}
 
+	return (err);
+}
+
+/*
+ * This function is only for compatibility with Net80211 module.
+ * iwh_qosparam_to_hw() is the actual function updating EDCA
+ * parameters to hardware.
+ */
+/* ARGSUSED */
+static int
+iwh_wme_update(ieee80211com_t *ic)
+{
+	return (0);
+}
+
+static int
+iwh_wme_to_qos_ac(int wme_ac)
+{
+	int qos_ac = QOS_AC_INVALID;
+
+	if (wme_ac < WME_AC_BE || wme_ac > WME_AC_VO) {
+		cmn_err(CE_WARN, "iwh_wme_to_qos_ac(): "
+		    "WME AC index is not in suitable range.\n");
+		return (qos_ac);
+	}
+
+	switch (wme_ac) {
+	case WME_AC_BE:
+		qos_ac = QOS_AC_BK;
+		break;
+	case WME_AC_BK:
+		qos_ac = QOS_AC_BE;
+		break;
+	case WME_AC_VI:
+		qos_ac = QOS_AC_VI;
+		break;
+	case WME_AC_VO:
+		qos_ac = QOS_AC_VO;
+		break;
+	}
+
+	return (qos_ac);
+}
+
+static uint16_t
+iwh_cw_e_to_cw(uint8_t cw_e)
+{
+	uint16_t cw = 1;
+
+	while (cw_e > 0) {
+		cw <<= 1;
+		cw_e--;
+	}
+
+	cw -= 1;
+	return (cw);
+}
+
+static int
+iwh_wmeparam_check(struct wmeParams *wmeparam)
+{
+	int i;
+
+	for (i = 0; i < WME_NUM_AC; i++) {
+
+		if ((wmeparam[i].wmep_logcwmax > QOS_CW_RANGE_MAX) ||
+		    (wmeparam[i].wmep_logcwmin >= wmeparam[i].wmep_logcwmax)) {
+			cmn_err(CE_WARN, "iwh_wmeparam_check(): "
+			    "Contention window is not in suitable range.\n");
+			return (IWH_FAIL);
+		}
+
+		if ((wmeparam[i].wmep_aifsn < QOS_AIFSN_MIN) ||
+		    (wmeparam[i].wmep_aifsn > QOS_AIFSN_MAX)) {
+			cmn_err(CE_WARN, "iwh_wmeparam_check(): "
+			    "Arbitration interframe space number"
+			    "is not in suitable range.\n");
+			return (IWH_FAIL);
+		}
+	}
+
 	return (IWH_SUCCESS);
 }
+
+/*
+ * This function updates EDCA parameters into hardware.
+ * FIFO0-background, FIFO1-best effort, FIFO2-viedo, FIFO3-voice.
+ */
+static int
+iwh_qosparam_to_hw(iwh_sc_t *sc, int async)
+{
+	ieee80211com_t *ic = &sc->sc_ic;
+	ieee80211_node_t *in = ic->ic_bss;
+	struct wmeParams *wmeparam;
+	iwh_qos_param_cmd_t qosparam_cmd;
+	int i, j;
+	int err = IWH_FAIL;
+
+	if ((in->in_flags & IEEE80211_NODE_QOS) &&
+	    (IEEE80211_M_STA == ic->ic_opmode)) {
+		wmeparam = ic->ic_wme.wme_chanParams.cap_wmeParams;
+	} else {
+		return (IWH_SUCCESS);
+	}
+
+	(void) memset(&qosparam_cmd, 0, sizeof (qosparam_cmd));
+
+	err = iwh_wmeparam_check(wmeparam);
+	if (err != IWH_SUCCESS) {
+		return (err);
+	}
+
+	if (in->in_flags & IEEE80211_NODE_QOS) {
+		qosparam_cmd.flags |= QOS_PARAM_FLG_UPDATE_EDCA;
+	}
+
+	if (in->in_flags & (IEEE80211_NODE_QOS | IEEE80211_NODE_HT)) {
+		qosparam_cmd.flags |= QOS_PARAM_FLG_TGN;
+	}
+
+	for (i = 0; i < WME_NUM_AC; i++) {
+
+		j = iwh_wme_to_qos_ac(i);
+		if (j < QOS_AC_BK || j > QOS_AC_VO) {
+			return (IWH_FAIL);
+		}
+
+		qosparam_cmd.ac[j].cw_min =
+		    iwh_cw_e_to_cw(wmeparam[i].wmep_logcwmin);
+		qosparam_cmd.ac[j].cw_max =
+		    iwh_cw_e_to_cw(wmeparam[i].wmep_logcwmax);
+		qosparam_cmd.ac[j].aifsn =
+		    wmeparam[i].wmep_aifsn;
+		qosparam_cmd.ac[j].txop =
+		    (uint16_t)(wmeparam[i].wmep_txopLimit * 32);
+	}
+
+	err = iwh_cmd(sc, REPLY_QOS_PARAM, &qosparam_cmd,
+	    sizeof (qosparam_cmd), async);
+	if (err != IWH_SUCCESS) {
+		cmn_err(CE_WARN, "iwh_qosparam_to_hw(): "
+		    "failed to update QoS parameters into hardware.\n");
+		return (err);
+	}
+
+#ifdef	DEBUG
+	IWH_DBG((IWH_DEBUG_QOS, "iwh_qosparam_to_hw(): "
+	    "EDCA parameters are as follows:\n"));
+
+	IWH_DBG((IWH_DEBUG_QOS, "BK parameters are: "
+	    "cw_min = %d, cw_max = %d, aifsn = %d, txop = %d\n",
+	    qosparam_cmd.ac[0].cw_min, qosparam_cmd.ac[0].cw_max,
+	    qosparam_cmd.ac[0].aifsn, qosparam_cmd.ac[0].txop));
+
+	IWH_DBG((IWH_DEBUG_QOS, "BE parameters are: "
+	    "cw_min = %d, cw_max = %d, aifsn = %d, txop = %d\n",
+	    qosparam_cmd.ac[1].cw_min, qosparam_cmd.ac[1].cw_max,
+	    qosparam_cmd.ac[1].aifsn, qosparam_cmd.ac[1].txop));
+
+	IWH_DBG((IWH_DEBUG_QOS, "VI parameters are: "
+	    "cw_min = %d, cw_max = %d, aifsn = %d, txop = %d\n",
+	    qosparam_cmd.ac[2].cw_min, qosparam_cmd.ac[2].cw_max,
+	    qosparam_cmd.ac[2].aifsn, qosparam_cmd.ac[2].txop));
+
+	IWH_DBG((IWH_DEBUG_QOS, "VO parameters are: "
+	    "cw_min = %d, cw_max = %d, aifsn = %d, txop = %d\n",
+	    qosparam_cmd.ac[3].cw_min, qosparam_cmd.ac[3].cw_max,
+	    qosparam_cmd.ac[3].aifsn, qosparam_cmd.ac[3].txop));
+#endif
+	return (err);
+}
+
+static inline int
+iwh_wme_tid_qos_ac(int tid)
+{
+	switch (tid) {
+	case 1:
+	case 2:
+		return (QOS_AC_BK);
+	case 0:
+	case 3:
+		return (QOS_AC_BE);
+	case 4:
+	case 5:
+		return (QOS_AC_VI);
+	case 6:
+	case 7:
+		return (QOS_AC_VO);
+	}
+
+	return (QOS_AC_BE);
+}
+
+static inline int
+iwh_qos_ac_to_txq(int qos_ac)
+{
+	switch (qos_ac) {
+	case QOS_AC_BK:
+		return (QOS_AC_BK_TO_TXQ);
+	case QOS_AC_BE:
+		return (QOS_AC_BE_TO_TXQ);
+	case QOS_AC_VI:
+		return (QOS_AC_VI_TO_TXQ);
+	case QOS_AC_VO:
+		return (QOS_AC_VO_TO_TXQ);
+	}
+
+	return (QOS_AC_BE_TO_TXQ);
+}
+
+static int
+iwh_wme_tid_to_txq(int tid)
+{
+	int queue_n = TXQ_FOR_AC_INVALID;
+	int qos_ac;
+
+	if (tid < WME_TID_MIN ||
+	    tid > WME_TID_MAX) {
+		cmn_err(CE_WARN, "wme_tid_to_txq(): "
+		    "TID is not in suitable range.\n");
+		return (queue_n);
+	}
+
+	qos_ac = iwh_wme_tid_qos_ac(tid);
+	queue_n = iwh_qos_ac_to_txq(qos_ac);
+
+	return (queue_n);
+}
+
+/*
+ * This function is used for intializing HT relevant configurations.
+ */
+static void
+iwh_init_ht_conf(iwh_sc_t *sc)
+{
+	(void) memset(&sc->sc_ht_conf, 0, sizeof (iwh_ht_conf_t));
+
+	if ((0x4235 == sc->sc_dev_id) ||
+	    (0x4236 == sc->sc_dev_id) ||
+	    (0x423a == sc->sc_dev_id)) {
+		sc->sc_ht_conf.ht_support = 1;
+
+		sc->sc_ht_conf.valid_chains = 3;
+		sc->sc_ht_conf.tx_stream_count = 2;
+		sc->sc_ht_conf.rx_stream_count = 2;
+
+		sc->sc_ht_conf.tx_support_mcs[0] = 0xff;
+		sc->sc_ht_conf.tx_support_mcs[1] = 0xff;
+		sc->sc_ht_conf.rx_support_mcs[0] = 0xff;
+		sc->sc_ht_conf.rx_support_mcs[1] = 0xff;
+	} else {
+		sc->sc_ht_conf.ht_support = 1;
+
+		sc->sc_ht_conf.valid_chains = 2;
+		sc->sc_ht_conf.tx_stream_count = 1;
+		sc->sc_ht_conf.rx_stream_count = 2;
+
+		sc->sc_ht_conf.tx_support_mcs[0] = 0xff;
+		sc->sc_ht_conf.rx_support_mcs[0] = 0xff;
+		sc->sc_ht_conf.rx_support_mcs[1] = 0xff;
+	}
+
+	if (sc->sc_ht_conf.ht_support) {
+		sc->sc_ht_conf.cap |= HT_CAP_GRN_FLD;
+		sc->sc_ht_conf.cap |= HT_CAP_SGI_20;
+		sc->sc_ht_conf.cap |= HT_CAP_MAX_AMSDU;
+		/* should disable MIMO */
+		sc->sc_ht_conf.cap |= HT_CAP_MIMO_PS;
+
+		sc->sc_ht_conf.ampdu_p.factor = HT_RX_AMPDU_FACTOR;
+		sc->sc_ht_conf.ampdu_p.density = HT_MPDU_DENSITY;
+
+		sc->sc_ht_conf.ht_protection = HT_PROT_CHAN_NON_HT;
+	}
+}
+
+/*
+ * This function overwrites default ieee80211_rateset_11n struc.
+ */
+static void
+iwh_overwrite_11n_rateset(iwh_sc_t *sc)
+{
+	uint8_t *ht_rs = sc->sc_ht_conf.rx_support_mcs;
+	int mcs_idx, mcs_count = 0;
+	int i, j;
+
+	for (i = 0; i < HT_RATESET_NUM; i++) {
+		for (j = 0; j < 8; j++) {
+			if (ht_rs[i] & (1 << j)) {
+				mcs_idx = i * 8 + j;
+				if (mcs_idx >= IEEE80211_HTRATE_MAXSIZE) {
+					break;
+				}
+
+				ieee80211_rateset_11n.rs_rates[mcs_idx] =
+				    (uint8_t)mcs_idx;
+				mcs_count++;
+			}
+		}
+	}
+
+	ieee80211_rateset_11n.rs_nrates = (uint8_t)mcs_count;
+
+#ifdef	DEBUG
+	IWH_DBG((IWH_DEBUG_HTRATE, "iwh_overwrite_11n_rateset(): "
+	    "HT rates supported by this station is as follows:\n"));
+
+	for (i = 0; i < ieee80211_rateset_11n.rs_nrates; i++) {
+		IWH_DBG((IWH_DEBUG_HTRATE, "Rate %d is %d\n",
+		    i, ieee80211_rateset_11n.rs_rates[i]));
+	}
+#endif
+}
+
+/*
+ * This function overwrites default configurations of
+ * ieee80211com structure in Net80211 module.
+ */
+static void
+iwh_overwrite_ic_default(iwh_sc_t *sc)
+{
+	ieee80211com_t *ic = &sc->sc_ic;
+
+	sc->sc_newstate = ic->ic_newstate;
+	ic->ic_newstate = iwh_newstate;
+	ic->ic_node_alloc = iwh_node_alloc;
+	ic->ic_node_free = iwh_node_free;
+
+	if (sc->sc_ht_conf.ht_support) {
+		sc->sc_recv_action = ic->ic_recv_action;
+		ic->ic_recv_action = iwh_recv_action;
+		sc->sc_send_action = ic->ic_send_action;
+		ic->ic_send_action = iwh_send_action;
+
+		ic->ic_ampdu_rxmax = sc->sc_ht_conf.ampdu_p.factor;
+		ic->ic_ampdu_density = sc->sc_ht_conf.ampdu_p.density;
+		ic->ic_ampdu_limit = ic->ic_ampdu_rxmax;
+	}
+}
+
+/*
+ * This function sets "RX chain selection" feild
+ * in RXON command during plumb driver.
+ */
+static void
+iwh_config_rxon_chain(iwh_sc_t *sc)
+{
+	ieee80211com_t *ic = &sc->sc_ic;
+	ieee80211_node_t *in = ic->ic_bss;
+
+	if (3 == sc->sc_ht_conf.valid_chains) {
+		sc->sc_config.rx_chain = LE_16((RXON_RX_CHAIN_A_MSK |
+		    RXON_RX_CHAIN_B_MSK | RXON_RX_CHAIN_C_MSK) <<
+		    RXON_RX_CHAIN_VALID_POS);
+
+		sc->sc_config.rx_chain |= LE_16((RXON_RX_CHAIN_A_MSK |
+		    RXON_RX_CHAIN_B_MSK | RXON_RX_CHAIN_C_MSK) <<
+		    RXON_RX_CHAIN_FORCE_SEL_POS);
+
+		sc->sc_config.rx_chain |= LE_16((RXON_RX_CHAIN_A_MSK |
+		    RXON_RX_CHAIN_B_MSK | RXON_RX_CHAIN_C_MSK) <<
+		    RXON_RX_CHAIN_FORCE_MIMO_SEL_POS);
+	} else {
+		sc->sc_config.rx_chain = LE_16((RXON_RX_CHAIN_A_MSK |
+		    RXON_RX_CHAIN_B_MSK) << RXON_RX_CHAIN_VALID_POS);
+
+		sc->sc_config.rx_chain |= LE_16((RXON_RX_CHAIN_A_MSK |
+		    RXON_RX_CHAIN_B_MSK) << RXON_RX_CHAIN_FORCE_SEL_POS);
+
+		sc->sc_config.rx_chain |= LE_16((RXON_RX_CHAIN_A_MSK |
+		    RXON_RX_CHAIN_B_MSK) <<
+		    RXON_RX_CHAIN_FORCE_MIMO_SEL_POS);
+	}
+
+	sc->sc_config.rx_chain |= LE_16(RXON_RX_CHAIN_DRIVER_FORCE_MSK);
+
+	if ((in != NULL) &&
+	    (in->in_flags & IEEE80211_NODE_HT) &&
+	    sc->sc_ht_conf.ht_support) {
+		if (3 == sc->sc_ht_conf.valid_chains) {
+			sc->sc_config.rx_chain |= LE_16(3 <<
+			    RXON_RX_CHAIN_CNT_POS);
+			sc->sc_config.rx_chain |= LE_16(3 <<
+			    RXON_RX_CHAIN_MIMO_CNT_POS);
+		} else {
+			sc->sc_config.rx_chain |= LE_16(2 <<
+			    RXON_RX_CHAIN_CNT_POS);
+			sc->sc_config.rx_chain |= LE_16(2 <<
+			    RXON_RX_CHAIN_MIMO_CNT_POS);
+		}
+
+		sc->sc_config.rx_chain |= LE_16(1 <<
+		    RXON_RX_CHAIN_MIMO_FORCE_POS);
+	}
+
+	IWH_DBG((IWH_DEBUG_RXON, "iwh_config_rxon_chain(): "
+	    "rxon->rx_chain = %x\n", sc->sc_config.rx_chain));
+}
+
+/*
+ * This function adds AP station into hardware.
+ */
+static int
+iwh_add_ap_sta(iwh_sc_t *sc)
+{
+	ieee80211com_t *ic = &sc->sc_ic;
+	ieee80211_node_t *in = ic->ic_bss;
+	iwh_add_sta_t node;
+	uint32_t ampdu_factor, ampdu_density;
+	int err = IWH_FAIL;
+
+	/*
+	 * Add AP node into hardware.
+	 */
+	(void) memset(&node, 0, sizeof (node));
+	IEEE80211_ADDR_COPY(node.sta.addr, in->in_bssid);
+	node.mode = STA_MODE_ADD_MSK;
+	node.sta.sta_id = IWH_AP_ID;
+
+	if (sc->sc_ht_conf.ht_support &&
+	    (in->in_htcap_ie != NULL) &&
+	    (in->in_htcap != 0) &&
+	    (in->in_htparam != 0)) {
+
+		if (((in->in_htcap & HT_CAP_MIMO_PS) >> 2)
+		    == HT_CAP_MIMO_PS_DYNAMIC) {
+			node.station_flags |= LE_32(STA_FLG_RTS_MIMO_PROT);
+		}
+
+		ampdu_factor = in->in_htparam & HT_RX_AMPDU_FACTOR_MSK;
+		node.station_flags |=
+		    LE_32(ampdu_factor << STA_FLG_MAX_AMPDU_POS);
+
+		ampdu_density = (in->in_htparam & HT_MPDU_DENSITY_MSK) >>
+		    HT_MPDU_DENSITY_POS;
+		node.station_flags |=
+		    LE_32(ampdu_density << STA_FLG_AMPDU_DENSITY_POS);
+
+		if (in->in_htcap & LE_16(HT_CAP_SUP_WIDTH)) {
+			node.station_flags |=
+			    LE_32(STA_FLG_FAT_EN);
+		}
+	}
+
+	err = iwh_cmd(sc, REPLY_ADD_STA, &node, sizeof (node), 1);
+	if (err != IWH_SUCCESS) {
+		cmn_err(CE_WARN, "iwh_add_ap_lq(): "
+		    "failed to add AP node\n");
+		return (err);
+	}
+
+	return (err);
+}
+
+/*
+ * Each station in the Shirley Peak's internal station table has
+ * its own table of 16 TX rates and modulation modes for retrying
+ * TX when an ACK is not received. This function replaces the entire
+ * table for one station.Station must already be in Shirley Peak's
+ * station talbe.
+ */
+static int
+iwh_ap_lq(iwh_sc_t *sc)
+{
+	ieee80211com_t *ic = &sc->sc_ic;
+	ieee80211_node_t *in = ic->ic_bss;
+	iwh_link_quality_cmd_t link_quality;
+	const struct ieee80211_rateset *rs_sup = NULL;
+	uint32_t masks = 0, rate;
+	int i, err = IWH_FAIL;
+
+	/*
+	 * TX_LINK_QUALITY cmd
+	 */
+	(void) memset(&link_quality, 0, sizeof (link_quality));
+	if (in->in_chan == IEEE80211_CHAN_ANYC)	/* skip null node */
+		return (err);
+	rs_sup = ieee80211_get_suprates(ic, in->in_chan);
+
+	for (i = 0; i < LINK_QUAL_MAX_RETRY_NUM; i++) {
+		if (i < rs_sup->ir_nrates) {
+			rate = rs_sup->ir_rates[rs_sup->ir_nrates - i] &
+			    IEEE80211_RATE_VAL;
+		} else {
+			rate = 2;
+		}
+
+		if (2 == rate || 4 == rate ||
+		    11 == rate || 22 == rate) {
+			masks |= LE_32(RATE_MCS_CCK_MSK);
+		}
+
+		masks |= LE_32(RATE_MCS_ANT_B_MSK);
+
+		link_quality.rate_n_flags[i] =
+		    LE_32(iwh_rate_to_plcp(rate) | masks);
+	}
+
+	link_quality.general_params.single_stream_ant_msk = LINK_QUAL_ANT_B_MSK;
+	link_quality.general_params.dual_stream_ant_msk = LINK_QUAL_ANT_MSK;
+	link_quality.agg_params.agg_dis_start_th = 3;
+	link_quality.agg_params.agg_time_limit = LE_16(4000);
+	link_quality.sta_id = IWH_AP_ID;
+	err = iwh_cmd(sc, REPLY_TX_LINK_QUALITY_CMD, &link_quality,
+	    sizeof (link_quality), 1);
+	if (err != IWH_SUCCESS) {
+		cmn_err(CE_WARN, "iwh_ap_lq(): "
+		    "failed to config link quality table\n");
+		return (err);
+	}
+
+#ifdef	DEBUG
+	IWH_DBG((IWH_DEBUG_HWRATE, "iwh_ap_lq(): "
+	    "Rates in HW are as follows:\n"));
+
+	for (i = 0; i < LINK_QUAL_MAX_RETRY_NUM; i++) {
+		IWH_DBG((IWH_DEBUG_HWRATE,
+		    "Rate %d in HW is %x\n", i, link_quality.rate_n_flags[i]));
+	}
+#endif
+
+	return (err);
+}
+
+/*
+ * When block ACK agreement has been set up between station and AP,
+ * Net80211 module will call this function to inform hardware about
+ * informations of this BA agreement.
+ * When AP wants to delete BA agreement that was originated by it,
+ * Net80211 modele will call this function to clean up relevant
+ * information in hardware.
+ */
+static void
+iwh_recv_action(struct ieee80211_node *in,
+    const uint8_t *frm, const uint8_t *efrm)
+{
+	struct ieee80211com *ic;
+	iwh_sc_t *sc;
+	const struct ieee80211_action *ia;
+	uint16_t baparamset, baseqctl;
+	uint32_t tid, ssn;
+	iwh_add_sta_t node;
+	int err = IWH_FAIL;
+
+	if ((NULL == in) || (NULL == frm)) {
+		return;
+	}
+
+	ic = in->in_ic;
+	if (NULL == ic) {
+		return;
+	}
+
+	sc = (iwh_sc_t *)ic;
+
+	sc->sc_recv_action(in, frm, efrm);
+
+	ia = (const struct ieee80211_action *)frm;
+	if (ia->ia_category != IEEE80211_ACTION_CAT_BA) {
+		return;
+	}
+
+	switch (ia->ia_action) {
+	case IEEE80211_ACTION_BA_ADDBA_REQUEST:
+		baparamset = *(uint16_t *)(frm + 3);
+		baseqctl = *(uint16_t *)(frm + 7);
+
+		tid = MS(baparamset, IEEE80211_BAPS_TID);
+		ssn = MS(baseqctl, IEEE80211_BASEQ_START);
+
+		(void) memset(&node, 0, sizeof (node));
+		IEEE80211_ADDR_COPY(node.sta.addr, in->in_bssid);
+		node.mode = STA_MODE_MODIFY_MSK;
+		node.sta.sta_id = IWH_AP_ID;
+
+		node.station_flags_msk = 0;
+		node.sta.modify_mask = STA_MODIFY_ADDBA_TID_MSK;
+		node.add_immediate_ba_tid = (uint8_t)tid;
+		node.add_immediate_ba_ssn = LE_16(ssn);
+
+		mutex_enter(&sc->sc_glock);
+		err = iwh_cmd(sc, REPLY_ADD_STA, &node, sizeof (node), 1);
+		if (err != IWH_SUCCESS) {
+			cmn_err(CE_WARN, "iwh_recv_action(): "
+			    "failed to setup RX block ACK\n");
+			mutex_exit(&sc->sc_glock);
+			return;
+		}
+		mutex_exit(&sc->sc_glock);
+
+		IWH_DBG((IWH_DEBUG_BA, "iwh_recv_action(): "
+		    "RX block ACK "
+		    "was setup on TID %d and SSN is %d.\n", tid, ssn));
+
+		return;
+
+	case IEEE80211_ACTION_BA_DELBA:
+		baparamset = *(uint16_t *)(frm + 2);
+
+		if ((baparamset & IEEE80211_DELBAPS_INIT) == 0) {
+			return;
+		}
+
+		tid = MS(baparamset, IEEE80211_DELBAPS_TID);
+
+		(void) memset(&node, 0, sizeof (node));
+		IEEE80211_ADDR_COPY(node.sta.addr, in->in_bssid);
+		node.mode = STA_MODE_MODIFY_MSK;
+		node.sta.sta_id = IWH_AP_ID;
+
+		node.station_flags_msk = 0;
+		node.sta.modify_mask = STA_MODIFY_DELBA_TID_MSK;
+		node.add_immediate_ba_tid = (uint8_t)tid;
+
+		mutex_enter(&sc->sc_glock);
+		err = iwh_cmd(sc, REPLY_ADD_STA, &node, sizeof (node), 1);
+		if (err != IWH_SUCCESS) {
+			cmn_err(CE_WARN, "iwh_recv_action(): "
+			    "failed to delete RX block ACK\n");
+			mutex_exit(&sc->sc_glock);
+			return;
+		}
+		mutex_exit(&sc->sc_glock);
+
+		IWH_DBG((IWH_DEBUG_BA, "iwh_recv_action(): "
+		    "RX block ACK "
+		    "was deleted on TID %d.\n", tid));
+
+		return;
+	}
+}
+
+/*
+ * When local station wants to delete BA agreement that was originated by AP,
+ * Net80211 module will call this function to clean up relevant information
+ * in hardware.
+ */
+static int
+iwh_send_action(struct ieee80211_node *in,
+    int category, int action, uint16_t args[4])
+{
+	struct ieee80211com *ic;
+	iwh_sc_t *sc;
+	uint32_t tid;
+	iwh_add_sta_t node;
+	int ret = EIO;
+	int err = IWH_FAIL;
+
+
+	if (NULL == in) {
+		return (ret);
+	}
+
+	ic = in->in_ic;
+	if (NULL == ic) {
+		return (ret);
+	}
+
+	sc = (iwh_sc_t *)ic;
+
+	ret = sc->sc_send_action(in, category, action, args);
+
+	if (category != IEEE80211_ACTION_CAT_BA) {
+		return (ret);
+	}
+
+	switch (action) {
+	case IEEE80211_ACTION_BA_DELBA:
+		if (IEEE80211_DELBAPS_INIT == args[1]) {
+			return (ret);
+		}
+
+		tid = args[0];
+
+		(void) memset(&node, 0, sizeof (node));
+		IEEE80211_ADDR_COPY(node.sta.addr, in->in_bssid);
+		node.mode = STA_MODE_MODIFY_MSK;
+		node.sta.sta_id = IWH_AP_ID;
+
+		node.station_flags_msk = 0;
+		node.sta.modify_mask = STA_MODIFY_DELBA_TID_MSK;
+		node.add_immediate_ba_tid = (uint8_t)tid;
+
+		mutex_enter(&sc->sc_glock);
+		err = iwh_cmd(sc, REPLY_ADD_STA, &node, sizeof (node), 1);
+		if (err != IWH_SUCCESS) {
+			cmn_err(CE_WARN, "iwh_send_action(): "
+			    "failed to delete RX balock ACK\n");
+			mutex_exit(&sc->sc_glock);
+			return (EIO);
+		}
+		mutex_exit(&sc->sc_glock);
+
+		IWH_DBG((IWH_DEBUG_BA, "iwh_send_action(): "
+		    "RX block ACK "
+		    "was deleted on TID %d.\n", tid));
+
+		break;
+	}
+
+	return (ret);
+}
--- a/usr/src/uts/common/io/iwh/iwh_hw.h	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/uts/common/io/iwh/iwh_hw.h	Mon Aug 10 10:43:48 2009 -0400
@@ -1,10 +1,10 @@
 /*
- * Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
+ * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
  * Use is subject to license terms.
  */
 
 /*
- * Copyright (c) 2008, Intel Corporation
+ * Copyright (c) 2009, Intel Corporation
  * All rights reserved.
  */
 
@@ -18,7 +18,7 @@
  *
  * GPL LICENSE SUMMARY
  *
- * Copyright(c) 2005 - 2008 Intel Corporation. All rights reserved.
+ * Copyright(c) 2005 - 2009 Intel Corporation. All rights reserved.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of version 2 of the GNU Geeral Public License as
@@ -43,7 +43,7 @@
  *
  * BSD LICENSE
  *
- * Copyright(c) 2005 - 2008 Intel Corporation. All rights reserved.
+ * Copyright(c) 2005 - 2009 Intel Corporation. All rights reserved.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -621,6 +621,12 @@
 #define	FH_RCSR_RX_CONFIG_RDRBD_ENABLE_VAL	(0x20000000)
 
 #define	IWH_FH_RCSR_RX_CONFIG_REG_VAL_RB_SIZE_4K	(0x00000000)
+#define	IWH_TX_RTS_RETRY_LIMIT		(60)
+#define	IWH_TX_DATA_RETRY_LIMIT		(15)
+
+#define	IWH_FH_RCSR_RX_CONFIG_REG_VAL_RB_SIZE_8K	(0x00010000)
+#define	IWH_FH_RCSR_RX_CONFIG_REG_VAL_RB_SIZE_12K	(0x00020000)
+#define	IWH_FH_RCSR_RX_CONFIG_REG_VAL_RB_SIZE_16K	(0x00030000)
 
 /*
  * RCSR channel 0 config register values
@@ -1248,110 +1254,146 @@
 /*
  * QoS  definitions
  */
-#define	CW_MIN_OFDM	15
-#define	CW_MAX_OFDM	1023
-#define	CW_MIN_CCK	31
-#define	CW_MAX_CCK	1023
+
+#define	AC_NUM		(4)	/* the number of access category */
 
-#define	QOS_TX0_CW_MIN_OFDM	CW_MIN_OFDM
-#define	QOS_TX1_CW_MIN_OFDM	CW_MIN_OFDM
-#define	QOS_TX2_CW_MIN_OFDM	((CW_MIN_OFDM + 1) / 2 - 1)
-#define	QOS_TX3_CW_MIN_OFDM	((CW_MIN_OFDM + 1) / 4 - 1)
+/*
+ * index of every AC in firmware
+ */
+#define	QOS_AC_BK	(0)
+#define	QOS_AC_BE	(1)
+#define	QOS_AC_VI	(2)
+#define	QOS_AC_VO	(3)
+#define	QOS_AC_INVALID	(-1)
 
-#define	QOS_TX0_CW_MIN_CCK	CW_MIN_CCK
-#define	QOS_TX1_CW_MIN_CCK	CW_MIN_CCK
-#define	QOS_TX2_CW_MIN_CCK	((CW_MIN_CCK + 1) / 2 - 1)
-#define	QOS_TX3_CW_MIN_CCK	((CW_MIN_CCK + 1) / 4 - 1)
+#define	QOS_CW_RANGE_MIN	(0)	/* exponential of 2 */
+#define	QOS_CW_RANGE_MAX	(15)	/* exponential of 2 */
+#define	QOS_TXOP_MIN		(0)	/* unit of 32 microsecond */
+#define	QOS_TXOP_MAX		(255)	/* unit of 32 microsecond */
+#define	QOS_AIFSN_MIN		(2)
+#define	QOS_AIFSN_MAX		(15)	/* undefined */
 
-#define	QOS_TX0_CW_MAX_OFDM	CW_MAX_OFDM
-#define	QOS_TX1_CW_MAX_OFDM	CW_MAX_OFDM
-#define	QOS_TX2_CW_MAX_OFDM	CW_MIN_OFDM
-#define	QOS_TX3_CW_MAX_OFDM	((CW_MIN_OFDM + 1) / 2 - 1)
-
-#define	QOS_TX0_CW_MAX_CCK	CW_MAX_CCK
-#define	QOS_TX1_CW_MAX_CCK	CW_MAX_CCK
-#define	QOS_TX2_CW_MAX_CCK	CW_MIN_CCK
-#define	QOS_TX3_CW_MAX_CCK	((CW_MIN_CCK + 1) / 2 - 1)
+/*
+ * masks for flags of QoS parameter command
+ */
+#define	QOS_PARAM_FLG_UPDATE_EDCA	(0x01)
+#define	QOS_PARAM_FLG_TGN		(0x02)
 
-#define	QOS_TX0_AIFS	(3)
-#define	QOS_TX1_AIFS	(7)
-#define	QOS_TX2_AIFS	(2)
-#define	QOS_TX3_AIFS	(2)
+/*
+ * index of TX queue for every AC
+ */
+#define	QOS_AC_BK_TO_TXQ	(3)
+#define	QOS_AC_BE_TO_TXQ	(2)
+#define	QOS_AC_VI_TO_TXQ	(1)
+#define	QOS_AC_VO_TO_TXQ	(0)
+#define	TXQ_FOR_AC_MIN		(0)
+#define	TXQ_FOR_AC_MAX		(3)
+#define	TXQ_FOR_AC_INVALID	(-1)
+#define	NON_QOS_TXQ		QOS_AC_BE_TO_TXQ
+#define	QOS_TXQ_FOR_MGT		QOS_AC_VO_TO_TXQ
 
-#define	QOS_TX0_ACM	0
-#define	QOS_TX1_ACM	0
-#define	QOS_TX2_ACM	0
-#define	QOS_TX3_ACM	0
+#define	WME_TID_MIN	(0)
+#define	WME_TID_MAX	(7)
+#define	WME_TID_INVALID	(-1)
 
-#define	QOS_TX0_TXOP_LIMIT_CCK	0
-#define	QOS_TX1_TXOP_LIMIT_CCK	0
-#define	QOS_TX2_TXOP_LIMIT_CCK	6016
-#define	QOS_TX3_TXOP_LIMIT_CCK	3264
+/*
+ * HT definitions
+ */
 
-#define	QOS_TX0_TXOP_LIMIT_OFDM	0
-#define	QOS_TX1_TXOP_LIMIT_OFDM	0
-#define	QOS_TX2_TXOP_LIMIT_OFDM	3008
-#define	QOS_TX3_TXOP_LIMIT_OFDM	1504
+/*
+ * HT capabilities masks
+ */
+#define	HT_CAP_SUP_WIDTH	(0x0002)
+#define	HT_CAP_MIMO_PS		(0x000c)
+#define	HT_CAP_GRN_FLD		(0x0010)
+#define	HT_CAP_SGI_20		(0x0020)
+#define	HT_CAP_SGI_40		(0x0040)
+#define	HT_CAP_DELAY_BA		(0x0400)
+#define	HT_CAP_MAX_AMSDU	(0x0800)
+#define	HT_CAP_MCS_TX_DEFINED	(0x01)
+#define	HT_CAP_MCS_TX_RX_DIFF	(0x02)
+#define	HT_CAP_MCS_TX_STREAMS	(0x0c)
+#define	HT_CAP_MCS_TX_UEQM	(0x10)
 
-#define	DEF_TX0_CW_MIN_OFDM	CW_MIN_OFDM
-#define	DEF_TX1_CW_MIN_OFDM	CW_MIN_OFDM
-#define	DEF_TX2_CW_MIN_OFDM	CW_MIN_OFDM
-#define	DEF_TX3_CW_MIN_OFDM	CW_MIN_OFDM
+#define	HT_CAP_MIMO_PS_STATIC	(0)
+#define	HT_CAP_MIMO_PS_DYNAMIC	(1)
+#define	HT_CAP_MIMO_PS_INVALID	(2)
+#define	HT_CAP_MIMO_PS_NONE	(3)
 
-#define	DEF_TX0_CW_MIN_CCK	CW_MIN_CCK
-#define	DEF_TX1_CW_MIN_CCK	CW_MIN_CCK
-#define	DEF_TX2_CW_MIN_CCK	CW_MIN_CCK
-#define	DEF_TX3_CW_MIN_CCK	CW_MIN_CCK
+#define	HT_RX_AMPDU_FACTOR_8K	(0x0)
+#define	HT_RX_AMPDU_FACTOR_16K	(0x1)
+#define	HT_RX_AMPDU_FACTOR_32K	(0x2)
+#define	HT_RX_AMPDU_FACTOR_64K	(0x3)
+#define	HT_RX_AMPDU_FACTOR	HT_RX_AMPDU_FACTOR_8K
+#define	HT_RX_AMPDU_FACTOR_MSK	(0x3)
 
-#define	DEF_TX0_CW_MAX_OFDM	CW_MAX_OFDM
-#define	DEF_TX1_CW_MAX_OFDM	CW_MAX_OFDM
-#define	DEF_TX2_CW_MAX_OFDM	CW_MAX_OFDM
-#define	DEF_TX3_CW_MAX_OFDM	CW_MAX_OFDM
+#define	HT_MPDU_DENSITY_4USEC	(0x5)
+#define	HT_MPDU_DENSITY_8USEC	(0x6)
+#define	HT_MPDU_DENSITY		HT_MPDU_DENSITY_4USEC
+#define	HT_MPDU_DENSITY_MSK	(0x1c)
+#define	HT_MPDU_DENSITY_POS	(2)
 
-#define	DEF_TX0_CW_MAX_CCK	CW_MAX_CCK
-#define	DEF_TX1_CW_MAX_CCK	CW_MAX_CCK
-#define	DEF_TX2_CW_MAX_CCK	CW_MAX_CCK
-#define	DEF_TX3_CW_MAX_CCK	CW_MAX_CCK
+#define	HT_RATESET_NUM		(16)
+#define	HT_1CHAIN_RATE_MIN_IDX	(0x0)
+#define	HT_1CHAIN_RATE_MAX_IDX	(0x7)
+#define	HT_2CHAIN_RATE_MIN_IDX	(0x8)
+#define	HT_2CHAIN_RATE_MAX_IDX	(0xf)
+
+struct iwh_ampdu_param {
+	uint8_t	factor;
+	uint8_t	density;
+};
 
-#define	DEF_TX0_AIFS		(2)
-#define	DEF_TX1_AIFS		(2)
-#define	DEF_TX2_AIFS		(2)
-#define	DEF_TX3_AIFS		(2)
-
-#define	DEF_TX0_ACM		(0)
-#define	DEF_TX1_ACM		(0)
-#define	DEF_TX2_ACM		(0)
-#define	DEF_TX3_ACM		(0)
+typedef	struct iwh_ht_conf {
+	uint8_t			ht_support;
+	uint16_t		cap;
+	struct iwh_ampdu_param	ampdu_p;
+	uint8_t			tx_support_mcs[HT_RATESET_NUM];
+	uint8_t			rx_support_mcs[HT_RATESET_NUM];
+	uint8_t			valid_chains;
+	uint8_t			tx_stream_count;
+	uint8_t			rx_stream_count;
+	uint8_t			ht_protection;
+} iwh_ht_conf_t;
 
-#define	DEF_TX0_TXOP_LIMIT_CCK	(0)
-#define	DEF_TX1_TXOP_LIMIT_CCK	(0)
-#define	DEF_TX2_TXOP_LIMIT_CCK	(0)
-#define	DEF_TX3_TXOP_LIMIT_CCK	(0)
+#define	NO_HT_PROT		(0)
+#define	HT_PROT_CHAN_NON_HT	(1)
+#define	HT_PROT_FAT		(2)
+#define	HT_PROT_ASSOC_NON_HT	(3)
 
-#define	DEF_TX0_TXOP_LIMIT_OFDM	(0)
-#define	DEF_TX1_TXOP_LIMIT_OFDM	(0)
-#define	DEF_TX2_TXOP_LIMIT_OFDM	(0)
-#define	DEF_TX3_TXOP_LIMIT_OFDM	(0)
+/*
+ * HT flags for RXON command.
+ */
+#define	RXON_FLG_CONTROL_CHANNEL_LOCATION_MSK	0x400000
+#define	RXON_FLG_CONTROL_CHANNEL_LOC_LOW_MSK	0x000000
+#define	RXON_FLG_CONTROL_CHANNEL_LOC_HIGH_MSK	0x400000
 
-#define	QOS_QOS_SETS		(3)
-#define	QOS_PARAM_SET_ACTIVE	(0)
-#define	QOS_PARAM_SET_DEF_CCK	(1)
-#define	QOS_PARAM_SET_DEF_OFDM	(2)
+#define	RXON_FLG_HT_OPERATING_MODE_POS		(23)
+#define	RXON_FLG_HT_PROT_MSK			0x800000
+#define	RXON_FLG_FAT_PROT_MSK			0x1000000
 
-#define	CTRL_QOS_NO_ACK			(0x0020)
-#define	DCT_FLAG_EXT_QOS_ENABLED	(0x10)
+#define	RXON_FLG_CHANNEL_MODE_POS		(25)
+#define	RXON_FLG_CHANNEL_MODE_MSK		0x06000000
+#define	RXON_FLG_CHANNEL_MODE_LEGACY_MSK	0x00000000
+#define	RXON_FLG_CHANNEL_MODE_PURE_40_MSK	0x02000000
+#define	RXON_FLG_CHANNEL_MODE_MIXED_MSK		0x04000000
 
-#define	IWH_TX_QUEUE_AC0		(0)
-#define	IWH_TX_QUEUE_AC1		(1)
-#define	IWH_TX_QUEUE_AC2		(2)
-#define	IWH_TX_QUEUE_AC3		(3)
-#define	IWH_TX_QUEUE_HCCA_1		(5)
-#define	IWH_TX_QUEUE_HCCA_2    	(6)
-
-#define	U32_PAD(n)	((4-(n%4))%4)
-
-#define	AC_BE_TID_MASK 0x9	/* TID 0 and 3 */
-#define	AC_BK_TID_MASK 0x6	/* TID 1 and 2 */
+#define	RXON_RX_CHAIN_DRIVER_FORCE_MSK		(0x1<<0)
+#define	RXON_RX_CHAIN_VALID_MSK			(0x7<<1)
+#define	RXON_RX_CHAIN_VALID_POS			(1)
+#define	RXON_RX_CHAIN_FORCE_SEL_MSK		(0x7<<4)
+#define	RXON_RX_CHAIN_FORCE_SEL_POS		(4)
+#define	RXON_RX_CHAIN_FORCE_MIMO_SEL_MSK	(0x7<<7)
+#define	RXON_RX_CHAIN_FORCE_MIMO_SEL_POS	(7)
+#define	RXON_RX_CHAIN_CNT_MSK			(0x3<<10)
+#define	RXON_RX_CHAIN_CNT_POS			(10)
+#define	RXON_RX_CHAIN_MIMO_CNT_MSK		(0x3<<12)
+#define	RXON_RX_CHAIN_MIMO_CNT_POS		(12)
+#define	RXON_RX_CHAIN_MIMO_FORCE_MSK		(0x1<<14)
+#define	RXON_RX_CHAIN_MIMO_FORCE_POS		(14)
+#define	RXON_RX_CHAIN_A_MSK			(1)
+#define	RXON_RX_CHAIN_B_MSK			(2)
+#define	RXON_RX_CHAIN_C_MSK			(4)
 
 /*
  * Generic queue structure
@@ -1442,40 +1484,32 @@
 	struct iwh_tx_power_db	db;
 } iwh_tx_power_table_cmd_t;
 
-
-
 /*
- * HT flags
+ * Hardware rate scaling set by iwh_ap_lq function.
+ * Given a particular initial rate and mode, the driver uses the
+ * following formula to fill the rs_table[LINK_QUAL_MAX_RETRY_NUM]
+ * rate table in the Link Quality command:
+ *
+ * 1) If using High-throughput(HT)(SISO or MIMO) initial rate:
+ *    a) Use this same initial rate for first 3 entries.
+ *    b) Find next lower available rate using same mode(SISO or MIMO),
+ *	 use for next 3 entries. If no lower rate available, switch to
+ *	 legacy mode(no FAT channel, no MIMO, no short guard interval).
+ *    c) If using MIMO, set command's mimo_delimeter to number of
+ *	 entries using MIMO(3 or 6).
+ *    d) After trying 2 HT rates, switch to legacy mode(no FAT channel,
+ *	 no MIMO, no short qguard interval), at the next lower bit rate
+ *	 (e.g. if second HT bit rate was 54, try 48 legacy),and follow
+ *   legacy procedure for remaining table entries.
+ *
+ * 2) If using legacy initial rate:
+ *    a) Use the initial rate for only one entry.
+ *    b) For each following entry, reduce the rate to next lower available
+ *	 rate, until reaching the lowest available rate.
+ *    c) When reducing rate, also switch antenna selection.
+ *    b) Once lowest available rate is reached, repreat this rate until
+ *   rate table is filled(16 entries),switching antenna each entry.
  */
-#define	RXON_FLG_CONTROL_CHANNEL_LOCATION_MSK	0x400000
-#define	RXON_FLG_CONTROL_CHANNEL_LOC_LOW_MSK	0x000000
-#define	RXON_FLG_CONTROL_CHANNEL_LOC_HIGH_MSK	0x400000
-
-#define	RXON_FLG_HT_OPERATING_MODE_POS		(23)
-#define	RXON_FLG_HT_PROT_MSK			0x800000
-#define	RXON_FLG_FAT_PROT_MSK			0x1000000
-
-#define	RXON_FLG_CHANNEL_MODE_POS		(25)
-#define	RXON_FLG_CHANNEL_MODE_MSK		0x06000000
-#define	RXON_FLG_CHANNEL_MODE_LEGACY_MSK	0x00000000
-#define	RXON_FLG_CHANNEL_MODE_PURE_40_MSK	0x02000000
-#define	RXON_FLG_CHANNEL_MODE_MIXED_MSK		0x04000000
-
-#define	RXON_RX_CHAIN_DRIVER_FORCE_MSK		(0x1<<0)
-#define	RXON_RX_CHAIN_VALID_MSK			(0x7<<1)
-#define	RXON_RX_CHAIN_VALID_POS			(1)
-#define	RXON_RX_CHAIN_FORCE_SEL_MSK		(0x7<<4)
-#define	RXON_RX_CHAIN_FORCE_SEL_POS		(4)
-#define	RXON_RX_CHAIN_FORCE_MIMO_SEL_MSK	(0x7<<7)
-#define	RXON_RX_CHAIN_FORCE_MIMO_SEL_POS	(7)
-#define	RXON_RX_CHAIN_CNT_MSK			(0x3<<10)
-#define	RXON_RX_CHAIN_CNT_POS			(10)
-#define	RXON_RX_CHAIN_MIMO_CNT_MSK		(0x3<<12)
-#define	RXON_RX_CHAIN_MIMO_CNT_POS		(12)
-#define	RXON_RX_CHAIN_MIMO_FORCE_MSK		(0x1<<14)
-#define	RXON_RX_CHAIN_MIMO_FORCE_POS		(14)
-
-#define	MCS_DUP_6M_PLCP (0x20)
 
 /*
  * OFDM HT rate masks
@@ -2204,20 +2238,6 @@
 } iwh_assoc_t;
 
 /*
- * structure for command IWH_CMD_SET_WME
- */
-typedef struct iwh_wme_setup {
-	uint32_t	flags;
-	struct {
-		uint16_t	cwmin;
-		uint16_t	cwmax;
-		uint8_t		aifsn;
-		uint8_t		reserved;
-		uint16_t	txop;
-	} ac[WME_NUM_AC];
-} iwh_wme_setup_t;
-
-/*
  * structure for command IWH_CMD_TSF
  */
 typedef struct iwh_cmd_tsf {
@@ -2233,6 +2253,20 @@
 /*
  * structure for IWH_CMD_ADD_NODE
  */
+#define	STA_MODE_ADD_MSK		(0)
+#define	STA_MODE_MODIFY_MSK		(1)
+
+#define	STA_FLG_RTS_MIMO_PROT		(1 << 17)
+#define	STA_FLG_MAX_AMPDU_POS		(19)
+#define	STA_FLG_AMPDU_DENSITY_POS	(23)
+#define	STA_FLG_FAT_EN			(1 << 21)
+
+#define	STA_MODIFY_KEY_MASK		(0x01)
+#define	STA_MODIFY_TID_DISABLE_TX	(0x02)
+#define	STA_MODIFY_TX_RATE_MSK		(0x04)
+#define	STA_MODIFY_ADDBA_TID_MSK	(0x08)
+#define	STA_MODIFY_DELBA_TID_MSK	(0x10)
+
 struct	sta_id_modify {
 	uint8_t		addr[6];
 	uint16_t	reserved1;
@@ -2459,6 +2493,30 @@
 	uint32_t	kill_cts_mask;
 } iwh_bt_cmd_t;
 
+typedef struct iwh_wme_param {
+	uint8_t		aifsn;
+	uint8_t		cwmin_e;
+	uint8_t		cwmax_e;
+	uint16_t	txop;
+} iwh_wme_param_t;
+/*
+ * QoS parameter command (REPLY_QOS_PARAM = 0x13)
+ * FIFO0-background, FIFO1-best effort, FIFO2-video, FIFO3-voice
+ */
+
+struct iwh_edca_param {
+	uint16_t	cw_min;
+	uint16_t	cw_max;
+	uint8_t		aifsn;
+	uint8_t		reserved;
+	uint16_t	txop;
+};
+
+typedef struct iwh_qos_param_cmd {
+	uint32_t	flags;
+	struct iwh_edca_param	ac[AC_NUM];
+} iwh_qos_param_cmd_t;
+
 /*
  * firmware image header
  */
--- a/usr/src/uts/common/io/iwh/iwh_var.h	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/uts/common/io/iwh/iwh_var.h	Mon Aug 10 10:43:48 2009 -0400
@@ -4,7 +4,7 @@
  */
 
 /*
- * Copyright (c) 2008, Intel Corporation
+ * Copyright (c) 2009, Intel Corporation
  * All rights reserved.
  */
 
@@ -87,12 +87,13 @@
 
 
 typedef struct iwh_amrr {
-	ieee80211_node_t in;	/* must be the first */
-	int	txcnt;
-	int	retrycnt;
-	int	success;
-	int	success_threshold;
-	int	recovery;
+	ieee80211_node_t in;
+	uint32_t	txcnt;
+	uint32_t	retrycnt;
+	uint32_t	success;
+	uint32_t	success_threshold;
+	int		recovery;
+	volatile uint32_t	ht_mcs_idx;
 } iwh_amrr_t;
 
 struct	iwh_phy_rx {
@@ -113,12 +114,18 @@
 	dev_info_t		*sc_dip;
 	int			(*sc_newstate)(struct ieee80211com *,
 	    enum ieee80211_state, int);
+	void			(*sc_recv_action)(ieee80211_node_t *,
+				    const uint8_t *, const uint8_t *);
+	int			(*sc_send_action)(ieee80211_node_t *,
+				    int, int, uint16_t[4]);
+	volatile uint32_t	sc_cmd_flag;
+	volatile uint32_t	sc_cmd_accum;
 
 	enum ieee80211_state	sc_ostate;
 	kmutex_t		sc_glock;
 	kmutex_t		sc_mt_lock;
 	kmutex_t		sc_tx_lock;
-	kmutex_t		sc_ucode_lock;
+	kmutex_t		sc_suspend_lock;
 	kcondvar_t		sc_mt_cv;
 	kcondvar_t		sc_tx_cv;
 	kcondvar_t		sc_cmd_cv;
@@ -177,6 +184,8 @@
 
 	struct iwh_alive_resp	sc_card_alive_run;
 	struct iwh_init_alive_resp	sc_card_alive_init;
+	iwh_ht_conf_t		sc_ht_conf;
+	uint16_t		sc_dev_id;
 
 	uint32_t		sc_tx_timer;
 	uint32_t		sc_scan_pending;
@@ -197,6 +206,10 @@
 	uint32_t		sc_tx_retries;
 } iwh_sc_t;
 
+#define	SC_CMD_FLG_NONE		(0)
+#define	SC_CMD_FLG_PENDING	(1)
+#define	SC_CMD_FLG_DONE		(2)
+
 #define	IWH_F_ATTACHED		(1 << 0)
 #define	IWH_F_CMD_DONE		(1 << 1)
 #define	IWH_F_FW_INIT		(1 << 2)
@@ -214,6 +227,33 @@
 
 #define	IWH_SUCCESS		0
 #define	IWH_FAIL		EIO
+
+/*
+ * Interaction steps for 802.11e/n between net80211 module
+ * and iwh driver:
+ * -- setup link with 802.11n AP: net80211 module is responsible
+ *    for setup link with 802.11n AP. iwh driver monitors current
+ *    state and make relevant configurations according work mode.
+ * -- QoS parameter updating: net80211 module is responsible for
+ *    extract EDCA parameters from the fram of AP, iwh driver get
+ *    these parameters and make relevant configuration to HW.
+ * -- TX queue management: iwh driver place a frame into suitable
+ *    TX queue according to frame type and user priority extracted
+ *    from frame head.
+ * -- MIMO: iwh driver make relevant configurations in TX and RX
+ *    direction according to AP mode from net80211 module.
+ * -- Link aggregation: AMSDU is implemented by net80211 module and
+ *    AMPDU is implemented by both iwh driver and net80211 module.
+ *    iwh driver distinguish frames in one AMPDU frame and net80211
+ *    module is responsible reordering every frame.
+ * -- Block ACK: net80211 module is responsible for setup agreement
+ *    with AP and iwh driver is responsible for realistic ACK.
+ * -- Rate scaling: This function is implemented independently by
+ *    iwh driver.
+ * -- HT protection: This feature is also implemented by iwh driver
+ *    no interaction with net80211 module.
+ */
+
 #ifdef __cplusplus
 }
 #endif
--- a/usr/src/uts/common/io/mac/mac.c	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/uts/common/io/mac/mac.c	Mon Aug 10 10:43:48 2009 -0400
@@ -417,11 +417,11 @@
 
 	/*
 	 * Allocate an id space to manage minor numbers. The range of the
-	 * space will be from MAC_MAX_MINOR+1 to MAXMIN32 (maximum legal
-	 * minor number is MAXMIN, but id_t is type of integer and does not
-	 * allow MAXMIN).
+	 * space will be from MAC_MAX_MINOR+1 to MAC_PRIVATE_MINOR-1.  This
+	 * leaves half of the 32-bit minors available for driver private use.
 	 */
-	minor_ids = id_space_create("mac_minor_ids", MAC_MAX_MINOR+1, MAXMIN32);
+	minor_ids = id_space_create("mac_minor_ids", MAC_MAX_MINOR+1,
+	    MAC_PRIVATE_MINOR-1);
 	ASSERT(minor_ids != NULL);
 	minor_count = 0;
 
--- a/usr/src/uts/common/io/mac/plugins/mac_wifi.c	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/uts/common/io/mac/plugins/mac_wifi.c	Mon Aug 10 10:43:48 2009 -0400
@@ -19,7 +19,7 @@
  * CDDL HEADER END
  */
 /*
- * Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
+ * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
  * Use is subject to license terms.
  */
 
@@ -62,7 +62,7 @@
 
 static struct modlmisc mac_wifi_modlmisc = {
 	&mod_miscops,
-	"WiFi MAC plugin"
+	"WiFi MAC plugin 1.4"
 };
 
 static struct modlinkage mac_wifi_modlinkage = {
@@ -200,7 +200,7 @@
 	 * Fill in the fixed parts of the ieee80211_frame.
 	 */
 	wh = (struct ieee80211_frame *)mp->b_rptr;
-	mp->b_wptr += sizeof (struct ieee80211_frame);
+	mp->b_wptr += sizeof (struct ieee80211_frame) + wdp->wd_qospad;
 	wh->i_fc[0] = IEEE80211_FC0_VERSION_0 | IEEE80211_FC0_TYPE_DATA;
 
 	switch (wdp->wd_opmode) {
@@ -227,6 +227,13 @@
 		break;
 	}
 
+	if (wdp->wd_qospad) {
+		struct ieee80211_qosframe *qwh =
+		    (struct ieee80211_qosframe *)wh;
+		qwh->i_qos[1] = 0;
+		qwh->i_fc[0] |= IEEE80211_FC0_SUBTYPE_QOS;
+	}
+
 	switch (wdp->wd_secalloc) {
 	case WIFI_SEC_WEP:
 		/*
@@ -282,6 +289,14 @@
 	llcp = mp->b_rptr + sizeof (struct ieee80211_frame);
 
 	/*
+	 * Generally, QoS data field takes 2 bytes, but some special hardware,
+	 * such as Atheros, will need the 802.11 header padded to a 32-bit
+	 * boundary for 4-address and QoS frames, at this time, it's 4 bytes.
+	 */
+	if (wh->i_fc[0] & IEEE80211_FC0_SUBTYPE_QOS)
+		llcp += wdp->wd_qospad;
+
+	/*
 	 * When we receive frames from other hosts, the hardware will have
 	 * already performed WEP decryption, and thus there will not be a WEP
 	 * portion.  However, when we receive a loopback copy of our own
--- a/usr/src/uts/common/io/mem.c	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/uts/common/io/mem.c	Mon Aug 10 10:43:48 2009 -0400
@@ -230,9 +230,6 @@
 	    flags, name, valuep, lengthp, 0));
 }
 
-extern void mach_sync_icache_pa(caddr_t, size_t);
-#pragma weak mach_sync_icache_pa
-
 static int
 mmio(struct uio *uio, enum uio_rw rw, pfn_t pfn, off_t pageoff, int allowio,
     page_t *pp)
@@ -271,18 +268,9 @@
 				error = EFAULT;
 		} else
 			error = EIO;
-	} else {
+	} else
 		error = uiomove(va + pageoff, nbytes, rw, uio);
 
-		/*
-		 * In case this has changed executable code,
-		 * non-coherent I-caches must be flushed.
-		 */
-		if (rw != UIO_READ && &mach_sync_icache_pa != NULL) {
-			mach_sync_icache_pa((caddr_t)ptob(pfn), PAGESIZE);
-		}
-	}
-
 	if (devload)
 		hat_unload(kas.a_hat, mm_map, PAGESIZE, HAT_UNLOAD_UNLOCK);
 	else if (pp)
--- a/usr/src/uts/common/io/net80211/net80211.c	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/uts/common/io/net80211/net80211.c	Mon Aug 10 10:43:48 2009 -0400
@@ -1,5 +1,5 @@
 /*
- * Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
+ * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
  * Use is subject to license terms.
  */
 
@@ -58,6 +58,9 @@
 	"FH",		/* IEEE80211_MODE_FH */
 	"turboA",	/* IEEE80211_MODE_TURBO_A */
 	"turboG",	/* IEEE80211_MODE_TURBO_G */
+	"sturboA",	/* IEEE80211_MODE_STURBO_A */
+	"11na",		/* IEEE80211_MODE_11NA */
+	"11ng",		/* IEEE80211_MODE_11NG */
 };
 
 #define	IEEE80211_DPRINT(_level, _fmt)	do {	\
@@ -122,6 +125,12 @@
 	wd.wd_secalloc = ieee80211_crypto_getciphertype(ic);
 	wd.wd_opmode = ic->ic_opmode;
 	IEEE80211_ADDR_COPY(wd.wd_bssid, in->in_bssid);
+	wd.wd_qospad = 0;
+	if (in->in_flags & (IEEE80211_NODE_QOS|IEEE80211_NODE_HT)) {
+		wd.wd_qospad = 2;
+		if (ic->ic_flags & IEEE80211_F_DATAPAD)
+			wd.wd_qospad = roundup(wd.wd_qospad, sizeof (uint32_t));
+	}
 	(void) mac_pdata_update(ic->ic_mach, &wd, sizeof (wd));
 	mac_tx_update(ic->ic_mach);
 	ieee80211_dbg(IEEE80211_MSG_ANY, "ieee80211_mac_update"
@@ -380,6 +389,9 @@
 		IEEE80211_CHAN_FHSS,	/* IEEE80211_MODE_FH */
 		IEEE80211_CHAN_T,	/* IEEE80211_MODE_TURBO_A */
 		IEEE80211_CHAN_108G,	/* IEEE80211_MODE_TURBO_G */
+		IEEE80211_CHAN_ST,	/* IEEE80211_MODE_STURBO_A */
+		IEEE80211_CHAN_A,	/* IEEE80211_MODE_11NA (check legacy) */
+		IEEE80211_CHAN_G,	/* IEEE80211_MODE_11NG (check legacy) */
 	};
 	struct ieee80211_channel *ch;
 	uint32_t modeflags;
@@ -465,6 +477,7 @@
 		ic->ic_bss->in_rates = ic->ic_sup_rates[mode];
 	ic->ic_curmode = mode;
 	ieee80211_reset_erp(ic);	/* reset ERP state */
+	ieee80211_wme_initparams(ic);	/* reset WME stat */
 
 	return (0);
 }
@@ -475,35 +488,74 @@
  * where multiple operating modes are possible (e.g. 11g+11b).
  * In those cases we defer to the current operating mode when set.
  */
+/* ARGSUSED */
 enum ieee80211_phymode
 ieee80211_chan2mode(ieee80211com_t *ic, struct ieee80211_channel *chan)
 {
-	if (IEEE80211_IS_CHAN_T(chan)) {
+	if (IEEE80211_IS_CHAN_HTA(chan))
+		return (IEEE80211_MODE_11NA);
+	else if (IEEE80211_IS_CHAN_HTG(chan))
+		return (IEEE80211_MODE_11NG);
+	else if (IEEE80211_IS_CHAN_108G(chan))
+		return (IEEE80211_MODE_TURBO_G);
+	else if (IEEE80211_IS_CHAN_ST(chan))
+		return (IEEE80211_MODE_STURBO_A);
+	else if (IEEE80211_IS_CHAN_T(chan))
 		return (IEEE80211_MODE_TURBO_A);
-	} else if (IEEE80211_IS_CHAN_5GHZ(chan)) {
+	else if (IEEE80211_IS_CHAN_A(chan))
 		return (IEEE80211_MODE_11A);
-	} else if (IEEE80211_IS_CHAN_FHSS(chan)) {
+	else if (IEEE80211_IS_CHAN_ANYG(chan))
+		return (IEEE80211_MODE_11G);
+	else if (IEEE80211_IS_CHAN_B(chan))
+		return (IEEE80211_MODE_11B);
+	else if (IEEE80211_IS_CHAN_FHSS(chan))
 		return (IEEE80211_MODE_FH);
-	} else if (chan->ich_flags & (IEEE80211_CHAN_OFDM|IEEE80211_CHAN_DYN)) {
-		/*
-		 * This assumes all 11g channels are also usable
-		 * for 11b, which is currently true.
-		 */
-		if (ic->ic_curmode == IEEE80211_MODE_TURBO_G)
-			return (IEEE80211_MODE_TURBO_G);
-		if (ic->ic_curmode == IEEE80211_MODE_11B)
-			return (IEEE80211_MODE_11B);
-		return (IEEE80211_MODE_11G);
-	} else {
-		return (IEEE80211_MODE_11B);
+
+	/* NB: should not get here */
+	ieee80211_err("cannot map channel to mode; freq %u flags 0x%x\n",
+	    chan->ich_freq, chan->ich_flags);
+
+	return (IEEE80211_MODE_11B);
+}
+
+const struct ieee80211_rateset *
+ieee80211_get_suprates(ieee80211com_t *ic, struct ieee80211_channel *c)
+{
+	if (IEEE80211_IS_CHAN_HTA(c))
+		return (&ic->ic_sup_rates[IEEE80211_MODE_11A]);
+	if (IEEE80211_IS_CHAN_HTG(c)) {
+		return (&ic->ic_sup_rates[IEEE80211_MODE_11G]);
 	}
+	return (&ic->ic_sup_rates[ieee80211_chan2mode(ic, c)]);
+}
+
+/*
+ * Locate a channel given a frequency+flags.  We cache
+ * the previous lookup to optimize swithing between two
+ * channels--as happens with dynamic turbo.
+ */
+struct ieee80211_channel *
+ieee80211_find_channel(ieee80211com_t *ic, int freq, int flags)
+{
+	struct ieee80211_channel *c;
+	int i;
+
+	flags &= IEEE80211_CHAN_ALLTURBO;
+	/* brute force search */
+	for (i = 0; i < IEEE80211_CHAN_MAX; i++) {
+		c = &ic->ic_sup_channels[i];
+		if (c->ich_freq == freq &&
+		    (c->ich_flags & IEEE80211_CHAN_ALLTURBO) == flags)
+			return (c);
+	}
+	return (NULL);
 }
 
 /*
  * Return the size of the 802.11 header for a management or data frame.
  */
 int
-ieee80211_hdrspace(const void *data)
+ieee80211_hdrsize(const void *data)
 {
 	const struct ieee80211_frame *wh = data;
 	int size = sizeof (struct ieee80211_frame);
@@ -513,11 +565,60 @@
 	    IEEE80211_FC0_TYPE_CTL);
 	if ((wh->i_fc[1] & IEEE80211_FC1_DIR_MASK) == IEEE80211_FC1_DIR_DSTODS)
 		size += IEEE80211_ADDR_LEN;
+	if (IEEE80211_QOS_HAS_SEQ(wh))
+		size += sizeof (uint16_t);
 
 	return (size);
 }
 
 /*
+ * Return the space occupied by the 802.11 header and any
+ * padding required by the driver.  This works for a
+ * management or data frame.
+ */
+int
+ieee80211_hdrspace(ieee80211com_t *ic, const void *data)
+{
+	int size = ieee80211_hdrsize(data);
+	if (ic->ic_flags & IEEE80211_F_DATAPAD)
+		size = roundup(size, sizeof (uint32_t));
+	return (size);
+}
+
+/*
+ * Like ieee80211_hdrsize, but handles any type of frame.
+ */
+int
+ieee80211_anyhdrsize(const void *data)
+{
+	const struct ieee80211_frame *wh = data;
+
+	if ((wh->i_fc[0]&IEEE80211_FC0_TYPE_MASK) == IEEE80211_FC0_TYPE_CTL) {
+		switch (wh->i_fc[0] & IEEE80211_FC0_SUBTYPE_MASK) {
+		case IEEE80211_FC0_SUBTYPE_CTS:
+		case IEEE80211_FC0_SUBTYPE_ACK:
+			return (sizeof (struct ieee80211_frame_ack));
+		case IEEE80211_FC0_SUBTYPE_BAR:
+			return (sizeof (struct ieee80211_frame_bar));
+		}
+		return (sizeof (struct ieee80211_frame_min));
+	} else
+		return (ieee80211_hdrsize(data));
+}
+
+/*
+ * Like ieee80211_hdrspace, but handles any type of frame.
+ */
+int
+ieee80211_anyhdrspace(ieee80211com_t *ic, const void *data)
+{
+	int size = ieee80211_anyhdrsize(data);
+	if (ic->ic_flags & IEEE80211_F_DATAPAD)
+		size = roundup(size, sizeof (uint32_t));
+	return (size);
+}
+
+/*
  * Allocate and setup a management frame of the specified
  * size.  We return the mblk and a pointer to the start
  * of the contiguous data area that's been reserved based
@@ -567,6 +668,7 @@
 	ieee80211_notify(ic, EVENT_DISASSOC);	/* notify WPA service */
 }
 
+
 /*
  * Get 802.11 kstats defined in ieee802.11(5)
  *
@@ -674,6 +776,12 @@
 				ic->ic_modecaps |= 1 << IEEE80211_MODE_TURBO_A;
 			if (IEEE80211_IS_CHAN_108G(ch))
 				ic->ic_modecaps |= 1 << IEEE80211_MODE_TURBO_G;
+			if (IEEE80211_IS_CHAN_ST(ch))
+				ic->ic_modecaps |= 1 << IEEE80211_MODE_STURBO_A;
+			if (IEEE80211_IS_CHAN_HTA(ch))
+				ic->ic_modecaps |= 1 << IEEE80211_MODE_11NA;
+			if (IEEE80211_IS_CHAN_HTG(ch))
+				ic->ic_modecaps |= 1 << IEEE80211_MODE_11NG;
 			if (ic->ic_curchan == NULL) {
 				/* arbitrarily pick the first channel */
 				ic->ic_curchan = &ic->ic_sup_channels[i];
@@ -686,6 +794,8 @@
 	ic->ic_des_chan = IEEE80211_CHAN_ANYC;	/* any channel is ok */
 	(void) ieee80211_setmode(ic, ic->ic_curmode);
 
+	if (ic->ic_caps & IEEE80211_C_WME)	/* enable if capable */
+		ic->ic_flags |= IEEE80211_F_WME;
 	if (ic->ic_caps & IEEE80211_C_BURST)
 		ic->ic_flags |= IEEE80211_F_BURST;
 	ic->ic_bintval = IEEE80211_BINTVAL_DEFAULT;
@@ -698,6 +808,7 @@
 	ieee80211_node_attach(ic);
 	ieee80211_proto_attach(ic);
 	ieee80211_crypto_attach(ic);
+	ieee80211_ht_attach(ic);
 
 	ic->ic_watchdog_timer = 0;
 }
@@ -717,6 +828,7 @@
 	if (ic->ic_opt_ie != NULL)
 		ieee80211_free(ic->ic_opt_ie);
 
+	ieee80211_ht_detach(ic);
 	ieee80211_node_detach(ic);
 	ieee80211_crypto_detach(ic);
 
@@ -726,7 +838,7 @@
 
 static struct modlmisc	i_wifi_modlmisc = {
 	&mod_miscops,
-	"IEEE80211 Kernel Module v1.3"
+	"IEEE80211 Kernel Module v2.0"
 };
 
 static struct modlinkage	i_wifi_modlinkage = {
--- a/usr/src/uts/common/io/net80211/net80211_crypto_ccmp.c	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/uts/common/io/net80211/net80211_crypto_ccmp.c	Mon Aug 10 10:43:48 2009 -0400
@@ -1,11 +1,11 @@
 /*
- * Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
+ * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
  * Use is subject to license terms.
  */
 
 /*
  * Copyright (c) 2001 Atsushi Onoe
- * Copyright (c) 2002-2005 Sam Leffler, Errno Consulting
+ * Copyright (c) 2002-2008 Sam Leffler, Errno Consulting
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -118,10 +118,11 @@
 static int
 ccmp_encap(struct ieee80211_key *k, mblk_t *mp, uint8_t keyid)
 {
+	struct ccmp_ctx *ctx = k->wk_private;
 	uint8_t *ivp;
 	int hdrlen;
 
-	hdrlen = ieee80211_hdrspace(mp->b_rptr);
+	hdrlen = ieee80211_hdrspace(ctx->cc_ic, mp->b_rptr);
 	/*
 	 * Copy down 802.11 header and add the IV, KeyID, and ExtIV.
 	 */
@@ -156,7 +157,6 @@
 static int
 ccmp_decap(struct ieee80211_key *k, mblk_t *mp, int hdrlen)
 {
-	struct ieee80211_frame tmp;
 	uint8_t *ivp;
 	uint64_t pn;
 
@@ -194,8 +194,7 @@
 	/*
 	 * Copy up 802.11 header and strip crypto bits.
 	 */
-	bcopy(mp->b_rptr, &tmp, hdrlen);
-	bcopy(&tmp, mp->b_rptr + ccmp.ic_header, hdrlen);
+	(void) memmove(mp->b_rptr + ccmp.ic_header, mp->b_rptr, hdrlen);
 	mp->b_rptr += ccmp.ic_header;
 	mp->b_wptr -= ccmp.ic_trailer;
 
@@ -406,9 +405,18 @@
 	 * initial block as we know whether or not we have
 	 * a QOS frame.
 	 */
-	*(uint16_t *)&aad[24] = 0;
-	b0[1] = 0;
-	aad[1] = 22;
+	if (IEEE80211_QOS_HAS_SEQ(wh)) {
+		struct ieee80211_qosframe *qwh =
+		    (struct ieee80211_qosframe *)wh;
+		aad[24] = qwh->i_qos[0] & 0x0f;	/* just priority bits */
+		aad[25] = 0;
+		b0[1] = aad[24];
+		aad[1] = 22 + 2;
+	} else {
+		*(uint16_t *)&aad[24] = 0;
+		b0[1] = 0;
+		aad[1] = 22;
+	}
 	*(uint16_t *)&aad[26] = 0;
 	*(uint32_t *)&aad[28] = 0;
 }
--- a/usr/src/uts/common/io/net80211/net80211_crypto_tkip.c	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/uts/common/io/net80211/net80211_crypto_tkip.c	Mon Aug 10 10:43:48 2009 -0400
@@ -5,7 +5,7 @@
 
 /*
  * Copyright (c) 2001 Atsushi Onoe
- * Copyright (c) 2002-2005 Sam Leffler, Errno Consulting
+ * Copyright (c) 2002-2008 Sam Leffler, Errno Consulting
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -147,7 +147,7 @@
 	if (ic->ic_flags & IEEE80211_F_COUNTERM)
 		return (0);
 
-	hdrlen = ieee80211_hdrspace(mp->b_rptr);
+	hdrlen = ieee80211_hdrspace(ic, mp->b_rptr);
 	/*
 	 * Copy down 802.11 header and add the IV, KeyID, and ExtIV.
 	 */
@@ -194,7 +194,6 @@
 {
 	struct tkip_ctx *ctx = k->wk_private;
 	struct ieee80211com *ic = ctx->tc_ic;
-	struct ieee80211_frame tmp;
 	uint8_t *ivp;
 	uint64_t pn;
 
@@ -242,8 +241,7 @@
 	/*
 	 * Copy up 802.11 header and strip crypto bits.
 	 */
-	bcopy(mp->b_rptr, &tmp, hdrlen);
-	bcopy(&tmp, mp->b_rptr + tkip.ic_header, hdrlen);
+	(void) memmove(mp->b_rptr + tkip.ic_header, mp->b_rptr, hdrlen);
 	mp->b_rptr += tkip.ic_header;
 	mp->b_wptr -= tkip.ic_trailer;
 
@@ -262,7 +260,7 @@
 		int hdrlen;
 		uint8_t *mic;
 
-		hdrlen = ieee80211_hdrspace(mp->b_rptr);
+		hdrlen = ieee80211_hdrspace(ctx->tc_ic, mp->b_rptr);
 		mic = mp->b_wptr;
 		mp->b_wptr += tkip.ic_miclen;
 
@@ -287,7 +285,7 @@
 	struct tkip_ctx *ctx = k->wk_private;
 
 	if (force || (k->wk_flags & IEEE80211_KEY_SWMIC)) {
-		int hdrlen = ieee80211_hdrspace(mp->b_rptr);
+		int hdrlen = ieee80211_hdrspace(ctx->tc_ic, mp->b_rptr);
 		uint8_t mic[IEEE80211_WEP_MICLEN];
 		uint8_t mic0[IEEE80211_WEP_MICLEN];
 
@@ -640,7 +638,12 @@
 		break;
 	}
 
-	hdr[12] = 0; /* QoS not supported */
+	if (wh->i_fc[0] & IEEE80211_FC0_SUBTYPE_QOS) {
+		const struct ieee80211_qosframe *qwh =
+		    (const struct ieee80211_qosframe *)wh;
+		hdr[12] = qwh->i_qos[0] & IEEE80211_QOS_TID;
+	} else
+		hdr[12] = 0;
 	hdr[13] = hdr[14] = hdr[15] = 0; /* reserved */
 }
 
--- a/usr/src/uts/common/io/net80211/net80211_crypto_wep.c	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/uts/common/io/net80211/net80211_crypto_wep.c	Mon Aug 10 10:43:48 2009 -0400
@@ -1,11 +1,11 @@
 /*
- * Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
+ * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
  * Use is subject to license terms.
  */
 
 /*
  * Copyright (c) 2001 Atsushi Onoe
- * Copyright (c) 2002-2005 Sam Leffler, Errno Consulting
+ * Copyright (c) 2002-2008 Sam Leffler, Errno Consulting
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -35,8 +35,6 @@
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-#pragma ident	"%Z%%M%	%I%	%E% SMI"
-
 /*
  * IEEE 802.11 WEP crypto support.
  */
@@ -135,7 +133,7 @@
 
 	if (mp == NULL)
 		return (0);
-	hdrlen = ieee80211_hdrspace(wh);
+	hdrlen = ieee80211_hdrspace(ctx->wc_ic, wh);
 
 	ivp = (uint8_t *)wh;
 	ivp += hdrlen;
@@ -182,10 +180,6 @@
 static int
 wep_decap(struct ieee80211_key *k, mblk_t *mp, int hdrlen)
 {
-	struct ieee80211_frame *wh, whbuf;
-
-	wh = (struct ieee80211_frame *)mp->b_rptr;
-
 	/*
 	 * Check if the device handled the decrypt in hardware.
 	 * If so we just strip the header; otherwise we need to
@@ -200,9 +194,8 @@
 	/*
 	 * Copy up 802.11 header and strip crypto bits.
 	 */
-	bcopy(wh, &whbuf, sizeof (whbuf));
+	(void) memmove(mp->b_rptr + wep.ic_header, mp->b_rptr, hdrlen);
 	mp->b_rptr += wep.ic_header;
-	bcopy(&whbuf, mp->b_rptr, hdrlen);
 	mp->b_wptr -= wep.ic_trailer;
 
 	return (1);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/usr/src/uts/common/io/net80211/net80211_ht.c	Mon Aug 10 10:43:48 2009 -0400
@@ -0,0 +1,1900 @@
+/*
+ * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
+ * Use is subject to license terms.
+ */
+
+/*
+ * Copyright (c) 2007 Sam Leffler, Errno Consulting
+ * All rights reserved.
+ *
+ * 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.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/*
+ * IEEE 802.11n protocol support.
+ */
+#include <sys/mac_provider.h>
+#include <sys/strsun.h>
+#include <sys/byteorder.h>
+
+#include "net80211_impl.h"
+
+/* define here, used throughout file */
+#define	MS(_v, _f)	(((_v) & _f) >> _f##_S)
+#define	SM(_v, _f)	(((_v) << _f##_S) & _f)
+
+/* need max array size */
+/* NB: these are for HT20 w/ long GI */
+const int ieee80211_htrates[16] = {
+	13,		/* IFM_IEEE80211_MCS0 */
+	26,		/* IFM_IEEE80211_MCS1 */
+	39,		/* IFM_IEEE80211_MCS2 */
+	52,		/* IFM_IEEE80211_MCS3 */
+	78,		/* IFM_IEEE80211_MCS4 */
+	104,		/* IFM_IEEE80211_MCS5 */
+	117,		/* IFM_IEEE80211_MCS6 */
+	130,		/* IFM_IEEE80211_MCS7 */
+	26,		/* IFM_IEEE80211_MCS8 */
+	52,		/* IFM_IEEE80211_MCS9 */
+	78,		/* IFM_IEEE80211_MCS10 */
+	104,		/* IFM_IEEE80211_MCS11 */
+	156,		/* IFM_IEEE80211_MCS12 */
+	208,		/* IFM_IEEE80211_MCS13 */
+	234,		/* IFM_IEEE80211_MCS14 */
+	260,		/* IFM_IEEE80211_MCS15 */
+};
+
+struct ieee80211_htrateset ieee80211_rateset_11n =
+	{ 16, {
+	/* MCS: 6.5   13 19.5   26   39  52 58.5  65  13  26 */
+		0,   1,   2,   3,   4,  5,   6,  7,  8,  9,
+	/* 39   52   78  104  117, 130 */
+		10,  11,  12,  13,  14,  15 }
+	};
+
+#define	IEEE80211_AMPDU_AGE
+
+#define	IEEE80211_AGGR_TIMEOUT	250		/* msecs */
+#define	IEEE80211_AGGR_MINRETRY	(10 * hz)	/* ticks */
+#define	IEEE80211_AGGR_MAXTRIES	3
+
+/*
+ * Receive processing.
+ */
+
+/*
+ * Decap the encapsulated A-MSDU frames and dispatch all but
+ * the last for delivery.  The last frame is returned for
+ * delivery via the normal path.
+ */
+#define	FF_LLC_SIZE	\
+	(sizeof (struct ether_header) + sizeof (struct ieee80211_llc))
+mblk_t *
+ieee80211_decap_amsdu(struct ieee80211_node *in, mblk_t *mp)
+{
+	struct ieee80211com *ic = in->in_ic;
+	struct ether_header *eh;
+	struct ieee80211_frame *wh;
+	int framelen, hdrspace;
+	mblk_t *m0;
+
+	/* all msdu has same ieee80211_frame header */
+	wh = (struct ieee80211_frame *)mp->b_rptr;
+	hdrspace = ieee80211_hdrspace(ic, wh);
+	mp->b_rptr += hdrspace;	/* A-MSDU subframe follows */
+
+	for (;;) {
+		/*
+		 * The frame has an 802.3 header followed by an 802.2
+		 * LLC header.  The encapsulated frame length is in the
+		 * first header type field;
+		 */
+		if (MBLKL(mp) < FF_LLC_SIZE) {
+			ieee80211_err("too short, decap failed\n");
+			goto out;
+		}
+		/*
+		 * Decap frames, encapsulate to 802.11 frame then deliver.
+		 * 802.3 header is first (struct ether_header)
+		 * 802.2 header follows (struct ieee80211_llc)
+		 * data, msdu = llc + data
+		 */
+		eh = (struct ether_header *)mp->b_rptr;
+						/* 802.2 header follows */
+		framelen = ntohs(eh->ether_type);	/* llc + data */
+		m0 = allocb(hdrspace + framelen, BPRI_MED);
+		if (m0 == NULL) {
+			ieee80211_err("decap_msdu(): can't alloc mblk\n");
+			goto out;
+		}
+		(void) memcpy(m0->b_wptr, (uint8_t *)wh, hdrspace);
+		m0->b_wptr += hdrspace;
+		(void) memcpy(m0->b_wptr,
+		    mp->b_rptr + sizeof (struct ether_header), framelen);
+		m0->b_wptr += framelen;
+
+		ic->ic_stats.is_rx_frags++;
+		ic->ic_stats.is_rx_bytes += MBLKL(m0);
+		IEEE80211_UNLOCK(ic);
+		mac_rx(ic->ic_mach, NULL, m0);	/* deliver to mac */
+		IEEE80211_LOCK(ic);
+
+		framelen += sizeof (struct ether_header);
+		if (MBLKL(mp) == framelen)	/* last, no padding */
+			goto out;
+		/*
+		 * Remove frame contents; each intermediate frame
+		 * is required to be aligned to a 4-byte boundary.
+		 */
+		mp->b_rptr += roundup(framelen, 4);	/* padding */
+	}
+
+out:
+	freemsg(mp);
+	return (NULL);	/* none delivered by caller */
+}
+#undef FF_LLC_SIZE
+
+/*
+ * Start A-MPDU rx/re-order processing for the specified TID.
+ */
+static void
+ampdu_rx_start(struct ieee80211_rx_ampdu *rap, int bufsiz, int start)
+{
+	(void) memset(rap, 0, sizeof (*rap));
+	rap->rxa_wnd = (bufsiz == 0) ? IEEE80211_AGGR_BAWMAX
+	    : min((uint16_t)bufsiz, IEEE80211_AGGR_BAWMAX);
+	rap->rxa_start = (uint16_t)start;
+	rap->rxa_flags |= IEEE80211_AGGR_XCHGPEND;
+}
+
+/*
+ * Purge all frames in the A-MPDU re-order queue.
+ */
+static void
+ampdu_rx_purge(struct ieee80211_rx_ampdu *rap)
+{
+	mblk_t *m;
+	int i;
+
+	for (i = 0; i < rap->rxa_wnd; i++) {
+		m = rap->rxa_m[i];
+		if (m != NULL) {
+			rap->rxa_m[i] = NULL;
+			rap->rxa_qbytes -= MBLKL(m);
+			freemsg(m);
+			if (--rap->rxa_qframes == 0)
+				break;
+		}
+	}
+	ASSERT(rap->rxa_qbytes == 0 && rap->rxa_qframes == 0);
+}
+
+/*
+ * Stop A-MPDU rx processing for the specified TID.
+ */
+static void
+ampdu_rx_stop(struct ieee80211_rx_ampdu *rap)
+{
+	rap->rxa_flags &= ~IEEE80211_AGGR_XCHGPEND;
+	ampdu_rx_purge(rap);
+}
+
+/*
+ * Dispatch a frame from the A-MPDU reorder queue.  The
+ * frame is fed back into ieee80211_input marked with an
+ * M_AMPDU flag so it doesn't come back to us (it also
+ * permits ieee80211_input to optimize re-processing).
+ */
+static void
+ampdu_dispatch(struct ieee80211_node *in, mblk_t *m)
+{
+	m->b_flag |= M_AMPDU;	/* bypass normal processing */
+	/* NB: rssi and rstamp are ignored w/ M_AMPDU set */
+	(void) ieee80211_input(in->in_ic, m, in, 0, 0);
+}
+
+/*
+ * Dispatch as many frames as possible from the re-order queue.
+ * Frames will always be "at the front"; we process all frames
+ * up to the first empty slot in the window.  On completion we
+ * cleanup state if there are still pending frames in the current
+ * BA window.  We assume the frame at slot 0 is already handled
+ * by the caller; we always start at slot 1.
+ */
+static void
+ampdu_rx_dispatch(struct ieee80211_rx_ampdu *rap, struct ieee80211_node *in)
+{
+	mblk_t *m;
+	int i;
+
+	/* flush run of frames */
+	for (i = 1; i < rap->rxa_wnd; i++) {
+		m = rap->rxa_m[i];
+		if (m == NULL)
+			break;
+		rap->rxa_m[i] = NULL;
+		rap->rxa_qbytes -= MBLKL(m);
+		rap->rxa_qframes--;
+
+		ampdu_dispatch(in, m);
+	}
+	/*
+	 * If frames remain, copy the mbuf pointers down so
+	 * they correspond to the offsets in the new window.
+	 */
+	if (rap->rxa_qframes != 0) {
+		int n = rap->rxa_qframes, j;
+		for (j = i+1; j < rap->rxa_wnd; j++) {
+			if (rap->rxa_m[j] != NULL) {
+				rap->rxa_m[j-i] = rap->rxa_m[j];
+				rap->rxa_m[j] = NULL;
+				if (--n == 0)
+					break;
+			}
+		}
+		ASSERT(n == 0);
+	}
+	/*
+	 * Adjust the start of the BA window to
+	 * reflect the frames just dispatched.
+	 */
+	rap->rxa_start = IEEE80211_SEQ_ADD(rap->rxa_start, i);
+}
+
+#ifdef IEEE80211_AMPDU_AGE
+/*
+ * Dispatch all frames in the A-MPDU re-order queue.
+ */
+static void
+ampdu_rx_flush(struct ieee80211_node *in, struct ieee80211_rx_ampdu *rap)
+{
+	mblk_t *m;
+	int i;
+
+	ieee80211_dbg(IEEE80211_MSG_HT,
+	    "ampdu_rx_flush(%d)\n",
+	    rap->rxa_wnd);
+
+	for (i = 0; i < rap->rxa_wnd; i++) {
+		m = rap->rxa_m[i];
+		if (m == NULL)
+			continue;
+		rap->rxa_m[i] = NULL;
+		rap->rxa_qbytes -= MBLKL(m);
+		rap->rxa_qframes--;
+
+		ampdu_dispatch(in, m);
+		if (rap->rxa_qframes == 0)
+			break;
+	}
+}
+#endif /* IEEE80211_AMPDU_AGE */
+
+/*
+ * Dispatch all frames in the A-MPDU re-order queue
+ * preceding the specified sequence number.  This logic
+ * handles window moves due to a received MSDU or BAR.
+ */
+static void
+ampdu_rx_flush_upto(struct ieee80211_node *in,
+	struct ieee80211_rx_ampdu *rap, ieee80211_seq winstart)
+{
+	mblk_t *m;
+	ieee80211_seq seqno;
+	int i;
+
+	/*
+	 * Flush any complete MSDU's with a sequence number lower
+	 * than winstart.  Gaps may exist.  Note that we may actually
+	 * dispatch frames past winstart if a run continues; this is
+	 * an optimization that avoids having to do a separate pass
+	 * to dispatch frames after moving the BA window start.
+	 */
+	seqno = rap->rxa_start;
+	for (i = 0; i < rap->rxa_wnd; i++) {
+		m = rap->rxa_m[i];
+		if (m != NULL) {
+			rap->rxa_m[i] = NULL;
+			rap->rxa_qbytes -= MBLKL(m);
+			rap->rxa_qframes--;
+
+			ampdu_dispatch(in, m);
+		} else {
+			if (!IEEE80211_SEQ_BA_BEFORE(seqno, winstart))
+				break;
+		}
+		seqno = IEEE80211_SEQ_INC(seqno);
+	}
+	/*
+	 * If frames remain, copy the mbuf pointers down so
+	 * they correspond to the offsets in the new window.
+	 */
+	if (rap->rxa_qframes != 0) {
+		int n = rap->rxa_qframes, j;
+		for (j = i+1; j < rap->rxa_wnd; j++) {
+			if (rap->rxa_m[j] != NULL) {
+				rap->rxa_m[j-i] = rap->rxa_m[j];
+				rap->rxa_m[j] = NULL;
+				if (--n == 0)
+					break;
+			}
+		}
+		if (n != 0) {
+			ieee80211_dbg(IEEE80211_MSG_HT,
+			    "ampdu_rx_flush_upto(): "
+			    "lost %d frames, qframes %d off %d "
+			    "BA win <%d:%d> winstart %d\n",
+			    n, rap->rxa_qframes, i, rap->rxa_start,
+			    IEEE80211_SEQ_ADD(rap->rxa_start, rap->rxa_wnd-1),
+			    winstart);
+		}
+	}
+	/*
+	 * Move the start of the BA window; we use the
+	 * sequence number of the last MSDU that was
+	 * passed up the stack+1 or winstart if stopped on
+	 * a gap in the reorder buffer.
+	 */
+	rap->rxa_start = seqno;
+}
+
+/*
+ * Process a received QoS data frame for an HT station.  Handle
+ * A-MPDU reordering: if this frame is received out of order
+ * and falls within the BA window hold onto it.  Otherwise if
+ * this frame completes a run, flush any pending frames.  We
+ * return 1 if the frame is consumed.  A 0 is returned if
+ * the frame should be processed normally by the caller.
+ */
+int
+ieee80211_ampdu_reorder(struct ieee80211_node *in, mblk_t *m)
+{
+#define	IEEE80211_FC0_QOSDATA \
+	(IEEE80211_FC0_TYPE_DATA | IEEE80211_FC0_SUBTYPE_QOS | \
+	IEEE80211_FC0_VERSION_0)
+
+#define	PROCESS		0	/* caller should process frame */
+#define	CONSUMED	1	/* frame consumed, caller does nothing */
+
+	struct ieee80211_qosframe *wh;
+	struct ieee80211_rx_ampdu *rap;
+	ieee80211_seq rxseq;
+	uint8_t tid;
+	int off;
+
+	ASSERT(in->in_flags & IEEE80211_NODE_HT);
+
+	/* NB: m_len known to be sufficient */
+	wh = (struct ieee80211_qosframe *)m->b_rptr;
+	ASSERT(wh->i_fc[0] == IEEE80211_FC0_QOSDATA);
+
+	if ((wh->i_fc[1] & IEEE80211_FC1_DIR_MASK) == IEEE80211_FC1_DIR_DSTODS)
+		tid = ((struct ieee80211_qosframe_addr4 *)wh)->i_qos[0];
+	else
+		tid = wh->i_qos[0];
+	tid &= IEEE80211_QOS_TID;
+	rap = &in->in_rx_ampdu[tid];
+	if ((rap->rxa_flags & IEEE80211_AGGR_XCHGPEND) == 0) {
+		/*
+		 * No ADDBA request yet, don't touch.
+		 */
+		return (PROCESS);
+	}
+	rxseq = LE_16(*(uint16_t *)wh->i_seq) >> IEEE80211_SEQ_SEQ_SHIFT;
+	rap->rxa_nframes++;
+again:
+	if (rxseq == rap->rxa_start) {
+		/*
+		 * First frame in window.
+		 */
+		if (rap->rxa_qframes != 0) {
+			/*
+			 * Dispatch as many packets as we can.
+			 */
+			ASSERT(rap->rxa_m[0] == NULL);	/* [0] is m */
+			ampdu_dispatch(in, m);
+			ampdu_rx_dispatch(rap, in);
+			ieee80211_dbg(IEEE80211_MSG_HT,
+			    "ieee80211_ampdu_reorder(%u), CONSUMED ...\n",
+			    rap->rxa_qframes);
+			return (CONSUMED);
+		} else {
+			/*
+			 * In order; advance window and notify
+			 * caller to dispatch directly.
+			 */
+			rap->rxa_start = IEEE80211_SEQ_INC(rxseq);
+			ieee80211_dbg(IEEE80211_MSG_HT,
+			    "ieee80211_ampdu_reorder(%u), PROCESS ...\n",
+			    rap->rxa_start);
+			return (PROCESS);
+		}
+	}
+	ieee80211_dbg(IEEE80211_MSG_HT,
+	    "ieee80211_ampdu_reorder(%u, %u), out of order ...\n",
+	    rxseq, rap->rxa_start);
+	/*
+	 * Frame is out of order; store if in the BA window.
+	 */
+	/* calculate offset in BA window */
+	off = IEEE80211_SEQ_SUB(rxseq, rap->rxa_start);
+	if (off < rap->rxa_wnd) {
+#ifdef IEEE80211_AMPDU_AGE
+		/*
+		 * Common case (hopefully): in the BA window.
+		 * Sec 9.10.7.6 a) (D2.04 p.118 line 47)
+		 * --
+		 * Check for frames sitting too long in the reorder queue.
+		 * This should only ever happen if frames are not delivered
+		 * without the sender otherwise notifying us (e.g. with a
+		 * BAR to move the window).  Typically this happens because
+		 * of vendor bugs that cause the sequence number to jump.
+		 * When this happens we get a gap in the reorder queue that
+		 * leaves frame sitting on the queue until they get pushed
+		 * out due to window moves.  When the vendor does not send
+		 * BAR this move only happens due to explicit packet sends
+		 *
+		 * NB: we only track the time of the oldest frame in the
+		 * reorder q; this means that if we flush we might push
+		 * frames that still "new"; if this happens then subsequent
+		 * frames will result in BA window moves which cost something
+		 * but is still better than a big throughput dip.
+		 */
+		clock_t ticks;
+
+		ticks = ddi_get_lbolt();
+		if (rap->rxa_qframes != 0) {
+			/* honor batimeout? */
+			if (ticks - rap->rxa_age > drv_usectohz(500*1000)) {
+				/*
+				 * Too long since we received the first
+				 * frame; flush the reorder buffer.
+				 */
+				if (rap->rxa_qframes != 0) {
+					ampdu_rx_flush(in, rap);
+				}
+				rap->rxa_start = IEEE80211_SEQ_INC(rxseq);
+				return (PROCESS);
+			}
+		} else {
+			/*
+			 * First frame, start aging timer.
+			 */
+			rap->rxa_age = ticks;
+		}
+#endif /* IEEE80211_AMPDU_AGE */
+		/* save packet */
+		if (rap->rxa_m[off] == NULL) {
+			rap->rxa_m[off] = m;
+			rap->rxa_qframes++;
+			rap->rxa_qbytes += MBLKL(m);
+		} else {
+			ieee80211_dbg(IEEE80211_MSG_INPUT | IEEE80211_MSG_HT,
+			    "a-mpdu duplicate "
+			    "seqno %u tid %u BA win <%u:%u>\n",
+			    rxseq, tid, rap->rxa_start,
+			    IEEE80211_SEQ_ADD(rap->rxa_start,
+			    rap->rxa_wnd - 1));
+			freemsg(m);
+		}
+		return (CONSUMED);
+	}
+	if (off < IEEE80211_SEQ_BA_RANGE) {
+		/*
+		 * Outside the BA window, but within range;
+		 * flush the reorder q and move the window.
+		 * Sec 9.10.7.6 b) (D2.04 p.118 line 60)
+		 */
+		ieee80211_dbg(IEEE80211_MSG_HT,
+		    "move BA win <%u:%u> (%u frames) rxseq %u tid %u\n",
+		    rap->rxa_start,
+		    IEEE80211_SEQ_ADD(rap->rxa_start, rap->rxa_wnd - 1),
+		    rap->rxa_qframes, rxseq, tid);
+
+		/*
+		 * The spec says to flush frames up to but not including:
+		 * 	WinStart_B = rxseq - rap->rxa_wnd + 1
+		 * Then insert the frame or notify the caller to process
+		 * it immediately.  We can safely do this by just starting
+		 * over again because we know the frame will now be within
+		 * the BA window.
+		 */
+		/* NB: rxa_wnd known to be >0 */
+		ampdu_rx_flush_upto(in, rap,
+		    IEEE80211_SEQ_SUB(rxseq, rap->rxa_wnd-1));
+		goto again;
+	} else {
+		/*
+		 * Outside the BA window and out of range; toss.
+		 * Sec 9.10.7.6 c) (D2.04 p.119 line 16)
+		 */
+		ieee80211_dbg(IEEE80211_MSG_HT, "MSDU"
+		    "BA win <%u:%u> (%u frames) rxseq %u tid %u%s\n",
+		    rap->rxa_start,
+		    IEEE80211_SEQ_ADD(rap->rxa_start, rap->rxa_wnd-1),
+		    rap->rxa_qframes, rxseq, tid,
+		    wh->i_fc[1] & IEEE80211_FC1_RETRY ? " (retransmit)" : "");
+		freemsg(m);
+		return (CONSUMED);
+	}
+
+#undef CONSUMED
+#undef PROCESS
+#undef IEEE80211_FC0_QOSDATA
+}
+
+/*
+ * Process a BAR ctl frame.  Dispatch all frames up to
+ * the sequence number of the frame.  If this frame is
+ * out of range it's discarded.
+ */
+void
+ieee80211_recv_bar(struct ieee80211_node *in, mblk_t *m0)
+{
+	struct ieee80211_frame_bar *wh;
+	struct ieee80211_rx_ampdu *rap;
+	ieee80211_seq rxseq;
+	int tid, off;
+
+	wh = (struct ieee80211_frame_bar *)m0->b_rptr;
+	/* check basic BAR */
+	tid = MS(LE_16(wh->i_ctl), IEEE80211_BAR_TID);
+	rap = &in->in_rx_ampdu[tid];
+	if ((rap->rxa_flags & IEEE80211_AGGR_XCHGPEND) == 0) {
+		/*
+		 * No ADDBA request yet, don't touch.
+		 */
+		ieee80211_dbg(IEEE80211_MSG_INPUT | IEEE80211_MSG_HT,
+		    "BAR no BA stream, tid %u\n", tid);
+		return;
+	}
+	rxseq = LE_16(wh->i_seq) >> IEEE80211_SEQ_SEQ_SHIFT;
+	if (rxseq == rap->rxa_start)
+		return;
+	/* calculate offset in BA window */
+	off = IEEE80211_SEQ_SUB(rxseq, rap->rxa_start);
+	if (off < IEEE80211_SEQ_BA_RANGE) {
+		/*
+		 * Flush the reorder q up to rxseq and move the window.
+		 * Sec 9.10.7.6 a) (D2.04 p.119 line 22)
+		 */
+		ieee80211_dbg(IEEE80211_MSG_HT,
+		    "BAR moves BA win <%u:%u> (%u frames) rxseq %u tid %u\n",
+		    rap->rxa_start,
+		    IEEE80211_SEQ_ADD(rap->rxa_start, rap->rxa_wnd-1),
+		    rap->rxa_qframes, rxseq, tid);
+
+		ampdu_rx_flush_upto(in, rap, rxseq);
+		if (off >= rap->rxa_wnd) {
+			/*
+			 * BAR specifies a window start to the right of BA
+			 * window; we must move it explicitly since
+			 * ampdu_rx_flush_upto will not.
+			 */
+			rap->rxa_start = rxseq;
+		}
+	} else {
+		/*
+		 * Out of range; toss.
+		 * Sec 9.10.7.6 b) (D2.04 p.119 line 41)
+		 */
+		ieee80211_dbg(IEEE80211_MSG_HT, "BAR "
+		    "BA win <%u:%u> (%u frames) rxseq %u tid %u%s\n",
+		    rap->rxa_start,
+		    IEEE80211_SEQ_ADD(rap->rxa_start, rap->rxa_wnd-1),
+		    rap->rxa_qframes, rxseq, tid,
+		    wh->i_fc[1] & IEEE80211_FC1_RETRY ? " (retransmit)" : "");
+	}
+}
+
+/*
+ * Setup HT-specific state in a node.  Called only
+ * when HT use is negotiated so we don't do extra
+ * work for temporary and/or legacy sta's.
+ */
+void
+ieee80211_ht_node_init(struct ieee80211_node *in, const uint8_t *htcap)
+{
+	struct ieee80211_tx_ampdu *tap;
+	int ac;
+
+	if (in->in_flags & IEEE80211_NODE_HT) {
+		/*
+		 * Clean AMPDU state on re-associate.  This handles the case
+		 * where a station leaves w/o notifying us and then returns
+		 * before node is reaped for inactivity.
+		 */
+		ieee80211_ht_node_cleanup(in);
+	}
+	ieee80211_parse_htcap(in, htcap);
+	for (ac = 0; ac < WME_NUM_AC; ac++) {
+		tap = &in->in_tx_ampdu[ac];
+		tap->txa_ac = (uint8_t)ac;
+		/* NB: further initialization deferred */
+	}
+	in->in_flags |= IEEE80211_NODE_HT | IEEE80211_NODE_AMPDU;
+}
+
+/*
+ * Cleanup HT-specific state in a node.  Called only
+ * when HT use has been marked.
+ */
+void
+ieee80211_ht_node_cleanup(struct ieee80211_node *in)
+{
+	struct ieee80211com *ic = in->in_ic;
+	int i;
+
+	ASSERT(in->in_flags & IEEE80211_NODE_HT);
+
+	/* optimize this */
+	for (i = 0; i < WME_NUM_AC; i++) {
+		struct ieee80211_tx_ampdu *tap = &in->in_tx_ampdu[i];
+		if (tap->txa_flags & IEEE80211_AGGR_SETUP) {
+			/*
+			 * Stop BA stream if setup so driver has a chance
+			 * to reclaim any resources it might have allocated.
+			 */
+			ic->ic_addba_stop(in, &in->in_tx_ampdu[i]);
+			/* IEEE80211_TAPQ_DESTROY(tap); */
+			/* NB: clearing NAK means we may re-send ADDBA */
+			tap->txa_flags &=
+			    ~(IEEE80211_AGGR_SETUP | IEEE80211_AGGR_NAK);
+		}
+	}
+	for (i = 0; i < WME_NUM_TID; i++)
+		ampdu_rx_stop(&in->in_rx_ampdu[i]);
+
+	in->in_htcap = 0;
+	in->in_flags &= ~(IEEE80211_NODE_HT | IEEE80211_NODE_HTCOMPAT |
+	    IEEE80211_NODE_AMPDU);
+}
+
+static struct ieee80211_channel *
+findhtchan(struct ieee80211com *ic, struct ieee80211_channel *c, int htflags)
+{
+	return ieee80211_find_channel(ic, c->ich_freq,
+	    (c->ich_flags &~ IEEE80211_CHAN_HT) | htflags);
+}
+
+/*
+ * Adjust a channel to be HT/non-HT according to the vap's configuration.
+ */
+struct ieee80211_channel *
+ieee80211_ht_adjust_channel(struct ieee80211com *ic,
+	struct ieee80211_channel *chan, int flags)
+{
+	struct ieee80211_channel *c;
+
+	if (flags & IEEE80211_FEXT_HT) {
+		/* promote to HT if possible */
+		if (flags & IEEE80211_FEXT_USEHT40) {
+			if (!IEEE80211_IS_CHAN_HT40(chan)) {
+				/* NB: arbitrarily pick ht40+ over ht40- */
+				c = findhtchan(ic, chan, IEEE80211_CHAN_HT40U);
+				if (c == NULL)
+					c = findhtchan(ic, chan,
+					    IEEE80211_CHAN_HT40D);
+				if (c == NULL)
+					c = findhtchan(ic, chan,
+					    IEEE80211_CHAN_HT20);
+				if (c != NULL)
+					chan = c;
+			}
+		} else if (!IEEE80211_IS_CHAN_HT20(chan)) {
+			c = findhtchan(ic, chan, IEEE80211_CHAN_HT20);
+			if (c != NULL)
+				chan = c;
+		}
+	} else if (IEEE80211_IS_CHAN_HT(chan)) {
+		/* demote to legacy, HT use is disabled */
+		c = ieee80211_find_channel(ic, chan->ich_freq,
+		    chan->ich_flags &~ IEEE80211_CHAN_HT);
+		if (c != NULL)
+			chan = c;
+	}
+	return (chan);
+}
+
+/*
+ * Setup HT-specific state for a legacy WDS peer.
+ */
+void
+ieee80211_ht_wds_init(struct ieee80211_node *in)
+{
+	struct ieee80211com *ic = in->in_ic;
+	struct ieee80211_tx_ampdu *tap;
+	int ac;
+
+	ASSERT(ic->ic_flags_ext & IEEE80211_FEXT_HT);
+
+	/* check scan cache in case peer has an ap and we have info */
+	/*
+	 * If setup with a legacy channel; locate an HT channel.
+	 * Otherwise if the inherited channel (from a companion
+	 * AP) is suitable use it so we use the same location
+	 * for the extension channel).
+	 */
+	in->in_chan = ieee80211_ht_adjust_channel(ic, in->in_chan,
+	    ic->ic_flags_ext);
+
+	in->in_htcap = 0;
+	if (ic->ic_flags_ext & IEEE80211_FEXT_SHORTGI20)
+		in->in_htcap |= IEEE80211_HTCAP_SHORTGI20;
+	if (IEEE80211_IS_CHAN_HT40(in->in_chan)) {
+		in->in_htcap |= IEEE80211_HTCAP_CHWIDTH40;
+		in->in_chw = 40;
+		if (IEEE80211_IS_CHAN_HT40U(in->in_chan))
+			in->in_ht2ndchan = IEEE80211_HTINFO_2NDCHAN_ABOVE;
+		else if (IEEE80211_IS_CHAN_HT40D(in->in_chan))
+			in->in_ht2ndchan = IEEE80211_HTINFO_2NDCHAN_BELOW;
+		if (ic->ic_flags_ext & IEEE80211_FEXT_SHORTGI40)
+			in->in_htcap |= IEEE80211_HTCAP_SHORTGI40;
+	} else {
+		in->in_chw = 20;
+		in->in_ht2ndchan = IEEE80211_HTINFO_2NDCHAN_NONE;
+	}
+	in->in_htctlchan = ieee80211_chan2ieee(ic, in->in_chan);
+
+	in->in_htopmode = 0;		/* need protection state */
+	in->in_htstbc = 0;		/* need info */
+
+	for (ac = 0; ac < WME_NUM_AC; ac++) {
+		tap = &in->in_tx_ampdu[ac];
+		tap->txa_ac = (uint8_t)ac;
+	}
+	/* NB: AMPDU tx/rx governed by IEEE80211_FEXT_AMPDU_{TX,RX} */
+	in->in_flags |= IEEE80211_NODE_HT | IEEE80211_NODE_AMPDU;
+}
+
+/*
+ * Notify hostap vaps of a change in the HTINFO ie.
+ */
+static void
+htinfo_notify(struct ieee80211com *ic)
+{
+	if (ic->ic_opmode != IEEE80211_M_HOSTAP)
+		return;
+	ieee80211_dbg(IEEE80211_MSG_ASSOC | IEEE80211_MSG_HT,
+	    "HT bss occupancy change: %d sta, %d ht, "
+	    "%d ht40%s, HT protmode now 0x%x\n",
+	    ic->ic_sta_assoc,
+	    ic->ic_ht_sta_assoc,
+	    ic->ic_ht40_sta_assoc,
+	    (ic->ic_flags_ext & IEEE80211_FEXT_NONHT_PR) ?
+	    ", non-HT sta present" : "",
+	    ic->ic_curhtprotmode);
+}
+
+/*
+ * Calculate HT protection mode from current
+ * state and handle updates.
+ */
+static void
+htinfo_update(struct ieee80211com *ic)
+{
+	uint8_t protmode;
+
+	if (ic->ic_flags_ext & IEEE80211_FEXT_NONHT_PR) {
+		protmode = IEEE80211_HTINFO_OPMODE_PROTOPT
+		    | IEEE80211_HTINFO_NONHT_PRESENT;
+	} else if (ic->ic_sta_assoc != ic->ic_ht_sta_assoc) {
+		protmode = IEEE80211_HTINFO_OPMODE_MIXED
+		    | IEEE80211_HTINFO_NONHT_PRESENT;
+	} else if (IEEE80211_IS_CHAN_HT40(ic->ic_curchan) &&
+	    ic->ic_sta_assoc != ic->ic_ht40_sta_assoc) {
+		protmode = IEEE80211_HTINFO_OPMODE_HT20PR;
+	} else {
+		protmode = IEEE80211_HTINFO_OPMODE_PURE;
+	}
+	if (protmode != ic->ic_curhtprotmode) {
+		ic->ic_curhtprotmode = protmode;
+		htinfo_notify(ic);
+	}
+}
+
+/*
+ * Handle an HT station joining a BSS.
+ */
+void
+ieee80211_ht_node_join(struct ieee80211_node *in)
+{
+	struct ieee80211com *ic = in->in_ic;
+
+	IEEE80211_LOCK_ASSERT(ic);
+
+	if (in->in_flags & IEEE80211_NODE_HT) {
+		ic->ic_ht_sta_assoc++;
+		if (in->in_chw == 40)
+			ic->ic_ht40_sta_assoc++;
+	}
+	htinfo_update(ic);
+}
+
+/*
+ * Handle an HT station leaving a BSS.
+ */
+void
+ieee80211_ht_node_leave(struct ieee80211_node *in)
+{
+	struct ieee80211com *ic = in->in_ic;
+
+	IEEE80211_LOCK_ASSERT(ic);
+
+	if (in->in_flags & IEEE80211_NODE_HT) {
+		ic->ic_ht_sta_assoc--;
+		if (in->in_chw == 40)
+			ic->ic_ht40_sta_assoc--;
+	}
+	htinfo_update(ic);
+}
+
+/*
+ * Public version of htinfo_update; used for processing
+ * beacon frames from overlapping bss in hostap_recv_mgmt.
+ */
+void
+ieee80211_htinfo_update(struct ieee80211com *ic, int protmode)
+{
+	if (protmode != ic->ic_curhtprotmode) {
+		ic->ic_curhtprotmode = (uint8_t)protmode;
+		htinfo_notify(ic);
+	}
+}
+
+/* unalligned little endian access */
+#define	LE_READ_2(p)					\
+	((uint16_t)					\
+	((((const uint8_t *)(p))[0]) |			\
+	(((const uint8_t *)(p))[1] <<  8)))
+
+/*
+ * Process an 802.11n HT capabilities ie.
+ */
+void
+ieee80211_parse_htcap(struct ieee80211_node *in, const uint8_t *ie)
+{
+	struct ieee80211com *ic = in->in_ic;
+
+	if (ie[0] == IEEE80211_ELEMID_VENDOR) {
+		/*
+		 * Station used Vendor OUI ie to associate;
+		 * mark the node so when we respond we'll use
+		 * the Vendor OUI's and not the standard ie's.
+		 */
+		in->in_flags |= IEEE80211_NODE_HTCOMPAT;
+		ie += 4;
+	} else
+		in->in_flags &= ~IEEE80211_NODE_HTCOMPAT;
+
+	in->in_htcap = *(uint16_t *)(ie +
+	    offsetof(struct ieee80211_ie_htcap, hc_cap));
+	in->in_htparam = ie[offsetof(struct ieee80211_ie_htcap, hc_param)];
+	/* needed or will ieee80211_parse_htinfo always be called? */
+	in->in_chw = (in->in_htcap & IEEE80211_HTCAP_CHWIDTH40) &&
+	    (ic->ic_flags_ext & IEEE80211_FEXT_USEHT40) ? 40 : 20;
+}
+
+/*
+ * Process an 802.11n HT info ie and update the node state.
+ * Note that we handle use this information to identify the
+ * correct channel (HT20, HT40+, HT40-, legacy).  The caller
+ * is responsible for insuring any required channel change is
+ * done (e.g. in sta mode when parsing the contents of a
+ * beacon frame).
+ */
+void
+ieee80211_parse_htinfo(struct ieee80211_node *in, const uint8_t *ie)
+{
+	struct ieee80211com *ic = in->in_ic;
+	const struct ieee80211_ie_htinfo *htinfo;
+	struct ieee80211_channel *c;
+	uint16_t w;
+	int htflags, chanflags;
+
+	if (ie[0] == IEEE80211_ELEMID_VENDOR)
+		ie += 4;
+	htinfo = (const struct ieee80211_ie_htinfo *)ie;
+	in->in_htctlchan = htinfo->hi_ctrlchannel;
+	in->in_ht2ndchan = SM(htinfo->hi_byte1, IEEE80211_HTINFO_2NDCHAN);
+	w = *(uint16_t *)(&htinfo->hi_byte2);
+	in->in_htopmode = SM(w, IEEE80211_HTINFO_OPMODE);
+	w = *(uint16_t *)(&htinfo->hi_byte45);
+	in->in_htstbc = SM(w, IEEE80211_HTINFO_BASIC_STBCMCS);
+	/*
+	 * Handle 11n channel switch.  Use the received HT ie's to
+	 * identify the right channel to use.  If we cannot locate it
+	 * in the channel table then fallback to legacy operation.
+	 */
+	htflags = (ic->ic_flags_ext & IEEE80211_FEXT_HT) ?
+	    IEEE80211_CHAN_HT20 : 0;
+	/* NB: honor operating mode constraint */
+	if ((htinfo->hi_byte1 & IEEE80211_HTINFO_TXWIDTH_2040) &&
+	    (ic->ic_flags_ext & IEEE80211_FEXT_USEHT40)) {
+		if (in->in_ht2ndchan == IEEE80211_HTINFO_2NDCHAN_ABOVE)
+			htflags = IEEE80211_CHAN_HT40U;
+		else if (in->in_ht2ndchan == IEEE80211_HTINFO_2NDCHAN_BELOW)
+			htflags = IEEE80211_CHAN_HT40D;
+	}
+	chanflags = (in->in_chan->ich_flags &~ IEEE80211_CHAN_HT) | htflags;
+	if (chanflags != in->in_chan->ich_flags) {
+		c = ieee80211_find_channel(ic,
+		    in->in_chan->ich_freq, chanflags);
+		if (c == NULL && htflags != IEEE80211_CHAN_HT20) {
+			/*
+			 * No HT40 channel entry in our table; fall back
+			 * to HT20 operation.  This should not happen.
+			 */
+			c = findhtchan(ic, in->in_chan, IEEE80211_CHAN_HT20);
+			ieee80211_dbg(IEEE80211_MSG_ASSOC | IEEE80211_MSG_HT,
+			    "no HT40 channel (freq %u), falling back to HT20\n",
+			    in->in_chan->ich_freq);
+			/* stat */
+		}
+		if (c != NULL && c != in->in_chan) {
+			ieee80211_dbg(IEEE80211_MSG_ASSOC | IEEE80211_MSG_HT,
+			    "switch station to HT%d channel %u/0x%x\n",
+			    IEEE80211_IS_CHAN_HT40(c) ? 40 : 20,
+			    c->ich_freq, c->ich_flags);
+			in->in_chan = c;
+		}
+		/* NB: caller responsible for forcing any channel change */
+	}
+	/* update node's tx channel width */
+	in->in_chw = IEEE80211_IS_CHAN_HT40(in->in_chan)? 40 : 20;
+}
+
+/*
+ * Install received HT rate set by parsing the HT cap ie.
+ */
+int
+ieee80211_setup_htrates(struct ieee80211_node *in, const uint8_t *ie, int flags)
+{
+	const struct ieee80211_ie_htcap *htcap;
+	struct ieee80211_htrateset *rs;
+	int i;
+
+	rs = &in->in_htrates;
+	(void) memset(rs, 0, sizeof (*rs));
+	if (ie != NULL) {
+		if (ie[0] == IEEE80211_ELEMID_VENDOR)
+			ie += 4;
+		htcap = (const struct ieee80211_ie_htcap *) ie;
+		for (i = 0; i < IEEE80211_HTRATE_MAXSIZE; i++) {
+			if (ieee80211_isclr(htcap->hc_mcsset, i))
+				continue;
+			if (rs->rs_nrates == IEEE80211_HTRATE_MAXSIZE) {
+				ieee80211_dbg(
+				    IEEE80211_MSG_XRATE | IEEE80211_MSG_HT,
+				    "WARNING, HT rate set too large; only "
+				    "using %u rates\n",
+				    IEEE80211_HTRATE_MAXSIZE);
+				break;
+			}
+			rs->rs_rates[rs->rs_nrates++] = (uint8_t)i;
+		}
+	}
+	return (ieee80211_fix_rate(in, (struct ieee80211_rateset *)rs, flags));
+}
+
+/*
+ * Mark rates in a node's HT rate set as basic according
+ * to the information in the supplied HT info ie.
+ */
+void
+ieee80211_setup_basic_htrates(struct ieee80211_node *in, const uint8_t *ie)
+{
+	const struct ieee80211_ie_htinfo *htinfo;
+	struct ieee80211_htrateset *rs;
+	int i, j;
+
+	if (ie[0] == IEEE80211_ELEMID_VENDOR)
+		ie += 4;
+	htinfo = (const struct ieee80211_ie_htinfo *) ie;
+	rs = &in->in_htrates;
+	if (rs->rs_nrates == 0) {
+		ieee80211_dbg(IEEE80211_MSG_XRATE | IEEE80211_MSG_HT,
+		    "WARNING, empty HT rate set\n");
+		return;
+	}
+	for (i = 0; i < IEEE80211_HTRATE_MAXSIZE; i++) {
+		if (ieee80211_isclr(htinfo->hi_basicmcsset, i))
+			continue;
+		for (j = 0; j < rs->rs_nrates; j++)
+			if ((rs->rs_rates[j] & IEEE80211_RATE_VAL) == i)
+				rs->rs_rates[j] |= IEEE80211_RATE_BASIC;
+	}
+}
+
+static void
+addba_timeout(void *arg)
+{
+	struct ieee80211_tx_ampdu *tap = arg;
+
+	tap->txa_flags &= ~IEEE80211_AGGR_XCHGPEND;
+	tap->txa_attempts++;
+}
+
+static void
+addba_start_timeout(struct ieee80211_tx_ampdu *tap)
+{
+	tap->txa_timer = timeout(addba_timeout, (void *)tap,
+	    drv_usectohz(IEEE80211_AGGR_TIMEOUT * 1000));
+	tap->txa_flags |= IEEE80211_AGGR_XCHGPEND;
+	tap->txa_lastrequest = ddi_get_lbolt();
+}
+
+static void
+addba_stop_timeout(struct ieee80211_tx_ampdu *tap)
+{
+	if (tap->txa_flags & IEEE80211_AGGR_XCHGPEND) {
+		if (tap->txa_timer != NULL) {
+			(void) untimeout(tap->txa_timer);
+			tap->txa_timer = NULL;
+		}
+		tap->txa_flags &= ~IEEE80211_AGGR_XCHGPEND;
+	}
+}
+
+/*
+ * Default method for requesting A-MPDU tx aggregation.
+ * We setup the specified state block and start a timer
+ * to wait for an ADDBA response frame.
+ */
+/* ARGSUSED */
+static int
+ieee80211_addba_request(struct ieee80211_node *in,
+    struct ieee80211_tx_ampdu *tap,
+    int dialogtoken, int baparamset, int batimeout)
+{
+	int bufsiz;
+
+	tap->txa_token = (uint8_t)dialogtoken;
+	tap->txa_flags |= IEEE80211_AGGR_IMMEDIATE;
+	tap->txa_start = tap->txa_seqstart = 0;
+	bufsiz = MS(baparamset, IEEE80211_BAPS_BUFSIZ);
+	tap->txa_wnd = (bufsiz == 0) ? IEEE80211_AGGR_BAWMAX
+	    : min((uint16_t)bufsiz, IEEE80211_AGGR_BAWMAX);
+	addba_start_timeout(tap);
+	return (1);
+}
+
+/*
+ * Default method for processing an A-MPDU tx aggregation
+ * response.  We shutdown any pending timer and update the
+ * state block according to the reply.
+ */
+/* ARGSUSED */
+static int
+ieee80211_addba_response(struct ieee80211_node *in,
+    struct ieee80211_tx_ampdu *tap,
+    int status, int baparamset, int batimeout)
+{
+	int bufsiz;
+
+	addba_stop_timeout(tap);
+	if (status == IEEE80211_STATUS_SUCCESS) {
+		bufsiz = MS(baparamset, IEEE80211_BAPS_BUFSIZ);
+		/* override our request? */
+		tap->txa_wnd = (bufsiz == 0) ? IEEE80211_AGGR_BAWMAX
+		    : min((uint16_t)bufsiz, IEEE80211_AGGR_BAWMAX);
+		tap->txa_flags |= IEEE80211_AGGR_RUNNING;
+	} else {
+		/* mark tid so we don't try again */
+		tap->txa_flags |= IEEE80211_AGGR_NAK;
+	}
+	return (1);
+}
+
+/*
+ * Default method for stopping A-MPDU tx aggregation.
+ * Any timer is cleared and we drain any pending frames.
+ */
+/* ARGSUSED */
+static void
+ieee80211_addba_stop(struct ieee80211_node *in, struct ieee80211_tx_ampdu *tap)
+{
+	addba_stop_timeout(tap);
+	if (tap->txa_flags & IEEE80211_AGGR_RUNNING) {
+		/* clear aggregation queue */
+		tap->txa_flags &= ~IEEE80211_AGGR_RUNNING;
+	}
+	tap->txa_attempts = 0;
+}
+
+/*
+ * Process a received action frame using the default aggregation
+ * policy.  We intercept ADDBA-related frames and use them to
+ * update our aggregation state.  All other frames are passed up
+ * for processing by ieee80211_recv_action.
+ */
+static void
+ieee80211_aggr_recv_action(struct ieee80211_node *in,
+	const uint8_t *frm, const uint8_t *efrm)
+{
+	struct ieee80211com *ic = in->in_ic;
+	const struct ieee80211_action *ia;
+	struct ieee80211_rx_ampdu *rap;
+	struct ieee80211_tx_ampdu *tap;
+	uint8_t dialogtoken;
+	uint16_t baparamset, batimeout, baseqctl, code;
+	uint16_t args[4];
+	int tid, ac, bufsiz;
+
+	ia = (const struct ieee80211_action *) frm;
+	switch (ia->ia_category) {
+	case IEEE80211_ACTION_CAT_BA:
+		switch (ia->ia_action) {
+		case IEEE80211_ACTION_BA_ADDBA_REQUEST:
+			dialogtoken = frm[2];
+			baparamset = *(uint16_t *)(frm+3);
+			batimeout = *(uint16_t *)(frm+5);
+			baseqctl = *(uint16_t *)(frm+7);
+
+			tid = MS(baparamset, IEEE80211_BAPS_TID);
+			bufsiz = MS(baparamset, IEEE80211_BAPS_BUFSIZ);
+
+			ieee80211_dbg(IEEE80211_MSG_ACTION | IEEE80211_MSG_HT,
+			    "recv ADDBA request: dialogtoken %u "
+			    "baparamset 0x%x (tid %d bufsiz %d) batimeout %d "
+			    "baseqctl %d:%d\n",
+			    dialogtoken, baparamset, tid, bufsiz, batimeout,
+			    MS(baseqctl, IEEE80211_BASEQ_START),
+			    MS(baseqctl, IEEE80211_BASEQ_FRAG));
+
+			rap = &in->in_rx_ampdu[tid];
+
+			/* Send ADDBA response */
+			args[0] = dialogtoken;
+			/*
+			 * NB: We ack only if the sta associated with HT and
+			 * the ap is configured to do AMPDU rx (the latter
+			 * violates the 11n spec and is mostly for testing).
+			 */
+			if ((in->in_flags & IEEE80211_NODE_AMPDU_RX) &&
+			    (ic->ic_flags_ext & IEEE80211_FEXT_AMPDU_RX)) {
+				ampdu_rx_start(rap, bufsiz,
+				    MS(baseqctl, IEEE80211_BASEQ_START));
+
+				args[1] = IEEE80211_STATUS_SUCCESS;
+			} else {
+				ieee80211_dbg(
+				    IEEE80211_MSG_ACTION | IEEE80211_MSG_HT,
+				    "reject ADDBA request: %s\n",
+				    in->in_flags & IEEE80211_NODE_AMPDU_RX ?
+				    "administratively disabled" :
+				    "not negotiated for station");
+				args[1] = IEEE80211_STATUS_UNSPECIFIED;
+			}
+			/* honor rap flags? */
+			args[2] = IEEE80211_BAPS_POLICY_IMMEDIATE
+			    | SM(tid, IEEE80211_BAPS_TID)
+			    | SM(rap->rxa_wnd, IEEE80211_BAPS_BUFSIZ);
+			args[3] = 0;
+			ic->ic_send_action(in, IEEE80211_ACTION_CAT_BA,
+			    IEEE80211_ACTION_BA_ADDBA_RESPONSE, args);
+			return;
+
+		case IEEE80211_ACTION_BA_ADDBA_RESPONSE:
+			dialogtoken = frm[2];
+			code = *(uint16_t *)(frm+3);
+			baparamset = *(uint16_t *)(frm+5);
+			tid = MS(baparamset, IEEE80211_BAPS_TID);
+			bufsiz = MS(baparamset, IEEE80211_BAPS_BUFSIZ);
+			batimeout = *(uint16_t *)(frm+7);
+
+			ac = TID_TO_WME_AC(tid);
+			tap = &in->in_tx_ampdu[ac];
+			if ((tap->txa_flags & IEEE80211_AGGR_XCHGPEND) == 0) {
+				ieee80211_err("ADDBA response"
+				    "no pending ADDBA, tid %d dialogtoken %u "
+				    "code %d\n", tid, dialogtoken, code);
+				return;
+			}
+			if (dialogtoken != tap->txa_token) {
+				ieee80211_err("ADDBA response"
+				    "dialogtoken mismatch: waiting for %d, "
+				    "received %d, tid %d code %d\n",
+				    tap->txa_token, dialogtoken, tid, code);
+				return;
+			}
+
+			ieee80211_dbg(IEEE80211_MSG_ACTION | IEEE80211_MSG_HT,
+			    "recv ADDBA response: dialogtoken %u code %d "
+			    "baparamset 0x%x (tid %d bufsiz %d) batimeout %d\n",
+			    dialogtoken, code, baparamset, tid, bufsiz,
+			    batimeout);
+			ic->ic_addba_response(in, tap,
+			    code, baparamset, batimeout);
+			return;
+
+		case IEEE80211_ACTION_BA_DELBA:
+			baparamset = *(uint16_t *)(frm+2);
+			code = *(uint16_t *)(frm+4);
+
+			tid = MS(baparamset, IEEE80211_DELBAPS_TID);
+
+			ieee80211_dbg(IEEE80211_MSG_ACTION | IEEE80211_MSG_HT,
+			    "recv DELBA: baparamset 0x%x (tid %d initiator %d) "
+			    "code %d\n", baparamset, tid,
+			    MS(baparamset, IEEE80211_DELBAPS_INIT), code);
+
+			if ((baparamset & IEEE80211_DELBAPS_INIT) == 0) {
+				ac = TID_TO_WME_AC(tid);
+				tap = &in->in_tx_ampdu[ac];
+				ic->ic_addba_stop(in, tap);
+			} else {
+				rap = &in->in_rx_ampdu[tid];
+				ampdu_rx_stop(rap);
+			}
+			return;
+		}
+		break;
+	}
+	ieee80211_recv_action(in, frm, efrm);
+}
+
+/*
+ * Process a received 802.11n action frame.
+ * Aggregation-related frames are assumed to be handled
+ * already; we handle any other frames we can, otherwise
+ * complain about being unsupported (with debugging).
+ */
+/* ARGSUSED */
+void
+ieee80211_recv_action(struct ieee80211_node *in,
+    const uint8_t *frm, const uint8_t *efrm)
+{
+	const struct ieee80211_action *ia;
+	int chw;
+
+	ia = (const struct ieee80211_action *) frm;
+	switch (ia->ia_category) {
+	case IEEE80211_ACTION_CAT_BA:
+		ieee80211_dbg(IEEE80211_MSG_ACTION | IEEE80211_MSG_HT,
+		    "BA action %d not implemented\n",
+		    ia->ia_action);
+		break;
+	case IEEE80211_ACTION_CAT_HT:
+		switch (ia->ia_action) {
+		case IEEE80211_ACTION_HT_TXCHWIDTH:
+			chw = frm[2] == IEEE80211_A_HT_TXCHWIDTH_2040 ? 40 : 20;
+			if (chw != in->in_chw) {
+				in->in_chw = (uint8_t)chw;
+				in->in_flags |= IEEE80211_NODE_CHWUPDATE;
+			}
+			ieee80211_dbg(IEEE80211_MSG_ACTION | IEEE80211_MSG_HT,
+			    "HT txchwidth, width %d (%s)\n",
+			    chw,
+			    in->in_flags & IEEE80211_NODE_CHWUPDATE ?
+			    "new" : "no change");
+			break;
+		case IEEE80211_ACTION_HT_MIMOPWRSAVE:
+			ieee80211_dbg(IEEE80211_MSG_ACTION | IEEE80211_MSG_HT,
+			    "HT MIMO PS\n");
+			break;
+		default:
+			ieee80211_dbg(IEEE80211_MSG_ACTION | IEEE80211_MSG_HT,
+			    "HT action %d not implemented\n",
+			    ia->ia_action);
+			break;
+		}
+		break;
+	default:
+		ieee80211_dbg(IEEE80211_MSG_ACTION | IEEE80211_MSG_HT,
+		    "category %d not implemented\n",
+		    ia->ia_category);
+		break;
+	}
+}
+
+/*
+ * Transmit processing.
+ */
+
+/*
+ * Request A-MPDU tx aggregation.  Setup local state and
+ * issue an ADDBA request.  BA use will only happen after
+ * the other end replies with ADDBA response.
+ */
+int
+ieee80211_ampdu_request(struct ieee80211_node *in,
+    struct ieee80211_tx_ampdu *tap)
+{
+	struct ieee80211com *ic = in->in_ic;
+	uint16_t args[4];
+	int tid, dialogtoken;
+	static int tokens = 0;	/* tokens */
+	clock_t ticks;
+
+	ticks = ddi_get_lbolt();
+	if ((tap->txa_flags & IEEE80211_AGGR_SETUP) == 0) {
+		/* do deferred setup of state */
+		tap->txa_flags |= IEEE80211_AGGR_SETUP;
+	}
+	if (tap->txa_attempts >= IEEE80211_AGGR_MAXTRIES &&
+	    (ticks - tap->txa_lastrequest) < IEEE80211_AGGR_MINRETRY) {
+		/*
+		 * Don't retry too often; IEEE80211_AGGR_MINRETRY
+		 * defines the minimum interval we'll retry after
+		 * IEEE80211_AGGR_MAXTRIES failed attempts to
+		 * negotiate use.
+		 */
+		return (0);
+	}
+	/* hack for not doing proper locking */
+	tap->txa_flags &= ~IEEE80211_AGGR_NAK;
+
+	dialogtoken = (tokens+1) % 63;		/* algorithm */
+
+	tid = WME_AC_TO_TID(tap->txa_ac);
+	args[0] = (uint16_t)dialogtoken;
+	args[1]	= IEEE80211_BAPS_POLICY_IMMEDIATE
+	    | SM(tid, IEEE80211_BAPS_TID)
+	    | SM(IEEE80211_AGGR_BAWMAX, IEEE80211_BAPS_BUFSIZ);
+	args[2] = 0;	/* batimeout */
+	args[3] = SM(0, IEEE80211_BASEQ_START)
+	    | SM(0, IEEE80211_BASEQ_FRAG);
+	/* NB: do first so there's no race against reply */
+	if (!ic->ic_addba_request(in, tap, dialogtoken, args[1], args[2])) {
+		/* unable to setup state, don't make request */
+		ieee80211_dbg(IEEE80211_MSG_HT,
+		    "could not setup BA stream for AC %d\n",
+		    tap->txa_ac);
+		/* defer next try so we don't slam the driver with requests */
+		tap->txa_attempts = IEEE80211_AGGR_MAXTRIES;
+		tap->txa_lastrequest = ticks;
+		return (0);
+	}
+	tokens = dialogtoken;			/* allocate token */
+	return (ic->ic_send_action(in, IEEE80211_ACTION_CAT_BA,
+	    IEEE80211_ACTION_BA_ADDBA_REQUEST, args));
+}
+
+/*
+ * Terminate an AMPDU tx stream. State is reclaimed
+ * and the peer notified with a DelBA Action frame.
+ */
+void
+ieee80211_ampdu_stop(struct ieee80211_node *in, struct ieee80211_tx_ampdu *tap)
+{
+	struct ieee80211com *ic = in->in_ic;
+	uint16_t args[4];
+
+	if (IEEE80211_AMPDU_RUNNING(tap)) {
+		ieee80211_dbg(IEEE80211_MSG_ACTION | IEEE80211_MSG_HT,
+		    "stop BA stream for AC %d\n", tap->txa_ac);
+
+		ic->ic_addba_stop(in, tap);
+		args[0] = WME_AC_TO_TID(tap->txa_ac);
+		args[1] = IEEE80211_DELBAPS_INIT;
+		args[2] = 1;				/* reason code */
+		(void) ieee80211_send_action(in, IEEE80211_ACTION_CAT_BA,
+		    IEEE80211_ACTION_BA_DELBA, args);
+	} else {
+		ieee80211_dbg(IEEE80211_MSG_ACTION | IEEE80211_MSG_HT,
+		    "BA stream for AC %d not running\n",
+		    tap->txa_ac);
+	}
+}
+
+/*
+ * Transmit a BAR frame to the specified node.  The
+ * BAR contents are drawn from the supplied aggregation
+ * state associated with the node.
+ */
+int
+ieee80211_send_bar(struct ieee80211_node *in,
+    const struct ieee80211_tx_ampdu *tap)
+{
+#define	ADDSHORT(frm, v) do {			\
+        _NOTE(CONSTCOND)                        \
+	frm[0] = (v) & 0xff;			\
+	frm[1] = (v) >> 8;			\
+	frm += 2;				\
+        _NOTE(CONSTCOND)                        \
+} while (0)
+	struct ieee80211com *ic = in->in_ic;
+	struct ieee80211_frame_min *wh;
+	mblk_t *m;
+	uint8_t *frm;
+	uint16_t barctl, barseqctl;
+	int tid;
+
+
+	m = ieee80211_getmgtframe(&frm, sizeof (struct ieee80211_ba_request));
+	if (m == NULL)
+		return (ENOMEM);
+
+	wh = (struct ieee80211_frame_min *)m->b_rptr;
+	wh->i_fc[0] = IEEE80211_FC0_VERSION_0 |
+	    IEEE80211_FC0_TYPE_CTL | IEEE80211_FC0_SUBTYPE_BAR;
+	wh->i_fc[1] = 0;
+	IEEE80211_ADDR_COPY(wh->i_addr1, in->in_macaddr);
+	IEEE80211_ADDR_COPY(wh->i_addr2, ic->ic_macaddr);
+
+	tid = WME_AC_TO_TID(tap->txa_ac);
+	barctl 	= (tap->txa_flags & IEEE80211_AGGR_IMMEDIATE ?
+	    IEEE80211_BAPS_POLICY_IMMEDIATE :
+	    IEEE80211_BAPS_POLICY_DELAYED)
+	    | SM(tid, IEEE80211_BAPS_TID)
+	    | SM(tap->txa_wnd, IEEE80211_BAPS_BUFSIZ);
+	barseqctl = SM(tap->txa_start, IEEE80211_BASEQ_START)
+	    | SM(0, IEEE80211_BASEQ_FRAG);
+	ADDSHORT(frm, barctl);
+	ADDSHORT(frm, barseqctl);
+	m->b_wptr = frm;
+
+	ieee80211_dbg(IEEE80211_MSG_DEBUG,
+	    "send bar frame (tid %u start %u) on channel %u\n",
+	    tid, tap->txa_start, ieee80211_chan2ieee(ic, ic->ic_curchan));
+
+	(void) (*ic->ic_xmit)(ic, m, IEEE80211_FC0_TYPE_CTL);	/* MGT? */
+
+	return (0);
+#undef ADDSHORT
+}
+
+/*
+ * Send an action management frame.  The arguments are stuff
+ * into a frame without inspection; the caller is assumed to
+ * prepare them carefully (e.g. based on the aggregation state).
+ */
+int
+ieee80211_send_action(struct ieee80211_node *in,
+    int category, int action, uint16_t args[4])
+{
+#define	ADDSHORT(frm, v) do {			\
+        _NOTE(CONSTCOND)                        \
+	frm[0] = (v) & 0xff;			\
+	frm[1] = (v) >> 8;			\
+	frm += 2;				\
+        _NOTE(CONSTCOND)                        \
+} while (0)
+	struct ieee80211com *ic = in->in_ic;
+	mblk_t *m;
+	uint8_t *frm;
+	uint16_t baparamset;
+	int ret;
+
+	ASSERT(in != NULL);
+
+	m = ieee80211_getmgtframe(&frm,
+	    sizeof (uint16_t)	/* action+category */
+	    /* may action payload */
+	    + sizeof (struct ieee80211_action_ba_addbaresponse));
+	if (m == NULL)
+		return (ENOMEM);
+
+	*frm++ = (uint8_t)category;
+	*frm++ = (uint8_t)action;
+	switch (category) {
+	case IEEE80211_ACTION_CAT_BA:
+		switch (action) {
+		case IEEE80211_ACTION_BA_ADDBA_REQUEST:
+			ieee80211_dbg(IEEE80211_MSG_ACTION | IEEE80211_MSG_HT,
+			    "send ADDBA request: dialogtoken %d "
+			    "baparamset 0x%x (tid %d) "
+			    "batimeout 0x%x baseqctl 0x%x\n",
+			    args[0], args[1], MS(args[1], IEEE80211_BAPS_TID),
+			    args[2], args[3]);
+
+			*frm++ = args[0];	/* dialog token */
+			ADDSHORT(frm, args[1]);	/* baparamset */
+			ADDSHORT(frm, args[2]);	/* batimeout */
+			ADDSHORT(frm, args[3]);	/* baseqctl */
+			break;
+		case IEEE80211_ACTION_BA_ADDBA_RESPONSE:
+			ieee80211_dbg(IEEE80211_MSG_ACTION | IEEE80211_MSG_HT,
+			    "send ADDBA response: dialogtoken %d status %d "
+			    "baparamset 0x%x (tid %d) batimeout %d\n",
+			    args[0], args[1], args[2],
+			    MS(args[2], IEEE80211_BAPS_TID), args[3]);
+
+			*frm++ = args[0];	/* dialog token */
+			ADDSHORT(frm, args[1]);	/* statuscode */
+			ADDSHORT(frm, args[2]);	/* baparamset */
+			ADDSHORT(frm, args[3]);	/* batimeout */
+			break;
+		case IEEE80211_ACTION_BA_DELBA:
+			baparamset = SM(args[0], IEEE80211_DELBAPS_TID)
+			    | SM(args[1], IEEE80211_DELBAPS_INIT);
+			ADDSHORT(frm, baparamset);
+			ADDSHORT(frm, args[2]);	/* reason code */
+
+			ieee80211_dbg(IEEE80211_MSG_ACTION | IEEE80211_MSG_HT,
+			    "send DELBA action: tid %d, initiator %d "
+			    "reason %d\n",
+			    args[0], args[1], args[2]);
+			break;
+		default:
+			goto badaction;
+		}
+		break;
+	case IEEE80211_ACTION_CAT_HT:
+		switch (action) {
+		case IEEE80211_ACTION_HT_TXCHWIDTH:
+			ieee80211_dbg(IEEE80211_MSG_ACTION | IEEE80211_MSG_HT,
+			    "send HT txchwidth: width %d\n",
+			    IEEE80211_IS_CHAN_HT40(ic->ic_curchan) ? 40 : 20);
+			*frm++ = IEEE80211_IS_CHAN_HT40(ic->ic_curchan) ?
+			    IEEE80211_A_HT_TXCHWIDTH_2040 :
+			    IEEE80211_A_HT_TXCHWIDTH_20;
+			break;
+		default:
+			goto badaction;
+		}
+		break;
+	default:
+	badaction:
+		ieee80211_dbg(IEEE80211_MSG_ACTION | IEEE80211_MSG_HT,
+		    "unsupported category %d action %d\n",
+		    category, action);
+		return (EINVAL);
+		/* NOTREACHED */
+	}
+	m->b_wptr = frm;
+
+	ret = ieee80211_mgmt_output(ic, in, m, IEEE80211_FC0_SUBTYPE_ACTION, 0);
+
+	return (ret);
+#undef ADDSHORT
+}
+
+/*
+ * Construct the MCS bit mask for inclusion
+ * in an HT information element.
+ */
+static void
+ieee80211_set_htrates(uint8_t *frm, const struct ieee80211_htrateset *rs)
+{
+	int i;
+
+	for (i = 0; i < rs->rs_nrates; i++) {
+		int r = rs->rs_rates[i] & IEEE80211_RATE_VAL;
+		if (r < IEEE80211_HTRATE_MAXSIZE) {
+			/* NB: this assumes a particular implementation */
+			ieee80211_setbit(frm, r);
+		}
+	}
+}
+
+/*
+ * Add body of an HTCAP information element.
+ */
+static uint8_t *
+ieee80211_add_htcap_body(uint8_t *frm, struct ieee80211_node *in)
+{
+#define	ADDSHORT(frm, v) do {			\
+        _NOTE(CONSTCOND)                        \
+	frm[0] = (v) & 0xff;			\
+	frm[1] = (v) >> 8;			\
+	frm += 2;				\
+        _NOTE(CONSTCOND)                        \
+} while (0)
+	struct ieee80211com *ic = in->in_ic;
+	uint16_t caps;
+	int rxmax, density;
+
+	/* HT capabilities */
+	caps = ic->ic_htcaps & 0xffff;
+	/*
+	 * Note channel width depends on whether we are operating as
+	 * a sta or not.  When operating as a sta we are generating
+	 * a request based on our desired configuration.  Otherwise
+	 * we are operational and the channel attributes identify
+	 * how we've been setup (which might be different if a fixed
+	 * channel is specified).
+	 */
+	if (ic->ic_opmode == IEEE80211_M_STA) {
+		/* override 20/40 use based on config */
+		if (ic->ic_flags_ext & IEEE80211_FEXT_USEHT40)
+			caps |= IEEE80211_HTCAP_CHWIDTH40;
+		else
+			caps &= ~IEEE80211_HTCAP_CHWIDTH40;
+		/* use advertised setting (locally constraint) */
+		rxmax = MS(in->in_htparam, IEEE80211_HTCAP_MAXRXAMPDU);
+		density = MS(in->in_htparam, IEEE80211_HTCAP_MPDUDENSITY);
+	} else {
+		/* override 20/40 use based on current channel */
+		if (IEEE80211_IS_CHAN_HT40(ic->ic_curchan))
+			caps |= IEEE80211_HTCAP_CHWIDTH40;
+		else
+			caps &= ~IEEE80211_HTCAP_CHWIDTH40;
+		rxmax = ic->ic_ampdu_rxmax;
+		density = ic->ic_ampdu_density;
+	}
+	/* adjust short GI based on channel and config */
+	if ((ic->ic_flags_ext & IEEE80211_FEXT_SHORTGI20) == 0)
+		caps &= ~IEEE80211_HTCAP_SHORTGI20;
+	if ((ic->ic_flags_ext & IEEE80211_FEXT_SHORTGI40) == 0 ||
+	    (caps & IEEE80211_HTCAP_CHWIDTH40) == 0)
+		caps &= ~IEEE80211_HTCAP_SHORTGI40;
+	ADDSHORT(frm, caps);
+
+	/* HT parameters */
+	*frm = SM(rxmax, IEEE80211_HTCAP_MAXRXAMPDU)
+	    | SM(density, IEEE80211_HTCAP_MPDUDENSITY);
+	frm++;
+
+	/* pre-zero remainder of ie */
+	(void) memset(frm, 0, sizeof (struct ieee80211_ie_htcap) -
+	    offsetof(struct ieee80211_ie_htcap, hc_mcsset));
+
+	/* supported MCS set */
+	/*
+	 * it would better to get the rate set from in_htrates
+	 * so we can restrict it but for sta mode in_htrates isn't
+	 * setup when we're called to form an AssocReq frame so for
+	 * now we're restricted to the default HT rate set.
+	 */
+	ieee80211_set_htrates(frm, &ieee80211_rateset_11n);
+
+	frm += sizeof (struct ieee80211_ie_htcap) -
+	    offsetof(struct ieee80211_ie_htcap, hc_mcsset);
+
+	return (frm);
+#undef ADDSHORT
+}
+
+/*
+ * Add 802.11n HT capabilities information element
+ */
+uint8_t *
+ieee80211_add_htcap(uint8_t *frm, struct ieee80211_node *in)
+{
+	frm[0] = IEEE80211_ELEMID_HTCAP;
+	frm[1] = sizeof (struct ieee80211_ie_htcap) - 2;
+	return (ieee80211_add_htcap_body(frm + 2, in));
+}
+
+/*
+ * Add Broadcom OUI wrapped standard HTCAP ie; this is
+ * used for compatibility w/ pre-draft implementations.
+ */
+uint8_t *
+ieee80211_add_htcap_vendor(uint8_t *frm, struct ieee80211_node *in)
+{
+	frm[0] = IEEE80211_ELEMID_VENDOR;
+	frm[1] = 4 + sizeof (struct ieee80211_ie_htcap) - 2;
+	frm[2] = (BCM_OUI >> 0) & 0xff;
+	frm[3] = (BCM_OUI >> 8) & 0xff;
+	frm[4] = (BCM_OUI >> 16) & 0xff;
+	frm[5] = BCM_OUI_HTCAP;
+	return (ieee80211_add_htcap_body(frm + 6, in));
+}
+
+/*
+ * Construct the MCS bit mask of basic rates
+ * for inclusion in an HT information element.
+ */
+static void
+ieee80211_set_basic_htrates(uint8_t *frm, const struct ieee80211_htrateset *rs)
+{
+	int i;
+
+	for (i = 0; i < rs->rs_nrates; i++) {
+		int r = rs->rs_rates[i] & IEEE80211_RATE_VAL;
+		if ((rs->rs_rates[i] & IEEE80211_RATE_BASIC) &&
+		    r < IEEE80211_HTRATE_MAXSIZE) {
+			/* NB: this assumes a particular implementation */
+			ieee80211_setbit(frm, r);
+		}
+	}
+}
+
+/*
+ * Update the HTINFO ie for a beacon frame.
+ */
+void
+ieee80211_ht_update_beacon(struct ieee80211com *ic,
+    struct ieee80211_beacon_offsets *bo)
+{
+#define	PROTMODE	(IEEE80211_HTINFO_OPMODE|IEEE80211_HTINFO_NONHT_PRESENT)
+	struct ieee80211_ie_htinfo *ht =
+	    (struct ieee80211_ie_htinfo *)bo->bo_htinfo;
+
+	/* only update on channel change */
+	ht->hi_ctrlchannel = ieee80211_chan2ieee(ic, ic->ic_curchan);
+	ht->hi_byte1 = IEEE80211_HTINFO_RIFSMODE_PROH;
+	if (IEEE80211_IS_CHAN_HT40U(ic->ic_curchan))
+		ht->hi_byte1 |= IEEE80211_HTINFO_2NDCHAN_ABOVE;
+	else if (IEEE80211_IS_CHAN_HT40D(ic->ic_curchan))
+		ht->hi_byte1 |= IEEE80211_HTINFO_2NDCHAN_BELOW;
+	else	/* LINTED */
+		ht->hi_byte1 |= IEEE80211_HTINFO_2NDCHAN_NONE;
+	if (IEEE80211_IS_CHAN_HT40(ic->ic_curchan))
+		ht->hi_byte1 |= IEEE80211_HTINFO_TXWIDTH_2040;
+
+	/* protection mode */
+	ht->hi_byte2 = (ht->hi_byte2 &~ PROTMODE) | ic->ic_curhtprotmode;
+
+	/* propagate to vendor ie's */
+#undef PROTMODE
+}
+
+/*
+ * Add body of an HTINFO information element.
+ *
+ * NB: We don't use struct ieee80211_ie_htinfo because we can
+ * be called to fillin both a standard ie and a compat ie that
+ * has a vendor OUI at the front.
+ */
+static uint8_t *
+ieee80211_add_htinfo_body(uint8_t *frm, struct ieee80211_node *in)
+{
+	struct ieee80211com *ic = in->in_ic;
+
+	/* pre-zero remainder of ie */
+	(void) memset(frm, 0, sizeof (struct ieee80211_ie_htinfo) - 2);
+
+	/* primary/control channel center */
+	*frm++ = ieee80211_chan2ieee(ic, ic->ic_curchan);
+
+	frm[0] = IEEE80211_HTINFO_RIFSMODE_PROH;
+	if (IEEE80211_IS_CHAN_HT40U(ic->ic_curchan))
+		frm[0] |= IEEE80211_HTINFO_2NDCHAN_ABOVE;
+	else if (IEEE80211_IS_CHAN_HT40D(ic->ic_curchan))
+		frm[0] |= IEEE80211_HTINFO_2NDCHAN_BELOW;
+	else	/* LINTED */
+		frm[0] |= IEEE80211_HTINFO_2NDCHAN_NONE;
+	if (IEEE80211_IS_CHAN_HT40(ic->ic_curchan))
+		frm[0] |= IEEE80211_HTINFO_TXWIDTH_2040;
+
+	frm[1] = ic->ic_curhtprotmode;
+
+	frm += 5;
+
+	/* basic MCS set */
+	ieee80211_set_basic_htrates(frm, &in->in_htrates);
+	frm += sizeof (struct ieee80211_ie_htinfo) -
+	    offsetof(struct ieee80211_ie_htinfo, hi_basicmcsset);
+	return (frm);
+}
+
+/*
+ * Add 802.11n HT information information element.
+ */
+uint8_t *
+ieee80211_add_htinfo(uint8_t *frm, struct ieee80211_node *in)
+{
+	frm[0] = IEEE80211_ELEMID_HTINFO;
+	frm[1] = sizeof (struct ieee80211_ie_htinfo) - 2;
+
+	return (ieee80211_add_htinfo_body(frm + 2, in));
+}
+
+/*
+ * Add Broadcom OUI wrapped standard HTINFO ie; this is
+ * used for compatibility w/ pre-draft implementations.
+ */
+uint8_t *
+ieee80211_add_htinfo_vendor(uint8_t *frm, struct ieee80211_node *in)
+{
+	frm[0] = IEEE80211_ELEMID_VENDOR;
+	frm[1] = 4 + sizeof (struct ieee80211_ie_htinfo) - 2;
+	frm[2] = (BCM_OUI >> 0) & 0xff;
+	frm[3] = (BCM_OUI >> 8) & 0xff;
+	frm[4] = (BCM_OUI >> 16) & 0xff;
+	frm[5] = BCM_OUI_HTINFO;
+
+	return (ieee80211_add_htinfo_body(frm + 6, in));
+}
+
+void
+ieee80211_ht_attach(struct ieee80211com *ic)
+{
+	/* setup default aggregation policy */
+	ic->ic_recv_action = ieee80211_aggr_recv_action;
+	ic->ic_send_action = ieee80211_send_action;
+	ic->ic_addba_request = ieee80211_addba_request;
+	ic->ic_addba_response = ieee80211_addba_response;
+	ic->ic_addba_stop = ieee80211_addba_stop;
+
+	ic->ic_htprotmode = IEEE80211_PROT_RTSCTS;
+	ic->ic_curhtprotmode = IEEE80211_HTINFO_OPMODE_PURE;
+
+	/* get from driver */
+	ic->ic_ampdu_rxmax = IEEE80211_HTCAP_MAXRXAMPDU_8K;
+	ic->ic_ampdu_density = IEEE80211_HTCAP_MPDUDENSITY_NA;
+	ic->ic_ampdu_limit = ic->ic_ampdu_rxmax;
+	ic->ic_amsdu_limit = IEEE80211_HTCAP_MAXAMSDU_3839;
+
+	if (ic->ic_htcaps & IEEE80211_HTC_HT) {
+		/*
+		 * Device is HT capable; enable all HT-related
+		 * facilities by default.
+		 * these choices may be too aggressive.
+		 */
+		ic->ic_flags_ext |= IEEE80211_FEXT_HT | IEEE80211_FEXT_HTCOMPAT;
+		if (ic->ic_htcaps & IEEE80211_HTCAP_SHORTGI20)
+			ic->ic_flags_ext |= IEEE80211_FEXT_SHORTGI20;
+		/* infer from channel list? */
+		if (ic->ic_htcaps & IEEE80211_HTCAP_CHWIDTH40) {
+			ic->ic_flags_ext |= IEEE80211_FEXT_USEHT40;
+			if (ic->ic_htcaps & IEEE80211_HTCAP_SHORTGI40)
+				ic->ic_flags_ext |= IEEE80211_FEXT_SHORTGI40;
+		}
+		/* NB: A-MPDU and A-MSDU rx are mandated, these are tx only */
+		ic->ic_flags_ext |= IEEE80211_FEXT_AMPDU_RX;
+		if (ic->ic_htcaps & IEEE80211_HTC_AMPDU)
+			ic->ic_flags_ext |= IEEE80211_FEXT_AMPDU_TX;
+		ic->ic_flags_ext |= IEEE80211_FEXT_AMSDU_RX;
+		if (ic->ic_htcaps & IEEE80211_HTC_AMSDU)
+			ic->ic_flags_ext |= IEEE80211_FEXT_AMSDU_TX;
+	}
+
+#define	ieee80211_isset16(a, i)	((a) & (1 << (i)))
+	/* fill default rate sets for 11NA/11NG if driver has no specified */
+	if (ieee80211_isset16(ic->ic_modecaps, IEEE80211_MODE_11NA) &&
+	    ic->ic_sup_rates[IEEE80211_MODE_11NA].ir_nrates == 0) {
+		ic->ic_sup_rates[IEEE80211_MODE_11NA] =
+		    ic->ic_sup_rates[IEEE80211_MODE_11A];
+	}
+
+	if (ieee80211_isset16(ic->ic_modecaps, IEEE80211_MODE_11NG) &&
+	    ic->ic_sup_rates[IEEE80211_MODE_11NG].ir_nrates == 0) {
+		ic->ic_sup_rates[IEEE80211_MODE_11NG] =
+		    ic->ic_sup_rates[IEEE80211_MODE_11G];
+	}
+#undef ieee80211_isset16
+}
+
+/* ARGSUSED */
+void
+ieee80211_ht_detach(struct ieee80211com *ic)
+{
+}
+
+/* ARGSUSED */
+static void
+ht_announce(struct ieee80211com *ic, int mode,
+	const struct ieee80211_htrateset *rs)
+{
+	int i, rate;
+
+	ieee80211_dbg(IEEE80211_MSG_HT, "%s MCS: \n",
+	    ieee80211_phymode_name[mode]);
+	for (i = 0; i < rs->rs_nrates; i++) {
+		rate = ieee80211_htrates[rs->rs_rates[i]];
+		ieee80211_dbg(IEEE80211_MSG_HT, "%s%d%sMbps\n",
+		    (i != 0 ? " " : ""),
+		    rate / 2, ((rate & 0x1) != 0 ? ".5" : ""));
+	}
+}
+
+void
+ieee80211_ht_announce(struct ieee80211com *ic)
+{
+	if (ic->ic_modecaps & (1 << IEEE80211_MODE_11NA))
+		ht_announce(ic, IEEE80211_MODE_11NA, &ieee80211_rateset_11n);
+	if (ic->ic_modecaps & (1 << IEEE80211_MODE_11NG))
+		ht_announce(ic, IEEE80211_MODE_11NG, &ieee80211_rateset_11n);
+}
+
+/* ARGSUSED */
+const struct ieee80211_htrateset *
+ieee80211_get_suphtrates(struct ieee80211com *ic,
+	const struct ieee80211_channel *c)
+{
+	return (&ieee80211_rateset_11n);
+}
--- a/usr/src/uts/common/io/net80211/net80211_impl.h	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/uts/common/io/net80211/net80211_impl.h	Mon Aug 10 10:43:48 2009 -0400
@@ -1,11 +1,11 @@
 /*
- * Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
+ * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
  * Use is subject to license terms.
  */
 
 /*
  * Copyright (c) 2001 Atsushi Onoe
- * Copyright (c) 2002-2005 Sam Leffler, Errno Consulting
+ * Copyright (c) 2002-2008 Sam Leffler, Errno Consulting
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -133,12 +133,15 @@
 	(IEEE80211_CHAN_5GHZ | IEEE80211_CHAN_OFDM | IEEE80211_CHAN_TURBO)
 #define	IEEE80211_CHAN_108G	\
 	(IEEE80211_CHAN_2GHZ | IEEE80211_CHAN_OFDM | IEEE80211_CHAN_TURBO)
+#define	IEEE80211_CHAN_ST	\
+	(IEEE80211_CHAN_T | IEEE80211_CHAN_STURBO)
 
 #define	IEEE80211_CHAN_ALL	\
 	(IEEE80211_CHAN_2GHZ | IEEE80211_CHAN_5GHZ | IEEE80211_CHAN_GFSK | \
-	IEEE80211_CHAN_CCK | IEEE80211_CHAN_OFDM | IEEE80211_CHAN_DYN)
+	IEEE80211_CHAN_CCK | IEEE80211_CHAN_OFDM | IEEE80211_CHAN_DYN |	\
+	IEEE80211_CHAN_HT)
 #define	IEEE80211_CHAN_ALLTURBO	\
-	(IEEE80211_CHAN_ALL | IEEE80211_CHAN_TURBO)
+	(IEEE80211_CHAN_ALL | IEEE80211_CHAN_TURBO | IEEE80211_CHAN_STURBO)
 
 #define	IEEE80211_IS_CHAN_FHSS(_c)	\
 	(((_c)->ich_flags & IEEE80211_CHAN_FHSS) == IEEE80211_CHAN_FHSS)
@@ -154,8 +157,11 @@
 	(IEEE80211_IS_CHAN_PUREG(_c) || IEEE80211_IS_CHAN_G(_c))
 #define	IEEE80211_IS_CHAN_T(_c)		\
 	(((_c)->ich_flags & IEEE80211_CHAN_T) == IEEE80211_CHAN_T)
+		/* IEEE80211_IS_CHAN_108A */
 #define	IEEE80211_IS_CHAN_108G(_c)	\
 	(((_c)->ich_flags & IEEE80211_CHAN_108G) == IEEE80211_CHAN_108G)
+#define	IEEE80211_IS_CHAN_ST(_c)	\
+	(((_c)->ich_flags & IEEE80211_CHAN_ST) == IEEE80211_CHAN_ST)
 
 #define	IEEE80211_IS_CHAN_OFDM(_c)	\
 	((_c)->ich_flags & IEEE80211_CHAN_OFDM)
@@ -166,6 +172,45 @@
 #define	IEEE80211_IS_CHAN_PASSIVE(_c)	\
 	((_c)->ich_flags & IEEE80211_CHAN_PASSIVE)
 
+#define	IEEE80211_IS_CHAN_STURBO(_c) \
+	((_c)->ich_flags & IEEE80211_CHAN_STURBO)
+#define	IEEE80211_IS_CHAN_DTURBO(_c) \
+	(((_c)->ich_flags & \
+	(IEEE80211_CHAN_TURBO | IEEE80211_CHAN_STURBO)) == IEEE80211_CHAN_TURBO)
+#define	IEEE80211_IS_CHAN_HALF(_c) \
+	((_c)->ich_flags & IEEE80211_CHAN_HALF)
+#define	IEEE80211_IS_CHAN_QUARTER(_c) \
+	((_c)->ich_flags & IEEE80211_CHAN_QUARTER)
+#define	IEEE80211_IS_CHAN_FULL(_c) \
+	((_c)->ich_flags & (IEEE80211_CHAN_QUARTER | IEEE80211_CHAN_HALF))
+#define	IEEE80211_IS_CHAN_GSM(_c) \
+	((_c)->ich_flags & IEEE80211_CHAN_GSM)
+
+#define	IEEE80211_IS_CHAN_HT(_c) \
+	((_c)->ich_flags & IEEE80211_CHAN_HT)
+#define	IEEE80211_IS_CHAN_HT20(_c) \
+	((_c)->ich_flags & IEEE80211_CHAN_HT20)
+#define	IEEE80211_IS_CHAN_HT40(_c) \
+	((_c)->ich_flags & IEEE80211_CHAN_HT40)
+#define	IEEE80211_IS_CHAN_HT40U(_c) \
+	((_c)->ich_flags & IEEE80211_CHAN_HT40U)
+#define	IEEE80211_IS_CHAN_HT40D(_c) \
+	((_c)->ich_flags & IEEE80211_CHAN_HT40D)
+#define	IEEE80211_IS_CHAN_HTA(_c) \
+	(IEEE80211_IS_CHAN_5GHZ(_c) && \
+	((_c)->ich_flags & IEEE80211_CHAN_HT))
+#define	IEEE80211_IS_CHAN_HTG(_c) \
+	(IEEE80211_IS_CHAN_2GHZ(_c) && \
+	((_c)->ich_flags & IEEE80211_CHAN_HT))
+#define	IEEE80211_IS_CHAN_DFS(_c) \
+	((_c)->ich_flags & IEEE80211_CHAN_DFS)
+#define	IEEE80211_IS_CHAN_NOADHOC(_c) \
+	((_c)->ich_flags & IEEE80211_CHAN_NOADHOC)
+#define	IEEE80211_IS_CHAN_NOHOSTAP(_c) \
+	((_c)->ich_flags & IEEE80211_CHAN_NOHOSTAP)
+#define	IEEE80211_IS_CHAN_11D(_c) \
+	((_c)->ich_flags & IEEE80211_CHAN_11D)
+
 /* ni_chan encoding for FH phy */
 #define	IEEE80211_FH_CHANMOD	80
 #define	IEEE80211_FH_CHAN(set, pat)	\
@@ -211,6 +256,8 @@
 #define	IEEE80211_MSG_INACT	0x00000080	/* inactivity handling */
 #define	IEEE80211_MSG_ROAM	0x00000040	/* sta-mode roaming */
 #define	IEEE80211_MSG_CONFIG	0x00000020	/* wificonfig/dladm */
+#define	IEEE80211_MSG_ACTION	0x00000010	/* action frame handling */
+#define	IEEE80211_MSG_HT	0x00000008	/* 11n mode debug */
 #define	IEEE80211_MSG_ANY	0xffffffff	/* anything */
 
 /* Error flags returned by ieee80211_match_bss */
@@ -268,6 +315,8 @@
 	uint8_t			*xrates;
 	uint8_t			*wpa;
 	uint8_t			*wme;
+	uint8_t			*htcap;
+	uint8_t			*htinfo;
 };
 
 #define	IEEE80211_SEND_MGMT(_ic, _in, _type, _arg)			\
@@ -351,7 +400,6 @@
 
 void ieee80211_err(const int8_t *, ...);
 void ieee80211_dbg(uint32_t, const int8_t *, ...);
-int ieee80211_hdrspace(const void *);
 
 void ieee80211_notify(ieee80211com_t *, wpa_event_type);
 void ieee80211_mac_update(ieee80211com_t *);
@@ -374,10 +422,11 @@
 ieee80211_node_t *ieee80211_fakeup_adhoc_node(ieee80211_node_table_t *,
     const uint8_t *);
 ieee80211_node_t *ieee80211_tmp_node(ieee80211com_t *, const uint8_t *);
+void ieee80211_setcurchan(ieee80211com_t *, struct ieee80211_channel *);
 
 /* proto */
 void ieee80211_proto_attach(ieee80211com_t *);
-int ieee80211_fix_rate(ieee80211_node_t *, int);
+int ieee80211_fix_rate(ieee80211_node_t *, struct ieee80211_rateset *, int);
 void ieee80211_setbasicrates(struct ieee80211_rateset *,
     enum ieee80211_phymode);
 void ieee80211_reset_erp(ieee80211com_t *);
@@ -395,6 +444,8 @@
     size_t);
 int ieee80211_send_mgmt(ieee80211com_t *, ieee80211_node_t *, int, int);
 int ieee80211_send_nulldata(ieee80211_node_t *);
+int ieee80211_mgmt_output(ieee80211com_t *, ieee80211_node_t *, mblk_t *,
+    int, int);
 
 /* crypto */
 struct ieee80211_key *ieee80211_crypto_getkey(ieee80211com_t *);
@@ -405,6 +456,10 @@
 void ieee80211_notify_node_join(ieee80211com_t *, ieee80211_node_t *);
 void ieee80211_notify_node_leave(ieee80211com_t *, ieee80211_node_t *);
 
+/* WME */
+void	ieee80211_wme_initparams(struct ieee80211com *);
+void	ieee80211_wme_updateparams(struct ieee80211com *);
+
 #ifdef	__cplusplus
 }
 #endif
--- a/usr/src/uts/common/io/net80211/net80211_input.c	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/uts/common/io/net80211/net80211_input.c	Mon Aug 10 10:43:48 2009 -0400
@@ -71,6 +71,27 @@
 	uint8_t type;
 	uint8_t subtype;
 	uint8_t tid;
+	uint8_t qos;
+
+	if (mp->b_flag & M_AMPDU) {
+		/*
+		 * Fastpath for A-MPDU reorder q resubmission.  Frames
+		 * w/ M_AMPDU marked have already passed through here
+		 * but were received out of order and been held on the
+		 * reorder queue.  When resubmitted they are marked
+		 * with the M_AMPDU flag and we can bypass most of the
+		 * normal processing.
+		 */
+		IEEE80211_LOCK(ic);
+		wh = (struct ieee80211_frame *)mp->b_rptr;
+		type = IEEE80211_FC0_TYPE_DATA;
+		dir = wh->i_fc[1] & IEEE80211_FC1_DIR_MASK;
+		subtype = IEEE80211_FC0_SUBTYPE_QOS;
+		hdrspace = ieee80211_hdrspace(ic, wh);	/* optimize */
+		/* clear driver/net80211 flags before passing up */
+		mp->b_flag &= ~M_AMPDU;
+		goto resubmit_ampdu;
+	}
 
 	ASSERT(in != NULL);
 	in->in_inact = in->in_inact_reload;
@@ -160,9 +181,18 @@
 		in->in_rssi = (uint8_t)rssi;
 		in->in_rstamp = rstamp;
 		if (!(type & IEEE80211_FC0_TYPE_CTL)) {
-			tid = 0;
+			if (IEEE80211_QOS_HAS_SEQ(wh)) {
+				tid = ((struct ieee80211_qosframe *)wh)->
+				    i_qos[0] & IEEE80211_QOS_TID;
+				if (TID_TO_WME_AC(tid) >= WME_AC_VI)
+					ic->ic_wme.wme_hipri_traffic++;
+				tid++;
+			} else {
+				tid = IEEE80211_NONQOS_TID;
+			}
 			rxseq = LE_16(*(uint16_t *)wh->i_seq);
-			if ((wh->i_fc[1] & IEEE80211_FC1_RETRY) &&
+			if ((in->in_flags & IEEE80211_NODE_HT) == 0 &&
+			    (wh->i_fc[1] & IEEE80211_FC1_RETRY) &&
 			    (rxseq - in->in_rxseqs[tid]) <= 0) {
 				/* duplicate, discard */
 				ieee80211_dbg(IEEE80211_MSG_INPUT,
@@ -184,7 +214,7 @@
 
 	switch (type) {
 	case IEEE80211_FC0_TYPE_DATA:
-		hdrspace = ieee80211_hdrspace(wh);
+		hdrspace = ieee80211_hdrspace(ic, wh);
 		if (len < hdrspace) {
 			ieee80211_dbg(IEEE80211_MSG_ANY, "ieee80211_input: "
 			    "data too short: expecting %u", hdrspace);
@@ -228,6 +258,26 @@
 		}
 
 		/*
+		 * Handle A-MPDU re-ordering.  The station must be
+		 * associated and negotiated HT.  The frame must be
+		 * a QoS frame (not QoS null data) and not previously
+		 * processed for A-MPDU re-ordering.  If the frame is
+		 * to be processed directly then ieee80211_ampdu_reorder
+		 * will return 0; otherwise it has consumed the mbuf
+		 * and we should do nothing more with it.
+		 */
+		if ((in->in_flags & IEEE80211_NODE_HT) &&
+		    (subtype == IEEE80211_FC0_SUBTYPE_QOS)) {
+			IEEE80211_UNLOCK(ic);
+			if (ieee80211_ampdu_reorder(in, mp) != 0) {
+				mp = NULL;	/* CONSUMED */
+				goto out;
+			}
+			IEEE80211_LOCK(ic);
+		}
+	resubmit_ampdu:
+
+		/*
 		 * Handle privacy requirements.
 		 */
 		if (wh->i_fc[1] & IEEE80211_FC1_WEP) {
@@ -253,6 +303,17 @@
 		}
 
 		/*
+		 * Save QoS bits for use below--before we strip the header.
+		 */
+		if (subtype == IEEE80211_FC0_SUBTYPE_QOS) {
+			qos = (dir == IEEE80211_FC1_DIR_DSTODS) ?
+			    ((struct ieee80211_qosframe_addr4 *)wh)->i_qos[0] :
+			    ((struct ieee80211_qosframe *)wh)->i_qos[0];
+		} else {
+			qos = 0;
+		}
+
+		/*
 		 * Next up, any fragmentation
 		 */
 		if (!IEEE80211_IS_MULTICAST(wh->i_addr1)) {
@@ -273,6 +334,15 @@
 			goto out_exit_mutex;
 		}
 
+		if (qos & IEEE80211_QOS_AMSDU) {
+			ieee80211_dbg(IEEE80211_MSG_INPUT | IEEE80211_MSG_HT,
+			    "ieee80211_input: QOS_AMSDU (%x)\n", qos);
+
+			mp = ieee80211_decap_amsdu(in, mp);
+			if (mp == NULL)		/* MSDU processed by HT */
+				goto out_exit_mutex;
+		}
+
 		ic->ic_stats.is_rx_frags++;
 		ic->ic_stats.is_rx_bytes += len;
 		IEEE80211_UNLOCK(ic);
@@ -307,7 +377,7 @@
 				ic->ic_stats.is_wep_errors++;
 				goto out_exit_mutex;
 			}
-			hdrspace = ieee80211_hdrspace(wh);
+			hdrspace = ieee80211_hdrspace(ic, wh);
 			key = ieee80211_crypto_decap(ic, mp, hdrspace);
 			if (key == NULL) {
 				/* NB: stats+msgs handled in crypto_decap */
@@ -321,6 +391,15 @@
 		goto out;
 
 	case IEEE80211_FC0_TYPE_CTL:
+		if (ic->ic_opmode == IEEE80211_M_HOSTAP) {
+			switch (subtype) {
+			case IEEE80211_FC0_SUBTYPE_BAR:
+				ieee80211_recv_bar(in, mp);
+				break;
+			}
+		}
+		break;
+
 	default:
 		ieee80211_dbg(IEEE80211_MSG_ANY, "ieee80211_input: "
 		    "bad frame type 0x%x", type);
@@ -464,7 +543,7 @@
 		bcopy(xrates + 2, rs->ir_rates + rs->ir_nrates, nxrates);
 		rs->ir_nrates += nxrates;
 	}
-	return (ieee80211_fix_rate(in, flags));
+	return (ieee80211_fix_rate(in, &in->in_rates, flags));
 }
 
 /*
@@ -654,6 +733,89 @@
 	return (frm[1] > 3 && LE_32(c) == ((WPA_OUI_TYPE << 24) | WPA_OUI));
 }
 
+#define	LE_READ_4(p)							\
+	((uint32_t)							\
+	((((uint8_t *)(p))[0]) | (((uint8_t *)(p))[1] <<  8) |		\
+	(((uint8_t *)(p))[2] << 16) | (((uint8_t *)(p))[3] << 24)))
+
+#define	LE_READ_2(p)							\
+	((uint16_t)							\
+	(((uint8_t *)(p))[0]) | (((uint8_t *)(p))[1] <<  8))
+
+static int
+iswmeoui(const uint8_t *frm)
+{
+	return (frm[1] > 3 && LE_READ_4(frm+2) == ((WME_OUI_TYPE<<24)|WME_OUI));
+}
+
+static int
+iswmeparam(const uint8_t *frm)
+{
+	return (frm[1] > 5 &&
+	    LE_READ_4(frm+2) == ((WME_OUI_TYPE<<24)|WME_OUI) &&
+	    frm[6] == WME_PARAM_OUI_SUBTYPE);
+}
+
+static int
+iswmeinfo(const uint8_t *frm)
+{
+	return (frm[1] > 5 &&
+	    LE_READ_4(frm+2) == ((WME_OUI_TYPE<<24)|WME_OUI) &&
+	    frm[6] == WME_INFO_OUI_SUBTYPE);
+}
+
+static int
+ishtcapoui(const uint8_t *frm)
+{
+	return (frm[1] > 3 &&
+	    LE_READ_4(frm+2) == ((BCM_OUI_HTCAP<<24)|BCM_OUI));
+}
+
+static int
+ishtinfooui(const uint8_t *frm)
+{
+	return (frm[1] > 3 &&
+	    LE_READ_4(frm+2) == ((BCM_OUI_HTINFO<<24)|BCM_OUI));
+}
+
+/* ARGSUSED */
+static int
+ieee80211_parse_wmeparams(struct ieee80211com *ic, uint8_t *frm,
+	const struct ieee80211_frame *wh)
+{
+#define	MS(_v, _f)	(((_v) & _f) >> _f##_S)
+	struct ieee80211_wme_state *wme = &ic->ic_wme;
+	uint_t len = frm[1];
+	uint8_t qosinfo;
+	int i;
+
+	if (len < sizeof (struct ieee80211_wme_param) - 2) {
+		ieee80211_dbg(IEEE80211_MSG_ELEMID | IEEE80211_MSG_WME,
+		    "WME too short, len %u", len);
+		return (-1);
+	}
+	qosinfo = frm[offsetof(struct ieee80211_wme_param, wme_qosInfo)];
+	qosinfo &= WME_QOSINFO_COUNT;
+	/* do proper check for wraparound */
+	if (qosinfo == wme->wme_wmeChanParams.cap_info)
+		return (0);
+	frm += offsetof(struct ieee80211_wme_param, wme_acParams);
+	for (i = 0; i < WME_NUM_AC; i++) {
+		struct wmeParams *wmep =
+		    &wme->wme_wmeChanParams.cap_wmeParams[i];
+		/* NB: ACI not used */
+		wmep->wmep_acm = MS(frm[0], WME_PARAM_ACM);
+		wmep->wmep_aifsn = MS(frm[0], WME_PARAM_AIFSN);
+		wmep->wmep_logcwmin = MS(frm[1], WME_PARAM_LOGCWMIN);
+		wmep->wmep_logcwmax = MS(frm[1], WME_PARAM_LOGCWMAX);
+		wmep->wmep_txopLimit = LE_READ_2(frm+2);
+		frm += 4;
+	}
+	wme->wme_wmeChanParams.cap_info = qosinfo;
+	return (1);
+#undef MS
+}
+
 /*
  * Process a beacon/probe response frame.
  * When the device is in station mode, create a node and add it
@@ -701,6 +863,8 @@
 	 *	[tlv] extended supported rates
 	 *	[tlv] WME
 	 *	[tlv] WPA or RSN
+	 *	[tlv] HT capabilities
+	 *	[tlv] HT information
 	 */
 	IEEE80211_VERIFY_LENGTH(_PTRDIFF(efrm, frm),
 	    IEEE80211_BEACON_ELEM_MIN, return);
@@ -769,12 +933,33 @@
 			scan.erp = frm[2];
 			scan.phytype = IEEE80211_T_OFDM;
 			break;
+		case IEEE80211_ELEMID_HTCAP:
+			scan.htcap = frm;
+			break;
 		case IEEE80211_ELEMID_RSN:
 			scan.wpa = frm;
 			break;
+		case IEEE80211_ELEMID_HTINFO:
+			scan.htinfo = frm;
+			break;
 		case IEEE80211_ELEMID_VENDOR:
 			if (iswpaoui(frm))
 				scan.wpa = frm;		/* IEEE802.11i D3.0 */
+			else if (iswmeparam(frm) || iswmeinfo(frm))
+				scan.wme = frm;
+			else if (ic->ic_flags_ext & IEEE80211_FEXT_HTCOMPAT) {
+				/*
+				 * Accept pre-draft HT ie's if the
+				 * standard ones have not been seen.
+				 */
+				if (ishtcapoui(frm)) {
+					if (scan.htcap == NULL)
+						scan.htcap = frm;
+				} else if (ishtinfooui(frm)) {
+					if (scan.htinfo == NULL)
+						scan.htinfo = frm;
+				}
+			}
 			break;
 		default:
 			ieee80211_dbg(IEEE80211_MSG_ELEMID,
@@ -824,6 +1009,25 @@
 		    IEEE80211_SUBTYPE_NAME(subtype), scan.bintval);
 		return;
 	}
+	/*
+	 * Process HT ie's.  This is complicated by our
+	 * accepting both the standard ie's and the pre-draft
+	 * vendor OUI ie's that some vendors still use/require.
+	 */
+	if (scan.htcap != NULL) {
+		IEEE80211_VERIFY_LENGTH(scan.htcap[1],
+		    scan.htcap[0] == IEEE80211_ELEMID_VENDOR ?
+		    4 + sizeof (struct ieee80211_ie_htcap) - 2 :
+		    sizeof (struct ieee80211_ie_htcap) - 2,
+		    scan.htcap = NULL);
+	}
+	if (scan.htinfo != NULL) {
+		IEEE80211_VERIFY_LENGTH(scan.htinfo[1],
+		    scan.htinfo[0] == IEEE80211_ELEMID_VENDOR ?
+		    4 + sizeof (struct ieee80211_ie_htinfo) - 2 :
+		    sizeof (struct ieee80211_ie_htinfo) - 2,
+		    scan.htinfo = NULL);
+	}
 
 	/*
 	 * When operating in station mode, check for state updates.
@@ -858,7 +1062,24 @@
 			    IEEE80211_CAPINFO_SHORT_SLOTTIME));
 			in->in_capinfo = scan.capinfo;
 		}
-
+		if (scan.wme != NULL &&
+		    (in->in_flags & IEEE80211_NODE_QOS) &&
+		    ieee80211_parse_wmeparams(ic, scan.wme, wh) > 0) {
+			ieee80211_wme_updateparams(ic);
+		}
+		if (scan.htcap != NULL)
+			ieee80211_parse_htcap(in, scan.htcap);
+		if (scan.htinfo != NULL) {
+			ieee80211_parse_htinfo(in, scan.htinfo);
+			if (in->in_chan != ic->ic_curchan) {
+				/*
+				 * Channel has been adjusted based on
+				 * negotiated HT parameters; force the
+				 * channel state to follow.
+				 */
+				ieee80211_setcurchan(ic, in->in_chan);
+			}
+		}
 		if (scan.tim != NULL) {
 			struct ieee80211_tim_ie *ie;
 
@@ -918,6 +1139,8 @@
 	uint8_t *ssid;
 	uint8_t *rates;
 	uint8_t *xrates;	/* extended rates */
+	uint8_t	*wme;
+	uint8_t *htcap, *htinfo;
 	boolean_t allocbs = B_FALSE;
 	uint8_t rate;
 	uint16_t algo;		/* authentication algorithm */
@@ -925,6 +1148,7 @@
 	uint16_t status;
 	uint16_t capinfo;
 	uint16_t associd;	/* association ID */
+	const struct ieee80211_action *ia;
 
 	IEEE80211_LOCK(ic);
 	wh = (struct ieee80211_frame *)mp->b_rptr;
@@ -1086,6 +1310,8 @@
 		 *	[tlv] supported rates
 		 *	[tlv] extended supported rates
 		 *	[tlv] WME
+		 *	[tlv] HT capabilities
+		 *	[tlv] HT info
 		 */
 		IEEE80211_VERIFY_LENGTH(_PTRDIFF(efrm, frm),
 		    IEEE80211_ASSOC_RESP_ELEM_MIN, break);
@@ -1107,7 +1333,7 @@
 		associd = LE_16(*(uint16_t *)frm);
 		frm += 2;
 
-		rates = xrates = NULL;
+		rates = xrates = wme = htcap = htinfo = NULL;
 		while (frm < efrm) {
 			/*
 			 * Do not discard frames containing proprietary Agere
@@ -1131,6 +1357,30 @@
 			case IEEE80211_ELEMID_XRATES:
 				xrates = frm;
 				break;
+			case IEEE80211_ELEMID_HTCAP:
+				htcap = frm;
+				break;
+			case IEEE80211_ELEMID_HTINFO:
+				htinfo = frm;
+				break;
+			case IEEE80211_ELEMID_VENDOR:
+				if (iswmeoui(frm))
+					wme = frm;
+				else if (ic->ic_flags_ext &
+				    IEEE80211_FEXT_HTCOMPAT) {
+					/*
+					 * Accept pre-draft HT ie's if the
+					 * standard ones have not been seen.
+					 */
+					if (ishtcapoui(frm)) {
+						if (htcap == NULL)
+							htcap = frm;
+					} else if (ishtinfooui(frm)) {
+						if (htinfo == NULL)
+							htinfo = frm;
+					}
+				}
+				break;
 			}
 			frm += frm[1] + 2;
 		}
@@ -1157,7 +1407,32 @@
 
 		in->in_capinfo = capinfo;
 		in->in_associd = associd;
-		in->in_flags &= ~IEEE80211_NODE_QOS;
+		if (wme != NULL &&
+		    ieee80211_parse_wmeparams(ic, wme, wh) >= 0) {
+			in->in_flags |= IEEE80211_NODE_QOS;
+			ieee80211_wme_updateparams(ic);
+		} else {
+			in->in_flags &= ~IEEE80211_NODE_QOS;
+		}
+		/*
+		 * Setup HT state according to the negotiation.
+		 */
+		if ((ic->ic_htcaps & IEEE80211_HTC_HT) &&
+		    htcap != NULL && htinfo != NULL) {
+			ieee80211_ht_node_init(in, htcap);
+			ieee80211_parse_htinfo(in, htinfo);
+			(void) ieee80211_setup_htrates(in,
+			    htcap, IEEE80211_F_JOIN | IEEE80211_F_DOBRS);
+			ieee80211_setup_basic_htrates(in, htinfo);
+			if (in->in_chan != ic->ic_curchan) {
+				/*
+				 * Channel has been adjusted based on
+				 * negotiated HT parameters; force the
+				 * channel state to follow.
+				 */
+				ieee80211_setcurchan(ic, in->in_chan);
+			}
+		}
 		/*
 		 * Configure state now that we are associated.
 		 */
@@ -1242,6 +1517,57 @@
 		}
 		break;
 
+	case IEEE80211_FC0_SUBTYPE_ACTION:
+		if (ic->ic_state != IEEE80211_S_RUN &&
+		    ic->ic_state != IEEE80211_S_ASSOC &&
+		    ic->ic_state != IEEE80211_S_AUTH)
+			break;
+
+		/*
+		 * action frame format:
+		 *	[1] category
+		 *	[1] action
+		 *	[tlv] parameters
+		 */
+		IEEE80211_VERIFY_LENGTH(_PTRDIFF(efrm, frm),
+		    sizeof (struct ieee80211_action), break);
+		ia = (const struct ieee80211_action *) frm;
+
+		/* verify frame payloads but defer processing */
+		/* maybe push this to method */
+		switch (ia->ia_category) {
+		case IEEE80211_ACTION_CAT_BA:
+			switch (ia->ia_action) {
+			case IEEE80211_ACTION_BA_ADDBA_REQUEST:
+			IEEE80211_VERIFY_LENGTH(_PTRDIFF(efrm, frm),
+			    sizeof (struct ieee80211_action_ba_addbarequest),
+			    break);
+			break;
+			case IEEE80211_ACTION_BA_ADDBA_RESPONSE:
+			IEEE80211_VERIFY_LENGTH(_PTRDIFF(efrm, frm),
+			    sizeof (struct ieee80211_action_ba_addbaresponse),
+			    break);
+			break;
+			case IEEE80211_ACTION_BA_DELBA:
+			IEEE80211_VERIFY_LENGTH(_PTRDIFF(efrm, frm),
+			    sizeof (struct ieee80211_action_ba_delba),
+			    break);
+			break;
+			}
+			break;
+		case IEEE80211_ACTION_CAT_HT:
+			switch (ia->ia_action) {
+			case IEEE80211_ACTION_HT_TXCHWIDTH:
+			IEEE80211_VERIFY_LENGTH(_PTRDIFF(efrm, frm),
+			    sizeof (struct ieee80211_action_ht_txchwidth),
+			    break);
+			break;
+			}
+			break;
+		}
+		ic->ic_recv_action(in, frm, efrm);
+		break;
+
 	default:
 		ieee80211_dbg(IEEE80211_MSG_ANY, "ieee80211_recv_mgmt: "
 		    "subtype 0x%x not handled\n", subtype);
--- a/usr/src/uts/common/io/net80211/net80211_ioctl.c	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/uts/common/io/net80211/net80211_ioctl.c	Mon Aug 10 10:43:48 2009 -0400
@@ -719,6 +719,7 @@
 }
 
 #define	WIFI_HAVE_CAP(in, flag)	(((in)->in_capinfo & (flag)) ? 1 : 0)
+#define	WIFI_HAVE_HTCAP(in)	(((in)->in_htcap != 0) ? 1 : 0)
 
 /*
  * Callback function used by ieee80211_iterate_nodes() in
@@ -768,6 +769,7 @@
 		    (wl_ofdm_t *)&((conf->wl_phy_conf).wl_phy_ofdm_conf);
 		ofdm->wl_ofdm_subtype = WL_OFDM;
 		ofdm->wl_ofdm_frequency = chan->ich_freq;
+		ofdm->wl_ofdm_ht_enabled = WIFI_HAVE_HTCAP(in);
 	} else {
 		switch (in->in_phytype) {
 		case IEEE80211_T_FH: {
@@ -809,6 +811,7 @@
 			    WIFI_HAVE_CAP(in, IEEE80211_CAPINFO_DSSSOFDM);
 			erp->wl_erp_sst_enabled = WIFI_HAVE_CAP(in,
 			    IEEE80211_CAPINFO_SHORT_SLOTTIME);
+			erp->wl_erp_ht_enabled = WIFI_HAVE_HTCAP(in);
 			break;
 		} /* case IEEE80211_T_OFDM */
 		} /* switch in->in_phytype */
@@ -1863,12 +1866,15 @@
 	return (err);
 }
 
+#define	WIFI_HT_MODE(in)	(((in)->in_flags & IEEE80211_NODE_HT) ? 1 : 0)
+
 static int
 wl_get_phy(struct ieee80211com *ic, void *wldp_buf)
 {
 	int err = 0;
 	wl_phy_conf_t *ow_phy;
 	struct ieee80211_channel *ch = ic->ic_curchan;
+	struct ieee80211_node *in = ic->ic_bss;
 
 	ow_phy = (wl_phy_conf_t *)wldp_buf;
 	bzero(wldp_buf, sizeof (wl_phy_conf_t));
@@ -1878,6 +1884,7 @@
 		wl_ofdm_t *ofdm = (wl_ofdm_t *)ow_phy;
 		ofdm->wl_ofdm_subtype = WL_OFDM;
 		ofdm->wl_ofdm_frequency = ch->ich_freq;
+		ofdm->wl_ofdm_ht_enabled = WIFI_HT_MODE(in);
 	} else {
 		switch (ic->ic_phytype) {
 		case IEEE80211_T_FH: {
@@ -1899,6 +1906,7 @@
 			erp->wl_erp_subtype = WL_ERP;
 			erp->wl_erp_channel =
 			    ieee80211_chan2ieee(ic, ch);
+			erp->wl_erp_ht_enabled = WIFI_HT_MODE(in);
 			break;
 		}
 		default:
--- a/usr/src/uts/common/io/net80211/net80211_node.c	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/uts/common/io/net80211/net80211_node.c	Mon Aug 10 10:43:48 2009 -0400
@@ -184,7 +184,18 @@
 	if (chan == IEEE80211_CHAN_ANYC)
 		chan = ic->ic_curchan;
 	in->in_chan = chan;
-	in->in_rates = ic->ic_sup_rates[ieee80211_chan2mode(ic, chan)];
+	if (IEEE80211_IS_CHAN_HT(chan)) {
+		/*
+		 * Gotta be careful here; the rate set returned by
+		 * ieee80211_get_suprates is actually any HT rate
+		 * set so blindly copying it will be bad.  We must
+		 * install the legacy rate est in ni_rates and the
+		 * HT rate set in ni_htrates.
+		 */
+		in->in_htrates = *ieee80211_get_suphtrates(ic, chan);
+	}
+	in->in_rates = *ieee80211_get_suprates(ic, chan);
+	/* in->in_rates = ic->ic_sup_rates[ieee80211_chan2mode(ic, chan)]; */
 }
 
 /*
@@ -434,7 +445,8 @@
 		if (in->in_capinfo & IEEE80211_CAPINFO_PRIVACY)
 			fail |= IEEE80211_BADPRIVACY;
 	}
-	rate = ieee80211_fix_rate(in, IEEE80211_F_DONEGO | IEEE80211_F_DOFRATE);
+	rate = ieee80211_fix_rate(in, &in->in_rates,
+	    IEEE80211_F_DONEGO | IEEE80211_F_DOFRATE);
 	if (rate & IEEE80211_RATE_BASIC)
 		fail |= IEEE80211_BADRATE;
 	if (ic->ic_des_esslen != 0 &&
@@ -660,6 +672,18 @@
 }
 
 /*
+ * Change the bss channel.
+ */
+void
+ieee80211_setcurchan(ieee80211com_t *ic, struct ieee80211_channel *c)
+{
+	ic->ic_curchan = c;
+	ic->ic_curmode = ieee80211_chan2mode(ic, ic->ic_curchan);
+	if (ic->ic_set_channel != NULL)
+		ic->ic_set_channel(ic);
+}
+
+/*
  * Join the specified IBSS/BSS network.  The node is assumed to
  * be passed in with a held reference.
  */
@@ -677,7 +701,8 @@
 		 * Delete unusable rates; we've already checked
 		 * that the negotiated rate set is acceptable.
 		 */
-		(void) ieee80211_fix_rate(selbs, IEEE80211_F_DODEL);
+		(void) ieee80211_fix_rate(selbs, &selbs->in_rates,
+		    IEEE80211_F_DODEL);
 		/*
 		 * Fillin the neighbor table
 		 */
@@ -706,6 +731,7 @@
 	 * mode is locked.
 	 */
 	ieee80211_reset_erp(ic);
+	ieee80211_wme_initparams(ic);
 
 	IEEE80211_UNLOCK(ic);
 	if (ic->ic_opmode == IEEE80211_M_STA)
@@ -773,6 +799,10 @@
 	ic->ic_node_cleanup(in);
 	if (in->in_wpa_ie != NULL)
 		ieee80211_free(in->in_wpa_ie);
+	if (in->in_wme_ie != NULL)
+		ieee80211_free(in->in_wme_ie);
+	if (in->in_htcap_ie != NULL)
+		ieee80211_free(in->in_htcap_ie);
 	kmem_free(in, sizeof (ieee80211_node_t));
 }
 
@@ -1108,7 +1138,12 @@
 	 * Record optional information elements that might be
 	 * used by applications or drivers.
 	 */
+	saveie(&in->in_wme_ie, sp->wme);
 	saveie(&in->in_wpa_ie, sp->wpa);
+	saveie(&in->in_htcap_ie, sp->htcap);
+	/* parsed in ieee80211_sta_join() */
+	if (sp->htcap != NULL)
+		ieee80211_parse_htcap(in, in->in_htcap_ie);
 
 	/* NB: must be after in_chan is setup */
 	(void) ieee80211_setup_rates(in, sp->rates, sp->xrates,
@@ -1137,6 +1172,8 @@
 	in->in_fhindex = sp->fhindex;
 	in->in_erp = sp->erp;
 	in->in_tim_off = sp->timoff;
+	if (sp->wme != NULL)
+		ieee80211_saveie(&in->in_wme_ie, sp->wme);
 
 	/* NB: must be after in_chan is setup */
 	(void) ieee80211_setup_rates(in, sp->rates, sp->xrates,
@@ -1164,9 +1201,17 @@
 	return (in);
 }
 
-#define	IEEE80211_IS_CTL(wh) \
+#define	IEEE80211_IS_CTL(wh)	\
 	((wh->i_fc[0] & IEEE80211_FC0_TYPE_MASK) == IEEE80211_FC0_TYPE_CTL)
 
+#define	IEEE80211_IS_PSPOLL(wh)	\
+	((wh->i_fc[0] & IEEE80211_FC0_SUBTYPE_MASK) ==	\
+	    IEEE80211_FC0_SUBTYPE_PS_POLL)
+
+#define	IEEE80211_IS_BAR(wh)	\
+	((wh->i_fc[0] & IEEE80211_FC0_SUBTYPE_MASK) ==	\
+	    IEEE80211_FC0_SUBTYPE_BAR)
+
 /*
  * Locate the node for sender, track state, and then pass the
  * (referenced) node up to the 802.11 layer for its use.  We
@@ -1190,7 +1235,8 @@
 	}
 
 	IEEE80211_NODE_LOCK(nt);
-	if (IEEE80211_IS_CTL(wh))
+	if (IEEE80211_IS_CTL(wh) &&
+	    !IEEE80211_IS_PSPOLL(wh) && !IEEE80211_IS_BAR(wh))
 		in = ieee80211_find_node_locked(nt, wh->i_addr1);
 	else
 		in = ieee80211_find_node_locked(nt, wh->i_addr2);
@@ -1202,6 +1248,10 @@
 	return (in);
 }
 
+#undef IEEE80211_IS_BAR
+#undef IEEE80211_IS_PSPOLL
+#undef IEEE80211_IS_CTL
+
 /*
  * Return a reference to the appropriate node for sending
  * a data frame.  This handles node discovery in adhoc networks.
--- a/usr/src/uts/common/io/net80211/net80211_output.c	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/uts/common/io/net80211/net80211_output.c	Mon Aug 10 10:43:48 2009 -0400
@@ -82,9 +82,11 @@
 		IEEE80211_ADDR_COPY(wh->i_addr3, bssid);
 	}
 	*(uint16_t *)&wh->i_dur[0] = 0;	/* set duration */
-	*(uint16_t *)&wh->i_seq[0] =	/* set sequence number */
-	    LE_16(in->in_txseqs[0] << IEEE80211_SEQ_SEQ_SHIFT);
-	in->in_txseqs[0]++;		/* increase sequence number by 1 */
+	/* NB: use non-QoS tid */
+	*(uint16_t *)&wh->i_seq[0] =
+	    LE_16(in->in_txseqs[IEEE80211_NONQOS_TID] <<
+	    IEEE80211_SEQ_SEQ_SHIFT);
+	in->in_txseqs[IEEE80211_NONQOS_TID]++;
 }
 
 /*
@@ -96,7 +98,7 @@
  *
  * Return 0 on success
  */
-static int
+int
 ieee80211_mgmt_output(ieee80211com_t *ic, ieee80211_node_t *in, mblk_t *mp,
     int type, int timer)
 {
@@ -173,13 +175,70 @@
 {
 	struct ieee80211_frame	*wh;
 	struct ieee80211_key *key;
+	int addqos, ac, tid;
 
 	ASSERT(mp != NULL && MBLKL(mp) >= sizeof (struct ieee80211_frame));
+	/*
+	 * Some ap's don't handle QoS-encapsulated EAPOL
+	 * frames so suppress use.  This may be an issue if other
+	 * ap's require all data frames to be QoS-encapsulated
+	 * once negotiated in which case we'll need to make this
+	 * configurable.
+	 */
+	addqos = in->in_flags & (IEEE80211_NODE_QOS | IEEE80211_NODE_HT);
 	wh = (struct ieee80211_frame *)mp->b_rptr;
 	*(uint16_t *)wh->i_dur = 0;
-	*(uint16_t *)wh->i_seq =
-	    LE_16(in->in_txseqs[0] << IEEE80211_SEQ_SEQ_SHIFT);
-	in->in_txseqs[0]++;
+	if (addqos) {
+		struct ieee80211_qosframe *qwh =
+		    (struct ieee80211_qosframe *)wh;
+
+		ac = ieee80211_classify(ic, mp, in);
+		/* map from access class/queue to 11e header priorty value */
+		tid = WME_AC_TO_TID(ac);
+		qwh->i_qos[0] = tid & IEEE80211_QOS_TID;
+		/*
+		 * Check if A-MPDU tx aggregation is setup or if we
+		 * should try to enable it.  The sta must be associated
+		 * with HT and A-MPDU enabled for use.  On the first
+		 * frame that goes out We issue an ADDBA request and
+		 * wait for a reply.  The frame being encapsulated
+		 * will go out w/o using A-MPDU, or possibly it might
+		 * be collected by the driver and held/retransmit.
+		 * ieee80211_ampdu_request handles staggering requests
+		 * in case the receiver NAK's us or we are otherwise
+		 * unable to establish a BA stream.
+		 */
+		if ((in->in_flags & IEEE80211_NODE_AMPDU_TX) &&
+		    (ic->ic_flags_ext & IEEE80211_FEXT_AMPDU_TX)) {
+			struct ieee80211_tx_ampdu *tap = &in->in_tx_ampdu[ac];
+
+			if (IEEE80211_AMPDU_RUNNING(tap)) {
+				/*
+				 * Operational, mark frame for aggregation.
+				 */
+				qwh->i_qos[0] |= IEEE80211_QOS_ACKPOLICY_BA;
+			} else if (!IEEE80211_AMPDU_REQUESTED(tap)) {
+				/*
+				 * Not negotiated yet, request service.
+				 */
+				(void) ieee80211_ampdu_request(in, tap);
+			}
+		}
+		/* works even when BA marked above */
+		if (ic->ic_wme.wme_wmeChanParams.cap_wmeParams[ac].
+		    wmep_noackPolicy) {
+			qwh->i_qos[0] |= IEEE80211_QOS_ACKPOLICY_NOACK;
+		}
+
+		*(uint16_t *)wh->i_seq =
+		    LE_16(in->in_txseqs[tid] << IEEE80211_SEQ_SEQ_SHIFT);
+		in->in_txseqs[tid]++;
+	} else {
+		*(uint16_t *)wh->i_seq =
+		    LE_16(in->in_txseqs[IEEE80211_NONQOS_TID] <<
+		    IEEE80211_SEQ_SEQ_SHIFT);
+		in->in_txseqs[IEEE80211_NONQOS_TID]++;
+	}
 
 	if (ic->ic_flags & IEEE80211_F_PRIVACY)
 		key = ieee80211_crypto_getkey(ic);
@@ -192,9 +251,8 @@
 	 */
 	if (key != NULL && (ic->ic_flags & IEEE80211_F_WPA)) {
 		wh->i_fc[1] |= IEEE80211_FC1_WEP;
-		if (!ieee80211_crypto_enmic(isc, key, mp, 0)) {
+		if (!ieee80211_crypto_enmic(isc, key, mp, 0))
 			ieee80211_err("ieee80211_crypto_enmic failed.\n");
-		}
 	}
 
 	return (mp);
@@ -234,6 +292,72 @@
 	return (frm);
 }
 
+#define	WME_OUI_BYTES		0x00, 0x50, 0xf2
+/*
+ * Add a WME information element to a frame.
+ */
+/* ARGSUSED */
+static uint8_t *
+ieee80211_add_wme_info(uint8_t *frm, struct ieee80211_wme_state *wme)
+{
+	static const struct ieee80211_wme_info info = {
+		.wme_id		= IEEE80211_ELEMID_VENDOR,
+		.wme_len	= sizeof (struct ieee80211_wme_info) - 2,
+		.wme_oui	= { WME_OUI_BYTES },
+		.wme_type	= WME_OUI_TYPE,
+		.wme_subtype	= WME_INFO_OUI_SUBTYPE,
+		.wme_version	= WME_VERSION,
+		.wme_info	= 0,
+	};
+	(void) memcpy(frm, &info, sizeof (info));
+	return (frm + sizeof (info));
+}
+
+/*
+ * Add a WME parameters element to a frame.
+ */
+static uint8_t *
+ieee80211_add_wme_param(uint8_t *frm, struct ieee80211_wme_state *wme)
+{
+#define	SM(_v, _f)	(((_v) << _f##_S) & _f)
+#define	ADDSHORT(frm, v) do {			\
+	_NOTE(CONSTCOND)			\
+	frm[0] = (v) & 0xff;			\
+	frm[1] = (v) >> 8;			\
+	frm += 2;				\
+	_NOTE(CONSTCOND)			\
+} while (0)
+	/* NB: this works 'cuz a param has an info at the front */
+	static const struct ieee80211_wme_info param = {
+		.wme_id		= IEEE80211_ELEMID_VENDOR,
+		.wme_len	= sizeof (struct ieee80211_wme_param) - 2,
+		.wme_oui	= { WME_OUI_BYTES },
+		.wme_type	= WME_OUI_TYPE,
+		.wme_subtype	= WME_PARAM_OUI_SUBTYPE,
+		.wme_version	= WME_VERSION,
+	};
+	int i;
+
+	(void) memcpy(frm, &param, sizeof (param));
+	frm += offsetof(struct ieee80211_wme_info, wme_info);
+	*frm++ = wme->wme_bssChanParams.cap_info;	/* AC info */
+	*frm++ = 0;					/* reserved field */
+	for (i = 0; i < WME_NUM_AC; i++) {
+		const struct wmeParams *ac =
+		    &wme->wme_bssChanParams.cap_wmeParams[i];
+		*frm++ = SM(i, WME_PARAM_ACI)
+		    | SM(ac->wmep_acm, WME_PARAM_ACM)
+		    | SM(ac->wmep_aifsn, WME_PARAM_AIFSN);
+		*frm++ = SM(ac->wmep_logcwmax, WME_PARAM_LOGCWMAX)
+		    | SM(ac->wmep_logcwmin, WME_PARAM_LOGCWMIN);
+		ADDSHORT(frm, ac->wmep_txopLimit);
+	}
+	return (frm);
+#undef SM
+#undef ADDSHORT
+}
+#undef WME_OUI_BYTES
+
 /*
  * Add SSID element to a frame
  */
@@ -379,6 +503,10 @@
 		 *	[tlv] extended supported rates
 		 *	[tlv] WPA
 		 *	[tlv] WME (optional)
+		 *	[tlv] HT capabilities
+		 *	[tlv] HT information
+		 *	[tlv] Vendor OUI HT capabilities (optional)
+		 *	[tlv] Vendor OUI HT information (optional)
 		 */
 		mp = ieee80211_getmgtframe(&frm,
 		    8			/* time stamp  */
@@ -394,8 +522,12 @@
 		    2 * sizeof (struct ieee80211_ie_wpa) : 0)
 					/* [tlv] WPA  */
 		    + (ic->ic_flags & IEEE80211_F_WME ?
-		    sizeof (struct ieee80211_wme_param) : 0));
+		    sizeof (struct ieee80211_wme_param) : 0)
 					/* [tlv] WME  */
+		    /* check for cluster requirement */
+		    + 2 * sizeof (struct ieee80211_ie_htcap) + 4
+		    + 2 * sizeof (struct ieee80211_ie_htinfo) + 4);
+
 		if (mp == NULL)
 			return (ENOMEM);
 
@@ -434,12 +566,30 @@
 			*frm++ = IEEE80211_IBSS_LEN;
 			*frm++ = 0; *frm++ = 0;		/* ATIM window */
 		}
-		/* ERP */
 		if (IEEE80211_IS_CHAN_ANYG(ic->ic_curchan))
 			frm = ieee80211_add_erp(frm, ic);
-		/* Extended supported rates */
 		frm = ieee80211_add_xrates(frm, &in->in_rates);
-		mp->b_wptr = frm;
+		/*
+		 * NB: legacy 11b clients do not get certain ie's.
+		 * The caller identifies such clients by passing
+		 * a token in arg to us.  Could expand this to be
+		 * any legacy client for stuff like HT ie's.
+		 */
+		if (IEEE80211_IS_CHAN_HT(ic->ic_curchan) &&
+		    arg != IEEE80211_SEND_LEGACY_11B) {
+			frm = ieee80211_add_htcap(frm, in);
+			frm = ieee80211_add_htinfo(frm, in);
+		}
+		if (ic->ic_flags & IEEE80211_F_WME)
+			frm = ieee80211_add_wme_param(frm, &ic->ic_wme);
+		if (IEEE80211_IS_CHAN_HT(ic->ic_curchan) &&
+		    (ic->ic_flags_ext & IEEE80211_FEXT_HTCOMPAT) &&
+		    arg != IEEE80211_SEND_LEGACY_11B) {
+			frm = ieee80211_add_htcap_vendor(frm, in);
+			frm = ieee80211_add_htinfo_vendor(frm, in);
+		}
+		mp->b_wptr = frm;	/* allocated is greater than used */
+
 		break;
 
 	case IEEE80211_FC0_SUBTYPE_AUTH:
@@ -517,6 +667,8 @@
 		 *	[tlv] supported rates
 		 *	[tlv] extended supported rates
 		 *	[tlv] WME
+		 *	[tlv] HT capabilities
+		 *	[tlv] Vendor OUI HT capabilities (optional)
 		 *	[tlv] user-specified ie's
 		 */
 		mp = ieee80211_getmgtframe(&frm,
@@ -525,6 +677,8 @@
 		    + 2 + IEEE80211_NWID_LEN
 		    + 2 + IEEE80211_RATE_SIZE
 		    + 2 + IEEE80211_XRATE_SIZE
+		    + sizeof (struct ieee80211_wme_info)
+		    + 2 * sizeof (struct ieee80211_ie_htcap) + 4
 		    + ic->ic_opt_ie_len);
 		if (mp == NULL)
 			return (ENOMEM);
@@ -556,6 +710,16 @@
 		frm = ieee80211_add_ssid(frm, in->in_essid, in->in_esslen);
 		frm = ieee80211_add_rates(frm, &in->in_rates);
 		frm = ieee80211_add_xrates(frm, &in->in_rates);
+		if ((ic->ic_flags_ext & IEEE80211_FEXT_HT) &&
+		    in->in_htcap_ie != NULL &&
+		    in->in_htcap_ie[0] == IEEE80211_ELEMID_HTCAP)
+			frm = ieee80211_add_htcap(frm, in);
+		if ((ic->ic_flags & IEEE80211_F_WME) && in->in_wme_ie != NULL)
+			frm = ieee80211_add_wme_info(frm, &ic->ic_wme);
+		if ((ic->ic_flags_ext & IEEE80211_FEXT_HT) &&
+		    in->in_htcap_ie != NULL &&
+		    in->in_htcap_ie[0] == IEEE80211_ELEMID_VENDOR)
+			frm = ieee80211_add_htcap_vendor(frm, in);
 		if (ic->ic_opt_ie != NULL) {
 			bcopy(ic->ic_opt_ie, frm, ic->ic_opt_ie_len);
 			frm += ic->ic_opt_ie_len;
@@ -575,6 +739,8 @@
 		 *	[tlv] supported rates
 		 *	[tlv] extended supported rates
 		 *	[tlv] WME (if enabled and STA enabled)
+		 *	[tlv] HT capabilities (standard or vendor OUI)
+		 *	[tlv] HT information (standard or vendor OUI)
 		 */
 		mp = ieee80211_getmgtframe(&frm,
 		    3 * sizeof (uint16_t)
@@ -629,7 +795,6 @@
 	struct ieee80211_rateset *rs;
 	mblk_t *m;
 	uint8_t *frm;
-	uint8_t *efrm;
 	int pktlen;
 	uint16_t capinfo;
 
@@ -647,6 +812,10 @@
 	 *	[tlv] extended supported rates
 	 *	[tlv] WME parameters
 	 *	[tlv] WPA/RSN parameters
+	 *	[tlv] HT capabilities
+	 *	[tlv] HT information
+	 *	[tlv] Vendor OUI HT capabilities (optional)
+	 *	[tlv] Vendor OUI HT information (optional)
 	 * Vendor-specific OIDs (e.g. Atheros)
 	 * NB: we allocate the max space required for the TIM bitmap.
 	 */
@@ -659,7 +828,13 @@
 	    + 2 + 1			/* DS parameters */
 	    + 2 + 4 + ic->ic_tim_len	/* DTIM/IBSSPARMS */
 	    + 2 + 1			/* ERP */
-	    + 2 + IEEE80211_XRATE_SIZE;
+	    + 2 + IEEE80211_XRATE_SIZE
+	    + (ic->ic_caps & IEEE80211_C_WME ?	/* WME */
+	    sizeof (struct ieee80211_wme_param) : 0)
+	    /* conditional? */
+	    + 4 + 2 * sizeof (struct ieee80211_ie_htcap)	/* HT caps */
+	    + 4 + 2 * sizeof (struct ieee80211_ie_htinfo);	/* HT info */
+
 	m = ieee80211_getmgtframe(&frm, pktlen);
 	if (m == NULL) {
 		ieee80211_dbg(IEEE80211_MSG_ANY, "ieee80211_beacon_alloc: "
@@ -716,9 +891,23 @@
 		bo->bo_erp = frm;
 		frm = ieee80211_add_erp(frm, ic);
 	}
-	efrm = ieee80211_add_xrates(frm, rs);
-	bo->bo_trailer_len = _PTRDIFF(efrm, bo->bo_trailer);
-	m->b_wptr = efrm;
+	frm = ieee80211_add_xrates(frm, rs);
+	if (IEEE80211_IS_CHAN_HT(ic->ic_curchan)) {
+		frm = ieee80211_add_htcap(frm, in);
+		bo->bo_htinfo = frm;
+		frm = ieee80211_add_htinfo(frm, in);
+	}
+	if (ic->ic_flags & IEEE80211_F_WME) {
+		bo->bo_wme = frm;
+		frm = ieee80211_add_wme_param(frm, &ic->ic_wme);
+	}
+	if (IEEE80211_IS_CHAN_HT(ic->ic_curchan) &&
+	    (ic->ic_flags_ext & IEEE80211_FEXT_HTCOMPAT)) {
+		frm = ieee80211_add_htcap_vendor(frm, in);
+		frm = ieee80211_add_htinfo_vendor(frm, in);
+	}
+	bo->bo_trailer_len = _PTRDIFF(frm, bo->bo_trailer);
+	m->b_wptr = frm;
 
 	wh = (struct ieee80211_frame *)m->b_rptr;
 	wh->i_fc[0] = IEEE80211_FC0_VERSION_0 | IEEE80211_FC0_TYPE_MGT |
@@ -752,3 +941,44 @@
 	IEEE80211_UNLOCK(ic);
 	return (0);
 }
+
+/*
+ * Assign priority to a frame based on any vlan tag assigned
+ * to the station and/or any Diffserv setting in an IP header.
+ * Finally, if an ACM policy is setup (in station mode) it's
+ * applied.
+ */
+int
+ieee80211_classify(struct ieee80211com *ic, mblk_t *m,
+    struct ieee80211_node *ni)
+/* ARGSUSED */
+{
+	int ac;
+
+	if ((ni->in_flags & IEEE80211_NODE_QOS) == 0)
+		return (WME_AC_BE);
+
+	/* Process VLan */
+	/* Process IPQoS */
+
+	ac = WME_AC_BE;
+
+	/*
+	 * Apply ACM policy.
+	 */
+	if (ic->ic_opmode == IEEE80211_M_STA) {
+		static const int acmap[4] = {
+			WME_AC_BK,	/* WME_AC_BE */
+			WME_AC_BK,	/* WME_AC_BK */
+			WME_AC_BE,	/* WME_AC_VI */
+			WME_AC_VI,	/* WME_AC_VO */
+		};
+		while (ac != WME_AC_BK &&
+		    ic->ic_wme.wme_wmeBssChanParams.cap_wmeParams[ac].
+		    wmep_acm) {
+			ac = acmap[ac];
+		}
+	}
+
+	return (ac);
+}
--- a/usr/src/uts/common/io/net80211/net80211_proto.c	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/uts/common/io/net80211/net80211_proto.c	Mon Aug 10 10:43:48 2009 -0400
@@ -41,6 +41,12 @@
 
 #include "net80211_impl.h"
 
+/* tunables */
+#define	AGGRESSIVE_MODE_SWITCH_HYSTERESIS	3	/* pkts / 100ms */
+#define	HIGH_PRI_SWITCH_THRESH			10	/* pkts / 100ms */
+
+#define	IEEE80211_RATE2MBS(r)	(((r) & IEEE80211_RATE_VAL) / 2)
+
 const char *ieee80211_mgt_subtype_name[] = {
 	"assoc_req",	"assoc_resp",	"reassoc_req",	"reassoc_resp",
 	"probe_req",	"probe_resp",	"reserved#6",	"reserved#7",
@@ -60,6 +66,13 @@
 	"ASSOC",	/* IEEE80211_S_ASSOC */
 	"RUN"		/* IEEE80211_S_RUN */
 };
+const char *ieee80211_wme_acnames[] = {
+	"WME_AC_BE",
+	"WME_AC_BK",
+	"WME_AC_VI",
+	"WME_AC_VO",
+	"WME_UPSD",
+};
 
 static int ieee80211_newstate(ieee80211com_t *, enum ieee80211_state, int);
 
@@ -75,10 +88,12 @@
 	ic->ic_rtsthreshold = IEEE80211_RTS_DEFAULT;
 	ic->ic_fragthreshold = IEEE80211_FRAG_DEFAULT;
 	ic->ic_fixed_rate = IEEE80211_FIXED_RATE_NONE;
-	ic->ic_mcast_rate = IEEE80211_MCAST_RATE_DEFAULT;
 	ic->ic_protmode = IEEE80211_PROT_CTSONLY;
 	im->im_bmiss_max = IEEE80211_BMISS_MAX;
 
+	ic->ic_wme.wme_hipri_switch_hysteresis =
+	    AGGRESSIVE_MODE_SWITCH_HYSTERESIS;
+
 	/* protocol state change handler */
 	ic->ic_newstate = ieee80211_newstate;
 
@@ -210,11 +225,11 @@
  * The highest bit of returned rate value is set to 1 on failure.
  */
 int
-ieee80211_fix_rate(ieee80211_node_t *in, int flags)
+ieee80211_fix_rate(ieee80211_node_t *in,
+    struct ieee80211_rateset *nrs, int flags)
 {
 	ieee80211com_t *ic = in->in_ic;
 	struct ieee80211_rateset *srs;
-	struct ieee80211_rateset *nrs;
 	boolean_t ignore;
 	int i;
 	int okrate;
@@ -235,7 +250,6 @@
 	}
 	okrate = badrate = fixedrate = 0;
 	srs = &ic->ic_sup_rates[ieee80211_chan2mode(ic, in->in_chan)];
-	nrs = &in->in_rates;
 	for (i = 0; i < nrs->ir_nrates; ) {
 		int j;
 
@@ -393,7 +407,12 @@
 		{ 4, { 2, 4, 11, 22 } }, /* IEEE80211_MODE_11G mixed b/g */
 		{ 0 },			/* IEEE80211_MODE_FH */
 		{ 3, { 12, 24, 48 } },	/* IEEE80211_MODE_TURBO_A */
-		{ 4, { 2, 4, 11, 22 } }	/* IEEE80211_MODE_TURBO_G (mixed b/g) */
+		{ 4, { 2, 4, 11, 22 } },
+					/* IEEE80211_MODE_TURBO_G (mixed b/g) */
+		{ 0 },			/* IEEE80211_MODE_STURBO_A */
+		{ 3, { 12, 24, 48 } },	/* IEEE80211_MODE_11NA */
+					/* IEEE80211_MODE_11NG (mixed b/g) */
+		{ 7, { 2, 4, 11, 22, 12, 24, 48 } }
 	};
 	int i, j;
 
@@ -410,6 +429,301 @@
 }
 
 /*
+ * WME protocol support.  The following parameters come from the spec.
+ */
+typedef struct phyParamType {
+	uint8_t aifsn;
+	uint8_t logcwmin;
+	uint8_t logcwmax;
+	uint16_t txopLimit;
+	uint8_t acm;
+} paramType;
+
+static const paramType phyParamForAC_BE[IEEE80211_MODE_MAX] = {
+	{ 3, 4,  6,  0, 0 },	/* IEEE80211_MODE_AUTO */
+	{ 3, 4,  6,  0, 0 },	/* IEEE80211_MODE_11A */
+	{ 3, 4,  6,  0, 0 },	/* IEEE80211_MODE_11B */
+	{ 3, 4,  6,  0, 0 },	/* IEEE80211_MODE_11G */
+	{ 3, 4,  6,  0, 0 },	/* IEEE80211_MODE_FH */
+	{ 2, 3,  5,  0, 0 },	/* IEEE80211_MODE_TURBO_A */
+	{ 2, 3,  5,  0, 0 },	/* IEEE80211_MODE_TURBO_G */
+	{ 2, 3,  5,  0, 0 },	/* IEEE80211_MODE_STURBO_A */
+	{ 3, 4,  6,  0, 0 },	/* IEEE80211_MODE_11NA */
+	{ 3, 4,  6,  0, 0 }	/* IEEE80211_MODE_11NG */
+};
+static const struct phyParamType phyParamForAC_BK[IEEE80211_MODE_MAX] = {
+	{ 7, 4, 10,  0, 0 },	/* IEEE80211_MODE_AUTO */
+	{ 7, 4, 10,  0, 0 },	/* IEEE80211_MODE_11A */
+	{ 7, 4, 10,  0, 0 },	/* IEEE80211_MODE_11B */
+	{ 7, 4, 10,  0, 0 },	/* IEEE80211_MODE_11G */
+	{ 7, 4, 10,  0, 0 },	/* IEEE80211_MODE_FH */
+	{ 7, 3, 10,  0, 0 },	/* IEEE80211_MODE_TURBO_A */
+	{ 7, 3, 10,  0, 0 },	/* IEEE80211_MODE_TURBO_G */
+	{ 7, 3, 10,  0, 0 },	/* IEEE80211_MODE_STURBO_A */
+	{ 7, 4, 10,  0, 0 },	/* IEEE80211_MODE_11NA */
+	{ 7, 4, 10,  0, 0 },	/* IEEE80211_MODE_11NG */
+};
+static const struct phyParamType phyParamForAC_VI[IEEE80211_MODE_MAX] = {
+	{ 1, 3, 4,  94, 0 },	/* IEEE80211_MODE_AUTO */
+	{ 1, 3, 4,  94, 0 },	/* IEEE80211_MODE_11A */
+	{ 1, 3, 4, 188, 0 },	/* IEEE80211_MODE_11B */
+	{ 1, 3, 4,  94, 0 },	/* IEEE80211_MODE_11G */
+	{ 1, 3, 4, 188, 0 },	/* IEEE80211_MODE_FH */
+	{ 1, 2, 3,  94, 0 },	/* IEEE80211_MODE_TURBO_A */
+	{ 1, 2, 3,  94, 0 },	/* IEEE80211_MODE_TURBO_G */
+	{ 1, 2, 3,  94, 0 },	/* IEEE80211_MODE_STURBO_A */
+	{ 1, 3, 4,  94, 0 },	/* IEEE80211_MODE_11NA */
+	{ 1, 3, 4,  94, 0 },	/* IEEE80211_MODE_11NG */
+};
+static const struct phyParamType phyParamForAC_VO[IEEE80211_MODE_MAX] = {
+	{ 1, 2, 3,  47, 0 },	/* IEEE80211_MODE_AUTO */
+	{ 1, 2, 3,  47, 0 },	/* IEEE80211_MODE_11A */
+	{ 1, 2, 3, 102, 0 },	/* IEEE80211_MODE_11B */
+	{ 1, 2, 3,  47, 0 },	/* IEEE80211_MODE_11G */
+	{ 1, 2, 3, 102, 0 },	/* IEEE80211_MODE_FH */
+	{ 1, 2, 2,  47, 0 },	/* IEEE80211_MODE_TURBO_A */
+	{ 1, 2, 2,  47, 0 },	/* IEEE80211_MODE_TURBO_G */
+	{ 1, 2, 2,  47, 0 },	/* IEEE80211_MODE_STURBO_A */
+	{ 1, 2, 3,  47, 0 },	/* IEEE80211_MODE_11NA */
+	{ 1, 2, 3,  47, 0 },	/* IEEE80211_MODE_11NG */
+};
+
+static const struct phyParamType bssPhyParamForAC_BE[IEEE80211_MODE_MAX] = {
+	{ 3, 4, 10,  0, 0 },	/* IEEE80211_MODE_AUTO */
+	{ 3, 4, 10,  0, 0 },	/* IEEE80211_MODE_11A */
+	{ 3, 4, 10,  0, 0 },	/* IEEE80211_MODE_11B */
+	{ 3, 4, 10,  0, 0 },	/* IEEE80211_MODE_11G */
+	{ 3, 4, 10,  0, 0 },	/* IEEE80211_MODE_FH */
+	{ 2, 3, 10,  0, 0 },	/* IEEE80211_MODE_TURBO_A */
+	{ 2, 3, 10,  0, 0 },	/* IEEE80211_MODE_TURBO_G */
+	{ 2, 3, 10,  0, 0 },	/* IEEE80211_MODE_STURBO_A */
+	{ 3, 4, 10,  0, 0 },	/* IEEE80211_MODE_11NA */
+	{ 3, 4, 10,  0, 0 },	/* IEEE80211_MODE_11NG */
+};
+static const struct phyParamType bssPhyParamForAC_VI[IEEE80211_MODE_MAX] = {
+	{ 2, 3, 4,  94, 0 },	/* IEEE80211_MODE_AUTO */
+	{ 2, 3, 4,  94, 0 },	/* IEEE80211_MODE_11A */
+	{ 2, 3, 4, 188, 0 },	/* IEEE80211_MODE_11B */
+	{ 2, 3, 4,  94, 0 },	/* IEEE80211_MODE_11G */
+	{ 2, 3, 4, 188, 0 },	/* IEEE80211_MODE_FH */
+	{ 2, 2, 3,  94, 0 },	/* IEEE80211_MODE_TURBO_A */
+	{ 2, 2, 3,  94, 0 },	/* IEEE80211_MODE_TURBO_G */
+	{ 2, 2, 3,  94, 0 },	/* IEEE80211_MODE_STURBO_A */
+	{ 2, 3, 4,  94, 0 },	/* IEEE80211_MODE_11NA */
+	{ 2, 3, 4,  94, 0 },	/* IEEE80211_MODE_11NG */
+};
+static const struct phyParamType bssPhyParamForAC_VO[IEEE80211_MODE_MAX] = {
+	{ 2, 2, 3,  47, 0 },	/* IEEE80211_MODE_AUTO */
+	{ 2, 2, 3,  47, 0 },	/* IEEE80211_MODE_11A */
+	{ 2, 2, 3, 102, 0 },	/* IEEE80211_MODE_11B */
+	{ 2, 2, 3,  47, 0 },	/* IEEE80211_MODE_11G */
+	{ 2, 2, 3, 102, 0 },	/* IEEE80211_MODE_FH */
+	{ 1, 2, 2,  47, 0 },	/* IEEE80211_MODE_TURBO_A */
+	{ 1, 2, 2,  47, 0 },	/* IEEE80211_MODE_TURBO_G */
+	{ 1, 2, 2,  47, 0 },	/* IEEE80211_MODE_STURBO_A */
+	{ 2, 2, 3,  47, 0 },	/* IEEE80211_MODE_11NA */
+	{ 2, 2, 3,  47, 0 },	/* IEEE80211_MODE_11NG */
+};
+
+void
+ieee80211_wme_initparams(struct ieee80211com *ic)
+{
+	struct ieee80211_wme_state *wme = &ic->ic_wme;
+	const paramType *pPhyParam, *pBssPhyParam;
+	struct wmeParams *wmep;
+	enum ieee80211_phymode mode;
+	int i;
+
+	if ((ic->ic_caps & IEEE80211_C_WME) == 0)
+		return;
+
+	/*
+	 * Select mode; we can be called early in which case we
+	 * always use auto mode.  We know we'll be called when
+	 * entering the RUN state with bsschan setup properly
+	 * so state will eventually get set correctly
+	 */
+	if (ic->ic_curchan != IEEE80211_CHAN_ANYC)
+		mode = ieee80211_chan2mode(ic, ic->ic_curchan);
+	else
+		mode = IEEE80211_MODE_AUTO;
+	for (i = 0; i < WME_NUM_AC; i++) {
+		switch (i) {
+		case WME_AC_BK:
+			pPhyParam = &phyParamForAC_BK[mode];
+			pBssPhyParam = &phyParamForAC_BK[mode];
+			break;
+		case WME_AC_VI:
+			pPhyParam = &phyParamForAC_VI[mode];
+			pBssPhyParam = &bssPhyParamForAC_VI[mode];
+			break;
+		case WME_AC_VO:
+			pPhyParam = &phyParamForAC_VO[mode];
+			pBssPhyParam = &bssPhyParamForAC_VO[mode];
+			break;
+		case WME_AC_BE:
+		default:
+			pPhyParam = &phyParamForAC_BE[mode];
+			pBssPhyParam = &bssPhyParamForAC_BE[mode];
+			break;
+		}
+
+		wmep = &wme->wme_wmeChanParams.cap_wmeParams[i];
+		if (ic->ic_opmode == IEEE80211_M_HOSTAP) {
+			wmep->wmep_acm = pPhyParam->acm;
+			wmep->wmep_aifsn = pPhyParam->aifsn;
+			wmep->wmep_logcwmin = pPhyParam->logcwmin;
+			wmep->wmep_logcwmax = pPhyParam->logcwmax;
+			wmep->wmep_txopLimit = pPhyParam->txopLimit;
+		} else {
+			wmep->wmep_acm = pBssPhyParam->acm;
+			wmep->wmep_aifsn = pBssPhyParam->aifsn;
+			wmep->wmep_logcwmin = pBssPhyParam->logcwmin;
+			wmep->wmep_logcwmax = pBssPhyParam->logcwmax;
+			wmep->wmep_txopLimit = pBssPhyParam->txopLimit;
+
+		}
+		ieee80211_dbg(IEEE80211_MSG_WME, "ieee80211_wme_initparams: "
+		    "%s chan [acm %u aifsn %u log2(cwmin) %u "
+		    "log2(cwmax) %u txpoLimit %u]\n",
+		    ieee80211_wme_acnames[i],
+		    wmep->wmep_acm,
+		    wmep->wmep_aifsn,
+		    wmep->wmep_logcwmin,
+		    wmep->wmep_logcwmax,
+		    wmep->wmep_txopLimit);
+
+		wmep = &wme->wme_wmeBssChanParams.cap_wmeParams[i];
+		wmep->wmep_acm = pBssPhyParam->acm;
+		wmep->wmep_aifsn = pBssPhyParam->aifsn;
+		wmep->wmep_logcwmin = pBssPhyParam->logcwmin;
+		wmep->wmep_logcwmax = pBssPhyParam->logcwmax;
+		wmep->wmep_txopLimit = pBssPhyParam->txopLimit;
+		ieee80211_dbg(IEEE80211_MSG_WME, "ieee80211_wme_initparams: "
+		    "%s  bss [acm %u aifsn %u log2(cwmin) %u "
+		    "log2(cwmax) %u txpoLimit %u]\n",
+		    ieee80211_wme_acnames[i],
+		    wmep->wmep_acm,
+		    wmep->wmep_aifsn,
+		    wmep->wmep_logcwmin,
+		    wmep->wmep_logcwmax,
+		    wmep->wmep_txopLimit);
+	}
+	/* NB: check ic_bss to avoid NULL deref on initial attach */
+	if (ic->ic_bss != NULL) {
+		/*
+		 * Calculate agressive mode switching threshold based
+		 * on beacon interval.  This doesn't need locking since
+		 * we're only called before entering the RUN state at
+		 * which point we start sending beacon frames.
+		 */
+		wme->wme_hipri_switch_thresh =
+		    (HIGH_PRI_SWITCH_THRESH * ic->ic_bss->in_intval) / 100;
+		ieee80211_wme_updateparams(ic);
+	}
+}
+
+/*
+ * Update WME parameters for ourself and the BSS.
+ */
+void
+ieee80211_wme_updateparams(struct ieee80211com *ic)
+{
+	static const paramType phyParam[IEEE80211_MODE_MAX] = {
+		{ 2, 4, 10, 64, 0 },	/* IEEE80211_MODE_AUTO */
+		{ 2, 4, 10, 64, 0 },	/* IEEE80211_MODE_11A */
+		{ 2, 5, 10, 64, 0 },	/* IEEE80211_MODE_11B */
+		{ 2, 4, 10, 64, 0 },	/* IEEE80211_MODE_11G */
+		{ 2, 5, 10, 64, 0 },	/* IEEE80211_MODE_FH */
+		{ 1, 3, 10, 64, 0 },	/* IEEE80211_MODE_TURBO_A */
+		{ 1, 3, 10, 64, 0 },	/* IEEE80211_MODE_TURBO_G */
+		{ 1, 3, 10, 64, 0 },	/* IEEE80211_MODE_STURBO_A */
+		{ 2, 4, 10, 64, 0 },	/* IEEE80211_MODE_11NA */
+		{ 2, 4, 10, 64, 0 },	/* IEEE80211_MODE_11NG */
+	};
+	struct ieee80211_wme_state *wme = &ic->ic_wme;
+	const struct wmeParams *wmep;
+	struct wmeParams *chanp, *bssp;
+	enum ieee80211_phymode mode;
+	int i;
+
+	if ((ic->ic_caps & IEEE80211_C_WME) == 0)
+		return;
+
+	/* set up the channel access parameters for the physical device */
+	for (i = 0; i < WME_NUM_AC; i++) {
+		chanp = &wme->wme_chanParams.cap_wmeParams[i];
+		wmep = &wme->wme_wmeChanParams.cap_wmeParams[i];
+		chanp->wmep_aifsn = wmep->wmep_aifsn;
+		chanp->wmep_logcwmin = wmep->wmep_logcwmin;
+		chanp->wmep_logcwmax = wmep->wmep_logcwmax;
+		chanp->wmep_txopLimit = wmep->wmep_txopLimit;
+
+		chanp = &wme->wme_bssChanParams.cap_wmeParams[i];
+		wmep = &wme->wme_wmeBssChanParams.cap_wmeParams[i];
+		chanp->wmep_aifsn = wmep->wmep_aifsn;
+		chanp->wmep_logcwmin = wmep->wmep_logcwmin;
+		chanp->wmep_logcwmax = wmep->wmep_logcwmax;
+		chanp->wmep_txopLimit = wmep->wmep_txopLimit;
+	}
+
+	/*
+	 * Select mode; we can be called early in which case we
+	 * always use auto mode.  We know we'll be called when
+	 * entering the RUN state with bsschan setup properly
+	 * so state will eventually get set correctly
+	 */
+	if (ic->ic_curchan != IEEE80211_CHAN_ANYC)
+		mode = ieee80211_chan2mode(ic, ic->ic_curchan);
+	else
+		mode = IEEE80211_MODE_AUTO;
+
+	/*
+	 * This implements agressive mode as found in certain
+	 * vendors' AP's.  When there is significant high
+	 * priority (VI/VO) traffic in the BSS throttle back BE
+	 * traffic by using conservative parameters.  Otherwise
+	 * BE uses agressive params to optimize performance of
+	 * legacy/non-QoS traffic.
+	 */
+	if ((ic->ic_opmode == IEEE80211_M_HOSTAP &&
+	    (wme->wme_flags & WME_F_AGGRMODE) != 0) ||
+	    (ic->ic_opmode == IEEE80211_M_STA &&
+	    (ic->ic_bss->in_flags & IEEE80211_NODE_QOS) == 0) ||
+	    (ic->ic_flags & IEEE80211_F_WME) == 0) {
+		chanp = &wme->wme_chanParams.cap_wmeParams[WME_AC_BE];
+		bssp = &wme->wme_bssChanParams.cap_wmeParams[WME_AC_BE];
+
+		chanp->wmep_aifsn = bssp->wmep_aifsn = phyParam[mode].aifsn;
+		chanp->wmep_logcwmin = bssp->wmep_logcwmin =
+		    phyParam[mode].logcwmin;
+		chanp->wmep_logcwmax = bssp->wmep_logcwmax =
+		    phyParam[mode].logcwmax;
+		chanp->wmep_txopLimit = bssp->wmep_txopLimit =
+		    (ic->ic_flags & IEEE80211_F_BURST) ?
+		    phyParam[mode].txopLimit : 0;
+		ieee80211_dbg(IEEE80211_MSG_WME,
+		    "ieee80211_wme_updateparams_locked: "
+		    "%s [acm %u aifsn %u log2(cwmin) %u "
+		    "log2(cwmax) %u txpoLimit %u]\n",
+		    ieee80211_wme_acnames[WME_AC_BE],
+		    chanp->wmep_acm,
+		    chanp->wmep_aifsn,
+		    chanp->wmep_logcwmin,
+		    chanp->wmep_logcwmax,
+		    chanp->wmep_txopLimit);
+	}
+
+	wme->wme_update(ic);
+
+	ieee80211_dbg(IEEE80211_MSG_WME, "ieee80211_wme_updateparams(): "
+	    "%s: WME params updated, cap_info 0x%x\n",
+	    ic->ic_opmode == IEEE80211_M_STA ?
+	    wme->wme_wmeChanParams.cap_info :
+	    wme->wme_bssChanParams.cap_info);
+}
+
+/*
  * Process STA mode beacon miss events. Send a direct probe request
  * frame to the current ap bmiss_max times (w/o answer) before
  * scanning for a new ap.
@@ -496,8 +810,8 @@
 			switch (ic->ic_opmode) {
 			case IEEE80211_M_STA:
 				IEEE80211_SEND_MGMT(ic, in,
-				    IEEE80211_FC0_SUBTYPE_DISASSOC,
-				    IEEE80211_REASON_ASSOC_LEAVE);
+				    IEEE80211_FC0_SUBTYPE_DEAUTH,
+				    IEEE80211_REASON_AUTH_LEAVE);
 				ieee80211_sta_leave(ic, in);
 				break;
 			case IEEE80211_M_IBSS:
@@ -644,6 +958,15 @@
 			wd.wd_secalloc = ieee80211_crypto_getciphertype(ic);
 			wd.wd_opmode = ic->ic_opmode;
 			IEEE80211_ADDR_COPY(wd.wd_bssid, in->in_bssid);
+			wd.wd_qospad = 0;
+			if (in->in_flags &
+			    (IEEE80211_NODE_QOS|IEEE80211_NODE_HT)) {
+				wd.wd_qospad = 2;
+				if (ic->ic_flags & IEEE80211_F_DATAPAD) {
+					wd.wd_qospad = roundup(wd.wd_qospad,
+					    sizeof (uint32_t));
+				}
+			}
 			(void) mac_pdata_update(ic->ic_mach, &wd, sizeof (wd));
 			break;
 		}
--- a/usr/src/uts/common/io/scsi/adapters/scsi_vhci/mpapi_impl.c	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/uts/common/io/scsi/adapters/scsi_vhci/mpapi_impl.c	Mon Aug 10 10:43:48 2009 -0400
@@ -2685,7 +2685,8 @@
 			    sizeof (lu->prop.deviceFileName));
 
 			if ((svl != NULL) &&
-			    SCSI_FAILOVER_IS_ASYM(svl)) {
+			    (SCSI_FAILOVER_IS_ASYM(svl) ||
+			    SCSI_FAILOVER_IS_TPGS(svl->svl_fops))) {
 				lu->prop.asymmetric = 1;
 			}
 
--- a/usr/src/uts/common/nfs/nfs4_clnt.h	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/uts/common/nfs/nfs4_clnt.h	Mon Aug 10 10:43:48 2009 -0400
@@ -1461,6 +1461,7 @@
 extern void	nfs4_invalidate_pages(vnode_t *, u_offset_t, cred_t *);
 extern void	nfs4_purge_caches(vnode_t *, int, cred_t *, int);
 extern void	nfs4_purge_stale_fh(int, vnode_t *, cred_t *);
+extern void	nfs4_flush_pages(vnode_t *vp, cred_t *cr);
 
 extern void	nfs4rename_update(vnode_t *, vnode_t *, nfs_fh4 *, char *);
 extern void	nfs4_update_paths(vnode_t *, char *, vnode_t *, char *,
--- a/usr/src/uts/common/os/strext.c	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/uts/common/os/strext.c	Mon Aug 10 10:43:48 2009 -0400
@@ -2,9 +2,8 @@
  * CDDL HEADER START
  *
  * The contents of this file are subject to the terms of the
- * Common Development and Distribution License, Version 1.0 only
- * (the "License").  You may not use this file except in compliance
- * with the License.
+ * Common Development and Distribution License (the "License").
+ * You may not use this file except in compliance with the License.
  *
  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
  * or http://www.opensolaris.org/os/licensing.
@@ -20,12 +19,10 @@
  * CDDL HEADER END
  */
 /*
- * Copyright 1998-2003 Sun Microsystems, Inc.  All rights reserved.
+ * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
  * Use is subject to license terms.
  */
 
-#pragma ident	"%Z%%M%	%I%	%E% SMI"
-
 #include <sys/types.h>
 #include <sys/cmn_err.h>
 #include <sys/systm.h>
@@ -147,3 +144,27 @@
 	(void) vsnprintf(buf, INT_MAX, fmt, args);
 	return (buf);
 }
+
+/*
+ * Do not change the length of the returned string; it must be freed
+ * with strfree().
+ */
+char *
+kmem_asprintf(const char *fmt, ...)
+{
+	int size;
+	va_list adx;
+	char *buf;
+
+	va_start(adx, fmt);
+	size = vsnprintf(NULL, 0, fmt, adx) + 1;
+	va_end(adx);
+
+	buf = kmem_alloc(size, KM_SLEEP);
+
+	va_start(adx, fmt);
+	size = vsnprintf(buf, size, fmt, adx);
+	va_end(adx);
+
+	return (buf);
+}
--- a/usr/src/uts/common/sys/Makefile	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/uts/common/sys/Makefile	Mon Aug 10 10:43:48 2009 -0400
@@ -399,6 +399,7 @@
 	ndi_impldefs.h		\
 	net80211.h		\
 	net80211_crypto.h	\
+	net80211_ht.h		\
 	net80211_proto.h	\
 	netconfig.h		\
 	neti.h			\
--- a/usr/src/uts/common/sys/auxv_SPARC.h	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/uts/common/sys/auxv_SPARC.h	Mon Aug 10 10:43:48 2009 -0400
@@ -45,7 +45,6 @@
 #define	AV_SPARC_VIS2	0x0040	/* VIS2 instruction set supported */
 #define	AV_SPARC_ASI_BLK_INIT	0x0080	/* ASI_BLK_INIT_xxx ASI */
 #define	AV_SPARC_FMAF	0x0100	/* Fused Multiply-Add */
-#define	AV_SPARC_FMAU	0x0200  /* Unfused Multiply-Add */
 #define	AV_SPARC_VIS3	0x0400  /* VIS3 instruction set extensions */
 #define	AV_SPARC_HPC	0x0800  /* High Performance Computing insns */
 #define	AV_SPARC_RANDOM	0x1000  /* random instruction */
@@ -57,7 +56,7 @@
 #define	FMT_AV_SPARC	\
 	"\20" \
 	"\21cspare"	\
-	"\20ima\17fjfmau\16trans\15random\14hpc\13vis3\12fmau\11fmaf" 	\
+	"\20ima\17fjfmau\16trans\15random\14hpc\13vis3\12-\11fmaf" 	\
 	"\10ASIBlkInit\7vis2\6vis\5popc\4v8plus\3fsmuld\2div32\1mul32"
 
 /*
--- a/usr/src/uts/common/sys/fcoe/fcoe_common.h	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/uts/common/sys/fcoe/fcoe_common.h	Mon Aug 10 10:43:48 2009 -0400
@@ -57,10 +57,8 @@
 #define	FLOGI_REQ_PAYLOAD_SIZE	116
 #define	FLOGI_ACC_PAYLOAD_SIZE	116
 
-/*
- * Minimum MTU size
- */
 #define	FCOE_MIN_MTU_SIZE	2500
+#define	FCOE_MAX_FC_FRAME_SIZE	2136
 
 /*
  * 24 byte FC frame header
@@ -96,10 +94,19 @@
 typedef struct fcoe_frame {
 	uint32_t		 frm_flags;
 	void			*frm_netb;
+
+	/*
+	 * frm_hdr will be cleared by fcoe explicitly
+	 */
 	fcoe_fc_frame_header_t	*frm_hdr;
 	uint8_t			*frm_ofh1;
 	uint8_t			*frm_ofh2;
 	uint8_t			*frm_fc_frame;
+
+	/*
+	 * fcoe client need clear FC payload explicitly,
+	 * except for RD/WR data frames
+	 */
 	uint8_t			*frm_payload;
 	uint32_t		 frm_fc_frame_size;
 	uint32_t		 frm_payload_size;
@@ -107,6 +114,7 @@
 	struct fcoe_port	*frm_eport;
 	void			*frm_fcoe_private;
 	void			*frm_client_private;
+	clock_t			 frm_clock;
 } fcoe_frame_t;
 
 /*
@@ -122,6 +130,7 @@
 	uint32_t	   eport_mtu;
 	uint64_t	   eport_link_speed;
 	uint8_t		   eport_efh_dst[ETHERADDRL];
+
 	void		 (*eport_tx_frame)(fcoe_frame_t *frame);
 	fcoe_frame_t	*(*eport_alloc_frame)(struct fcoe_port *eport,
 	    uint32_t this_fc_frame_size, void *netb);
@@ -152,7 +161,23 @@
 #define	FCOE_CMD_PORT_ONLINE		(FCOE_PORT_CTL_CMDS | 0x01)
 #define	FCOE_CMD_PORT_OFFLINE		(FCOE_PORT_CTL_CMDS | 0x02)
 
+/*
+ * FCoE version control
+ */
+typedef enum fcoe_ver
+{
+	FCOE_VER_1 = 0xAA01,
+	FCOE_VER_2,
+	FCOE_VER_3,
+	FCOE_VER_4,
+	FCOE_VER_5
+} fcoe_ver_e;
+
+#define	FCOE_VER_NOW FCOE_VER_1
+extern const fcoe_ver_e fcoe_ver_now;
+
 typedef struct fcoe_client {
+	fcoe_ver_e	 ect_fcoe_ver;
 	uint32_t	 ect_eport_flags;
 	uint32_t	 ect_max_fc_frame_size;
 	uint32_t	 ect_private_frame_struct_size;
@@ -262,6 +287,7 @@
  * frame header checking
  */
 #define	FRM_IS_LAST_FRAME(x_frm)		(FRM_F_CTL(x_frm) & (1 << 19))
+#define	FRM_SENDER_IS_XCH_RESPONDER(x_frm)	(FRM_F_CTL(x_frm) & (1 << 23))
 
 /*
  * FCOET/FCOEI will only call this fcoe function explicitly, all others
@@ -336,7 +362,24 @@
 /*
  * FCOE project global functions
  */
+#if !defined(__FUNCTION__)
+#define	__FUNCTION__ ((caddr_t)__func__)
+#endif
+
+#define	FCOE_STR_LEN 32
+
+/*
+ * timestamp (golbal variable in sys/systm.h)
+ */
+#define	CURRENT_CLOCK lbolt
 #define	FCOE_SEC2TICK(x_sec)	(drv_usectohz((x_sec) * 1000000))
+
+/*
+ * Form/convert mod_hash_key from/to xch ID
+ */
+#define	FMHK(x_xid)		(mod_hash_key_t)(uintptr_t)(x_xid)
+#define	CMHK(x_key)		(uint16_t)(uintptr_t)(x_key)
+
 typedef void (*TQ_FUNC_P)(void *);
 extern void fcoe_trace(caddr_t ident, const char *fmt, ...);
 
--- a/usr/src/uts/common/sys/fct.h	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/uts/common/sys/fct.h	Mon Aug 10 10:43:48 2009 -0400
@@ -346,6 +346,7 @@
 #define	FCT_CMD_PORT_OFFLINE_COMPLETE	(STMF_LPORT_CTL_CMDS | 0x04)
 #define	FCT_ACK_PORT_ONLINE_COMPLETE	(STMF_LPORT_CTL_CMDS | 0x05)
 #define	FCT_ACK_PORT_OFFLINE_COMPLETE	(STMF_LPORT_CTL_CMDS | 0x06)
+#define	FCT_CMD_FORCE_LIP		(STMF_LPORT_CTL_CMDS | 0x07)
 
 /*
  * IO flags for cmd flow.
--- a/usr/src/uts/common/sys/fctio.h	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/uts/common/sys/fctio.h	Mon Aug 10 10:43:48 2009 -0400
@@ -39,6 +39,7 @@
 #define	FCTIO_GET_PORT_ATTRIBUTES		(FCTIO_SUB_CMD + 0x05)
 #define	FCTIO_GET_ADAPTER_PORT_STATS		(FCTIO_SUB_CMD + 0x06)
 #define	FCTIO_GET_LINK_STATUS			(FCTIO_SUB_CMD + 0x07)
+#define	FCTIO_FORCE_LIP				(FCTIO_SUB_CMD + 0x08)
 
 /*
  * fcio_xfer definitions
--- a/usr/src/uts/common/sys/fibre-channel/fca/emlxs/emlxs_extern.h	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/uts/common/sys/fibre-channel/fca/emlxs/emlxs_extern.h	Mon Aug 10 10:43:48 2009 -0400
@@ -737,6 +737,7 @@
 extern int			emlxs_fct_port_initialize(emlxs_port_t *port);
 
 #ifdef MODSYM_SUPPORT
+extern int			emlxs_fct_modopen();
 extern void			emlxs_fct_modclose();
 #endif /* MODSYM_SUPPORT */
 
--- a/usr/src/uts/common/sys/fibre-channel/fca/emlxs/emlxs_fc.h	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/uts/common/sys/fibre-channel/fca/emlxs/emlxs_fc.h	Mon Aug 10 10:43:48 2009 -0400
@@ -46,7 +46,7 @@
 
 /* This patch enables the driver to auto respond to unsolicited PRLO's */
 /* This is needed because ULP is known to panic sometimes */
-#define	ULP_PATCH4
+/* #define	ULP_PATCH4 -  Obsolete */
 
 /* This patch enables the driver to fail pkt abort requests */
 #define	ULP_PATCH5
--- a/usr/src/uts/common/sys/fibre-channel/fca/emlxs/emlxs_version.h	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/uts/common/sys/fibre-channel/fca/emlxs/emlxs_version.h	Mon Aug 10 10:43:48 2009 -0400
@@ -32,11 +32,11 @@
 extern "C" {
 #endif
 
-#define	EMLXS_VERSION		"2.40r"
-#define	EMLXS_DATE_MINUTE	"50"	/* 00-59 */
+#define	EMLXS_VERSION		"2.40s"
+#define	EMLXS_DATE_MINUTE	"15"	/* 00-59 */
 #define	EMLXS_DATE_HOUR		"10"	/* 00-23 */
-#define	EMLXS_DATE_DAY		"11"	/* 00-31 */
-#define	EMLXS_DATE_MONTH	"06"	/* 01-12 */
+#define	EMLXS_DATE_DAY		"17"	/* 00-31 */
+#define	EMLXS_DATE_MONTH	"07"	/* 01-12 */
 #define	EMLXS_DATE_YEAR		"2009"	/* YYYY  */
 
 #define	EMLXS_REVISION		EMLXS_DATE_YEAR "." EMLXS_DATE_MONTH "." \
--- a/usr/src/uts/common/sys/fibre-channel/impl/fc_portif.h	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/uts/common/sys/fibre-channel/impl/fc_portif.h	Mon Aug 10 10:43:48 2009 -0400
@@ -19,21 +19,19 @@
  * CDDL HEADER END
  */
 /*
- * Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
+ * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
  * Use is subject to license terms.
  */
 
 #ifndef	_FC_PORTIF_H
 #define	_FC_PORTIF_H
 
-
 #include <sys/note.h>
 
 #ifdef	__cplusplus
 extern "C" {
 #endif
 
-
 /*
  * To remove the port WWN from the orphan list; An orphan list
  * scan typically happens during ONLINE processing (after a LIP
@@ -103,6 +101,7 @@
 #define	FP_DETACH_INPROGRESS		0x0200
 #define	FP_DETACH_FAILED		0x0400
 #define	FP_SOFT_NO_PMCOMP		0x0800
+#define	FP_SOFT_FCA_IS_NODMA		0x1000
 
 /*
  * Instruct the port driver to just accept logins from these addresses
@@ -144,14 +143,14 @@
 /*
  * Structure for issuing a work request to the per-instance "job handler"
  * thread. Primarily allocated/initialized by fctl_alloc_job() and freed by
- * fctl_dealloc_job().  fctl keeps a kmem_cache of these structs anchored by the
+ * fctl_dealloc_job().	fctl keeps a kmem_cache of these structs anchored by the
  * fctl_job_cache global variable.  The cache is created at fctl's _init(9E) and
  * destroyed at fctl's _fini(9E).  See also fctl_cache_constructor()
  * and fctl_cache_destructor().
  */
 typedef struct job_request {
 	/*
-	 * ID code for the job or task to be performed.  Set by fctl_alloc_job()
+	 * ID code for the job or task to be performed.	 Set by fctl_alloc_job()
 	 * and read by fp_job_handler().
 	 */
 	int		job_code;
@@ -197,7 +196,7 @@
 	 * maintained on a per-instance basis by the fp_port_head and
 	 * fp_port_tail pointers in the fc_local_port_t struct.
 	 */
-	struct job_request 	*job_next;
+	struct job_request	*job_next;
 } job_request_t;
 
 
@@ -250,7 +249,7 @@
  *
  * JOB_TYPE_FCTL_ASYNC is set in various places in fp and fctl. If set then
  * fctl_jobdone() will call the completion function in the job_comp field and
- * deallocate the job_request_t struct.  If not set then fctl_jobdone() will
+ * deallocate the job_request_t struct.	 If not set then fctl_jobdone() will
  * sema_v() the job_fctl_sema to wake up any waiting thread.  This bit is also
  * checked in fc_ulp_login(): if *clear* then fc_ulp_login() will call
  * fctl_jobwait() in order to block the calling thread in the job_fctl_sema, and
@@ -258,7 +257,7 @@
  *
  * JOB_TYPE_FP_ASYNC is set in various places in fp. If set then fp_jobdone()
  * will call fctl_jobdone(); if clear then fp_jobdone() will sema_v() the
- * job_port_sema in the job_request_t.  fp_port_shutdown() also looks for
+ * job_port_sema in the job_request_t.	fp_port_shutdown() also looks for
  * JOB_TYPE_FP_ASYNC.  Just to keep thing interesting, JOB_TYPE_FP_ASYNC is
  * also set in fp_validate_area_domain() and cleared in fp_fcio_login() and
  * fp_ns_get_devcount()
@@ -281,7 +280,7 @@
 	uint32_t	clist_state;		/* port state */
 	uint32_t	clist_len;		/* map len */
 	uint32_t	clist_size;		/* alloc len */
-	fc_portmap_t 	*clist_map;		/* changelist */
+	fc_portmap_t	*clist_map;		/* changelist */
 	uint32_t	clist_flags;		/* port topology */
 	uint32_t	clist_wait;		/* for synchronous requests */
 	kmutex_t	clist_mutex;		/* clist lock */
@@ -329,13 +328,34 @@
 	struct fc_orphan	*orp_next;	/* Next orphan */
 } fc_orphan_t;
 
+#define	FC_GET_RSP(x_port, x_handle, x_dest, x_src, x_size, x_flag)	\
+	{								\
+		if (!((x_port)->fp_soft_state & FP_SOFT_FCA_IS_NODMA)) {\
+			ddi_rep_get8((x_handle), (uint8_t *)(x_dest),	\
+				    (uint8_t *)(x_src), (x_size),	\
+				    (x_flag));				\
+		} else {						\
+			bcopy((x_src), (x_dest), (x_size));		\
+		}							\
+	}
+
+#define	FC_SET_CMD(x_port, x_handle, x_src, x_dest, x_size, x_flag)	\
+	{								\
+		if (!((x_port)->fp_soft_state & FP_SOFT_FCA_IS_NODMA)) {\
+			ddi_rep_put8((x_handle), (uint8_t *)(x_src),	\
+				    (uint8_t *)(x_dest), (x_size),	\
+				    (x_flag));				\
+		} else {						\
+			bcopy((x_src), (x_dest), (x_size));		\
+		}							\
+	}
+
 #if	!defined(__lint)
 _NOTE(SCHEME_PROTECTS_DATA("scans don't interleave",
-	fc_orphan::orp_nscan fc_orphan::orp_pwwn fc_orphan::orp_tstamp))
+    fc_orphan::orp_nscan fc_orphan::orp_pwwn fc_orphan::orp_tstamp))
 _NOTE(MUTEX_PROTECTS_DATA(fc_local_port::fp_mutex, fc_orphan::orp_next))
 #endif /* __lint */
 
-
 fc_remote_node_t *fctl_create_remote_node(la_wwn_t *nwwn, int sleep);
 void fctl_destroy_remote_node(fc_remote_node_t *rnp);
 fc_remote_port_t *fctl_create_remote_port(fc_local_port_t *port,
--- a/usr/src/uts/common/sys/fibre-channel/impl/fcgs2.h	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/uts/common/sys/fibre-channel/impl/fcgs2.h	Mon Aug 10 10:43:48 2009 -0400
@@ -19,7 +19,7 @@
  * CDDL HEADER END
  */
 /*
- * Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
+ * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
  * Use is subject to license terms.
  */
 
@@ -154,6 +154,9 @@
 #define	NSRJTX_BADPORTID	0x11	/* Unacceptable port ID */
 #define	NSRJTX_DBEMPTY		0x12	/* Data base empty */
 
+/* Management Service Command Codes */
+#define	MS_GIEL		0x0101	/* Get Interconnect Element List */
+
 #define	FC_NS_CLASSF		0x01
 #define	FC_NS_CLASS1		0x02
 #define	FC_NS_CLASS2		0x04
--- a/usr/src/uts/common/sys/fibre-channel/impl/fctl.h	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/uts/common/sys/fibre-channel/impl/fctl.h	Mon Aug 10 10:43:48 2009 -0400
@@ -70,6 +70,9 @@
 #define	FC_STATE_FULL_SPEED		FC_STATE_1GBIT_SPEED
 #define	FC_STATE_DOUBLE_SPEED		FC_STATE_2GBIT_SPEED
 
+/* pi_port_state, used only when binding port */
+#define	FC_STATE_FCA_IS_NODMA		0x80000000
+
 /*
  * Macros to discriminate between the link state byte and the link speed
  * byte in fp_state (also good for improved code obfuscation and job security
@@ -98,7 +101,6 @@
 #define	FC_NOTIFY_GET_FLAG(cmd)		FC_NOTIFY_FLAG_MASK(cmd)
 #define	FC_NOTIFY_GET_VALUE(cmd)	(FC_NOTIFY_VALUE_MASK(cmd) >> 8)
 
-
 /*
  * pkt_tran_flags definitions
  */
@@ -151,7 +153,7 @@
 	struct buf		*pkt_data_buf;		/* reserved */
 	void			(*pkt_ulp_comp)(struct fc_packet *);
 							/* framework private */
-	opaque_t		pkt_ulp_private; 	/* caller's private */
+	opaque_t		pkt_ulp_private;	/* caller's private */
 	void			(*pkt_comp)(struct fc_packet *); /* callback */
 	struct fc_remote_port	*pkt_pd;		/* port device */
 	ddi_dma_handle_t	pkt_cmd_dma;		/* command DMA */
@@ -162,12 +164,12 @@
 	ddi_dma_cookie_t	*pkt_resp_cookie;	/* response cookie */
 	ddi_dma_handle_t	pkt_data_dma;		/* data DMA */
 	ddi_acc_handle_t	pkt_data_acc;		/* data access */
-	ddi_dma_cookie_t	*pkt_data_cookie; 	/* data cookie */
+	ddi_dma_cookie_t	*pkt_data_cookie;	/* data cookie */
 	uint_t			pkt_cmd_cookie_cnt;
 	uint_t			pkt_resp_cookie_cnt;
 	uint_t			pkt_data_cookie_cnt;	/* of a window */
 	fc_frame_hdr_t		pkt_cmd_fhdr;		/* command frame hdr */
-	opaque_t		pkt_fca_private; 	/* FCA private */
+	opaque_t		pkt_fca_private;	/* FCA private */
 	uchar_t			pkt_state;		/* packet state */
 	uchar_t			pkt_action;		/* packet action */
 	uchar_t			pkt_expln;		/* reason explanation */
@@ -228,7 +230,7 @@
 #define	FC_HBA_PORTSPEED_4GBIT		8    /* 4 GBit/sec */
 #define	FC_HBA_PORTSPEED_8GBIT		16   /* 8 GBit/sec */
 #define	FC_HBA_PORTSPEED_16GBIT		32   /* 16 GBit/sec */
-#define	FC_HBA_PORTSPEED_NOT_NEGOTIATED	(1<<15)   /* Speed not established */
+#define	FC_HBA_PORTSPEED_NOT_NEGOTIATED	(1<<15)	  /* Speed not established */
 
 #define	FCHBA_MANUFACTURER_LEN		64
 #define	FCHBA_SERIAL_NUMBER_LEN		64
@@ -275,7 +277,7 @@
 	opaque_t	ub_port_handle;
 	opaque_t	ub_resp_token;		/* Response token */
 	uint64_t	ub_token;
-	fc_frame_hdr_t 	ub_frame;
+	fc_frame_hdr_t	ub_frame;
 } fc_unsol_buf_t;
 
 #define	FC_UB_RESP_LOGIN_REQUIRED	0x4000
--- a/usr/src/uts/common/sys/fibre-channel/ulp/fcp.h	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/uts/common/sys/fibre-channel/ulp/fcp.h	Mon Aug 10 10:43:48 2009 -0400
@@ -19,14 +19,13 @@
  * CDDL HEADER END
  */
 /*
- * Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
+ * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
  * Use is subject to license terms.
  */
 
 #ifndef	_FCP_H
 #define	_FCP_H
 
-
 /*
  * Frame format and protocol definitions for transferring
  * commands and data between a SCSI initiator and target
@@ -50,7 +49,6 @@
 #define	FCP_SCSI_RSP		0x03	/* frame contains SCSI response */
 #define	FCP_SCSI_XFER_RDY	0x05	/* frame contains xfer rdy block */
 
-
 /*
  * fcp SCSI control structure
  */
@@ -109,7 +107,6 @@
 #define	FCP_QTYPE_ACA_Q_TAG	4		/* ACA queueing */
 #define	FCP_QTYPE_UNTAGGED	5		/* Untagged */
 
-
 /*
  * fcp SCSI entity address
  *
@@ -125,7 +122,6 @@
 	ushort_t ent_addr_3;		/* entity address 3 */
 } fcp_ent_addr_t;
 
-
 /*
  * maximum size of SCSI cdb in fcp SCSI command
  */
@@ -143,7 +139,6 @@
 	int		fcp_data_len;			/* data length */
 } fcp_cmd_t;
 
-
 /*
  * fcp SCSI status
  */
@@ -170,7 +165,6 @@
 	uchar_t	scsi_status;			/* status of cmd */
 } fcp_status_t;
 
-
 /*
  * fcp SCSI response payload
  */
@@ -190,11 +184,9 @@
 	 */
 } fcp_rsp_t;
 
-
 /* MAde 256 for sonoma as it wants to give tons of sense info */
 #define	FCP_MAX_RSP_IU_SIZE	256
 
-
 /*
  * fcp rsp_info field format
  */
@@ -219,7 +211,6 @@
 #define		FCP_TASK_MGMT_NOT_SUPPTD	0x4
 #define		FCP_TASK_MGMT_FAILED		0x5
 
-
 #ifdef	THIS_NEEDED_YET
 
 /*
@@ -289,33 +280,51 @@
 
 };
 
-
 /*
  * fcp PRLI ACC payload
  */
 struct fcp_prli_acc {
 	uchar_t		type;
-	uchar_t		resvd1;
+	uchar_t		resvd1; /* type code extension */
 
-	uint32_t	orig_process_assoc_valid : 1;
-	uint32_t	resp_process_assoc_valid : 1;
-	uint32_t	image_pair_established : 1;
-	uint32_t	resvd2 : 1;
-	uint32_t	accept_response_code : 4;
-	uint32_t	resvd3 : 8;
+#if	defined(_BIT_FIELDS_HTOL)
+	uint16_t	orig_process_assoc_valid : 1,
+			resp_process_assoc_valid : 1,
+			image_pair_established : 1,
+			resvd2 : 1,
+			accept_response_code : 4,
+			resvd3 : 8;
+#elif	defined(_BIT_FIELDS_LTOH)
+	uint16_t	resvd3 : 8,
+			accept_response_code : 4,
+			resvd2 : 1,
+			image_pair_established : 1,
+			resp_process_assoc_valid : 1,
+			orig_process_assoc_valid : 1;
+#endif
+
 	uint32_t	orig_process_associator;
 	uint32_t	resp_process_associator;
-	uint32_t	resvd4 : 26;
-	uint32_t	initiator_fn : 1;
-	uint32_t	target_fn : 1;
-	uint32_t	cmd_data_mixed : 1;
-	uint32_t	data_resp_mixed : 1;
-	uint32_t	read_xfer_rdy_disabled : 1;
-	uint32_t	write_xfer_rdy_disabled : 1;
 
+#if	defined(_BIT_FIELDS_HTOL)
+	uint32_t	resvd4 : 26,
+			initiator_fn : 1,
+			target_fn : 1,
+			cmd_data_mixed : 1,
+			data_resp_mixed : 1,
+			read_xfer_rdy_disabled : 1,
+			write_xfer_rdy_disabled : 1;
+#elif	defined(_BIT_FIELDS_LTOH)
+	uint32_t	write_xfer_rdy_disabled : 1,
+			read_xfer_rdy_disabled : 1,
+			data_resp_mixed : 1,
+			cmd_data_mixed : 1,
+			target_fn : 1,
+			initiator_fn : 1,
+			resvd4 : 26;
+#endif
 };
 
-
 #define	FC_UB_FCP_CDB_FLAG	0x0001		/* UB has valid cdb */
 #define	FC_UB_FCP_PORT_LOGOUT	0x0002		/* Port logout UB */
 #define	FC_UB_FCP_ABORT_TASK	0x0004		/* Abort task UB */
--- a/usr/src/uts/common/sys/fibre-channel/ulp/fcpvar.h	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/uts/common/sys/fibre-channel/ulp/fcpvar.h	Mon Aug 10 10:43:48 2009 -0400
@@ -26,8 +26,6 @@
 #ifndef	_FCPVAR_H
 #define	_FCPVAR_H
 
-
-
 #ifdef	__cplusplus
 extern "C" {
 #endif
@@ -127,7 +125,7 @@
  * This is the master structure off of which all the others will be hanging at
  * some point and is the Solaris per-instance soft-state structure.
  */
-struct fcp_port {
+typedef struct fcp_port {
 	/*
 	 * This mutex protects the access to this structure (or most of its
 	 * fields).
@@ -409,7 +407,7 @@
 	 * list.
 	 */
 	int			port_dmacookie_sz;
-};
+} fcp_port_t;
 
 /*
  * We need to save the target change count values in a map tag so as
@@ -438,6 +436,11 @@
  */
 #define	FCP_STATE_IN_CB_DEVC		0x0400
 
+/*
+ * FCP_STATE_FCA_IS_NODMA indicates that FCA doesn't support DMA at all
+ */
+#define	FCP_STATE_FCA_IS_NODMA		0x80000000
+
 #define	FCP_MAX_DEVICES			127
 
 /* To remember that dip was allocated for a lun on this target. */
@@ -521,7 +524,7 @@
  * (a)	The underlying FCA does NOT support DMA for this field
  * (b)	The underlying FCA supports DMA for this field
  */
-struct fcp_pkt {
+typedef struct fcp_pkt {
 	/*
 	 * The two following fields are used to queue fcp_pkt in the double
 	 * link list of the lun structure.  The packet is queued in
@@ -578,7 +581,7 @@
 	 * fp/fctl.
 	 */
 	struct fc_packet	cmd_fc_packet;
-};
+} fcp_pkt_t;
 
 /*
  * fcp_ipkt : Packet for internal commands.
@@ -645,7 +648,7 @@
  * (a)	The underlying FCA does NOT support DMA for this field
  * (b)	The underlying FCA supports DMA for this field
  */
-struct fcp_ipkt {
+typedef struct fcp_ipkt {
 	/*
 	 * Pointer to the port (fcp_port) in behalf of which this internal
 	 * packet was allocated.
@@ -713,7 +716,7 @@
 	 * FC packet.
 	 */
 	struct fc_packet	ipkt_fc_packet;
-};
+} fcp_ipkt_t;
 
 /*
  * cmd_state definitions
@@ -725,7 +728,9 @@
 /*
  * These are the defined cmd_flags for this structure.
  */
-#define	CFLAG_IN_QUEUE		0x2000	/* command in fcp queue */
+#define	CFLAG_NONE		0x0000
+#define	CFLAG_IS_READ		0x0001
+#define	CFLAG_IN_QUEUE		0x0002	/* command in fcp queue */
 
 /*
  * Target structure
@@ -735,7 +740,7 @@
  * structure doesn't represent the object registered with the OS (NDI or
  * MPxIO...).
  */
-struct fcp_tgt {
+typedef struct fcp_tgt {
 	/*
 	 * This field is used to queue the target structure in one of the
 	 * buckets of the fcp_port target hash table port_tgt_hash_table[].
@@ -850,7 +855,7 @@
 	 * used to detect user unconfig when auto configuration is enabled.
 	 */
 	uint32_t		tgt_manual_config_only;
-};
+} fcp_tgt_t;
 
 /*
  * Target States
@@ -964,7 +969,7 @@
  * structure is the one representing the object registered with the OS (NDI
  * or MPxIO...).
  */
-struct fcp_lun {
+typedef struct fcp_lun {
 	/*
 	 * Mutex protecting the access to this structure.
 	 */
@@ -1058,7 +1063,7 @@
 	 * LUN inquiry data (as returned by the INQUIRY command).
 	 */
 	struct scsi_inquiry	lun_inq;
-};
+} fcp_lun_t;
 
 
 /*
@@ -1297,10 +1302,10 @@
 	int				masked;
 } fcp_black_list_entry_t;
 
-#define	ADDR2FCP(ap)	((struct fcp_port *) \
-			    ((ap)->a_hba_tran->tran_hba_private))
-#define	ADDR2LUN(ap)	((struct fcp_lun *) \
-			scsi_device_hba_private_get(scsi_address_device(ap)))
+#define	ADDR2FCP(ap)	((struct fcp_port *)		\
+		((ap)->a_hba_tran->tran_hba_private))
+#define	ADDR2LUN(ap)	((struct fcp_lun *)				\
+		scsi_device_hba_private_get(scsi_address_device(ap)))
 #define	CMD2PKT(cmd)	((cmd)->cmd_pkt)
 #define	PKT2CMD(pkt)	((struct fcp_pkt *)((pkt)->pkt_ha_private))
 
@@ -1366,13 +1371,28 @@
     scsi_pkt scsi_arq_status scsi_device scsi_hba_tran scsi_cdb))
 #endif	/* __lint */
 
-#define	FCP_CP_IN(s, d, handle, len)	(ddi_rep_get8((handle), \
-					(uint8_t *)(d), (uint8_t *)(s), \
-					(len), DDI_DEV_AUTOINCR))
+/*
+ * Local variable "pptr" must exist before using these
+ */
+#define	FCP_CP_IN(s, d, handle, len)					\
+	{								\
+		if (!((pptr)->port_state & FCP_STATE_FCA_IS_NODMA)) {	\
+			ddi_rep_get8((handle), (uint8_t *)(d),		\
+			    (uint8_t *)(s), (len), DDI_DEV_AUTOINCR);	\
+		} else {						\
+			bcopy((s), (d), (len));				\
+		}							\
+	}
 
-#define	FCP_CP_OUT(s, d, handle, len)	(ddi_rep_put8((handle), \
-					(uint8_t *)(s), (uint8_t *)(d), \
-					(len), DDI_DEV_AUTOINCR))
+#define	FCP_CP_OUT(s, d, handle, len)				\
+	{								\
+		if (!((pptr)->port_state & FCP_STATE_FCA_IS_NODMA)) {	\
+			ddi_rep_put8((handle), (uint8_t *)(s),		\
+			    (uint8_t *)(d), (len), DDI_DEV_AUTOINCR);	\
+		} else {						\
+			bcopy((s), (d), (len));				\
+		}							\
+	}
 
 #define	FCP_ONLINE			0x1
 #define	FCP_OFFLINE			0x2
--- a/usr/src/uts/common/sys/fibre-channel/ulp/fcsm.h	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/uts/common/sys/fibre-channel/ulp/fcsm.h	Mon Aug 10 10:43:48 2009 -0400
@@ -19,15 +19,13 @@
  * CDDL HEADER END
  */
 /*
- * Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
+ * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
  * Use is subject to license terms.
  */
 
 #ifndef	_FCSM_H
 #define	_FCSM_H
 
-
-
 #ifdef	__cplusplus
 extern "C" {
 #endif
@@ -95,7 +93,7 @@
 	ksema_t		job_sema;		/* To wait for completion */
 	struct fcsm_job	*job_next;		/* for linked list */
 	int		job_retry_count;	/* Retry count */
-	void		*job_priv;		/* for fcsm private use  */
+	void		*job_priv;		/* for fcsm private use	 */
 	uint32_t	job_priv_flags;		/* fcsm private flags */
 } fcsm_job_t;
 
@@ -163,6 +161,7 @@
 #define	FCSM_LINK_DOWN			0x1000
 #define	FCSM_MGMT_SERVER_LOGGED_IN	0x2000
 #define	FCSM_MGMT_SERVER_LOGIN_IN_PROG	0x4000
+#define	FCSM_USING_NODMA_FCA		0x8000
 
 /* Command flags for Job structure */
 #define	FCSM_JOBFLAG_SYNC		0x01
@@ -197,48 +196,29 @@
 
 /*
  * Macros to address endian issues
+ * local variable "fcsm" must exist before using these
  */
-#define	FCSM_RD8(acchandle, addr)       \
-	ddi_get8((acchandle), (uint8_t *)(addr))
-#define	FCSM_RD16(acchandle, addr)      \
-	ddi_get16((acchandle), (uint16_t *)(addr))
-#define	FCSM_RD32(acchandle, addr)      \
-	ddi_get32((acchandle), (uint32_t *)(addr))
-#define	FCSM_RD64(acchandle, addr)      \
-	ddi_get64((acchandle), (uint64_t *)(addr))
-
-#define	FCSM_WR8(acchandle, addr, val)  \
-	ddi_put8((acchandle), (uint8_t *)(addr), (uint8_t)(val))
-#define	FCSM_WR16(acchandle, addr, val) \
-	ddi_put16((acchandle), (uint16_t *)(addr), (uint16_t)(val))
-#define	FCSM_WR32(acchandle, addr, val) \
-	ddi_put32((acchandle), (uint32_t *)(addr), (uint32_t)(val))
-#define	FCSM_WR64(acchandle, addr, val) \
-	ddi_put64((acchandle), (uint64_t *)(addr), (uint64_t)(val))
+#define	FCSM_REP_RD(handle, hostaddr, devaddr, cnt)			\
+	{								\
+		if (!((fcsm)->sm_flags & FCSM_USING_NODMA_FCA)) {	\
+			ddi_rep_get8((handle), (uint8_t *)(hostaddr),	\
+				    (uint8_t *)(devaddr), (cnt),	\
+				    DDI_DEV_AUTOINCR);			\
+		} else {						\
+			bcopy((devaddr), (hostaddr), (cnt));		\
+		}							\
+	}
 
-#define	FCSM_REP_RD(acchandle, hostaddr, devaddr, cnt)  \
-	ddi_rep_get8((acchandle), (uint8_t *)(hostaddr), (uint8_t *)(devaddr),\
-	    (size_t)(cnt), DDI_DEV_AUTOINCR)
-#define	FCSM_REP_RD32(acchandle, hostaddr, devaddr, cnt)        \
-	ddi_rep_get32((acchandle), (uint32_t *)(hostaddr),      \
-	    (uint32_t *)(devaddr), ((size_t)(cnt)) >> 2, DDI_DEV_AUTOINCR)
-
-#define	FCSM_REP_WR(acchandle, hostaddr, devaddr, cnt)  \
-	ddi_rep_put8((acchandle), (uint8_t *)(hostaddr), (uint8_t *)(devaddr),\
-	    (size_t)(cnt), DDI_DEV_AUTOINCR)
-#define	FCSM_REP_WR32(acchandle, hostaddr, devaddr, cnt)        \
-	ddi_rep_put32((acchandle), (uint32_t *)(hostaddr),\
-	    (uint32_t *)(devaddr), ((size_t)(cnt)) >> 2, DDI_DEV_AUTOINCR)
-
-/*
- * Macros to perform DMA Sync
- */
-#define	FCSM_SYNC_FOR_DEV(dmahandle, offset, length)    \
-	(void) ddi_dma_sync((dmahandle), (offset),\
-	    (size_t)(length), DDI_DMA_SYNC_FORDEV)
-#define	FCSM_SYNC_FOR_KERNEL(dmahandle, offset, length) \
-	(void) ddi_dma_sync((acchandle), (offset),\
-	    (length), DDI_DMA_SYNC_FORKERNEL)
+#define	FCSM_REP_WR(handle, hostaddr, devaddr, cnt)			\
+	{								\
+		if (!((fcsm)->sm_flags & FCSM_USING_NODMA_FCA)) {	\
+			ddi_rep_put8((handle), (uint8_t *)(hostaddr),	\
+				    (uint8_t *)(devaddr), (cnt),	\
+				    DDI_DEV_AUTOINCR);			\
+		} else {						\
+			bcopy((hostaddr), (devaddr), (cnt));		\
+		}							\
+	}
 
 #endif /* _KERNEL */
 
--- a/usr/src/uts/common/sys/mac_provider.h	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/uts/common/sys/mac_provider.h	Mon Aug 10 10:43:48 2009 -0400
@@ -31,6 +31,7 @@
 #include <sys/ddi.h>
 #include <sys/sunddi.h>
 #include <sys/stream.h>
+#include <sys/mkdev.h>
 #include <sys/mac_flow.h>
 #include <sys/mac.h>
 
@@ -49,6 +50,19 @@
 #define	MAC_VERSION	0x2
 
 /*
+ * This is the first minor number available for MAC provider private
+ * use.  This makes it possible to deliver a driver that is both a MAC
+ * provider and a regular character/block device.  See PSARC 2009/380
+ * for more detail about the construction of such devices.  The value
+ * chosen leaves half of the 32-bit minor numbers (which are really
+ * only 18 bits wide) available for driver private use.  Drivers can
+ * easily identify their private number by the presence of this value
+ * in the bits that make up the minor number, since its just the
+ * highest bit available for such minor numbers.
+ */
+#define	MAC_PRIVATE_MINOR	((MAXMIN32 + 1) / 2)
+
+/*
  * Opaque handle types
  */
 typedef struct __mac_rule_handle	*mac_rule_handle_t;
--- a/usr/src/uts/common/sys/mac_wifi.h	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/uts/common/sys/mac_wifi.h	Mon Aug 10 10:43:48 2009 -0400
@@ -19,15 +19,13 @@
  * CDDL HEADER END
  */
 /*
- * Copyright 2007 Sun Microsystems, Inc.  All rights reserved.
+ * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
  * Use is subject to license terms.
  */
 
 #ifndef	_SYS_MAC_WIFI_H
 #define	_SYS_MAC_WIFI_H
 
-#pragma ident	"%Z%%M%	%I%	%E% SMI"
-
 /*
  * WiFi MAC-Type Plugin
  */
@@ -47,7 +45,7 @@
  * Maximum size of a WiFi header based on current implementation.
  * May change in the future as new features are added.
  */
-#define	WIFI_HDRSIZE (sizeof (struct ieee80211_frame) + \
+#define	WIFI_HDRSIZE (sizeof (struct ieee80211_qosframe_addr4) + \
     IEEE80211_WEP_IVLEN + IEEE80211_WEP_KIDLEN + IEEE80211_WEP_EXTIVLEN + \
     sizeof (struct ieee80211_llc))
 
@@ -99,12 +97,18 @@
  *			transmission.  The plugin will allocate header
  *		        space for the security portion, and fill in any
  *			fixed-contents fields.
+ *
+ *	wd_qospad	Generally, QoS data field takes 2 bytes, but
+ *			some special hardwares, such as Atheros, will need the
+ *			802.11 header padded to a 32-bit boundary for 4-address
+ *			and QoS frames, at this time, it's 4 bytes.
  */
 typedef struct wifi_data {
 	uint_t			wd_opts;
 	uint8_t			wd_bssid[IEEE80211_ADDR_LEN];
 	enum ieee80211_opmode	wd_opmode;
 	enum wifi_secmode	wd_secalloc;
+	uint_t			wd_qospad;
 } wifi_data_t;
 
 extern uint8_t wifi_bcastaddr[];
--- a/usr/src/uts/common/sys/net80211.h	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/uts/common/sys/net80211.h	Mon Aug 10 10:43:48 2009 -0400
@@ -1,5 +1,5 @@
 /*
- * Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
+ * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
  * Use is subject to license terms.
  */
 
@@ -42,6 +42,7 @@
 #include <sys/ethernet.h>
 #include <sys/net80211_proto.h>
 #include <sys/net80211_crypto.h>
+#include <sys/net80211_ht.h>
 #include <net/wpa.h>
 
 /*
@@ -85,6 +86,17 @@
 
 #define	IEEE80211_C_CRYPTO	0x0000001f	/* CAPABILITY: crypto alg's */
 
+/*
+ * ic_htcaps: HT-specific device/driver capabilities
+ *
+ * NB: the low 16-bits are the 802.11 definitions, the upper
+ *     16-bits are used to define s/w/driver capabilities.
+ */
+#define	IEEE80211_HTC_AMPDU	0x00010000	/* CAPABILITY: A-MPDU tx */
+#define	IEEE80211_HTC_AMSDU	0x00020000	/* CAPABILITY: A-MSDU tx */
+/* NB: HT40 is implied by IEEE80211_HTCAP_CHWIDTH40 */
+#define	IEEE80211_HTC_HT	0x00040000	/* CAPABILITY: HT operation */
+
 /* ic_flags */
 /* NB: bits 0x4c available */
 #define	IEEE80211_F_FF		0x00000001	/* CONF: ATH FF enabled */
@@ -124,25 +136,52 @@
 #define	IEEE80211_F_WMEUPDATE	0x20000000	/* STATUS: update beacon wme */
 
 /* ic_flags_ext */
-#define	IEEE80211_FEXT_WDS	0x00000001	/* CONF: 4 addr allowed */
+#define	IEEE80211_FEXT_NONHT_PR	0x00000001	/* STATUS: non-HT sta present */
+#define	IEEE80211_FEXT_INACT	0x00000002	/* CONF: sta inact handling */
 /* 0x00000006 reserved */
 #define	IEEE80211_FEXT_BGSCAN	0x00000008
 				/* STATUS: enable full bgscan completion */
 #define	IEEE80211_FEXT_ERPUPDATE 0x00000200	/* STATUS: update ERP element */
 #define	IEEE80211_FEXT_SWBMISS	0x00000400	/* CONF: do bmiss in s/w */
+#define	IEEE80211_FEXT_PROBECHAN 0x00020000	/* CONF: probe passive chan */
+#define	IEEE80211_FEXT_HT	0x00080000	/* CONF: HT supported */
+#define	IEEE80211_FEXT_AMPDU_TX	0x00100000	/* CONF: A-MPDU tx supported */
+#define	IEEE80211_FEXT_AMPDU_RX	0x00200000	/* CONF: A-MPDU tx supported */
+#define	IEEE80211_FEXT_AMSDU_TX	0x00400000	/* CONF: A-MSDU tx supported */
+#define	IEEE80211_FEXT_AMSDU_RX	0x00800000	/* CONF: A-MSDU tx supported */
+#define	IEEE80211_FEXT_USEHT40	0x01000000	/* CONF: 20/40 use enabled */
+#define	IEEE80211_FEXT_PUREN	0x02000000	/* CONF: 11n w/o legacy sta's */
+#define	IEEE80211_FEXT_SHORTGI20 0x04000000	/* CONF: short GI in HT20 */
+#define	IEEE80211_FEXT_SHORTGI40 0x08000000	/* CONF: short GI in HT40 */
+#define	IEEE80211_FEXT_HTCOMPAT 0x10000000	/* CONF: HT vendor OUI's */
 
 /*
  * Channel attributes (ich_flags)
  * bits 0-3 are for private use by drivers
  */
-#define	IEEE80211_CHAN_TURBO	0x0010	/* Turbo channel */
-#define	IEEE80211_CHAN_CCK	0x0020	/* CCK channel */
-#define	IEEE80211_CHAN_OFDM	0x0040	/* OFDM channel */
-#define	IEEE80211_CHAN_2GHZ	0x0080	/* 2 GHz spectrum channel. */
-#define	IEEE80211_CHAN_5GHZ	0x0100	/* 5 GHz spectrum channel */
-#define	IEEE80211_CHAN_PASSIVE	0x0200	/* Only passive scan allowed */
-#define	IEEE80211_CHAN_DYN	0x0400	/* Dynamic CCK-OFDM channel */
-#define	IEEE80211_CHAN_GFSK	0x0800	/* GFSK channel (FHSS PHY) */
+#define	IEEE80211_CHAN_TURBO	0x00000010 /* Turbo channel */
+#define	IEEE80211_CHAN_CCK	0x00000020 /* CCK channel */
+#define	IEEE80211_CHAN_OFDM	0x00000040 /* OFDM channel */
+#define	IEEE80211_CHAN_2GHZ	0x00000080 /* 2 GHz spectrum channel. */
+#define	IEEE80211_CHAN_5GHZ	0x00000100 /* 5 GHz spectrum channel */
+#define	IEEE80211_CHAN_PASSIVE	0x00000200 /* Only passive scan allowed */
+#define	IEEE80211_CHAN_DYN	0x00000400 /* Dynamic CCK-OFDM channel */
+#define	IEEE80211_CHAN_GFSK	0x00000800 /* GFSK channel (FHSS PHY) */
+#define	IEEE80211_CHAN_GSM	0x00001000 /* 900 MHz spectrum channel */
+#define	IEEE80211_CHAN_STURBO	0x00002000 /* 11a static turbo channel only */
+#define	IEEE80211_CHAN_HALF	0x00004000 /* Half rate channel */
+#define	IEEE80211_CHAN_QUARTER	0x00008000 /* Quarter rate channel */
+#define	IEEE80211_CHAN_HT20	0x00010000 /* HT 20 channel */
+#define	IEEE80211_CHAN_HT40U	0x00020000 /* HT 40 channel w/ ext above */
+#define	IEEE80211_CHAN_HT40D	0x00040000 /* HT 40 channel w/ ext below */
+#define	IEEE80211_CHAN_DFS	0x00080000 /* DFS required */
+#define	IEEE80211_CHAN_4MSXMIT	0x00100000 /* 4ms limit on frame length */
+#define	IEEE80211_CHAN_NOADHOC	0x00200000 /* adhoc mode not allowed */
+#define	IEEE80211_CHAN_NOHOSTAP	0x00400000 /* hostap mode not allowed */
+#define	IEEE80211_CHAN_11D	0x00800000 /* 802.11d required */
+
+#define	IEEE80211_CHAN_HT40	(IEEE80211_CHAN_HT40U | IEEE80211_CHAN_HT40D)
+#define	IEEE80211_CHAN_HT	(IEEE80211_CHAN_HT20 | IEEE80211_CHAN_HT40)
 
 #define	IEEE80211_CHAN_MAX	255
 #define	IEEE80211_CHAN_BYTES	32	/* howmany(IEEE80211_CHAN_MAX, NBBY) */
@@ -155,10 +194,30 @@
 #define	IEEE80211_IS_CHAN_5GHZ(_c)	\
 	(((_c)->ich_flags & IEEE80211_CHAN_5GHZ) != 0)
 
+#define	IEEE80211_NODE_CHWUPDATE 0x0400		/* 11n channel width change */
 #define	IEEE80211_NODE_HASHSIZE	32
 
+#define	IEEE80211_NODE_AUTH	0x0001		/* authorized for data */
+#define	IEEE80211_NODE_QOS	0x0002		/* QoS enabled */
+#define	IEEE80211_NODE_ERP	0x0004		/* ERP enabled */
+/* NB: this must have the same value as IEEE80211_FC1_PWR_MGT */
+#define	IEEE80211_NODE_PWR_MGT	0x0010		/* power save mode enabled */
+#define	IEEE80211_NODE_AREF	0x0020		/* authentication ref held */
+#define	IEEE80211_NODE_HT	0x0040		/* HT enabled */
+#define	IEEE80211_NODE_HTCOMPAT	0x0080		/* HT setup w/ vendor OUI's */
+#define	IEEE80211_NODE_AMPDU_RX	0x0400		/* AMPDU rx enabled */
+#define	IEEE80211_NODE_AMPDU_TX	0x0800		/* AMPDU tx enabled */
+
+#define	IEEE80211_NODE_AMPDU \
+	(IEEE80211_NODE_AMPDU_RX | IEEE80211_NODE_AMPDU_TX)
+
 #define	IEEE80211_FIXED_RATE_NONE	0
-#define	IEEE80211_MCAST_RATE_DEFAULT	(2*1)	/* default mcast rate (1M) */
+
+#define	WME_OUI			0xf25000
+#define	WME_OUI_TYPE		0x02
+#define	WME_INFO_OUI_SUBTYPE	0x00
+#define	WME_PARAM_OUI_SUBTYPE	0x01
+#define	WME_VERSION		1
 
 /* WME stream classes */
 #define	WME_AC_BE		0	/* best effort */
@@ -169,6 +228,25 @@
 #define	MAX_EVENT		16
 #define	MAX_IEEE80211STR	256
 
+/* For IEEE80211_RADIOTAP_FLAGS */
+#define	IEEE80211_RADIOTAP_F_CFP	0x01
+					/* sent/received during CFP */
+#define	IEEE80211_RADIOTAP_F_SHORTPRE	0x02
+					/* sent/received with short preamble */
+#define	IEEE80211_RADIOTAP_F_WEP	0x04
+					/* sent/received with WEP encryption */
+#define	IEEE80211_RADIOTAP_F_FRAG	0x08
+					/* sent/received with fragmentation */
+#define	IEEE80211_RADIOTAP_F_DATAPAD	0x20
+					/*
+					 * frame has padding between 802.11
+					 * header and payload (to 32-bit
+					 * boundary
+					 */
+#define	IEEE80211_RADIOTAP_F_FCS	0x10	/* frame includes FCS */
+#define	IEEE80211_RADIOTAP_F_BADFCS	0x40	/* does not pass FCS check */
+#define	IEEE80211_RADIOTAP_F_SHORTGI	0x80	/* HT short GI */
+
 /*
  * Authentication mode.
  */
@@ -204,11 +282,26 @@
 };
 
 /*
+ * 802.11n variant of ieee80211_rateset.  Instead
+ * legacy rates the entries are MCS rates.  We define
+ * the structure such that it can be used interchangeably
+ * with an ieee80211_rateset (modulo structure size).
+ */
+#define	IEEE80211_HTRATE_MAXSIZE 127
+
+struct ieee80211_htrateset {
+	uint8_t			rs_nrates;
+	uint8_t			rs_rates[IEEE80211_HTRATE_MAXSIZE];
+};
+
+#define	IEEE80211_RATE_MCS	0x80
+
+/*
  * Channels are specified by frequency and attributes.
  */
 struct ieee80211_channel {
 	uint16_t		ich_freq;	/* setting in Mhz */
-	uint16_t		ich_flags;	/* see below */
+	uint32_t		ich_flags;	/* see below */
 };
 
 struct ieee80211_device_stats {
@@ -254,6 +347,9 @@
 	list_t			nt_hash[IEEE80211_NODE_HASHSIZE];
 };
 
+#define	IEEE80211_TID_SIZE	(WME_NUM_TID+1)	/* WME TID's +1 for non-QoS */
+#define	IEEE80211_NONQOS_TID	WME_NUM_TID	/* index for non-QoS sta */
+
 /*
  * Node specific information.  Note that drivers are expected
  * to derive from this structure to add device-specific per-node
@@ -274,8 +370,8 @@
 	 * index 0 is used when QoS is not enabled. index 1-16 is used
 	 * when QoS is enabled. 1-16 corresponds to TID 0-15.
 	 */
-	uint16_t		in_txseqs[17];	/* tx seq per-tid */
-	uint16_t		in_rxseqs[17];	/* rx seq previous per-tid */
+	uint16_t		in_txseqs[IEEE80211_TID_SIZE];
+	uint16_t		in_rxseqs[IEEE80211_TID_SIZE];
 	clock_t			in_rxfragstamp;	/* time stamp of last rx frag */
 	mblk_t			*in_rxfrag;	/* rx frag reassembly */
 	uint32_t		in_scangen;	/* gen# for timeout scan */
@@ -311,23 +407,74 @@
 	uint32_t		*in_challenge;	/* shared-key challenge */
 	struct ieee80211_key	in_ucastkey;	/* unicast key */
 	uint8_t			*in_wpa_ie;	/* captured WPA/RSN ie */
+	uint8_t			*in_wme_ie;	/* captured WME ie */
+
+	/* 11n state */
+	uint8_t			*in_htcap_ie;	/* captured HTCAP ie */
+	uint16_t		in_htcap;	/* HT capabilities */
+	uint8_t			in_htparam;	/* HT params */
+	uint8_t			in_htctlchan;	/* HT control channel */
+	uint8_t			in_ht2ndchan;	/* HT 2nd channel */
+	uint8_t			in_htopmode;	/* HT operating mode */
+	uint8_t			in_htstbc;	/* HT */
+	uint8_t			in_reqcw;	/* requested tx channel width */
+	uint8_t			in_chw;		/* negotiated channel width */
+	struct ieee80211_htrateset in_htrates;	/* negotiated ht rate set */
+	struct ieee80211_tx_ampdu in_tx_ampdu[WME_NUM_AC];
+	struct ieee80211_rx_ampdu in_rx_ampdu[WME_NUM_TID];
 
 	/* others */
 	int32_t			in_fails;	/* failure count to associate */
 	int16_t			in_inact;	/* inactivity mark count */
 	int16_t			in_inact_reload; /* inactivity reload value */
-	int32_t			in_txrate;	/* index to ni_rates[] */
+	int32_t			in_txrate;	/* index to in_rates[] */
 
 	list_node_t		in_node;	/* element of nt->nt_node */
 	list_node_t		in_hash;	/* element of nt->nt_hash */
 };
 
+/*
+ * WME/WMM support.
+ */
+struct wmeParams {
+	uint8_t		wmep_acm;
+	uint8_t		wmep_aifsn;
+	uint8_t		wmep_logcwmin;		/* log2(cwmin) */
+	uint8_t		wmep_logcwmax;		/* log2(cwmax) */
+	uint8_t		wmep_txopLimit;
+	uint8_t		wmep_noackPolicy;	/* 0 (ack), 1 (no ack) */
+};
+#define	IEEE80211_TXOP_TO_US(_txop)	((_txop)<<5)
+#define	IEEE80211_US_TO_TXOP(_us)	((_us)>>5)
+
+struct chanAccParams {
+	uint8_t		cap_info;		/* version of the current set */
+	struct wmeParams cap_wmeParams[WME_NUM_AC];
+};
+
+struct ieee80211_wme_state {
+	uint_t	wme_flags;
+#define	WME_F_AGGRMODE	0x00000001	/* STATUS: WME agressive mode */
+	uint_t	wme_hipri_traffic; /* VI/VO frames in beacon interval */
+	uint_t	wme_hipri_switch_thresh; /* agressive mode switch thresh */
+	uint_t	wme_hipri_switch_hysteresis;
+					/* agressive mode switch hysteresis */
+	struct wmeParams wme_params[4]; /* from assoc resp for each AC */
+	struct chanAccParams wme_wmeChanParams; /* WME params applied to self */
+	struct chanAccParams wme_wmeBssChanParams;
+					/* WME params bcast to stations */
+	struct chanAccParams wme_chanParams; /* params applied to self */
+	struct chanAccParams wme_bssChanParams; /* params bcast to stations */
+	int (*wme_update)(struct ieee80211com *);
+};
+
 struct ieee80211com {
 	mac_handle_t		ic_mach;
 
 	/* Initialized by driver */
 	uint8_t			ic_macaddr[IEEE80211_ADDR_LEN];
 	uint32_t		ic_caps;	/* capabilities */
+	uint32_t		ic_htcaps;	/* HT capabilities */
 	enum ieee80211_phytype	ic_phytype;	/* XXX wrong for multi-mode */
 	enum ieee80211_opmode	ic_opmode;	/* current operation mode */
 	enum ieee80211_state	ic_state;	/* current 802.11 state */
@@ -348,7 +495,6 @@
 	uint8_t			ic_bmissthreshold;
 	uint16_t		ic_rtsthreshold;
 	uint16_t		ic_fragthreshold;
-	int32_t			ic_mcast_rate;	/* rate for mcast frames */
 	uint8_t			ic_fixed_rate;	/* value of fixed rate */
 	int32_t			ic_des_esslen;	/* length of desired essid */
 	uint8_t			ic_des_essid[IEEE80211_NWID_LEN];
@@ -378,6 +524,22 @@
 	struct ieee80211_node_table	ic_scan; /* STA: scan candidates */
 	struct ieee80211_node_table	ic_sta; /* AP:stations/IBSS:neighbors */
 
+	struct ieee80211_wme_state ic_wme;	/* WME/WMM state */
+
+	int			ic_ampdu_rxmax;	/* A-MPDU rx limit (bytes) */
+	int			ic_ampdu_density; /* A-MPDU density */
+	int			ic_ampdu_limit;	/* A-MPDU tx limit (bytes) */
+	int			ic_amsdu_limit;	/* A-MSDU tx limit (bytes) */
+
+	uint16_t		ic_sta_assoc;	/* stations associated */
+	uint16_t		ic_ht_sta_assoc; /* HT stations associated */
+	uint16_t		ic_ht40_sta_assoc; /* HT40 station associated */
+	uint8_t			ic_curhtprotmode; /* HTINFO bss state */
+	enum ieee80211_protmode	ic_htprotmode;	/* HT protection mode */
+	int			ic_lastnonerp;	/* last time nonERP sta noted */
+	int			ic_lastnonht;	/* last time non-HT sta noted */
+
+
 	/* callback functions */
 	/*
 	 * Functions initialized by driver before calling ieee80211_attach()
@@ -423,6 +585,29 @@
 	void			(*ic_node_cleanup)(ieee80211_node_t *);
 	void			(*ic_node_free)(ieee80211_node_t *);
 	uint8_t			(*ic_node_getrssi)(const ieee80211_node_t *);
+	void			(*ic_set_channel)(ieee80211com_t *);
+
+	/*
+	 * 802.11n ADDBA support.  A simple/generic implementation
+	 * of A-MPDU tx aggregation is provided; the driver may
+	 * override these methods to provide their own support.
+	 * A-MPDU rx re-ordering happens automatically if the
+	 * driver passes out-of-order frames to ieee80211_input
+	 * from an assocated HT station.
+	 */
+	void			(*ic_recv_action)(ieee80211_node_t *,
+				    const uint8_t *, const uint8_t *);
+	int			(*ic_send_action)(ieee80211_node_t *,
+				    int, int, uint16_t[4]);
+	/* start/stop doing A-MPDU tx aggregation for a station */
+	int			(*ic_addba_request)(ieee80211_node_t *,
+				    struct ieee80211_tx_ampdu *,
+				    int, int, int);
+	int			(*ic_addba_response)(ieee80211_node_t *,
+				    struct ieee80211_tx_ampdu *,
+				    int, int, int);
+	void			(*ic_addba_stop)(ieee80211_node_t *,
+				    struct ieee80211_tx_ampdu *);
 
 	kmutex_t		ic_genlock;
 	void			*ic_private;	/* ieee80211 private data */
@@ -431,6 +616,7 @@
 #define	ic_def_txkey		ic_crypto.cs_def_txkey
 
 extern	const char *ieee80211_state_name[IEEE80211_S_MAX];
+extern	const char *ieee80211_wme_acnames[];
 
 #define	IEEE80211_RATE(_ix)			\
 	(in->in_rates.ir_rates[(_ix)] & IEEE80211_RATE_VAL)
@@ -533,6 +719,12 @@
 void ieee80211_watchdog(void *);
 void ieee80211_start_watchdog(ieee80211com_t *, uint32_t);
 void ieee80211_stop_watchdog(ieee80211com_t *);
+int ieee80211_classify(struct ieee80211com *, mblk_t *,
+    struct ieee80211_node *);
+int ieee80211_hdrsize(const void *);
+int ieee80211_hdrspace(ieee80211com_t *, const void *);
+int ieee80211_anyhdrsize(const void *);
+int ieee80211_anyhdrspace(ieee80211com_t *, const void *);
 
 void *ieee80211_malloc(size_t);
 void ieee80211_free(void *);
@@ -541,6 +733,12 @@
 int ieee80211_getprop(void *, const char *, mac_prop_id_t, uint_t, uint_t,
     void *, uint_t *);
 
+struct ieee80211_channel *ieee80211_find_channel(ieee80211com_t *, int, int);
+const struct ieee80211_rateset *ieee80211_get_suprates(ieee80211com_t *,
+    struct ieee80211_channel *);
+
+/* HT */
+
 #ifdef	__cplusplus
 }
 #endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/usr/src/uts/common/sys/net80211_ht.h	Mon Aug 10 10:43:48 2009 -0400
@@ -0,0 +1,149 @@
+/*
+ * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
+ * Use is subject to license terms.
+ */
+
+/*
+ * Copyright (c) 2007 Sam Leffler, Errno Consulting
+ * All rights reserved.
+ *
+ * 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.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef _SYS_NET80211_HT_H
+#define	_SYS_NET80211_HT_H
+
+/*
+ * 802.11n protocol implementation definitions.
+ */
+
+#ifdef	__cplusplus
+extern "C" {
+#endif
+
+struct ieee80211com;
+struct ieee80211_node;
+struct ieee80211_channel;
+
+#define	IEEE80211_AGGR_BAWMAX	64	/* max block ack window size */
+/* threshold for aging overlapping non-HT bss */
+#define	IEEE80211_NONHT_PRESENT_AGE	(60*1000)	/* msec */
+
+#define	M_AMPDU			0x8000	/* A-MPDU processing done */
+#define	M_WEP			0x4000	/* WEP done by hardware */
+#define	M_80211_RX		(M_AMPDU | M_WEP)
+
+typedef uint16_t ieee80211_seq;
+
+struct ieee80211_tx_ampdu {
+	ushort_t	txa_flags;
+#define	IEEE80211_AGGR_IMMEDIATE	0x0001	/* BA policy */
+#define	IEEE80211_AGGR_XCHGPEND		0x0002	/* ADDBA response pending */
+#define	IEEE80211_AGGR_RUNNING		0x0004	/* ADDBA response received */
+#define	IEEE80211_AGGR_SETUP		0x0008	/* deferred state setup */
+#define	IEEE80211_AGGR_NAK		0x0010	/* peer NAK'd ADDBA request */
+	uint8_t		txa_ac;
+	uint8_t		txa_token;		/* dialog token */
+	int		txa_qbytes;		/* data queued (bytes) */
+	short		txa_qframes;		/* data queued (frames) */
+	ieee80211_seq	txa_seqstart;
+	ieee80211_seq	txa_start;
+	uint16_t	txa_wnd;		/* BA window size */
+	uint8_t		txa_attempts;		/* # setup attempts */
+	clock_t		txa_lastrequest;	/* time of last ADDBA request */
+	timeout_id_t	txa_timer;
+};
+
+/* return non-zero if AMPDU tx for the TID is running */
+#define	IEEE80211_AMPDU_RUNNING(tap) \
+	(((tap)->txa_flags & IEEE80211_AGGR_RUNNING) != 0)
+
+/* return non-zero if AMPDU tx for the TID is running or started */
+#define	IEEE80211_AMPDU_REQUESTED(tap) \
+	(((tap)->txa_flags & (IEEE80211_AGGR_RUNNING |	\
+	IEEE80211_AGGR_XCHGPEND | IEEE80211_AGGR_NAK)) != 0)
+
+struct ieee80211_rx_ampdu {
+	int		rxa_flags;
+	int		rxa_qbytes;	/* data queued (bytes) */
+	short		rxa_qframes;	/* data queued (frames) */
+	ieee80211_seq	rxa_seqstart;
+	ieee80211_seq	rxa_start;	/* start of current BA window */
+	uint16_t	rxa_wnd;	/* BA window size */
+	clock_t		rxa_age;	/* age of oldest frame in window */
+	int		rxa_nframes;	/* frames since ADDBA */
+	mblk_t		*rxa_m[IEEE80211_AGGR_BAWMAX];
+};
+
+void ieee80211_ht_attach(struct ieee80211com *);
+void ieee80211_ht_detach(struct ieee80211com *);
+
+void ieee80211_ht_announce(struct ieee80211com *);
+
+extern const int ieee80211_htrates[16];
+const struct ieee80211_htrateset *ieee80211_get_suphtrates(
+    struct ieee80211com *, const struct ieee80211_channel *);
+
+int ieee80211_setup_htrates(struct ieee80211_node *,
+    const uint8_t *htcap, int flags);
+void ieee80211_setup_basic_htrates(struct ieee80211_node *,
+    const uint8_t *htinfo);
+
+mblk_t *ieee80211_decap_amsdu(struct ieee80211_node *, mblk_t *);
+
+int ieee80211_ampdu_reorder(struct ieee80211_node *, mblk_t *);
+void ieee80211_recv_bar(struct ieee80211_node *, mblk_t *);
+void ieee80211_ht_node_init(struct ieee80211_node *, const uint8_t *);
+void ieee80211_ht_node_cleanup(struct ieee80211_node *);
+struct ieee80211_channel *ieee80211_ht_adjust_channel(struct ieee80211com *,
+    struct ieee80211_channel *, int);
+
+void ieee80211_ht_wds_init(struct ieee80211_node *);
+void ieee80211_ht_node_join(struct ieee80211_node *);
+void ieee80211_ht_node_leave(struct ieee80211_node *);
+void ieee80211_htinfo_update(struct ieee80211com *, int protmode);
+void ieee80211_ht_timeout(struct ieee80211com *);
+void ieee80211_parse_htcap(struct ieee80211_node *, const uint8_t *);
+void ieee80211_parse_htinfo(struct ieee80211_node *, const uint8_t *);
+void ieee80211_recv_action(struct ieee80211_node *,
+    const uint8_t *, const uint8_t *);
+int ieee80211_ampdu_request(struct ieee80211_node *,
+    struct ieee80211_tx_ampdu *);
+void ieee80211_ampdu_stop(struct ieee80211_node *,
+    struct ieee80211_tx_ampdu *);
+int ieee80211_send_bar(struct ieee80211_node *,
+    const struct ieee80211_tx_ampdu *);
+int ieee80211_send_action(struct ieee80211_node *, int, int, uint16_t [4]);
+
+uint8_t	*ieee80211_add_htcap(uint8_t *, struct ieee80211_node *);
+uint8_t	*ieee80211_add_htcap_vendor(uint8_t *, struct ieee80211_node *);
+uint8_t	*ieee80211_add_htinfo(uint8_t *, struct ieee80211_node *);
+uint8_t	*ieee80211_add_htinfo_vendor(uint8_t *, struct ieee80211_node *);
+
+struct ieee80211_beacon_offsets;
+void ieee80211_ht_update_beacon(struct ieee80211com *,
+    struct ieee80211_beacon_offsets *);
+
+#ifdef	__cplusplus
+}
+#endif
+
+#endif /* _SYS_NET80211_HT_H */
--- a/usr/src/uts/common/sys/net80211_proto.h	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/uts/common/sys/net80211_proto.h	Mon Aug 10 10:43:48 2009 -0400
@@ -1,11 +1,11 @@
 /*
- * Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
+ * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
  * Use is subject to license terms.
  */
 
 /*
  * Copyright (c) 2001 Atsushi Onoe
- * Copyright (c) 2002-2005 Sam Leffler, Errno Consulting
+ * Copyright (c) 2002-2008 Sam Leffler, Errno Consulting
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -38,8 +38,6 @@
 #ifndef _SYS_NET80211_PROTO_H
 #define	_SYS_NET80211_PROTO_H
 
-#pragma ident	"%Z%%M%	%I%	%E% SMI"
-
 /*
  * 802.11 protocol definitions
  */
@@ -65,6 +63,16 @@
 #define	WME_NUM_AC		4	/* 4 AC categories */
 
 /*
+ * The formation of some management frames requires guidance to
+ * deal with legacy clients.  When the client is identified as
+ * "legacy 11b" this parameter can be passed in the arg param of a
+ * IEEE80211_SEND_MGMT call.
+ */
+#define	IEEE80211_SEND_LEGACY_11B	0x1	/* legacy 11b client */
+#define	IEEE80211_SEND_LEGACY_11	0x2	/* other legacy client */
+#define	IEEE80211_SEND_LEGACY		0x3	/* any legacy client */
+
+/*
  * Protocol Physical Layer
  */
 
@@ -76,15 +84,19 @@
 	IEEE80211_MODE_11G	= 3,	/* 2GHz, OFDM */
 	IEEE80211_MODE_FH	= 4,	/* 2GHz, GFSK */
 	IEEE80211_MODE_TURBO_A	= 5,	/* 5GHz, OFDM, 2x clock */
-	IEEE80211_MODE_TURBO_G	= 6	/* 2GHz, OFDM, 2x clock */
+	IEEE80211_MODE_TURBO_G	= 6,	/* 2GHz, OFDM, 2x clock */
+	IEEE80211_MODE_STURBO_A	= 7,	/* 5GHz, OFDM, 2x clock, static */
+	IEEE80211_MODE_11NA	= 8,	/* 5GHz, w/ HT */
+	IEEE80211_MODE_11NG	= 9	/* 2GHz, w/ HT */
 };
-#define	IEEE80211_MODE_MAX	(IEEE80211_MODE_TURBO_G+1)
+#define	IEEE80211_MODE_MAX	(IEEE80211_MODE_11NG + 1)
 
 enum ieee80211_phytype {
 	IEEE80211_T_DS,		/* direct sequence spread spectrum */
 	IEEE80211_T_FH,		/* frequency hopping */
 	IEEE80211_T_OFDM,	/* frequency division multiplexing */
-	IEEE80211_T_TURBO	/* high rate OFDM, aka turbo mode */
+	IEEE80211_T_TURBO,	/* high rate OFDM, aka turbo mode */
+	IEEE80211_T_HT		/* high throughput, full GI */
 };
 #define	IEEE80211_T_CCK	IEEE80211_T_DS	/* more common nomenclature */
 
@@ -120,6 +132,22 @@
 	/* see below */
 };
 
+struct ieee80211_qosframe {
+	uint8_t		i_fc[2];
+	uint8_t		i_dur[2];
+	uint8_t		i_addr1[IEEE80211_ADDR_LEN];
+	uint8_t		i_addr2[IEEE80211_ADDR_LEN];
+	uint8_t		i_addr3[IEEE80211_ADDR_LEN];
+	uint8_t		i_seq[2];
+	uint8_t		i_qos[2];
+	/* possibly followed by addr4[IEEE80211_ADDR_LEN]; */
+	/* see below */
+};
+
+struct ieee80211_qoscntl {
+	uint8_t		i_qos[2];
+};
+
 struct ieee80211_frame_addr4 {
 	uint8_t		i_fc[2];
 	uint8_t		i_dur[2];
@@ -130,6 +158,17 @@
 	uint8_t		i_addr4[IEEE80211_ADDR_LEN];
 };
 
+struct ieee80211_qosframe_addr4 {
+	uint8_t		i_fc[2];
+	uint8_t		i_dur[2];
+	uint8_t		i_addr1[IEEE80211_ADDR_LEN];
+	uint8_t		i_addr2[IEEE80211_ADDR_LEN];
+	uint8_t		i_addr3[IEEE80211_ADDR_LEN];
+	uint8_t		i_seq[2];
+	uint8_t		i_addr4[IEEE80211_ADDR_LEN];
+	uint8_t		i_qos[2];
+};
+
 /* Start part(LLC and SNAP) of payload of IEEE80211 frame */
 struct ieee80211_llc {
 	/* LLC */
@@ -150,9 +189,6 @@
 	uint8_t		mnf_dialog;
 	uint8_t		mnf_status;
 };
-#define	IEEE80211_MNF_SETUP_REQ	0
-#define	IEEE80211_MNF_SETUP_RESP	1
-#define	IEEE80211_MNF_TEARDOWN	2
 
 /*
  * Control frames.
@@ -203,6 +239,16 @@
 	/* FCS */
 };
 
+struct ieee80211_frame_bar {
+	uint8_t		i_fc[2];
+	uint8_t		i_dur[2];
+	uint8_t		i_ra[IEEE80211_ADDR_LEN];
+	uint8_t		i_ta[IEEE80211_ADDR_LEN];
+	uint16_t	i_ctl;
+	uint16_t	i_seq;
+	/* FCS */
+};
+
 struct ieee80211_tim_ie {
 	uint8_t		tim_ie;			/* IEEE80211_ELEMID_TIM */
 	uint8_t		tim_len;
@@ -251,9 +297,130 @@
 	uint8_t		wme_oui_sybtype;
 	uint8_t		wme_version;
 	uint8_t		wme_qosInfo;
+#define	WME_QOSINFO_COUNT	0x0f	/* Mask for param count field */
 	uint8_t		wme_reserved;
 	struct ieee80211_wme_acparams	wme_acParams[WME_NUM_AC];
 };
+
+/*
+ * WME/802.11e information element.
+ */
+struct ieee80211_wme_info {
+	uint8_t		wme_id;		/* IEEE80211_ELEMID_VENDOR */
+	uint8_t		wme_len;	/* length in bytes */
+	uint8_t		wme_oui[3];	/* 0x00, 0x50, 0xf2 */
+	uint8_t		wme_type;	/* OUI type */
+	uint8_t		wme_subtype;	/* OUI subtype */
+	uint8_t		wme_version;	/* spec revision */
+	uint8_t		wme_info;	/* QoS info */
+};
+
+/*
+ * WME/802.11e Tspec Element
+ */
+struct ieee80211_wme_tspec {
+	uint8_t		ts_id;
+	uint8_t		ts_len;
+	uint8_t		ts_oui[3];
+	uint8_t		ts_oui_type;
+	uint8_t		ts_oui_subtype;
+	uint8_t		ts_version;
+	uint8_t		ts_tsinfo[3];
+	uint8_t		ts_nom_msdu[2];
+	uint8_t		ts_max_msdu[2];
+	uint8_t		ts_min_svc[4];
+	uint8_t		ts_max_svc[4];
+	uint8_t		ts_inactv_intv[4];
+	uint8_t		ts_susp_intv[4];
+	uint8_t		ts_start_svc[4];
+	uint8_t		ts_min_rate[4];
+	uint8_t		ts_mean_rate[4];
+	uint8_t		ts_max_burst[4];
+	uint8_t		ts_min_phy[4];
+	uint8_t		ts_peak_rate[4];
+	uint8_t		ts_delay[4];
+	uint8_t		ts_surplus[2];
+	uint8_t		ts_medium_time[2];
+};
+
+/*
+ * 802.11n Management Action Frames
+ */
+/* generic frame format */
+struct ieee80211_action {
+	uint8_t		ia_category;
+	uint8_t		ia_action;
+};
+
+/* HT - recommended transmission channel width */
+struct ieee80211_action_ht_txchwidth {
+	struct ieee80211_action	at_header;
+	uint8_t		at_chwidth;
+};
+
+struct ieee80211_action_ht_mimopowersave {
+	struct ieee80211_action am_header;
+	uint8_t		am_control;
+};
+
+/* BA - ADDBA request */
+struct ieee80211_action_ba_addbarequest {
+	struct ieee80211_action rq_header;
+	uint8_t		rq_dialogtoken;
+	uint16_t	rq_baparamset;
+	uint16_t	rq_batimeout;		/* in TUs */
+	uint16_t	rq_baseqctl;
+};
+
+/* BA - ADDBA response */
+struct ieee80211_action_ba_addbaresponse {
+	struct ieee80211_action rs_header;
+	uint8_t		rs_dialogtoken;
+	uint16_t	rs_statuscode;
+	uint16_t	rs_baparamset;
+	uint16_t	rs_batimeout;		/* in TUs */
+};
+
+/* BA - DELBA */
+struct ieee80211_action_ba_delba {
+	struct ieee80211_action dl_header;
+	uint16_t	dl_baparamset;
+	uint16_t	dl_reasoncode;
+};
+
+struct ieee80211_ba_request {
+	uint16_t	rq_barctl;
+	uint16_t	rq_barseqctl;
+};
+
+/*
+ * 802.11n HT Capability IE
+ * NB: these reflect D1.10
+ */
+struct ieee80211_ie_htcap {
+	uint8_t		hc_id;			/* element ID */
+	uint8_t		hc_len;			/* length in bytes */
+	uint16_t	hc_cap;			/* HT caps (see below) */
+	uint8_t		hc_param;		/* HT params (see below) */
+	uint8_t 	hc_mcsset[16]; 		/* supported MCS set */
+	uint16_t	hc_extcap;		/* extended HT capabilities */
+	uint32_t	hc_txbf;		/* txbf capabilities */
+	uint8_t		hc_antenna;		/* antenna capabilities */
+};
+
+/*
+ * 802.11n HT Information IE
+ */
+struct ieee80211_ie_htinfo {
+	uint8_t		hi_id;			/* element ID */
+	uint8_t		hi_len;			/* length in bytes */
+	uint8_t		hi_ctrlchannel;		/* primary channel */
+	uint8_t		hi_byte1;		/* ht ie byte 1 */
+	uint8_t		hi_byte2;		/* ht ie byte 2 */
+	uint8_t		hi_byte3;		/* ht ie byte 3 */
+	uint16_t	hi_byte45;		/* ht ie bytes 4+5 */
+	uint8_t 	hi_basicmcsset[16]; 	/* basic MCS set */
+};
 #pragma pack()
 
 #define	IEEE80211_FC0_VERSION_MASK		0x03
@@ -278,7 +445,9 @@
 #define	IEEE80211_FC0_SUBTYPE_DISASSOC		0xa0
 #define	IEEE80211_FC0_SUBTYPE_AUTH		0xb0
 #define	IEEE80211_FC0_SUBTYPE_DEAUTH		0xc0
+#define	IEEE80211_FC0_SUBTYPE_ACTION		0xd0
 /* for TYPE_CTL */
+#define	IEEE80211_FC0_SUBTYPE_BAR		0x80
 #define	IEEE80211_FC0_SUBTYPE_PS_POLL		0xa0
 #define	IEEE80211_FC0_SUBTYPE_RTS		0xb0
 #define	IEEE80211_FC0_SUBTYPE_CTS		0xc0
@@ -302,6 +471,7 @@
 #define	IEEE80211_FC1_DIR_TODS			0x01	/* STA->AP  */
 #define	IEEE80211_FC1_DIR_FROMDS		0x02	/* AP ->STA */
 #define	IEEE80211_FC1_DIR_DSTODS		0x03	/* AP ->AP  */
+
 #define	IEEE80211_FC1_MORE_FRAG			0x04
 #define	IEEE80211_FC1_RETRY			0x08
 #define	IEEE80211_FC1_PWR_MGT			0x10
@@ -313,6 +483,17 @@
 #define	IEEE80211_SEQ_FRAG_SHIFT		0
 #define	IEEE80211_SEQ_SEQ_MASK			0xfff0
 #define	IEEE80211_SEQ_SEQ_SHIFT			4	/* 4bit frag number */
+#define	IEEE80211_SEQ_RANGE			4096
+
+#define	IEEE80211_SEQ_ADD(seq, incr) \
+	(((seq) + (incr)) & (IEEE80211_SEQ_RANGE - 1))
+#define	IEEE80211_SEQ_INC(seq)	IEEE80211_SEQ_ADD(seq, 1)
+#define	IEEE80211_SEQ_SUB(a, b) \
+	(((a) + IEEE80211_SEQ_RANGE - (b)) & (IEEE80211_SEQ_RANGE - 1))
+
+#define	IEEE80211_SEQ_BA_RANGE			2048	/* 2^11 */
+#define	IEEE80211_SEQ_BA_BEFORE(a, b) \
+	(IEEE80211_SEQ_SUB(b, a+1) < IEEE80211_SEQ_BA_RANGE-1)
 
 /* Length of management frame variable-length components in bytes */
 #define	IEEE80211_NWID_LEN			32	/* SSID */
@@ -321,6 +502,210 @@
 #define	IEEE80211_IBSS_LEN			4	/* IBSS parameters */
 #define	IEEE80211_ERP_LEN			1	/* ERP information */
 
+#define	IEEE80211_QOS_TXOP			0x00ff
+/* bit 8 is reserved */
+#define	IEEE80211_QOS_AMSDU			0x80
+#define	IEEE80211_QOS_AMSDU_S			7
+#define	IEEE80211_QOS_ACKPOLICY			0x60
+#define	IEEE80211_QOS_ACKPOLICY_S		5
+#define	IEEE80211_QOS_ACKPOLICY_NOACK		0x20	/* No ACK required */
+#define	IEEE80211_QOS_ACKPOLICY_BA		0x60	/* Block ACK */
+#define	IEEE80211_QOS_ESOP			0x10
+#define	IEEE80211_QOS_ESOP_S			4
+#define	IEEE80211_QOS_TID			0x0f
+
+/* does frame have QoS sequence control data */
+#define	IEEE80211_QOS_HAS_SEQ(wh) \
+	(((wh)->i_fc[0] & \
+	(IEEE80211_FC0_TYPE_MASK | IEEE80211_FC0_SUBTYPE_QOS)) == \
+	(IEEE80211_FC0_TYPE_DATA | IEEE80211_FC0_SUBTYPE_QOS))
+
+#define	WME_NUM_AC		4	/* 4 AC categories */
+#define	WME_NUM_TID		16	/* 16 tids */
+
+#define	WME_PARAM_ACI		0x60	/* Mask for ACI field */
+#define	WME_PARAM_ACI_S		5	/* Shift for ACI field */
+#define	WME_PARAM_ACM		0x10	/* Mask for ACM bit */
+#define	WME_PARAM_ACM_S		4	/* Shift for ACM bit */
+#define	WME_PARAM_AIFSN		0x0f	/* Mask for aifsn field */
+#define	WME_PARAM_AIFSN_S	0	/* Shift for aifsn field */
+#define	WME_PARAM_LOGCWMIN	0x0f	/* Mask for CwMin field (in log) */
+#define	WME_PARAM_LOGCWMIN_S	0	/* Shift for CwMin field */
+#define	WME_PARAM_LOGCWMAX	0xf0	/* Mask for CwMax field (in log) */
+#define	WME_PARAM_LOGCWMAX_S	4	/* Shift for CwMax field */
+
+#define	WME_AC_TO_TID(_ac) (       \
+	((_ac) == WME_AC_VO) ? 6 : \
+	((_ac) == WME_AC_VI) ? 5 : \
+	((_ac) == WME_AC_BK) ? 1 : \
+	0)
+
+#define	TID_TO_WME_AC(_tid) (      \
+	((_tid) == 0 || (_tid) == 3) ? WME_AC_BE : \
+	((_tid) < 3) ? WME_AC_BK : \
+	((_tid) < 6) ? WME_AC_VI : \
+	WME_AC_VO)
+
+#define	IEEE80211_MNF_SETUP_REQ		0
+#define	IEEE80211_MNF_SETUP_RESP	1
+#define	IEEE80211_MNF_TEARDOWN		2
+
+#define	IEEE80211_ACTION_CAT_QOS	0	/* QoS */
+#define	IEEE80211_ACTION_CAT_BA		3	/* BA */
+#define	IEEE80211_ACTION_CAT_HT		7	/* HT */
+
+#define	IEEE80211_ACTION_HT_TXCHWIDTH	0	/* recommend xmit chan width */
+#define	IEEE80211_ACTION_HT_MIMOPWRSAVE	1	/* MIMO power save */
+
+#define	IEEE80211_A_HT_TXCHWIDTH_20	0
+#define	IEEE80211_A_HT_TXCHWIDTH_2040	1
+
+#define	IEEE80211_A_HT_MIMOPWRSAVE_ENA		0x01	/* PS enabled */
+#define	IEEE80211_A_HT_MIMOPWRSAVE_MODE		0x02
+#define	IEEE80211_A_HT_MIMOPWRSAVE_MODE_S	1
+#define	IEEE80211_A_HT_MIMOPWRSAVE_DYNAMIC	0x02	/* Dynamic Mode */
+#define	IEEE80211_A_HT_MIMOPWRSAVE_STATIC	0x00	/* no SM packets */
+/* bits 2-7 reserved */
+
+/* Block Ack actions */
+#define	IEEE80211_ACTION_BA_ADDBA_REQUEST	0   /* ADDBA request */
+#define	IEEE80211_ACTION_BA_ADDBA_RESPONSE	1   /* ADDBA response */
+#define	IEEE80211_ACTION_BA_DELBA		2   /* DELBA */
+
+/* Block Ack Parameter Set */
+#define	IEEE80211_BAPS_BUFSIZ	0xffc0		/* buffer size */
+#define	IEEE80211_BAPS_BUFSIZ_S	6
+#define	IEEE80211_BAPS_TID	0x003c		/* TID */
+#define	IEEE80211_BAPS_TID_S	2
+#define	IEEE80211_BAPS_POLICY	0x0002		/* block ack policy */
+#define	IEEE80211_BAPS_POLICY_S	1
+
+#define	IEEE80211_BAPS_POLICY_DELAYED	(0<<IEEE80211_BAPS_POLICY_S)
+#define	IEEE80211_BAPS_POLICY_IMMEDIATE	(1<<IEEE80211_BAPS_POLICY_S)
+
+/* Block Ack Sequence Control */
+#define	IEEE80211_BASEQ_START	0xfff0		/* starting seqnum */
+#define	IEEE80211_BASEQ_START_S	4
+#define	IEEE80211_BASEQ_FRAG	0x000f		/* fragment number */
+#define	IEEE80211_BASEQ_FRAG_S	0
+
+/* Delayed Block Ack Parameter Set */
+#define	IEEE80211_DELBAPS_TID	0xf000		/* TID */
+#define	IEEE80211_DELBAPS_TID_S	12
+#define	IEEE80211_DELBAPS_INIT	0x0800		/* initiator */
+#define	IEEE80211_DELBAPS_INIT_S 11
+
+/* BAR Control */
+#define	IEEE80211_BAR_TID	0xf000		/* TID */
+#define	IEEE80211_BAR_TID_S	12
+#define	IEEE80211_BAR_COMP	0x0004		/* compressed */
+#define	IEEE80211_BAR_MTID	0x0002
+#define	IEEE80211_BAR_NOACK	0x0001		/* no-ack policy */
+
+/* HT capability flags (ht_cap) */
+#define	IEEE80211_HTCAP_LDPC		0x0001	/* LDPC supported */
+#define	IEEE80211_HTCAP_CHWIDTH40	0x0002	/* 20/40 supported */
+#define	IEEE80211_HTCAP_SMPS		0x000c	/* SM Power Save mode */
+#define	IEEE80211_HTCAP_SMPS_OFF	0x0000	/* none (static mode) */
+#define	IEEE80211_HTCAP_SMPS_DYNAMIC	0x0004	/* send RTS first */
+/* NB: SMPS value 2 is reserved */
+#define	IEEE80211_HTCAP_SMPS_ENA	0x000c	/* enabled */
+#define	IEEE80211_HTCAP_GREENFIELD	0x0010	/* Greenfield supported */
+#define	IEEE80211_HTCAP_SHORTGI20	0x0020	/* Short GI in 20MHz */
+#define	IEEE80211_HTCAP_SHORTGI40	0x0040	/* Short GI in 40MHz */
+#define	IEEE80211_HTCAP_TXSTBC		0x0080	/* STBC tx ok */
+#define	IEEE80211_HTCAP_RXSTBC		0x0300  /* STBC rx support */
+#define	IEEE80211_HTCAP_RXSTBC_S	8
+#define	IEEE80211_HTCAP_RXSTBC_1STREAM	0x0100  /* 1 spatial stream */
+#define	IEEE80211_HTCAP_RXSTBC_2STREAM	0x0200  /* 1-2 spatial streams */
+#define	IEEE80211_HTCAP_RXSTBC_3STREAM	0x0300  /* 1-3 spatial streams */
+#define	IEEE80211_HTCAP_DELBA		0x0400	/* HT DELBA supported */
+#define	IEEE80211_HTCAP_MAXAMSDU	0x0800	/* max A-MSDU length */
+#define	IEEE80211_HTCAP_MAXAMSDU_7935	0x0800	/* 7935 octets */
+#define	IEEE80211_HTCAP_MAXAMSDU_3839	0x0000	/* 3839 octets */
+#define	IEEE80211_HTCAP_DSSSCCK40	0x1000  /* DSSS/CCK in 40MHz */
+#define	IEEE80211_HTCAP_PSMP		0x2000  /* PSMP supported */
+#define	IEEE80211_HTCAP_40INTOLERANT	0x4000  /* 40MHz intolerant */
+#define	IEEE80211_HTCAP_LSIGTXOPPROT	0x8000  /* L-SIG TXOP prot */
+
+/* HT parameters (hc_param) */
+#define	IEEE80211_HTCAP_MAXRXAMPDU	0x03	/* max rx A-MPDU factor */
+#define	IEEE80211_HTCAP_MAXRXAMPDU_S	0
+#define	IEEE80211_HTCAP_MAXRXAMPDU_8K	0
+#define	IEEE80211_HTCAP_MAXRXAMPDU_16K	1
+#define	IEEE80211_HTCAP_MAXRXAMPDU_32K	2
+#define	IEEE80211_HTCAP_MAXRXAMPDU_64K	3
+#define	IEEE80211_HTCAP_MPDUDENSITY	0x1c	/* min MPDU start spacing */
+#define	IEEE80211_HTCAP_MPDUDENSITY_S	2
+#define	IEEE80211_HTCAP_MPDUDENSITY_NA	0	/* no time restriction */
+#define	IEEE80211_HTCAP_MPDUDENSITY_025	1	/* 1/4 us */
+#define	IEEE80211_HTCAP_MPDUDENSITY_05	2	/* 1/2 us */
+#define	IEEE80211_HTCAP_MPDUDENSITY_1	3	/* 1 us */
+#define	IEEE80211_HTCAP_MPDUDENSITY_2	4	/* 2 us */
+#define	IEEE80211_HTCAP_MPDUDENSITY_4	5	/* 4 us */
+#define	IEEE80211_HTCAP_MPDUDENSITY_8	6	/* 8 us */
+#define	IEEE80211_HTCAP_MPDUDENSITY_16	7	/* 16 us */
+
+/* HT extended capabilities (hc_extcap) */
+#define	IEEE80211_HTCAP_PCO		0x0001	/* PCO capable */
+#define	IEEE80211_HTCAP_PCOTRANS	0x0006	/* PCO transition time */
+#define	IEEE80211_HTCAP_PCOTRANS_S	1
+#define	IEEE80211_HTCAP_PCOTRANS_04	0x0002	/* 400 us */
+#define	IEEE80211_HTCAP_PCOTRANS_15	0x0004	/* 1.5 ms */
+#define	IEEE80211_HTCAP_PCOTRANS_5	0x0006	/* 5 ms */
+/* bits 3-7 reserved */
+#define	IEEE80211_HTCAP_MCSFBACK	0x0300	/* MCS feedback */
+#define	IEEE80211_HTCAP_MCSFBACK_S	8
+#define	IEEE80211_HTCAP_MCSFBACK_NONE	0x0000	/* nothing provided */
+#define	IEEE80211_HTCAP_MCSFBACK_UNSOL	0x0200	/* unsolicited feedback */
+#define	IEEE80211_HTCAP_MCSFBACK_MRQ	0x0300	/* " "+respond to MRQ */
+#define	IEEE80211_HTCAP_HTC		0x0400	/* +HTC support */
+#define	IEEE80211_HTCAP_RDR		0x0800
+					/* reverse direction responder */
+/* bits 12-15 reserved */
+
+/* byte1 */
+#define	IEEE80211_HTINFO_2NDCHAN	0x03	/* secondary/ext chan offset */
+#define	IEEE80211_HTINFO_2NDCHAN_S	0
+#define	IEEE80211_HTINFO_2NDCHAN_NONE	0x00	/* no secondary/ext channel */
+#define	IEEE80211_HTINFO_2NDCHAN_ABOVE	0x01	/* above private channel */
+/* NB: 2 is reserved */
+#define	IEEE80211_HTINFO_2NDCHAN_BELOW	0x03	/* below primary channel */
+#define	IEEE80211_HTINFO_TXWIDTH	0x04	/* tx channel width */
+#define	IEEE80211_HTINFO_TXWIDTH_20	0x00	/* 20MHz width */
+#define	IEEE80211_HTINFO_TXWIDTH_2040	0x04	/* any supported width */
+#define	IEEE80211_HTINFO_RIFSMODE	0x08	/* Reduced IFS (RIFS) use */
+#define	IEEE80211_HTINFO_RIFSMODE_PROH	0x00	/* RIFS use prohibited */
+#define	IEEE80211_HTINFO_RIFSMODE_PERM	0x08	/* RIFS use permitted */
+#define	IEEE80211_HTINFO_PMSPONLY	0x10	/* PSMP required to associate */
+#define	IEEE80211_HTINFO_SIGRAN		0xe0	/* shortest Service Interval */
+#define	IEEE80211_HTINFO_SIGRAN_S	5
+#define	IEEE80211_HTINFO_SIGRAN_5	0x00	/* 5 ms */
+/* XXX add rest */
+
+/* bytes 2+3 */
+#define	IEEE80211_HTINFO_OPMODE		0x03	/* operating mode */
+#define	IEEE80211_HTINFO_OPMODE_S	0
+#define	IEEE80211_HTINFO_OPMODE_PURE	0x00	/* no protection */
+#define	IEEE80211_HTINFO_OPMODE_PROTOPT	0x01	/* protection optional */
+#define	IEEE80211_HTINFO_OPMODE_HT20PR	0x02	/* protection for HT20 sta's */
+#define	IEEE80211_HTINFO_OPMODE_MIXED	0x03	/* protection for legacy sta */
+#define	IEEE80211_HTINFO_NONGF_PRESENT	0x04	/* non-GF sta's present */
+#define	IEEE80211_HTINFO_TXBL		0x08	/* transmit burst limit */
+#define	IEEE80211_HTINFO_NONHT_PRESENT	0x10	/* non-HT sta's present */
+/* bits 5-15 reserved */
+
+/* bytes 4+5 */
+#define	IEEE80211_HTINFO_2NDARYBEACON	0x01
+#define	IEEE80211_HTINFO_LSIGTXOPPROT	0x02
+#define	IEEE80211_HTINFO_PCO_ACTIVE	0x04
+#define	IEEE80211_HTINFO_40MHZPHASE	0x08
+
+/* byte5 */
+#define	IEEE80211_HTINFO_BASIC_STBCMCS	0x7f
+#define	IEEE80211_HTINFO_BASIC_STBCMCS_S 0
+#define	IEEE80211_HTINFO_DUALPROTECTED	0x80
+
 /*
  * Length of management frame information elements containing
  * a variable-length component is:
@@ -352,6 +737,7 @@
 #define	IEEE80211_CAPINFO_SHORT_PREAMBLE	0x0020
 #define	IEEE80211_CAPINFO_PBCC			0x0040
 #define	IEEE80211_CAPINFO_CHNL_AGILITY		0x0080
+#define	IEEE80211_CAPINFO_SPECTRUM_MGMT		0x0100
 /* bits 8-9 are reserved */
 #define	IEEE80211_CAPINFO_SHORT_SLOTTIME	0x0400
 #define	IEEE80211_CAPINFO_RSN			0x0800
@@ -374,9 +760,21 @@
 	IEEE80211_ELEMID_COUNTRY		= 7,
 	IEEE80211_ELEMID_CHALLENGE		= 16,
 	/* 17-31 reserved for challenge text extension */
+	IEEE80211_ELEMID_PWRCNSTR		= 32,
+	IEEE80211_ELEMID_PWRCAP			= 33,
+	IEEE80211_ELEMID_TPCREQ			= 34,
+	IEEE80211_ELEMID_TPCREP			= 35,
+	IEEE80211_ELEMID_SUPPCHAN		= 36,
+	IEEE80211_ELEMID_CHANSWITCHANN		= 37,
+	IEEE80211_ELEMID_MEASREQ		= 38,
+	IEEE80211_ELEMID_MEASREP		= 39,
+	IEEE80211_ELEMID_QUIET			= 40,
+	IEEE80211_ELEMID_IBSSDFS		= 41,
 	IEEE80211_ELEMID_ERP			= 42,
+	IEEE80211_ELEMID_HTCAP			= 45,
 	IEEE80211_ELEMID_RSN			= 48,
 	IEEE80211_ELEMID_XRATES			= 50,
+	IEEE80211_ELEMID_HTINFO			= 61,
 	/* 128-129 proprietary elements used by Agere chipsets */
 	IEEE80211_ELEMID_AGERE1			= 128,
 	IEEE80211_ELEMID_AGERE2			= 129,
@@ -385,6 +783,10 @@
 	IEEE80211_ELEMID_VENDOR			= 221	/* vendor private */
 };
 
+#define	BCM_OUI			0x4c9000	/* Broadcom OUI */
+#define	BCM_OUI_HTCAP		51		/* pre-draft HTCAP ie */
+#define	BCM_OUI_HTINFO		52		/* pre-draft HTINFO ie */
+
 #define	WPA_OUI			0xf25000
 #define	WPA_OUI_TYPE		0x01
 #define	WPA_VERSION		1		/* current supported version */
@@ -431,11 +833,20 @@
 	IEEE80211_REASON_NOT_ASSOCED		= 7,
 	IEEE80211_REASON_ASSOC_LEAVE		= 8,
 	IEEE80211_REASON_ASSOC_NOT_AUTHED	= 9,
-	IEEE80211_REASON_INVALID_POWER		= 10,
-	IEEE80211_REASON_RSN_REQUIRED		= 11,
-	IEEE80211_REASON_RSN_INCONSISTENT	= 12,
-	IEEE80211_REASON_IE_INVALID		= 13,
-	IEEE80211_REASON_MIC_FAILURE		= 14
+	IEEE80211_REASON_DISASSOC_PWRCAP_BAD	= 10,	/* 11h */
+	IEEE80211_REASON_DISASSOC_SUPCHAN_BAD	= 11,	/* 11h */
+	IEEE80211_REASON_IE_INVALID		= 13,	/* 11i */
+	IEEE80211_REASON_MIC_FAILURE		= 14,	/* 11i */
+	IEEE80211_REASON_4WAY_HANDSHAKE_TIMEOUT	= 15,	/* 11i */
+	IEEE80211_REASON_GROUP_KEY_UPDATE_TIMEOUT = 16,	/* 11i */
+	IEEE80211_REASON_IE_IN_4WAY_DIFFERS	= 17,	/* 11i */
+	IEEE80211_REASON_GROUP_CIPHER_INVALID	= 18,	/* 11i */
+	IEEE80211_REASON_PAIRWISE_CIPHER_INVALID = 19,	/* 11i */
+	IEEE80211_REASON_AKMP_INVALID		= 20,	/* 11i */
+	IEEE80211_REASON_UNSUPP_RSN_IE_VERSION	= 21,	/* 11i */
+	IEEE80211_REASON_INVALID_RSN_IE_CAP	= 22,	/* 11i */
+	IEEE80211_REASON_802_1X_AUTH_FAILED	= 23,	/* 11i */
+	IEEE80211_REASON_CIPHER_SUITE_REJECTED	= 24	/* 11i */
 };
 
 /*
@@ -455,13 +866,21 @@
 	IEEE80211_STATUS_TIMEOUT		= 16,
 	IEEE80211_STATUS_TOOMANY		= 17,
 	IEEE80211_STATUS_BASIC_RATE		= 18,
-	IEEE80211_STATUS_SP_REQUIRED		= 19,
-	IEEE80211_STATUS_PBCC_REQUIRED		= 20,
-	IEEE80211_STATUS_CA_REQUIRED		= 21,
-	IEEE80211_STATUS_TOO_MANY_STATIONS	= 22,
-	IEEE80211_STATUS_RATES			= 23,
-	IEEE80211_STATUS_SHORTSLOT_REQUIRED	= 25,
-	IEEE80211_STATUS_DSSSOFDM_REQUIRED	= 26
+	IEEE80211_STATUS_SP_REQUIRED		= 19,	/* 11b */
+	IEEE80211_STATUS_PBCC_REQUIRED		= 20,	/* 11b */
+	IEEE80211_STATUS_CA_REQUIRED		= 21,	/* 11b */
+	IEEE80211_STATUS_SPECMGMT_REQUIRED	= 22,	/* 11h */
+	IEEE80211_STATUS_PWRCAP_REQUIRED	= 23,	/* 11h */
+	IEEE80211_STATUS_SUPCHAN_REQUIRED	= 24,	/* 11h */
+	IEEE80211_STATUS_SHORTSLOT_REQUIRED	= 25,	/* 11g */
+	IEEE80211_STATUS_DSSSOFDM_REQUIRED	= 26,	/* 11g */
+	IEEE80211_STATUS_INVALID_IE		= 40,	/* 11i */
+	IEEE80211_STATUS_GROUP_CIPHER_INVALID	= 41,	/* 11i */
+	IEEE80211_STATUS_PAIRWISE_CIPHER_INVALID = 42,	/* 11i */
+	IEEE80211_STATUS_AKMP_INVALID		= 43,	/* 11i */
+	IEEE80211_STATUS_UNSUPP_RSN_IE_VERSION	= 44,	/* 11i */
+	IEEE80211_STATUS_INVALID_RSN_IE_CAP	= 45,	/* 11i */
+	IEEE80211_STATUS_CIPHER_SUITE_REJECTED	= 46	/* 11i */
 };
 
 #define	IEEE80211_WEP_KEYLEN		5	/* 40bit */
@@ -533,6 +952,8 @@
 #define	IEEE80211_F_DOFRATE		0x00000002 /* use fixed rate */
 #define	IEEE80211_F_DONEGO		0x00000004 /* calc negotiated rate */
 #define	IEEE80211_F_DODEL		0x00000008 /* delete ignore rate */
+#define	IEEE80211_F_DOBRS		0x00000010 /* check basic rate set */
+#define	IEEE80211_F_JOIN		0x00000020 /* sta joining our bss */
 
 /*
  * Beacon frames constructed by ieee80211_beacon_alloc
@@ -547,6 +968,7 @@
 	uint16_t	bo_tim_len;	/* atim/dtim length in bytes */
 	uint16_t	bo_trailer_len;	/* trailer length in bytes */
 	uint8_t		*bo_erp;	/* start of ERP element */
+	uint8_t		*bo_htinfo;	/* start of HT info element */
 };
 
 #ifdef	__cplusplus
--- a/usr/src/uts/common/sys/systm.h	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/uts/common/sys/systm.h	Mon Aug 10 10:43:48 2009 -0400
@@ -189,6 +189,7 @@
 int bcmp(const void *, const void *, size_t) __PURE;
 int stoi(char **);
 void numtos(ulong_t, char *);
+char *kmem_asprintf(const char *fmt, ...);
 int strident_valid(const char *);
 void strident_canon(char *, size_t);
 int getsubopt(char **optionsp, char * const *tokens, char **valuep);
--- a/usr/src/uts/common/vm/hat.h	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/uts/common/vm/hat.h	Mon Aug 10 10:43:48 2009 -0400
@@ -425,25 +425,6 @@
 #define	HAT_STRUCTURE_LE	0x2000
 #define	HAT_ENDIAN_MASK		0x3000
 
-/*
- * Attributes for non-coherent I-cache support.
- *
- * We detect if an I-cache has been filled by first resetting
- * execute permission in a tte entry. This forces a trap when
- * an instruction fetch first occurs in that page. In "soft
- * execute mode", the hardware execute permission is cleared
- * and a different software execution bit is set in the tte.
- *
- * HAT_ATTR_TEXT: set this flag to avoid the extra trap associated
- * with soft execute mode. Same meaning as HAT_LOAD_TEXT.
- *
- * HAT_ATTR_NOSOFTEXEC: set this flag when installing a permanent
- * mapping, or installing a mapping that will never be
- * freed. Overrides soft execute mode.
- */
-#define	HAT_ATTR_TEXT		0x4000
-#define	HAT_ATTR_NOSOFTEXEC	0x8000
-
 /* flags for hat_softlock */
 #define	HAT_COW			0x0001
 
--- a/usr/src/uts/common/vm/page.h	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/uts/common/vm/page.h	Mon Aug 10 10:43:48 2009 -0400
@@ -780,7 +780,7 @@
 int	page_reclaim_mem(pgcnt_t, pgcnt_t, int);
 
 void page_set_props(page_t *, uint_t);
-void page_clr_all_props(page_t *, int);
+void page_clr_all_props(page_t *);
 int page_clear_lck_cow(page_t *, int);
 
 kmutex_t	*page_vnode_mutex(struct vnode *);
--- a/usr/src/uts/common/vm/page_retire.c	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/uts/common/vm/page_retire.c	Mon Aug 10 10:43:48 2009 -0400
@@ -535,7 +535,7 @@
 	ASSERT(!hat_page_is_mapped(pp));
 	ASSERT(!pp->p_vnode);
 
-	page_clr_all_props(pp, 0);
+	page_clr_all_props(pp);
 	pagescrub(pp, 0, MMU_PAGESIZE);
 
 	pp->p_next = NULL;
--- a/usr/src/uts/common/vm/seg_kmem.c	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/uts/common/vm/seg_kmem.c	Mon Aug 10 10:43:48 2009 -0400
@@ -19,7 +19,7 @@
  * CDDL HEADER END
  */
 /*
- * Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
+ * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
  * Use is subject to license terms.
  */
 
@@ -885,15 +885,6 @@
 	else
 		allocflag = 0;
 
-	/*
-	 * Support for non-coherent I-cache.
-	 * Set HAT_LOAD_TEXT to override soft execute.
-	 */
-	if (attr & HAT_ATTR_TEXT) {
-		attr &= ~HAT_ATTR_TEXT;
-		allocflag |= HAT_LOAD_TEXT;
-	}
-
 	while (ppl != NULL) {
 		page_t *pp = ppl;
 		page_sub(&ppl, pp);
--- a/usr/src/uts/common/vm/vm_page.c	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/uts/common/vm/vm_page.c	Mon Aug 10 10:43:48 2009 -0400
@@ -621,7 +621,7 @@
 		 */
 		PP_SETFREE(pp);
 		PP_CLRINIT(pp);
-		page_clr_all_props(pp, 0);
+		page_clr_all_props(pp);
 		PP_SETAGED(pp);
 		pp->p_offset = (u_offset_t)-1;
 		pp->p_next = pp;
@@ -2693,7 +2693,7 @@
 	PP_CLRINIT(pp);
 	ASSERT(pp->p_vnode == NULL || !IS_VMODSORT(pp->p_vnode) ||
 	    !hat_ismod(pp));
-	page_clr_all_props(pp, 0);
+	page_clr_all_props(pp);
 	ASSERT(!hat_page_getshare(pp));
 
 	/*
@@ -2835,7 +2835,7 @@
 
 		PP_SETFREE(tpp);
 		PP_CLRINIT(tpp);
-		page_clr_all_props(tpp, 0);
+		page_clr_all_props(tpp);
 		PP_SETAGED(tpp);
 		tpp->p_offset = (u_offset_t)-1;
 		ASSERT(tpp->p_next == tpp);
@@ -3182,7 +3182,7 @@
 
 		PP_SETFREE(tpp);
 		PP_CLRINIT(tpp);
-		page_clr_all_props(tpp, 0);
+		page_clr_all_props(tpp);
 		PP_SETAGED(tpp);
 		ASSERT(tpp->p_next == tpp);
 		ASSERT(tpp->p_prev == tpp);
@@ -3558,7 +3558,7 @@
 		page_vpsub(&vp->v_pages, pp);
 
 	pp->p_hash = NULL;
-	page_clr_all_props(pp, 1);
+	page_clr_all_props(pp);
 	PP_CLRSWAP(pp);
 	pp->p_vnode = NULL;
 	pp->p_offset = (u_offset_t)-1;
@@ -4575,7 +4575,7 @@
 	old->p_vnode = NULL;
 	PP_CLRSWAP(old);
 	old->p_offset = (u_offset_t)-1;
-	page_clr_all_props(old, 1);
+	page_clr_all_props(old);
 
 	/*
 	 * Wake up processes waiting for this page.  The page's
@@ -4921,7 +4921,7 @@
 
 	for (i = 0; i < npgs; i++) {
 		ppattr = hat_page_getattr(targ, (P_MOD | P_REF | P_RO));
-		page_clr_all_props(repl, 0);
+		page_clr_all_props(repl);
 		page_set_props(repl, ppattr);
 		page_relocate_hash(repl, targ);
 
@@ -4932,7 +4932,7 @@
 		 * page_relocate_hash(), they no longer
 		 * have any meaning.
 		 */
-		page_clr_all_props(targ, 0);
+		page_clr_all_props(targ);
 		ASSERT(targ->p_next == targ);
 		ASSERT(targ->p_prev == targ);
 		page_list_concat(&pl, &targ);
@@ -5017,7 +5017,7 @@
 		pp = pplist;
 		if (pp->p_szc == 0) {
 			page_sub(&pplist, pp);
-			page_clr_all_props(pp, 0);
+			page_clr_all_props(pp);
 			PP_SETFREE(pp);
 			PP_CLRINIT(pp);
 			PP_SETAGED(pp);
@@ -5032,7 +5032,7 @@
 			do {
 				ASSERT(PAGE_EXCL(tpp));
 				ASSERT(!hat_page_is_mapped(tpp));
-				page_clr_all_props(tpp, 0);
+				page_clr_all_props(tpp);
 				PP_SETFREE(tpp);
 				PP_CLRINIT(tpp);
 				PP_SETAGED(tpp);
@@ -6146,25 +6146,9 @@
 	pp->p_nrm |= (uchar_t)flags;
 }
 
-extern void mach_sync_icache_pp(page_t *);
-#pragma weak mach_sync_icache_pp
-
-/*
- * Flush I-cache if the page is being reassigned.  The hashout flag is
- * set when a page has been removed from a hash chain (i.e. vnode
- * pages). If the page stays on the hash chain there is a chance it
- * will be re-used, therefore there is no need to flush the
- * I-cache. However, if the page is being removed from a hash chain
- * then the page can be used for any new purpose, and the I-cache must
- * be flushed.
- */
-/* ARGSUSED */
 void
-page_clr_all_props(page_t *pp, int hashout)
+page_clr_all_props(page_t *pp)
 {
-	if (&mach_sync_icache_pp != NULL && hashout) {
-		mach_sync_icache_pp(pp);
-	}
 	pp->p_nrm = 0;
 }
 
--- a/usr/src/uts/common/xen/public/arch-x86/cpuid.h	Wed Aug 05 18:08:09 2009 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,68 +0,0 @@
-/******************************************************************************
- * arch-x86/cpuid.h
- * 
- * CPUID interface to Xen.
- * 
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to
- * deal in the Software without restriction, including without limitation the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- * sell copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- * 
- * Copyright (c) 2007 Citrix Systems, Inc.
- * 
- * Authors:
- *    Keir Fraser <keir.fraser@citrix.com>
- */
-
-#ifndef __XEN_PUBLIC_ARCH_X86_CPUID_H__
-#define __XEN_PUBLIC_ARCH_X86_CPUID_H__
-
-/* Xen identification leaves start at 0x40000000. */
-#define XEN_CPUID_FIRST_LEAF 0x40000000
-#define XEN_CPUID_LEAF(i)    (XEN_CPUID_FIRST_LEAF + (i))
-
-/*
- * Leaf 1 (0x40000000)
- * EAX: Largest Xen-information leaf. All leaves up to an including @EAX
- *      are supported by the Xen host.
- * EBX-EDX: "XenVMMXenVMM" signature, allowing positive identification
- *      of a Xen host.
- */
-#define XEN_CPUID_SIGNATURE_EBX 0x566e6558 /* "XenV" */
-#define XEN_CPUID_SIGNATURE_ECX 0x65584d4d /* "MMXe" */
-#define XEN_CPUID_SIGNATURE_EDX 0x4d4d566e /* "nVMM" */
-
-/*
- * Leaf 2 (0x40000001)
- * EAX[31:16]: Xen major version.
- * EAX[15: 0]: Xen minor version.
- * EBX-EDX: Reserved (currently all zeroes).
- */
-
-/*
- * Leaf 3 (0x40000002)
- * EAX: Number of hypercall transfer pages. This register is always guaranteed
- *      to specify one hypercall page.
- * EBX: Base address of Xen-specific MSRs.
- * ECX: Features 1. Unused bits are set to zero.
- * EDX: Features 2. Unused bits are set to zero.
- */
-
-/* Does the host support MMU_PT_UPDATE_PRESERVE_AD for this guest? */
-#define _XEN_CPUID_FEAT1_MMU_PT_UPDATE_PRESERVE_AD 0
-#define XEN_CPUID_FEAT1_MMU_PT_UPDATE_PRESERVE_AD  (1u<<0)
-
-#endif /* __XEN_PUBLIC_ARCH_X86_CPUID_H__ */
--- a/usr/src/uts/i86pc/ml/genassym.c	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/uts/i86pc/ml/genassym.c	Mon Aug 10 10:43:48 2009 -0400
@@ -19,12 +19,10 @@
  * CDDL HEADER END
  */
 /*
- * Copyright 2007 Sun Microsystems, Inc.  All rights reserved.
+ * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
  * Use is subject to license terms.
  */
 
-#pragma ident	"%Z%%M%	%I%	%E% SMI"
-
 #ifndef	_GENASSYM
 #define	_GENASSYM
 #endif
@@ -184,7 +182,7 @@
 #if defined(__xpv)
 	printf("#define\tSHUTDOWN_reboot 0x%x\n", SHUTDOWN_reboot);
 	printf("#define\tSCHEDOP_block 0x%x\n", SCHEDOP_block);
-	printf("#define\tVGCF_IN_SYSCALL 0x%x\n", VGCF_IN_KERNEL);
+	printf("#define\tVGCF_IN_KERNEL 0x%x\n", VGCF_IN_KERNEL);
 #endif
 	return (0);
 }
--- a/usr/src/uts/i86pc/os/lgrpplat.c	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/uts/i86pc/os/lgrpplat.c	Mon Aug 10 10:43:48 2009 -0400
@@ -547,6 +547,7 @@
 					 * that span more than 1 memory node.
 					 */
 					endcnt = 1;
+					physinstalled--;
 				}
 			}
 
--- a/usr/src/uts/i86xpv/sys/machprivregs.h	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/uts/i86xpv/sys/machprivregs.h	Mon Aug 10 10:43:48 2009 -0400
@@ -20,15 +20,13 @@
  */
 
 /*
- * Copyright 2007 Sun Microsystems, Inc.  All rights reserved.
+ * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
  * Use is subject to license terms.
  */
 
 #ifndef	_SYS_MACHPRIVREGS_H
 #define	_SYS_MACHPRIVREGS_H
 
-#pragma ident	"%Z%%M%	%I%	%E% SMI"
-
 #include <sys/hypervisor.h>
 
 /*
@@ -374,7 +372,7 @@
 	ud2	/* die nastily if we return! */
 
 #define	IRET	HYPERVISOR_IRET(0)
-#define	SYSRETQ	HYPERVISOR_IRET(VGCF_IN_SYSCALL)
+#define	SYSRETQ	HYPERVISOR_IRET(VGCF_IN_KERNEL)
 #define	SYSRETL	ud2		/* 32-bit syscall/sysret not supported */
 #define	SWAPGS	/* empty - handled in hypervisor */
 
--- a/usr/src/uts/intel/Makefile.intel.shared	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/uts/intel/Makefile.intel.shared	Mon Aug 10 10:43:48 2009 -0400
@@ -353,6 +353,7 @@
 DRV_KMODS	+= fct
 DRV_KMODS	+= fcoe
 DRV_KMODS	+= fcoet
+DRV_KMODS	+= fcoei
 DRV_KMODS	+= qlt
 DRV_KMODS	+= iscsit
 DRV_KMODS	+= ncall nsctl sdbc nskern sv
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/usr/src/uts/intel/fcoei/Makefile	Mon Aug 10 10:43:48 2009 -0400
@@ -0,0 +1,85 @@
+#
+# CDDL HEADER START
+#
+# The contents of this file are subject to the terms of the
+# Common Development and Distribution License (the "License").
+# You may not use this file except in compliance with the License.
+#
+# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+# or http://www.opensolaris.org/os/licensing.
+# See the License for the specific language governing permissions
+# and limitations under the License.
+#
+# When distributing Covered Code, include this CDDL HEADER in each
+# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+# If applicable, add the following below this CDDL HEADER, with the
+# fields enclosed by brackets "[]" replaced with your own identifying
+# information: Portions Copyright [yyyy] [name of copyright owner]
+#
+# CDDL HEADER END
+#
+#
+# Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
+# Use is subject to license terms.
+#
+#	This makefile drives the production of the fcoei driver for 
+#	LEADVILLE.
+
+#
+#	Path to the base of the uts directory tree (usually /usr/src/uts).
+#
+UTSBASE	= ../..
+ARCHDIR:sh = cd ..; basename `pwd`
+
+#
+#	Define the module and object file sets.
+#
+MODULE		= fcoei
+OBJECTS		= $(FCOEI_OBJS:%=$(OBJS_DIR)/%)
+LINTS		= $(FCOEI_OBJS:%.o=$(LINTS_DIR)/%.ln)
+ROOTMODULE	= $(ROOT_DRV_DIR)/$(MODULE)
+CONF_SRCDIR	= $(UTSBASE)/common/io/fibre-channel/fca/fcoei
+
+#
+#	Include common rules.
+#
+include ../Makefile.$(ARCHDIR)
+
+#
+#	Define targets
+#
+ALL_TARGET	= $(BINARY) $(SRC_CONFILE)
+LINT_TARGET	= $(MODULE).lint
+INSTALL_TARGET	= $(BINARY) $(ROOTMODULE) $(ROOT_CONFFILE)
+
+#
+#	Overrides and depends_on
+#
+LDFLAGS		+= -dy -Nmisc/fctl -Ndrv/fcoe
+INC_PATH	+= -I$(UTSBASE)/common/io/fibre-channel/fca/fcoei
+
+#
+#	Default build targets.
+#
+.KEEP_STATE:
+
+def:		$(DEF_DEPS)
+
+all:		$(ALL_DEPS)
+
+clean:		$(CLEAN_DEPS)
+
+clobber:	$(CLOBBER_DEPS)
+
+lint:		$(LINT_DEPS)
+
+modlintlib:	$(MODLINTLIB_DEPS)
+
+clean.lint:	$(CLEAN_LINT_DEPS)
+
+install:	$(INSTALL_DEPS)
+
+#
+#	Include common targets.
+#
+include ../Makefile.targ
--- a/usr/src/uts/sfmmu/ml/sfmmu_asm.s	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/uts/sfmmu/ml/sfmmu_asm.s	Mon Aug 10 10:43:48 2009 -0400
@@ -248,7 +248,6 @@
 	 */								;\
 	sllx	tagtarget, TTARGET_VA_SHIFT, tagtarget			;\
 	ldxa	[ttepa]ASI_MEM, tte					;\
-	TTE_CLR_SOFTEXEC_ML(tte)					;\
 	srlx	tagtarget, TTARGET_VA_SHIFT, tagtarget			;\
 	sethi	%hi(TSBTAG_INVALID), tmp2				;\
 	add	tsbep, TSBE_TAG, tmp1					;\
@@ -371,7 +370,6 @@
 #define	TSB_UPDATE(tsbep, tteva, tagtarget, tmp1, tmp2, label)		\
 	/* can't rd tteva after locking tsb because it can tlb miss */	;\
 	ldx	[tteva], tteva			/* load tte */		;\
-	TTE_CLR_SOFTEXEC_ML(tteva)					;\
 	TSB_LOCK_ENTRY(tsbep, tmp1, tmp2, label)			;\
 	sethi	%hi(TSBTAG_INVALID), tmp2				;\
 	add	tsbep, TSBE_TAG, tmp1					;\
@@ -946,11 +944,6 @@
 {
 }
 
-void
-sfmmu_patch_pgsz_reg(void)
-{
-}
-
 /* ARGSUSED */
 void
 sfmmu_load_tsbe(struct tsbe *tsbep, uint64_t vaddr, tte_t *ttep, int phys)
@@ -1441,19 +1434,6 @@
 #endif /* sun4u */
 	SET_SIZE(sfmmu_patch_shctx)
 
-	ENTRY_NP(sfmmu_patch_pgsz_reg)
-#ifdef sun4u
-	retl
-	  nop
-#else /* sun4u */
-	set	sfmmu_pgsz_load_mmustate_patch, %o0
-	MAKE_NOP_INSTR(%o1)
-	st	%o1, [%o0]
-	retl
-	flush	%o0
-#endif /* sun4u */
-	SET_SIZE(sfmmu_patch_pgsz_reg)
-
 	/*
 	 * Routine that loads an entry into a tsb using virtual addresses.
 	 * Locking is required since all cpus can use the same TSB.
@@ -2408,13 +2388,6 @@
 	ba,a,pt	%xcc, label/**/8					;\
 label/**/6:								;\
 	GET_SCDSHMERMAP(tsbarea, hmeblkpa, hatid, hmemisc)		;\
-	/*                                  				;\
-	 * hmemisc is set to 1 if this is a shared mapping. It will	;\
-	 * be cleared by CHECK_SHARED_PGSZ if this pagesize is not	;\
-	 * allowed, in order to limit the number of entries in the	;\
-	 * pagesize register.						;\
-	 */								;\
-	CHECK_SHARED_PGSZ(tsbarea, tte, hatid, hmemisc, label/**/9)	;\
 	ldn	[tsbarea + (TSBMISS_SCRATCH + TSBMISS_HMEBP)], hatid 	;\
 label/**/7:								;\
 	set	TTE_SUSPEND, hatid					;\
@@ -3295,37 +3268,8 @@
 	stub    %g1, [%g6 + TSBMISS_URTTEFLAGS]
 
 	SAVE_CTX1(%g7, %g2, %g1, tsb_shmel)	
-	ba	tsb_validtte
 #endif /* sun4u && !UTSB_PHYS */
 
-tsb_ism_validtte:
-#ifdef sun4v
-	/*
-	 * Check pagesize against bitmap for Rock page size register,
-	 * for ism mappings.
-	 *
-	 * %g1, %g2 = scratch
-	 * %g3 = tte
-	 * g4 = tte pa
-	 * g5 = tte va
-	 * g6 = tsbmiss area
-	 * %g7 = tt
-	 */
-	ldub    [%g6 + TSBMISS_URTTEFLAGS], %g1
-	and     %g1, HAT_CHKCTX1_FLAG, %g2
-	/*
-	 * Clear the HAT_CHKCTX1_FLAG in %g2 if this shared pagesize is not allowed
-	 * to limit the number of entries in the pagesize search register.
-	 */
-	CHECK_SHARED_PGSZ(%g6, %g3, %g7, %g2, ism_chk_pgsz)
-	andn	%g1, HAT_CHKCTX1_FLAG, %g1
-	or      %g1, %g2, %g1
-	stub    %g1, [%g6 + TSBMISS_URTTEFLAGS]
-	brz     %g2, tsb_validtte
-	  rdpr  %tt, %g7
-	SAVE_CTX1(%g7, %g1, %g2, tsb_shctxl)
-#endif /* sun4v */
-
 tsb_validtte:
 	/*
 	 * g3 = tte
@@ -3355,11 +3299,9 @@
 	ba,pt	%xcc, tsb_update_tl1
 	  nop
 4:
-	/*
-	 * ITLB translation was found but execute permission is
-	 * disabled. If we have software execute permission (soft exec
-	 * bit is set), then enable hardware execute permission.
-	 * Otherwise continue with a protection violation.
+	/* 
+	 * If ITLB miss check exec bit.
+	 * If not set treat as invalid TTE.
 	 */
 	cmp     %g7, T_INSTR_MMU_MISS
 	be,pn	%icc, 5f
@@ -3368,11 +3310,9 @@
 	bne,pt %icc, 3f
 	  andcc   %g3, TTE_EXECPRM_INT, %g0	/* check execute bit is set */
 5:
-	bnz,pn %icc, 3f
-	  TTE_CHK_SOFTEXEC_ML(%g3)		/* check soft execute */
 	bz,pn %icc, tsb_protfault
 	  nop
-	TTE_SET_EXEC_ML(%g3, %g4, %g7, tsb_lset_exec)
+
 3:
 	/*
 	 * Set reference bit if not already set
@@ -3415,7 +3355,6 @@
 #endif /* sun4v */
 
 tsb_update_tl1:
-	TTE_CLR_SOFTEXEC_ML(%g3)
 	srlx	%g2, TTARGET_CTX_SHIFT, %g7
 	brz,pn	%g7, tsb_kernel
 #ifdef sun4v
@@ -3658,7 +3597,10 @@
 	ldub    [%g6 + TSBMISS_URTTEFLAGS], %g5
 	or      %g5, HAT_CHKCTX1_FLAG, %g5
 	stub    %g5, [%g6 + TSBMISS_URTTEFLAGS]
+	rdpr    %tt, %g5
+	SAVE_CTX1(%g5, %g3, %g1, tsb_shctxl)
 #endif /* defined(sun4v) || defined(UTSB_PHYS) */
+
 	/*
 	 * ISM pages are always locked down.
 	 * If we can't find the tte then pagefault
@@ -3690,7 +3632,7 @@
 	/* NOT REACHED */
 	
 tsb_ism_32M_found:
-	brlz,a,pt %g3, tsb_ism_validtte
+	brlz,a,pt %g3, tsb_validtte
 	  rdpr	%tt, %g7
 	ba,pt	%xcc, tsb_ism_4M
 	  nop
@@ -3708,7 +3650,7 @@
 	    tsb_ism_4M)
 
 tsb_ism_256M_found:
-	brlz,a,pt %g3, tsb_ism_validtte
+	brlz,a,pt %g3, tsb_validtte
 	  rdpr	%tt, %g7
 
 tsb_ism_4M:
@@ -3721,7 +3663,7 @@
 	/* NOT REACHED */
 
 tsb_ism_4M_found:
-	brlz,a,pt %g3, tsb_ism_validtte
+	brlz,a,pt %g3, tsb_validtte
 	  rdpr	%tt, %g7
 
 tsb_ism_8K:
@@ -3735,7 +3677,7 @@
 	/* NOT REACHED */
 
 tsb_ism_8K_found:
-	brlz,a,pt %g3, tsb_ism_validtte
+	brlz,a,pt %g3, tsb_validtte
 	  rdpr	%tt, %g7
 
 tsb_pagefault:
--- a/usr/src/uts/sfmmu/ml/sfmmu_kdi.s	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/uts/sfmmu/ml/sfmmu_kdi.s	Mon Aug 10 10:43:48 2009 -0400
@@ -20,7 +20,7 @@
  */
 
 /*
- * Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
+ * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
  * Use is subject to license terms.
  */
 
@@ -328,21 +328,7 @@
 	ldxa	[%g2]ASI_MEM, %g1
 	brgez,a	%g1, 4f
 	clr	%g1
-4:
-	/*
-	 * If soft execute bit is set, make sure HW execute permission
-	 * is also set. But, clear soft execute bit before giving tte to
-	 * the caller.
-	 */
-	TTE_CHK_SOFTEXEC_ML(%g1)
-	bz,pt	%icc, 6f
-	  andcc %g1, TTE_EXECPRM_INT, %g0
-	bnz,pt	%icc, 7f
-	  nop
-	TTE_SET_EXEC_ML(%g1, %g2, %g4, kdi_trap_vatotte)
-7:
-	TTE_CLR_SOFTEXEC_ML(%g1)
-	ba,a	6f
+4:	ba,a	6f
 
 5:	add	%g3, 1, %g3
 	set	mmu_hashcnt, %g4
--- a/usr/src/uts/sfmmu/vm/hat_sfmmu.c	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/uts/sfmmu/vm/hat_sfmmu.c	Mon Aug 10 10:43:48 2009 -0400
@@ -184,14 +184,6 @@
 #define	HAT_TMPNC	0x4
 
 /*
- * This flag is set to 0 via the MD in platforms that do not support
- * I-cache coherency in hardware. Used to enable "soft exec" mode.
- * The MD "coherency" property is optional, and defaults to 1 (because
- * coherent I-cache is the norm.)
- */
-uint_t	icache_is_coherent = 1;
-
-/*
  * Flag to allow the creation of non-cacheable translations
  * to system memory. It is off by default. At the moment this
  * flag is used by the ecache error injector. The error injector
@@ -227,7 +219,6 @@
 uint_t	disable_ism_large_pages = (1 << TTE512K);
 uint_t	disable_auto_data_large_pages = 0;
 uint_t	disable_auto_text_large_pages = 0;
-uint_t	disable_shctx_large_pages = 0;
 
 /*
  * Private sfmmu data structures for hat management
@@ -294,14 +285,6 @@
 /* Internal variable, set by MD if the HW supports shctx feature */
 int shctx_on = 0;
 
-/* Internal variable, set by MD if the HW supports the search order register */
-int pgsz_search_on = 0;
-/*
- * External /etc/system tunable, for controlling search order register
- * support.
- */
-int disable_pgsz_search = 0;
-
 #ifdef DEBUG
 static void check_scd_sfmmu_list(sfmmu_t **, sfmmu_t *, int);
 #endif
@@ -481,6 +464,7 @@
 			pfn_t, int);
 static void	sfmmu_tlb_demap(caddr_t, sfmmu_t *, struct hme_blk *, int, int);
 static void	sfmmu_tlb_range_demap(demap_range_t *);
+static void	sfmmu_invalidate_ctx(sfmmu_t *);
 static void	sfmmu_sync_mmustate(sfmmu_t *);
 
 static void 	sfmmu_tsbinfo_setup_phys(struct tsb_info *, pfn_t);
@@ -589,7 +573,7 @@
 uint64_t	mmu_saved_gnum = 0;	/* to init incoming MMUs' gnums */
 
 #define	DEFAULT_NUM_CTXS_PER_MMU 8192
-uint_t	nctxs = DEFAULT_NUM_CTXS_PER_MMU;
+static uint_t	nctxs = DEFAULT_NUM_CTXS_PER_MMU;
 
 int		cache;			/* describes system cache */
 
@@ -743,7 +727,11 @@
 static void	sfmmu_mlist_reloc_enter(page_t *, page_t *,
 				kmutex_t **, kmutex_t **);
 static void	sfmmu_mlist_reloc_exit(kmutex_t *, kmutex_t *);
-static hatlock_t *sfmmu_hat_tryenter(sfmmu_t *);
+static hatlock_t *
+		sfmmu_hat_enter(sfmmu_t *);
+static hatlock_t *
+		sfmmu_hat_tryenter(sfmmu_t *);
+static void	sfmmu_hat_exit(hatlock_t *);
 static void	sfmmu_hat_lock_all(void);
 static void	sfmmu_hat_unlock_all(void);
 static void	sfmmu_ismhat_enter(sfmmu_t *, int);
@@ -1067,14 +1055,12 @@
 	disable_ism_large_pages |= disable_large_pages;
 	disable_auto_data_large_pages = disable_large_pages;
 	disable_auto_text_large_pages = disable_large_pages;
-	disable_shctx_large_pages |= disable_large_pages;
 
 	/*
 	 * Initialize mmu-specific large page sizes.
 	 */
 	if (&mmu_large_pages_disabled) {
 		disable_large_pages |= mmu_large_pages_disabled(HAT_LOAD);
-		disable_shctx_large_pages |= disable_large_pages;
 		disable_ism_large_pages |=
 		    mmu_large_pages_disabled(HAT_LOAD_SHARE);
 		disable_auto_data_large_pages |=
@@ -1413,14 +1399,6 @@
 		shctx_on = 0;
 	}
 
-	/*
-	 * If support for page size search is disabled via /etc/system
-	 * set pgsz_search_on to 0 here.
-	 */
-	if (pgsz_search_on && disable_pgsz_search) {
-		pgsz_search_on = 0;
-	}
-
 	if (shctx_on) {
 		srd_buckets = kmem_zalloc(SFMMU_MAX_SRD_BUCKETS *
 		    sizeof (srd_buckets[0]), KM_SLEEP);
@@ -1595,11 +1573,6 @@
 	sfmmup->sfmmu_scdp = NULL;
 	sfmmup->sfmmu_scd_link.next = NULL;
 	sfmmup->sfmmu_scd_link.prev = NULL;
-
-	if (&mmu_set_pgsz_order && sfmmup !=  ksfmmup) {
-		mmu_set_pgsz_order(sfmmup, 0);
-		sfmmu_init_pgsz_hv(sfmmup);
-	}
 	return (sfmmup);
 }
 
@@ -2082,8 +2055,6 @@
 				newhat->sfmmu_scdismttecnt[i] =
 				    hat->sfmmu_scdismttecnt[i];
 			}
-		} else if (&mmu_set_pgsz_order) {
-			mmu_set_pgsz_order(newhat, 0);
 		}
 
 		sfmmu_check_page_sizes(newhat, 1);
@@ -2579,7 +2550,7 @@
 void
 sfmmu_memtte(tte_t *ttep, pfn_t pfn, uint_t attr, int tte_sz)
 {
-	ASSERT((attr & ~(SFMMU_LOAD_ALLATTR | HAT_ATTR_NOSOFTEXEC)) == 0);
+	ASSERT(!(attr & ~SFMMU_LOAD_ALLATTR));
 
 	ttep->tte_inthi = MAKE_TTE_INTHI(pfn, attr, tte_sz, 0 /* hmenum */);
 	ttep->tte_intlo = MAKE_TTE_INTLO(pfn, attr, tte_sz, 0 /* hmenum */);
@@ -2593,18 +2564,6 @@
 	if (TTE_IS_NFO(ttep) && TTE_IS_EXECUTABLE(ttep)) {
 		panic("sfmmu_memtte: can't set both NFO and EXEC bits");
 	}
-
-	/*
-	 * Disable hardware execute permission to force a fault if
-	 * this page is executed, so we can detect the execution.  Set
-	 * the soft exec bit to remember that this TTE has execute
-	 * permission.
-	 */
-	if (TTE_IS_EXECUTABLE(ttep) && (attr & HAT_ATTR_NOSOFTEXEC) == 0 &&
-	    icache_is_coherent == 0) {
-		TTE_CLR_EXEC(ttep);
-		TTE_SET_SOFTEXEC(ttep);
-	}
 }
 
 /*
@@ -3095,26 +3054,9 @@
 			    (void *)hmeblkp);
 		}
 		ASSERT(TTE_CSZ(&tteold) == TTE_CSZ(ttep));
-
-		if (TTE_IS_EXECUTABLE(&tteold) && TTE_IS_SOFTEXEC(ttep)) {
-			TTE_SET_EXEC(ttep);
-		}
 	}
 
 	if (pp) {
-		/*
-		 * If we know that this page will be executed, because
-		 * it was in the past (PP_ISEXEC is already true), or
-		 * if the caller says it will likely be executed
-		 * (HAT_LOAD_TEXT is true), then there is no need to
-		 * dynamically detect execution with a soft exec
-		 * fault. Enable hardware execute permission now.
-		 */
-		if ((PP_ISEXEC(pp) || (flags & HAT_LOAD_TEXT)) &&
-		    TTE_IS_SOFTEXEC(ttep)) {
-			TTE_SET_EXEC(ttep);
-		}
-
 		if (size == TTE8K) {
 #ifdef VAC
 			/*
@@ -3138,12 +3080,6 @@
 				sfmmu_page_exit(pmtx);
 			}
 
-			if (TTE_EXECUTED(ttep)) {
-				pmtx = sfmmu_page_enter(pp);
-				PP_SETEXEC(pp);
-				sfmmu_page_exit(pmtx);
-			}
-
 		} else if (sfmmu_pagearray_setup(vaddr, pps, ttep, remap)) {
 			/*
 			 * sfmmu_pagearray_setup failed so return
@@ -3151,9 +3087,6 @@
 			sfmmu_mlist_exit(pml);
 			return (1);
 		}
-
-	} else if (TTE_IS_SOFTEXEC(ttep)) {
-		TTE_SET_EXEC(ttep);
 	}
 
 	/*
@@ -3227,17 +3160,11 @@
 			if (!(sfmmup->sfmmu_tteflags & tteflag)) {
 				hatlockp = sfmmu_hat_enter(sfmmup);
 				sfmmup->sfmmu_tteflags |= tteflag;
-				if (&mmu_set_pgsz_order) {
-					mmu_set_pgsz_order(sfmmup, 1);
-				}
 				sfmmu_hat_exit(hatlockp);
 			}
 		} else if (!(sfmmup->sfmmu_rtteflags & tteflag)) {
 			hatlockp = sfmmu_hat_enter(sfmmup);
 			sfmmup->sfmmu_rtteflags |= tteflag;
-			if (&mmu_set_pgsz_order && sfmmup !=  ksfmmup) {
-				mmu_set_pgsz_order(sfmmup, 1);
-			}
 			sfmmu_hat_exit(hatlockp);
 		}
 		/*
@@ -3284,8 +3211,7 @@
 		 * ref bit in tteload.
 		 */
 		ASSERT(TTE_IS_REF(ttep));
-		if (TTE_IS_MOD(&tteold) || (TTE_EXECUTED(&tteold) &&
-		    !TTE_IS_EXECUTABLE(ttep))) {
+		if (TTE_IS_MOD(&tteold)) {
 			sfmmu_ttesync(sfmmup, vaddr, &tteold, pp);
 		}
 		/*
@@ -3416,12 +3342,6 @@
 			sfmmu_page_exit(pmtx);
 		}
 
-		if (TTE_EXECUTED(ttep)) {
-			pmtx = sfmmu_page_enter(pp);
-			PP_SETEXEC(pp);
-			sfmmu_page_exit(pmtx);
-		}
-
 		/*
 		 * If this is a remap we skip vac & contiguity checks.
 		 */
@@ -5052,11 +4972,9 @@
 				continue;
 			}
 
-			if ((tteflags.tte_intlo & TTE_HWWR_INT) ||
-			    (TTE_EXECUTED(&tte) &&
-			    !TTE_IS_EXECUTABLE(&ttemod))) {
+			if (tteflags.tte_intlo & TTE_HWWR_INT) {
 				/*
-				 * need to sync if clearing modify/exec bit.
+				 * need to sync if we are clearing modify bit.
 				 */
 				sfmmu_ttesync(sfmmup, addr, &tte, pp);
 			}
@@ -5109,14 +5027,6 @@
 		ttevalue.tte_intlo = MAKE_TTEATTR_INTLO(attr);
 		ttemaskp->tte_inthi = TTEINTHI_ATTR;
 		ttemaskp->tte_intlo = TTEINTLO_ATTR;
-		if (!icache_is_coherent) {
-			if (!(attr & PROT_EXEC)) {
-				TTE_SET_SOFTEXEC(ttemaskp);
-			} else {
-				TTE_CLR_EXEC(ttemaskp);
-				TTE_SET_SOFTEXEC(&ttevalue);
-			}
-		}
 		break;
 	case SFMMU_SETATTR:
 		ASSERT(!(attr & ~HAT_PROT_MASK));
@@ -5171,9 +5081,6 @@
 	if (TTE_IS_EXECUTABLE(ttep)) {
 		attr |= PROT_EXEC;
 	}
-	if (TTE_IS_SOFTEXEC(ttep)) {
-		attr |= PROT_EXEC;
-	}
 	if (!TTE_IS_PRIVILEGED(ttep)) {
 		attr |= PROT_USER;
 	}
@@ -5390,11 +5297,6 @@
 
 			ttemod = tte;
 			TTE_SET_LOFLAGS(&ttemod, tteflags, pprot);
-			ASSERT(TTE_IS_SOFTEXEC(&tte) ==
-			    TTE_IS_SOFTEXEC(&ttemod));
-			ASSERT(TTE_IS_EXECUTABLE(&tte) ==
-			    TTE_IS_EXECUTABLE(&ttemod));
-
 #if defined(SF_ERRATA_57)
 			if (check_exec && addr < errata57_limit)
 				ttemod.tte_exec_perm = 0;
@@ -6094,8 +5996,7 @@
 				continue;
 			}
 
-			if (!(flags & HAT_UNLOAD_NOSYNC) ||
-			    (pp != NULL && TTE_EXECUTED(&tte))) {
+			if (!(flags & HAT_UNLOAD_NOSYNC)) {
 				sfmmu_ttesync(sfmmup, addr, &tte, pp);
 			}
 
@@ -6435,49 +6336,37 @@
 sfmmu_ttesync(struct hat *sfmmup, caddr_t addr, tte_t *ttep, page_t *pp)
 {
 	uint_t rm = 0;
-	int sz = TTE_CSZ(ttep);
+	int   	sz;
 	pgcnt_t	npgs;
 
 	ASSERT(TTE_IS_VALID(ttep));
 
-	if (!TTE_IS_NOSYNC(ttep)) {
-
-		if (TTE_IS_REF(ttep))
-			rm |= P_REF;
-
-		if (TTE_IS_MOD(ttep))
-			rm |= P_MOD;
-
-		if (rm != 0) {
-			if (sfmmup != NULL && sfmmup->sfmmu_rmstat) {
-				int i;
-				caddr_t	vaddr = addr;
-
-				for (i = 0; i < TTEPAGES(sz); i++) {
-					hat_setstat(sfmmup->sfmmu_as, vaddr,
-					    MMU_PAGESIZE, rm);
-					vaddr += MMU_PAGESIZE;
-				}
-			}
-		}
-	}
-
-	if (!pp)
+	if (TTE_IS_NOSYNC(ttep)) {
 		return;
-
-	/*
-	 * If software says this page is executable, and the page was
-	 * in fact executed (indicated by hardware exec permission
-	 * being enabled), then set P_EXEC on the page to remember
-	 * that it was executed. The I$ will be flushed when the page
-	 * is reassigned.
-	 */
-	if (TTE_EXECUTED(ttep)) {
-		rm |= P_EXEC;
-	} else if (rm == 0) {
+	}
+
+	if (TTE_IS_REF(ttep))  {
+		rm = P_REF;
+	}
+	if (TTE_IS_MOD(ttep))  {
+		rm |= P_MOD;
+	}
+
+	if (rm == 0) {
 		return;
 	}
 
+	sz = TTE_CSZ(ttep);
+	if (sfmmup != NULL && sfmmup->sfmmu_rmstat) {
+		int i;
+		caddr_t	vaddr = addr;
+
+		for (i = 0; i < TTEPAGES(sz); i++, vaddr += MMU_PAGESIZE) {
+			hat_setstat(sfmmup->sfmmu_as, vaddr, MMU_PAGESIZE, rm);
+		}
+
+	}
+
 	/*
 	 * XXX I want to use cas to update nrm bits but they
 	 * currently belong in common/vm and not in hat where
@@ -6485,6 +6374,8 @@
 	 * The nrm bits are protected by the same mutex as
 	 * the one that protects the page's mapping list.
 	 */
+	if (!pp)
+		return;
 	ASSERT(sfmmu_mlist_held(pp));
 	/*
 	 * If the tte is for a large page, we need to sync all the
@@ -6503,8 +6394,7 @@
 		ASSERT(pp);
 		ASSERT(sfmmu_mlist_held(pp));
 		if (((rm & P_REF) != 0 && !PP_ISREF(pp)) ||
-		    ((rm & P_MOD) != 0 && !PP_ISMOD(pp)) ||
-		    ((rm & P_EXEC) != 0 && !PP_ISEXEC(pp)))
+		    ((rm & P_MOD) != 0 && !PP_ISMOD(pp)))
 			hat_page_setattr(pp, rm);
 
 		/*
@@ -6826,7 +6716,6 @@
 	kmutex_t	*low, *high;
 	spgcnt_t	npages, i;
 	page_t		*pl = NULL;
-	uint_t		ppattr;
 	int		old_pil;
 	cpuset_t	cpuset;
 	int		cap_cpus;
@@ -6977,9 +6866,8 @@
 		 * Copy attributes.  VAC consistency was handled above,
 		 * if required.
 		 */
-		ppattr = hat_page_getattr(tpp, (P_MOD | P_REF | P_RO));
-		page_clr_all_props(rpp, 0);
-		page_set_props(rpp, ppattr);
+		rpp->p_nrm = tpp->p_nrm;
+		tpp->p_nrm = 0;
 		rpp->p_index = tpp->p_index;
 		tpp->p_index = 0;
 #ifdef VAC
@@ -7791,7 +7679,7 @@
 	noshuffle = flag & P_NSH;
 	flag &= ~P_NSH;
 
-	ASSERT(!(flag & ~(P_MOD | P_REF | P_RO | P_EXEC)));
+	ASSERT(!(flag & ~(P_MOD | P_REF | P_RO)));
 
 	/*
 	 * nothing to do if attribute already set
@@ -8480,8 +8368,6 @@
 	int		j;
 	sf_scd_t	*scdp;
 	uchar_t		rid;
-	hatlock_t 	*hatlockp;
-	int		ismnotinscd = 0;
 
 	ASSERT(SFMMU_FLAGS_ISSET(sfmmup, HAT_ISMBUSY));
 	scdp = sfmmup->sfmmu_scdp;
@@ -8502,21 +8388,9 @@
 				/* ISMs is not in SCD */
 				npgs +=
 				    ism_map[j].imap_ismhat->sfmmu_ttecnt[szc];
-				ismnotinscd = 1;
-			}
-		}
-	}
-
-	if (&mmu_set_pgsz_order) {
-		hatlockp = sfmmu_hat_enter(sfmmup);
-		if (ismnotinscd) {
-			SFMMU_FLAGS_SET(sfmmup, HAT_ISMNOTINSCD);
-		} else {
-			SFMMU_FLAGS_CLEAR(sfmmup, HAT_ISMNOTINSCD);
-		}
-		sfmmu_hat_exit(hatlockp);
-	}
-
+			}
+		}
+	}
 	sfmmup->sfmmu_ismttecnt[szc] = npgs;
 	sfmmup->sfmmu_scdismttecnt[szc] = npgs_scd;
 	return (npgs);
@@ -8850,11 +8724,6 @@
 		sfmmu_hat_exit(hatlockp);
 	}
 
-	if (&mmu_set_pgsz_order) {
-		hatlockp = sfmmu_hat_enter(sfmmup);
-		mmu_set_pgsz_order(sfmmup, 1);
-		sfmmu_hat_exit(hatlockp);
-	}
 	sfmmu_ismhat_exit(sfmmup, 0);
 
 	/*
@@ -9050,11 +8919,6 @@
 			(void) ism_tsb_entries(sfmmup, i);
 	}
 
-	if (&mmu_set_pgsz_order) {
-		hatlockp = sfmmu_hat_enter(sfmmup);
-		mmu_set_pgsz_order(sfmmup, 1);
-		sfmmu_hat_exit(hatlockp);
-	}
 	sfmmu_ismhat_exit(sfmmup, 0);
 
 	/*
@@ -11027,7 +10891,7 @@
 	mutex_exit(low);
 }
 
-hatlock_t *
+static hatlock_t *
 sfmmu_hat_enter(sfmmu_t *sfmmup)
 {
 	hatlock_t	*hatlockp;
@@ -11054,7 +10918,7 @@
 	return (NULL);
 }
 
-void
+static void
 sfmmu_hat_exit(hatlock_t *hatlockp)
 {
 	if (hatlockp != NULL)
@@ -12197,13 +12061,8 @@
 		 * then we flush the shared TSBs, if we find a private hat,
 		 * which is part of an SCD, but where the region
 		 * is not part of the SCD then we flush the private TSBs.
-		 *
-		 * If the Rock page size register is present, then SCDs
-		 * may contain both shared and private pages, so we cannot
-		 * use this optimization to avoid flushing private TSBs.
-		 */
-		if (pgsz_search_on == 0 &&
-		    !sfmmup->sfmmu_scdhat && sfmmup->sfmmu_scdp != NULL &&
+		 */
+		if (!sfmmup->sfmmu_scdhat && sfmmup->sfmmu_scdp != NULL &&
 		    !SFMMU_FLAGS_ISSET(sfmmup, HAT_JOIN_SCD)) {
 			scdp = sfmmup->sfmmu_scdp;
 			if (SF_RGNMAP_TEST(scdp->scd_hmeregion_map, rid)) {
@@ -12332,13 +12191,8 @@
 		 * which is part of an SCD, but where the region
 		 * corresponding to this va is not part of the SCD then we
 		 * flush the private TSBs.
-		 *
-		 * If the Rock page size register is present, then SCDs
-		 * may contain both shared and private pages, so we cannot
-		 * use this optimization to avoid flushing private TSBs.
-		 */
-		if (pgsz_search_on == 0 &&
-		    !sfmmup->sfmmu_scdhat && sfmmup->sfmmu_scdp != NULL &&
+		 */
+		if (!sfmmup->sfmmu_scdhat && sfmmup->sfmmu_scdp != NULL &&
 		    !SFMMU_FLAGS_ISSET(sfmmup, HAT_JOIN_SCD) &&
 		    !SFMMU_FLAGS_ISSET(sfmmup, HAT_ISMBUSY)) {
 			if (!find_ism_rid(sfmmup, ism_sfmmup, va,
@@ -12648,7 +12502,7 @@
  * A per-process (PP) lock is used to synchronize ctx allocations in
  * resume() and ctx invalidations here.
  */
-void
+static void
 sfmmu_invalidate_ctx(sfmmu_t *sfmmup)
 {
 	cpuset_t cpuset;
@@ -14174,9 +14028,6 @@
 			if (tteflag && !(sfmmup->sfmmu_rtteflags & tteflag)) {
 				hatlockp = sfmmu_hat_enter(sfmmup);
 				sfmmup->sfmmu_rtteflags |= tteflag;
-				if (&mmu_set_pgsz_order) {
-					mmu_set_pgsz_order(sfmmup, 1);
-				}
 				sfmmu_hat_exit(hatlockp);
 			}
 			hatlockp = sfmmu_hat_enter(sfmmup);
@@ -15232,9 +15083,6 @@
 		ASSERT(sfmmup->sfmmu_ttecnt[i] >= scdp->scd_rttecnt[i]);
 		atomic_add_long(&sfmmup->sfmmu_ttecnt[i],
 		    -sfmmup->sfmmu_scdrttecnt[i]);
-		if (!sfmmup->sfmmu_ttecnt[i]) {
-			sfmmup->sfmmu_tteflags &= ~(1 << i);
-		}
 	}
 	/* update tsb0 inflation count */
 	if (old_scdp != NULL) {
@@ -15245,9 +15093,6 @@
 	    scdp->scd_sfmmup->sfmmu_tsb0_4minflcnt);
 	sfmmup->sfmmu_tsb0_4minflcnt -= scdp->scd_sfmmup->sfmmu_tsb0_4minflcnt;
 
-	if (&mmu_set_pgsz_order) {
-		mmu_set_pgsz_order(sfmmup, 0);
-	}
 	sfmmu_hat_exit(hatlockp);
 
 	if (old_scdp != NULL) {
@@ -15307,7 +15152,7 @@
 	for (scdp = srdp->srd_scdp; scdp != NULL;
 	    scdp = scdp->scd_next) {
 		SF_RGNMAP_EQUAL(&scdp->scd_region_map,
-		    &sfmmup->sfmmu_region_map, SFMMU_RGNMAP_WORDS, ret);
+		    &sfmmup->sfmmu_region_map, ret);
 		if (ret == 1) {
 			SF_SCD_INCR_REF(scdp);
 			mutex_exit(&srdp->srd_scd_mutex);
@@ -15455,10 +15300,6 @@
 		    scdp->scd_rttecnt[i]);
 		atomic_add_long(&sfmmup->sfmmu_ttecnt[i],
 		    sfmmup->sfmmu_scdrttecnt[i]);
-		if (sfmmup->sfmmu_ttecnt[i] &&
-		    (sfmmup->sfmmu_tteflags & (1 << i)) == 0) {
-			sfmmup->sfmmu_tteflags |= (1 << i);
-		}
 		sfmmup->sfmmu_scdrttecnt[i] = 0;
 		/* update ismttecnt to include SCD ism before hat leaves SCD */
 		sfmmup->sfmmu_ismttecnt[i] += sfmmup->sfmmu_scdismttecnt[i];
@@ -15472,9 +15313,6 @@
 	}
 	sfmmup->sfmmu_scdp = NULL;
 
-	if (&mmu_set_pgsz_order) {
-		mmu_set_pgsz_order(sfmmup, 0);
-	}
 	sfmmu_hat_exit(hatlockp);
 
 	/*
@@ -15520,8 +15358,7 @@
 	 * It is possible that the scd has been freed and reallocated with a
 	 * different region map while we've been waiting for the srd_scd_mutex.
 	 */
-	SF_RGNMAP_EQUAL(scd_rmap, &sp->scd_region_map,
-	    SFMMU_RGNMAP_WORDS, ret);
+	SF_RGNMAP_EQUAL(scd_rmap, &sp->scd_region_map, ret);
 	if (ret != 1) {
 		mutex_exit(&srdp->srd_scd_mutex);
 		return;
--- a/usr/src/uts/sfmmu/vm/hat_sfmmu.h	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/uts/sfmmu/vm/hat_sfmmu.h	Mon Aug 10 10:43:48 2009 -0400
@@ -112,7 +112,6 @@
 #define	P_TNC	0x10		/* non-caching is temporary bit */
 #define	P_KPMS	0x20		/* kpm mapped small (vac alias prevention) */
 #define	P_KPMC	0x40		/* kpm conflict page (vac alias prevention) */
-#define	P_EXEC	0x80		/* execution reference (I-cache filled) */
 
 #define	PP_GENERIC_ATTR(pp)	((pp)->p_nrm & (P_MOD | P_REF | P_RO))
 #define	PP_ISMOD(pp)		((pp)->p_nrm & P_MOD)
@@ -125,7 +124,6 @@
 #endif
 #define	PP_ISKPMS(pp)		((pp)->p_nrm & P_KPMS)
 #define	PP_ISKPMC(pp)		((pp)->p_nrm & P_KPMC)
-#define	PP_ISEXEC(pp)		((pp)->p_nrm & P_EXEC)
 
 #define	PP_SETMOD(pp)		((pp)->p_nrm |= P_MOD)
 #define	PP_SETREF(pp)		((pp)->p_nrm |= P_REF)
@@ -138,7 +136,6 @@
 #endif
 #define	PP_SETKPMS(pp)		((pp)->p_nrm |= P_KPMS)
 #define	PP_SETKPMC(pp)		((pp)->p_nrm |= P_KPMC)
-#define	PP_SETEXEC(pp)		((pp)->p_nrm |= P_EXEC)
 
 #define	PP_CLRMOD(pp)		((pp)->p_nrm &= ~P_MOD)
 #define	PP_CLRREF(pp)		((pp)->p_nrm &= ~P_REF)
@@ -150,17 +147,6 @@
 #endif
 #define	PP_CLRKPMS(pp)		((pp)->p_nrm &= ~P_KPMS)
 #define	PP_CLRKPMC(pp)		((pp)->p_nrm &= ~P_KPMC)
-#define	PP_CLREXEC(pp)		((pp)->p_nrm &= ~P_EXEC)
-
-/*
- * Support for non-coherent I-cache. If the MD property "coherency"
- * is set to 0, it means that the I-cache must be flushed in
- * software. Use the "soft exec" bit in the TTE to detect when a page
- * has been executed, so that it can be flushed before it is re-used
- * for another program.
- */
-#define	TTE_EXECUTED(ttep)						\
-	(TTE_IS_EXECUTABLE(ttep) && TTE_IS_SOFTEXEC(ttep))
 
 /*
  * All shared memory segments attached with the SHM_SHARE_MMU flag (ISM)
@@ -337,15 +323,15 @@
 }
 
 /*
- * Returns 1 if region map1 and map2 are equal.
+ * Returns 1 if map1 and map2 are equal.
  */
-#define	SF_RGNMAP_EQUAL(map1, map2, words, rval)	{	\
+#define	SF_RGNMAP_EQUAL(map1, map2, rval)	{		\
 	int _i;							\
-	for (_i = 0; _i < words; _i++) {			\
+	for (_i = 0; _i < SFMMU_RGNMAP_WORDS; _i++) {		\
 		if ((map1)->bitmap[_i] != (map2)->bitmap[_i])	\
 			break;					\
 	}							\
-	if (_i < words)					\
+	if (_i < SFMMU_RGNMAP_WORDS)				\
 		rval = 0;					\
 	else							\
 		rval = 1;					\
@@ -609,13 +595,9 @@
 
 extern uint_t		max_mmu_ctxdoms;
 extern mmu_ctx_t	**mmu_ctxs_tbl;
-extern uint_t		nctxs;
 
 extern void	sfmmu_cpu_init(cpu_t *);
 extern void	sfmmu_cpu_cleanup(cpu_t *);
-extern void	sfmmu_invalidate_ctx(sfmmu_t *);
-extern hatlock_t *sfmmu_hat_enter(sfmmu_t *);
-extern void	sfmmu_hat_exit(hatlock_t *);
 
 /*
  * The following structure is used to get MMU context domain information for
@@ -652,6 +634,7 @@
 	uint64_t	cnum:16;
 } sfmmu_ctx_t;
 
+
 /*
  * The platform dependent hat structure.
  * tte counts should be protected by cas.
@@ -713,11 +696,7 @@
 	sf_rgn_link_t	*sfmmu_hmeregion_links[SFMMU_L1_HMERLINKS];
 	sf_rgn_link_t	sfmmu_scd_link;	/* link to scd or pending queue */
 #ifdef sun4v
-	/* ttecnt for Rock pagesize register management */
-	ulong_t		sfmmu_mmuttecnt[MMU_PAGE_SIZES];
 	struct hv_tsb_block sfmmu_hvblock;
-	struct hv_pgsz_order sfmmu_pgsz_order; /*  pagesize search order */
-	uint8_t		sfmmu_pgsz_map; /* bit map to control shared pgsz use */
 #endif
 	/*
 	 * sfmmu_ctxs is a variable length array of max_mmu_ctxdoms # of
@@ -763,8 +742,6 @@
 
 extern int disable_shctx;
 extern int shctx_on;
-extern int pgsz_search_on;
-extern int disable_pgsz_search;
 
 /*
  * bit mask for managing vac conflicts on large pages.
@@ -878,7 +855,6 @@
 #define	HAT_CTX1_FLAG   	0x100 /* ISM imap hatflag for ctx1 */
 #define	HAT_JOIN_SCD		0x200 /* region is joining scd */
 #define	HAT_ALLCTX_INVALID	0x400 /* all per-MMU ctxs are invalidated */
-#define	HAT_ISMNOTINSCD		0x800 /* Not all ISM segs are in the SCD */
 
 #define	SFMMU_LGPGS_INUSE(sfmmup)					\
 	(((sfmmup)->sfmmu_tteflags | (sfmmup)->sfmmu_rtteflags) ||	\
@@ -1822,8 +1798,7 @@
 	uintptr_t		scratch[3];
 	ulong_t		shmermap[SFMMU_HMERGNMAP_WORDS];	/* 8 bytes */
 	ulong_t		scd_shmermap[SFMMU_HMERGNMAP_WORDS];	/* 8 bytes */
-	uint8_t		pgsz_bitmap;		 /* limits ctx1 page sizes */
-	uint8_t		pad[47];		 /* pad to 64 bytes */
+	uint8_t		pad[48];			/* pad to 64 bytes */
 };
 
 /*
@@ -2354,17 +2329,11 @@
 #pragma weak mmu_large_pages_disabled
 #pragma weak mmu_set_ctx_page_sizes
 #pragma weak mmu_check_page_sizes
-#pragma weak mmu_set_pgsz_order
-#pragma weak sfmmu_init_pgsz_hv
-#pragma weak mmu_enable_pgsz_search
 
 extern void mmu_init_scd(sf_scd_t *);
 extern uint_t mmu_large_pages_disabled(uint_t);
 extern void mmu_set_ctx_page_sizes(sfmmu_t *);
 extern void mmu_check_page_sizes(sfmmu_t *, uint64_t *);
-extern void mmu_set_pgsz_order(sfmmu_t *, int);
-extern void sfmmu_init_pgsz_hv(sfmmu_t *);
-extern void mmu_enable_pgsz_search();
 
 extern sfmmu_t 		*ksfmmup;
 extern caddr_t		ktsb_base;
@@ -2406,15 +2375,12 @@
 extern uint_t		disable_ism_large_pages;
 extern uint_t		disable_auto_data_large_pages;
 extern uint_t		disable_auto_text_large_pages;
-extern uint_t		disable_shctx_large_pages;
-
-extern void		sfmmu_patch_shctx(void);
-extern void		sfmmu_patch_pgsz_reg(void);
 
 /* kpm externals */
 extern pfn_t		sfmmu_kpm_vatopfn(caddr_t);
 extern void		sfmmu_kpm_patch_tlbm(void);
 extern void		sfmmu_kpm_patch_tsbm(void);
+extern void		sfmmu_patch_shctx(void);
 extern void		sfmmu_kpm_load_tsb(caddr_t, tte_t *, int);
 extern void		sfmmu_kpm_unload_tsb(caddr_t, int);
 extern void		sfmmu_kpm_tsbmtl(short *, uint_t *, int);
--- a/usr/src/uts/sparc/Makefile.sparc.shared	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/uts/sparc/Makefile.sparc.shared	Mon Aug 10 10:43:48 2009 -0400
@@ -303,6 +303,7 @@
 DRV_KMODS	+= fct
 DRV_KMODS	+= fcoe
 DRV_KMODS	+= fcoet
+DRV_KMODS	+= fcoei
 DRV_KMODS	+= qlt
 DRV_KMODS	+= iscsit
 DRV_KMODS	+= ncall nsctl sdbc nskern sv
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/usr/src/uts/sparc/fcoei/Makefile	Mon Aug 10 10:43:48 2009 -0400
@@ -0,0 +1,85 @@
+#
+# CDDL HEADER START
+#
+# The contents of this file are subject to the terms of the
+# Common Development and Distribution License (the "License").
+# You may not use this file except in compliance with the License.
+#
+# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+# or http://www.opensolaris.org/os/licensing.
+# See the License for the specific language governing permissions
+# and limitations under the License.
+#
+# When distributing Covered Code, include this CDDL HEADER in each
+# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+# If applicable, add the following below this CDDL HEADER, with the
+# fields enclosed by brackets "[]" replaced with your own identifying
+# information: Portions Copyright [yyyy] [name of copyright owner]
+#
+# CDDL HEADER END
+#
+#
+# Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
+# Use is subject to license terms.
+#
+#	This makefile drives the production of the fcoei driver for 
+#	LEADVILLE.
+
+#
+#	Path to the base of the uts directory tree (usually /usr/src/uts).
+#
+UTSBASE	= ../..
+ARCHDIR:sh = cd ..; basename `pwd`
+
+#
+#	Define the module and object file sets.
+#
+MODULE		= fcoei
+OBJECTS		= $(FCOEI_OBJS:%=$(OBJS_DIR)/%)
+LINTS		= $(FCOEI_OBJS:%.o=$(LINTS_DIR)/%.ln)
+ROOTMODULE	= $(ROOT_DRV_DIR)/$(MODULE)
+CONF_SRCDIR	= $(UTSBASE)/common/io/fibre-channel/fca/fcoei
+
+#
+#	Include common rules.
+#
+include ../Makefile.$(ARCHDIR)
+
+#
+#	Define targets
+#
+ALL_TARGET	= $(BINARY) $(SRC_CONFILE)
+LINT_TARGET	= $(MODULE).lint
+INSTALL_TARGET	= $(BINARY) $(ROOTMODULE) $(ROOT_CONFFILE)
+
+#
+#	Overrides and depends_on
+#
+LDFLAGS		+= -dy -Nmisc/fctl -Ndrv/fcoe
+INC_PATH	+= -I$(UTSBASE)/common/io/fibre-channel/fca/fcoei
+
+#
+#	Default build targets.
+#
+.KEEP_STATE:
+
+def:		$(DEF_DEPS)
+
+all:		$(ALL_DEPS)
+
+clean:		$(CLEAN_DEPS)
+
+clobber:	$(CLOBBER_DEPS)
+
+lint:		$(LINT_DEPS)
+
+modlintlib:	$(MODLINTLIB_DEPS)
+
+clean.lint:	$(CLEAN_LINT_DEPS)
+
+install:	$(INSTALL_DEPS)
+
+#
+#	Include common targets.
+#
+include ../Makefile.targ
--- a/usr/src/uts/sparc/fpu/fpu_simulator.c	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/uts/sparc/fpu/fpu_simulator.c	Mon Aug 10 10:43:48 2009 -0400
@@ -112,14 +112,6 @@
 	{ "fpu_sim_fnmaddd",		KSTAT_DATA_UINT64},
 	{ "fpu_sim_fnmsubs",		KSTAT_DATA_UINT64},
 	{ "fpu_sim_fnmsubd",		KSTAT_DATA_UINT64},
-	{ "fpu_sim_fumadds",		KSTAT_DATA_UINT64},
-	{ "fpu_sim_fumaddd",		KSTAT_DATA_UINT64},
-	{ "fpu_sim_fumsubs",		KSTAT_DATA_UINT64},
-	{ "fpu_sim_fumsubd",		KSTAT_DATA_UINT64},
-	{ "fpu_sim_fnumadds",		KSTAT_DATA_UINT64},
-	{ "fpu_sim_fnumaddd",		KSTAT_DATA_UINT64},
-	{ "fpu_sim_fnumsubs",		KSTAT_DATA_UINT64},
-	{ "fpu_sim_fnumsubd",		KSTAT_DATA_UINT64},
 	{ "fpu_sim_invalid",		KSTAT_DATA_UINT64},
 };
 
@@ -185,14 +177,12 @@
 	enum fcc_type	cc;
 	uint32_t	nfcc;		/* fcc number field. */
 	uint64_t	lusr;
-	uint_t		fmau_mul_exceptions;
 
 	nrs1 = inst.rs1;
 	nrs2 = inst.rs2;
 	nrd = inst.rd;
 	fsr = *pfsr;
 	pfpsd->fp_current_exceptions = 0;	/* Init current exceptions. */
-	fmau_mul_exceptions = 0;
 	pfpsd->fp_fsrtem    = fsr.tem;		/* Obtain fsr's tem */
 	/*
 	 * Obtain rounding direction and precision
@@ -200,7 +190,7 @@
 	pfpsd->fp_direction = GSR_IM(gsr) ? GSR_IRND(gsr) : fsr.rnd;
 	pfpsd->fp_precision = fsr.rnp;
 
-	if (inst.op3 == 0x37) { /* FMA-fused opcode */
+	if (inst.op3 == 0x37) { /* IMPDEP2B FMA-fused opcode */
 		fp_fma_inst_type *fma_inst;
 		uint32_t	nrs3;
 		unpacked	us3;
@@ -263,121 +253,6 @@
 			FPUINFO_KSTAT_PREC(fma_inst->sz, fpu_sim_fnmsubs,
 			    fpu_sim_fnmsubd, fpu_sim_invalid);
 		}
-	} else if (inst.op3 == fmau) { /* FMA-unfused opcode */
-		fp_fma_inst_type *fmau_inst;
-		uint32_t	nrs3;
-		unpacked	us3;
-		unpacked	ust;
-		/*
-		 * For FMA-unfused, if either the multiply part or the add
-		 * part raises an exception whose trap is enabled, we trap
-		 * with cexc indicating only that exception and aexc un-
-		 * changed.  If neither part raises an exception whose trap
-		 * is enabled, the instruction completes with cexc indicating
-		 * just those exceptions that occurred in the add part and
-		 * aexc accumulating all exceptions that occurred in either
-		 * part.  We use fmau_mul_exceptions to keep track of the
-		 * exceptions that occurred in the multiply part while we
-		 * simulate the add part.
-		 */
-		fmau_inst = (fp_fma_inst_type *) &inst;
-		nrs2 = fmau_inst->rs2;
-		nrs3 = fmau_inst->rs3;
-		switch (fmau_inst->var) {
-		case fmadd:
-			_fp_unpack(pfpsd, &us1, nrs1, fmau_inst->sz);
-			_fp_unpack(pfpsd, &us2, nrs2, fmau_inst->sz);
-			_fp_mul(pfpsd, &us1, &us2, &ust);
-			_fp_pack(pfpsd, &ust, nrd, fmau_inst->sz);
-			if ((pfpsd->fp_current_exceptions & fsr.tem) == 0) {
-				fmau_mul_exceptions =
-				    pfpsd->fp_current_exceptions;
-				pfpsd->fp_current_exceptions = 0;
-				_fp_unpack(pfpsd, &us3, nrs3, fmau_inst->sz);
-				_fp_unpack(pfpsd, &ust, nrd, fmau_inst->sz);
-				_fp_add(pfpsd, &ust, &us3, &ud);
-				/* ensure QSNaN1 has precedence over QNaN3 */
-				if ((us3.fpclass == fp_quiet) &&
-				    ((us1.fpclass == fp_signaling) ||
-				    (us2.fpclass == fp_signaling)))
-					ud = ust;
-				_fp_pack(pfpsd, &ud, nrd, fmau_inst->sz);
-			}
-			FPUINFO_KSTAT_PREC(fmau_inst->sz, fpu_sim_fumadds,
-			    fpu_sim_fumaddd, fpu_sim_invalid);
-			break;
-		case fmsub:
-			_fp_unpack(pfpsd, &us1, nrs1, fmau_inst->sz);
-			_fp_unpack(pfpsd, &us2, nrs2, fmau_inst->sz);
-			_fp_mul(pfpsd, &us1, &us2, &ust);
-			_fp_pack(pfpsd, &ust, nrd, fmau_inst->sz);
-			if ((pfpsd->fp_current_exceptions & fsr.tem) == 0) {
-				fmau_mul_exceptions =
-				    pfpsd->fp_current_exceptions;
-				pfpsd->fp_current_exceptions = 0;
-				_fp_unpack(pfpsd, &us3, nrs3, fmau_inst->sz);
-				_fp_unpack(pfpsd, &ust, nrd, fmau_inst->sz);
-				_fp_sub(pfpsd, &ust, &us3, &ud);
-				/* ensure QSNaN1 has precedence over QNaN3 */
-				if ((us3.fpclass == fp_quiet) &&
-				    ((us1.fpclass == fp_signaling) ||
-				    (us2.fpclass == fp_signaling)))
-					ud = ust;
-				_fp_pack(pfpsd, &ud, nrd, fmau_inst->sz);
-			}
-			FPUINFO_KSTAT_PREC(fmau_inst->sz, fpu_sim_fumsubs,
-			    fpu_sim_fumsubd, fpu_sim_invalid);
-			break;
-		case fnmadd:
-			_fp_unpack(pfpsd, &us1, nrs1, fmau_inst->sz);
-			_fp_unpack(pfpsd, &us2, nrs2, fmau_inst->sz);
-			_fp_mul(pfpsd, &us1, &us2, &ust);
-			_fp_pack(pfpsd, &ust, nrd, fmau_inst->sz);
-			if ((pfpsd->fp_current_exceptions & fsr.tem) == 0) {
-				fmau_mul_exceptions =
-				    pfpsd->fp_current_exceptions;
-				pfpsd->fp_current_exceptions = 0;
-				_fp_unpack(pfpsd, &us3, nrs3, fmau_inst->sz);
-				_fp_unpack(pfpsd, &ust, nrd, fmau_inst->sz);
-				if (ust.fpclass != fp_quiet &&
-				    ust.fpclass != fp_signaling)
-					ust.sign ^= 1;
-				_fp_sub(pfpsd, &ust, &us3, &ud);
-				/* ensure QSNaN1 has precedence over QNaN3 */
-				if ((us3.fpclass == fp_quiet) &&
-				    ((us1.fpclass == fp_signaling) ||
-				    (us2.fpclass == fp_signaling)))
-					ud = ust;
-				_fp_pack(pfpsd, &ud, nrd, fmau_inst->sz);
-			}
-			FPUINFO_KSTAT_PREC(fmau_inst->sz, fpu_sim_fnumadds,
-			    fpu_sim_fnumaddd, fpu_sim_invalid);
-			break;
-		case fnmsub:
-			_fp_unpack(pfpsd, &us1, nrs1, fmau_inst->sz);
-			_fp_unpack(pfpsd, &us2, nrs2, fmau_inst->sz);
-			_fp_mul(pfpsd, &us1, &us2, &ust);
-			_fp_pack(pfpsd, &ust, nrd, fmau_inst->sz);
-			if ((pfpsd->fp_current_exceptions & fsr.tem) == 0) {
-				fmau_mul_exceptions =
-				    pfpsd->fp_current_exceptions;
-				pfpsd->fp_current_exceptions = 0;
-				_fp_unpack(pfpsd, &us3, nrs3, fmau_inst->sz);
-				_fp_unpack(pfpsd, &ust, nrd, fmau_inst->sz);
-				if (ust.fpclass != fp_quiet &&
-				    ust.fpclass != fp_signaling)
-					ust.sign ^= 1;
-				_fp_add(pfpsd, &ust, &us3, &ud);
-				/* ensure QSNaN1 has precedence over QNaN3 */
-				if ((us3.fpclass == fp_quiet) &&
-				    ((us1.fpclass == fp_signaling) ||
-				    (us2.fpclass == fp_signaling)))
-					ud = ust;
-				_fp_pack(pfpsd, &ud, nrd, fmau_inst->sz);
-			}
-			FPUINFO_KSTAT_PREC(fmau_inst->sz, fpu_sim_fnumsubs,
-			    fpu_sim_fnumsubd, fpu_sim_invalid);
-		}
 	} else {
 		nfcc = nrd & 0x3;
 		if (inst.op3 == 0x35) {		/* fpop2 */
@@ -645,7 +520,7 @@
 		*pfsr = fsr;
 		return (ftt_ieee);
 	} else {	/* Just set accrued exception field. */
-		fsr.aexc |= pfpsd->fp_current_exceptions | fmau_mul_exceptions;
+		fsr.aexc |= pfpsd->fp_current_exceptions;
 	}
 	*pfsr = fsr;
 	return (ftt_none);
@@ -697,7 +572,7 @@
 			return (ftt);
 	} else if ((fp.inst.hibits == 2) &&
 	    ((fp.inst.op3 == 0x34) || (fp.inst.op3 == 0x35) ||
-	    (fp.inst.op3 == 0x37) || (fp.inst.op3 == 0x3f))) {
+	    (fp.inst.op3 == 0x37))) {
 		ftt =  _fp_fpu_simulator(pfpsd, fp.inst, pfsr, gsr);
 		if (ftt == ftt_none || ftt == ftt_ieee) {
 			pregs->r_pc = pregs->r_npc;
@@ -776,7 +651,7 @@
 
 	if ((fp.inst.hibits == 2) &&
 	    ((fp.inst.op3 == 0x34) || (fp.inst.op3 == 0x35) ||
-	    (fp.inst.op3 == 0x37) || (fp.inst.op3 == 0x3f))) {
+	    (fp.inst.op3 == 0x37))) {
 		ftt = _fp_fpu_simulator(pfpsd, fp.inst, (fsr_type *)&tfsr, gsr);
 		/* Do not retry emulated instruction. */
 		pregs->r_pc = pregs->r_npc;
@@ -816,7 +691,7 @@
 		return (ftt);
 	if ((fp.inst.hibits == 2) &&		/* fpops */
 	    ((fp.inst.op3 == 0x34) || (fp.inst.op3 == 0x35) ||
-	    (fp.inst.op3 == 0x37) || (fp.inst.op3 == 0x3f))) {
+	    (fp.inst.op3 == 0x37))) {
 		ftt = _fp_fpu_simulator(pfpsd, fp.inst, (fsr_type *)&tfsr, gsr);
 		/* Do not retry emulated instruction. */
 		pfpu->fpu_fsr = tfsr;
--- a/usr/src/uts/sparc/sys/fpu/fpu_simulator.h	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/uts/sparc/sys/fpu/fpu_simulator.h	Mon Aug 10 10:43:48 2009 -0400
@@ -204,7 +204,7 @@
 	ft_op_38	= 0x38,
 	fp_op_39 = 0x39, fp_op_3a = 0x3a, fp_op_3b = 0x3b,
 	fp_op_3c	= 0x3c,
-	fp_op_3d = 0x3d, fp_op_3e = 0x3e, fmau = 0x3f
+	fp_op_3d = 0x3d, fp_op_3e = 0x3e, fp_op_3f = 0x3f
 };
 
 typedef			/* FPU instruction. */
@@ -219,14 +219,14 @@
 	uint32_t		rs2	: 5;	/* Second operand. */
 } fp_inst_type;
 
-enum fp_op_fma_var {	/* FMA-fused/unfused instr. variations */
+enum fp_op_fma_var {	/* IMPDEP2B FMA-fused instr. variations */
 	fmadd	=	0,
 	fmsub	=	1,
 	fnmsub	=	2,
 	fnmadd	=	3
 };
 
-typedef		/* FPU FMA-fused/unfused instructions. */
+typedef		/* IMPDEP2B FPU FMA-fused instruction. */
 	struct {
 	uint32_t		hibits	: 2;	/* Top two bits. */
 	uint32_t		rd	: 5;	/* Destination. */
@@ -330,14 +330,6 @@
 	struct kstat_named		fpu_sim_fnmaddd;
 	struct kstat_named		fpu_sim_fnmsubs;
 	struct kstat_named		fpu_sim_fnmsubd;
-	struct kstat_named		fpu_sim_fumadds;
-	struct kstat_named		fpu_sim_fumaddd;
-	struct kstat_named		fpu_sim_fumsubs;
-	struct kstat_named		fpu_sim_fumsubd;
-	struct kstat_named		fpu_sim_fnumadds;
-	struct kstat_named		fpu_sim_fnumaddd;
-	struct kstat_named		fpu_sim_fnumsubs;
-	struct kstat_named		fpu_sim_fnumsubd;
 	struct kstat_named		fpu_sim_invalid;
 };
 
--- a/usr/src/uts/sun4/io/px/px_ib.c	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/uts/sun4/io/px/px_ib.c	Mon Aug 10 10:43:48 2009 -0400
@@ -361,7 +361,8 @@
 				    intr_dist_cpuid();
 			else if ((ino_p->ino_cpuid !=
 			    ino_p->ino_default_cpuid) &&
-			    (cpu_intr_on(cpu[ino_p->ino_default_cpuid])))
+			    cpu[ino_p->ino_default_cpuid] &&
+			    cpu_intr_on(cpu[ino_p->ino_default_cpuid]))
 				ino_p->ino_cpuid = ino_p->ino_default_cpuid;
 			else if (!cpu_intr_on(cpu[ino_p->ino_cpuid]))
 				ino_p->ino_cpuid = intr_dist_cpuid();
--- a/usr/src/uts/sun4/os/startup.c	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/uts/sun4/os/startup.c	Mon Aug 10 10:43:48 2009 -0400
@@ -896,7 +896,7 @@
 	PRM_DEBUG(kmem64_pabase);
 	PRM_DEBUG(kmem64_szc);
 	sfmmu_memtte(&tte, kmem64_pabase >> MMU_PAGESHIFT,
-	    PROC_DATA | HAT_NOSYNC | HAT_ATTR_NOSOFTEXEC, kmem64_szc);
+	    PROC_DATA | HAT_NOSYNC, kmem64_szc);
 	PRM_DEBUG(tte.ll);
 	(void) sprintf(b, kmem64_obp_str,
 	    kmem64_base, kmem64_end, TTE_PAGEMASK(kmem64_szc), tte.ll);
@@ -2850,8 +2850,6 @@
 	"h# %p constant KCONTEXT "
 	"h# %p constant KHATID "
 	"h# %x constant ASI_MEM "
-	"h# %x constant SOFTEXEC "
-	"h# %x constant EXECPRM "
 
 	": PHYS-X@ ( phys -- data ) "
 	"   ASI_MEM spacex@ "
@@ -2954,11 +2952,7 @@
 	"         ?dup  if                    ( addr sfmmup hmeblkp ) "
 	"            nip swap HBLK_TO_TTEP    ( ttep ) "
 	"            dup TTE_IS_VALID  if     ( valid-ttep ) "
-	"               PHYS-X@               ( tte-data ) "
-	"               dup SOFTEXEC and 0> if  ( tte-data ) "
-	"                 SOFTEXEC - EXECPRM or ( tte-data ) "
-	"               then                    ( tte-data ) "
-	"               true                  ( tte-data true ) "
+	"               PHYS-X@ true          ( tte-data true ) "
 	"            else                     ( invalid-tte ) "
 	"               drop false            ( false ) "
 	"            then                     ( false | tte-data true ) "
@@ -3009,9 +3003,7 @@
 	    KHMEHASH_SZ,
 	    KCONTEXT,
 	    KHATID,
-	    ASI_MEM,
-	    icache_is_coherent ? 0 : TTE_SOFTEXEC_INT,
-	    TTE_EXECPRM_INT);
+	    ASI_MEM);
 	prom_interpret(bp, 0, 0, 0, 0, 0);
 
 	kobj_free(bp, MMU_PAGESIZE);
--- a/usr/src/uts/sun4/vm/sfmmu.c	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/uts/sun4/vm/sfmmu.c	Mon Aug 10 10:43:48 2009 -0400
@@ -199,10 +199,6 @@
 		sfmmu_patch_shctx();
 	}
 
-	if (&mmu_enable_pgsz_search) {
-		mmu_enable_pgsz_search();
-	}
-
 	/*
 	 * The 8K-indexed kernel TSB space is used to hold
 	 * translations below...
--- a/usr/src/uts/sun4/vm/vm_dep.h	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/uts/sun4/vm/vm_dep.h	Mon Aug 10 10:43:48 2009 -0400
@@ -859,16 +859,6 @@
 extern size_t ndata_maxsize(struct memlist *);
 extern size_t ndata_spare(struct memlist *, size_t, size_t);
 
-/*
- * Platform specific support for non-coherent I-cache and soft exec
- */
-extern uint_t	icache_is_coherent;
-extern uint_t	force_sync_icache_after_bcopy;
-extern uint_t	force_sync_icache_after_dma;
-
-extern void	mach_setup_icache(uint_t);
-#pragma weak	mach_setup_icache
-
 #ifdef	__cplusplus
 }
 #endif
--- a/usr/src/uts/sun4u/sys/pte.h	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/uts/sun4u/sys/pte.h	Mon Aug 10 10:43:48 2009 -0400
@@ -19,7 +19,7 @@
  * CDDL HEADER END
  */
 /*
- * Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
+ * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
  * Use is subject to license terms.
  */
 
@@ -354,23 +354,6 @@
 
 #endif /* !_ASM */
 
-/*
- * There is no support for non-coherent I-cache in sun4u
- */
-#define	TTE_SOFTEXEC_INT	0x00000000
-#ifndef _ASM
-#ifdef lint
-/* fix lint warnings about constant conditionals and empty if */
-#define	TTE_IS_SOFTEXEC(ttep)	TTE_IS_EXECUTABLE(ttep)
-#define	TTE_SET_SOFTEXEC(ttep)	TTE_SET_EXEC(ttep)
-#define	TTE_CLR_SOFTEXEC(ttep)	TTE_CLR_EXEC(ttep)
-#else
-#define	TTE_IS_SOFTEXEC(ttep)	(0)
-#define	TTE_SET_SOFTEXEC(ttep)
-#define	TTE_CLR_SOFTEXEC(ttep)
-#endif	/* lint */
-#endif /* !_ASM */
-
 #ifdef	__cplusplus
 }
 #endif
--- a/usr/src/uts/sun4u/vm/mach_sfmmu.h	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/uts/sun4u/vm/mach_sfmmu.h	Mon Aug 10 10:43:48 2009 -0400
@@ -19,7 +19,7 @@
  * CDDL HEADER END
  */
 /*
- * Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
+ * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
  * Use is subject to license terms.
  */
 
@@ -112,12 +112,6 @@
 	/* END CSTYLED */
 
 /*
- * This macro is to control the pagesizes used for shared context on
- * Rock systems.
- */
-#define	CHECK_SHARED_PGSZ(tsbarea, tte, tmp, use_shctx, label)
-
-/*
  * This macro is used in the MMU code to check if TL should be lowered from
  * 2 to 1 to pop trapstat's state.  See the block comment in trapstat.c
  * for details.
@@ -267,12 +261,6 @@
 	/* CSTYLED */							\
 label/**/1:
 
-/*
- * No support for non-coherent I-cache in sun4u
- */
-#define	TTE_SET_EXEC_ML(tte, ttepa, tmp1, label)
-#define	TTE_CLR_SOFTEXEC_ML(tte)
-#define	TTE_CHK_SOFTEXEC_ML(tte)	andcc tte, 0, %g0
 
 /*
  * TTE_SET_REF_ML is a macro that updates the reference bit if it is
--- a/usr/src/uts/sun4v/Makefile.files	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/uts/sun4v/Makefile.files	Mon Aug 10 10:43:48 2009 -0400
@@ -179,7 +179,6 @@
 #
 NI_PCBE_OBJS	= niagara_pcbe.o
 N2_PCBE_OBJS	= niagara2_pcbe.o
-RK_PCBE_OBJS	= rock_pcbe.o
 
 #
 #			cpu modules
@@ -190,7 +189,6 @@
 NIAGARACPU_OBJS += niagara_asm.o atomic.o
 NIAGARA2CPU_OBJS = niagara2.o niagara_copy.o common_asm.o niagara_perfctr.o
 NIAGARA2CPU_OBJS += niagara2_asm.o atomic.o
-ROCKCPU_OBJS = rock.o rock_copy.o common_asm.o rock_asm.o atomic.o
 
 #
 #			platform module
--- a/usr/src/uts/sun4v/Makefile.sun4v.shared	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/uts/sun4v/Makefile.sun4v.shared	Mon Aug 10 10:43:48 2009 -0400
@@ -433,9 +433,9 @@
 #
 #	cpu modules
 #
-CPU_KMODS	+= generic niagara niagara2 vfalls rock
+CPU_KMODS	+= generic niagara niagara2 vfalls
 
-LINT_CPU_KMODS	+= generic rock
+LINT_CPU_KMODS	+= generic
 
 #
 #	Performance Counter BackEnd Modules (/usr/kernel/pcbe):
@@ -443,4 +443,3 @@
 PCBE_KMODS	+= niagara_pcbe
 PCBE_KMODS	+= niagara2_pcbe
 PCBE_KMODS	+= vfalls_pcbe
-PCBE_KMODS	+= rock_pcbe
--- a/usr/src/uts/sun4v/cpu/rock.c	Wed Aug 05 18:08:09 2009 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1014 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License (the "License").
- * You may not use this file except in compliance with the License.
- *
- * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
- * or http://www.opensolaris.org/os/licensing.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information: Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- */
-
-/*
- * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
- * Use is subject to license terms.
- */
-
-#include <sys/types.h>
-#include <sys/systm.h>
-#include <sys/archsystm.h>
-#include <sys/machparam.h>
-#include <sys/machsystm.h>
-#include <sys/cpu.h>
-#include <sys/elf_SPARC.h>
-#include <vm/page.h>
-#include <vm/vm_dep.h>
-#include <sys/cpuvar.h>
-#include <sys/async.h>
-#include <sys/cmn_err.h>
-#include <sys/debug.h>
-#include <sys/dditypes.h>
-#include <sys/sunddi.h>
-#include <sys/cpu_module.h>
-#include <sys/prom_debug.h>
-#include <sys/vmsystm.h>
-#include <sys/prom_plat.h>
-#include <sys/sysmacros.h>
-#include <sys/intreg.h>
-#include <sys/machtrap.h>
-#include <sys/ontrap.h>
-#include <sys/ivintr.h>
-#include <sys/atomic.h>
-#include <sys/panic.h>
-#include <sys/dtrace.h>
-#include <vm/seg_spt.h>
-#include <sys/hypervisor_api.h>
-#include <sys/rock_hypervisor_api.h>
-#include <sys/hsvc.h>
-#include <vm/hat_sfmmu.h>
-#include <sys/mutex_impl.h>
-
-uint_t root_phys_addr_lo_mask = 0xffffffffU;
-uint8_t	enable_tm = 1;
-
-char cpu_module_name[] = "SUNW,UltraSPARC-AT10";
-boolean_t	hsvc_tm_available = B_TRUE;
-
-static	hsvc_info_t rock_tm_hsvc = {
-	HSVC_REV_1,		/* HSVC rev num */
-	NULL,			/* Private */
-	HSVC_GROUP_TM,		/* Requested API Group */
-	ROCK_HSVC_MAJOR,	/* Requested Major */
-	ROCK_HSVC_MINOR,	/* Requested Minor */
-	cpu_module_name		/* Module name */
-};
-
-boolean_t	hsvc_mmu_ext_available = B_TRUE;
-
-static	hsvc_info_t rock_mmu_ext_hsvc = {
-	HSVC_REV_1,		/* HSVC rev num */
-	NULL,			/* Private */
-	HSVC_GROUP_RKMMU_EXT,	/* Requested API Group */
-	ROCK_HSVC_MAJOR,	/* Requested Major */
-	ROCK_HSVC_MINOR,	/* Requested Minor */
-	cpu_module_name		/* Module name */
-};
-
-static void encode_pgsz_order(uint64_t, int, int, uint16_t *, uchar_t *);
-static void set_pgsz_order(uchar_t, uchar_t, uint64_t *, int *, int *,
-    sfmmu_t *);
-
-extern	void rock_mutex_delay(void);
-
-/*
- * External /etc/system tunable, for controlling whether shared or private pages
- * come first in the pagesize order register.
- */
-int pgsz_order_shared_first = 1;
-
-#define	MCOREID_MASK	0x1E
-#define	MCOREID_SHIFT	1
-
-static uint_t mmu_disable_large_pages = ((1 << TTE512K) | (1 << TTE32M) |
-		(1 << TTE2G) | (1 << TTE16G));
-static uint_t mmu_disable_ism_large_pages = ((1 << TTE512K) | (1 << TTE32M) |
-	(1 << TTE2G) | (1 << TTE16G));
-static uint_t mmu_disable_auto_data_large_pages = ((1 << TTE512K) |
-	(1 << TTE32M) | (1 << TTE2G) | (1 << TTE16G));
-static uint_t mmu_disable_auto_text_large_pages = ((1 << TTE512K) |
-	(1 << TTE32M) | (1 << TTE2G) | (1 << TTE16G));
-
-void
-cpu_setup(void)
-{
-	extern int	cpc_has_overflow_intr;
-	uint64_t	sup_minor;
-	int		status;
-
-	/*
-	 * The setup common to all CPU modules is done in cpu_setup_common
-	 * routine.
-	 */
-	cpu_setup_common(NULL);
-
-	/*
-	 * Rock's max nctxs is 64K. Set it accordingly.
-	 */
-	nctxs = MAX_NCTXS;
-
-	/*
-	 * Rock I$ is non-coherent.
-	 */
-	mach_setup_icache(0);
-
-#ifdef DEBUG
-	/*
-	 * These should always be present on Rock
-	 */
-	if (cpu_hwcap_flags == 0)
-		cmn_err(CE_WARN, "hwcap-list missing from MD");
-#endif
-	cpu_hwcap_flags |= AV_SPARC_ASI_CACHE_SPARING;
-
-	cache |= (CACHE_PTAG | CACHE_IOCOHERENT);
-
-	if (use_page_coloring) {
-		do_pg_coloring = 1;
-	}
-
-	/*
-	 * Rock generates hpriv performance event trap instead of pic overflow
-	 * trap. To get the attention of the guest hv in-turn generates pic
-	 * overflow trap. Therefore enable support for that.
-	 */
-	cpc_has_overflow_intr = 1;
-
-	/*
-	 * Enable 4M pages for OOB.
-	 */
-	max_uheap_lpsize = MMU_PAGESIZE4M;
-	max_ustack_lpsize = MMU_PAGESIZE4M;
-	max_privmap_lpsize = MMU_PAGESIZE4M;
-
-	/*
-	 * hv_tm_enable is a part of TM group. We need to
-	 * negotiate that API group before we can use it.
-	 */
-	status = hsvc_register(&rock_tm_hsvc, &sup_minor);
-	if ((status != 0) || (sup_minor < (uint64_t)ROCK_HSVC_MINOR)) {
-		cmn_err(CE_WARN, "%s cannot negotiate hypervisor services: "
-		    "major: 0x%lx minor: 0x%lx group: 0x%x errno: %d",
-		    cpu_module_name, rock_tm_hsvc.hsvc_major,
-		    rock_tm_hsvc.hsvc_minor, HSVC_GROUP_TM, status);
-		hsvc_tm_available = B_FALSE;
-	}
-
-	/*
-	 * Negotiate API group for rock mmu extensions.
-	 */
-	status = hsvc_register(&rock_mmu_ext_hsvc, &sup_minor);
-	if ((status != 0) || (sup_minor <
-	    (uint64_t)ROCK_HSVC_MINOR)) {
-		cmn_err(CE_WARN, "%s cannot negotiate hypervisor services: "
-		    "major: 0x%lx minor: 0x%lx group: 0x%x errno: %d",
-		    cpu_module_name, rock_mmu_ext_hsvc.hsvc_major,
-		    rock_mmu_ext_hsvc.hsvc_minor, HSVC_GROUP_RKMMU_EXT,
-		    status);
-		hsvc_mmu_ext_available = B_FALSE;
-	}
-}
-
-/*
- * Set the magic constants of the implementation.
- */
-void
-cpu_fiximp(struct cpu_node *cpunode)
-{
-	/*
-	 * The Cache node is optional in MD. Therefore in case it
-	 * does not exist, use hardcoded values.
-	 */
-#ifdef DEBUG
-	/*
-	 * ...that said, we do want this info to come from the MD.
-	 */
-	if (cpunode->ecache_size == 0 || cpunode->ecache_linesize == 0 ||
-	    cpunode->ecache_associativity == 0) {
-		cmn_err(CE_WARN, "ecache info missing from MD");
-	}
-#endif
-	if (cpunode->ecache_size == 0)
-		cpunode->ecache_size = 2 * 1024 * 1024;
-	if (cpunode->ecache_linesize == 0)
-		cpunode->ecache_linesize = 64;
-	if (cpunode->ecache_associativity == 0)
-		cpunode->ecache_associativity = 8;
-}
-
-void
-dtrace_flush_sec(uintptr_t addr)
-{
-	pfn_t pfn;
-	proc_t *procp = ttoproc(curthread);
-	page_t *pp;
-	caddr_t va;
-
-	pfn = hat_getpfnum(procp->p_as->a_hat, (void *)addr);
-	if (pfn != -1) {
-		ASSERT(pf_is_memory(pfn));
-		pp = page_numtopp_noreclaim(pfn, SE_SHARED);
-		if (pp != NULL) {
-			va = ppmapin(pp, PROT_READ | PROT_WRITE, (void *)addr);
-			/* sparc needs 8-byte align */
-			doflush((caddr_t)((uintptr_t)va & -8l));
-			ppmapout(va);
-			page_unlock(pp);
-		}
-	}
-}
-
-void
-cpu_map_exec_units(struct cpu *cp)
-{
-	ASSERT(MUTEX_HELD(&cpu_lock));
-
-	/*
-	 * The cpu_ipipe and cpu_fpu fields are initialized based on
-	 * the execution unit sharing information from the MD. They
-	 * default to the CPU id in the absence of such information.
-	 */
-	cp->cpu_m.cpu_ipipe = cpunodes[cp->cpu_id].exec_unit_mapping;
-	if (cp->cpu_m.cpu_ipipe == NO_EU_MAPPING_FOUND)
-		cp->cpu_m.cpu_ipipe = (id_t)(cp->cpu_id);
-
-	cp->cpu_m.cpu_fpu = cpunodes[cp->cpu_id].fpu_mapping;
-	if (cp->cpu_m.cpu_fpu == NO_EU_MAPPING_FOUND)
-		cp->cpu_m.cpu_fpu = (id_t)(cp->cpu_id);
-
-	cp->cpu_m.cpu_core = (cp->cpu_id & MCOREID_MASK) >> MCOREID_SHIFT;
-
-	/*
-	 * The cpu_chip field is initialized based on the information
-	 * in the MD and assume that all cpus within a chip
-	 * share the same L2 cache. If no such info is available, we
-	 * set the cpu to CPU_CHIPID_INVALID.
-	 */
-	cp->cpu_m.cpu_mpipe = cpunodes[cp->cpu_id].l2_cache_mapping;
-	if (cp->cpu_m.cpu_mpipe == NO_L2_CACHE_MAPPING_FOUND)
-		cp->cpu_m.cpu_mpipe = CPU_L2_CACHEID_INVALID;
-
-	cp->cpu_m.cpu_chip = cpunodes[cp->cpu_id].l2_cache_mapping;
-	if (cp->cpu_m.cpu_chip == NO_L2_CACHE_MAPPING_FOUND)
-		cp->cpu_m.cpu_chip = CPU_CHIPID_INVALID;
-}
-
-void
-cpu_init_private(struct cpu *cp)
-{
-	cpu_map_exec_units(cp);
-	mutex_delay = rock_mutex_delay;
-}
-
-/*ARGSUSED*/
-void
-cpu_uninit_private(struct cpu *cp)
-{
-}
-
-/*
- * cpu_feature_init
- *
- * This function is called once per strand.
- */
-void
-cpu_feature_init(void)
-{
-	static	int	set_mutex_backoff_tunables = 0;
-	/*
-	 * Set constants for mutex_backoff only once.
-	 * On Rock, setting this to 8 gives the best performance,
-	 * even for multi-chip systems.
-	 */
-	if (! set_mutex_backoff_tunables) {
-		mutex_backoff_base = 1;
-		mutex_cap_factor = 8;
-		set_mutex_backoff_tunables = 1;
-	}
-
-	/*
-	 * Enable or disable for each cpu if hypervisor API is negotiated.
-	 */
-	if (hsvc_tm_available == B_TRUE)
-		(void) hv_tm_enable((uint64_t)enable_tm);
-}
-
-/*
- * Flush specified address range from I$ via hv_mem_iflush interface
- * Note that the hypervisor interface expects physical address range
- * and can flush less than the requested size.
- */
-
-void
-rock_sync_icache(caddr_t addr, size_t size)
-{
-	uint64_t pa, i, flushlen, flushed;
-
-	if (!force_sync_icache_after_bcopy)
-		/*
-		 * Do not clear the I-cache after bcopy.
-		 * The default value is 0. This flag made be
-		 * set via /etc/system.
-		 */
-		return;
-
-	if (!tba_taken_over)
-		/*
-		 * Very early in boot, va_to_pa() will try to call back
-		 * into OBP.  Very *very* early in boot, this will fail
-		 * because we haven't set up the OBP callback handler.
-		 * (Without this check, kmdb boot will fail.)
-		 */
-		return;
-
-	for (i = 0; i < size; i += flushed) {
-		pa = va_to_pa(addr + i);
-		ASSERT(pa != -1);
-
-		/*
-		 * Only flush the required length up to a PAGESIZE.
-		 */
-
-		flushlen = MIN((size - i), (PAGESIZE - (pa & MMU_PAGEOFFSET)));
-
-		/*
-		 * Flush I$ up to the page bounday. This call should never
-		 * fail. If it does, we panic the system as I$ may contain
-		 * stale instructions, which can result in silent data
-		 * corruption.
-		 */
-
-		if (hv_mem_iflush(pa, flushlen, &flushed) != H_EOK) {
-			cmn_err(CE_PANIC, "Flushing the Icache failed");
-		}
-
-	}
-}
-
-/*
- * There are no Hypervisor trapstat(1m) interfaces for Rock
- * If trapstat(1m) wants to do its thing, it will have to
- * take over all TLB miss handling.
- */
-int
-cpu_trapstat_conf(int cmd)
-{
-	int status;
-
-	switch (cmd) {
-	case CPU_TSTATCONF_INIT:
-	case CPU_TSTATCONF_FINI:
-	case CPU_TSTATCONF_ENABLE:
-	case CPU_TSTATCONF_DISABLE:
-		status = ENOTSUP;
-		break;
-	default:
-		status = EINVAL;
-		break;
-	}
-	return (status);
-}
-
-/*ARGSUSED*/
-void
-cpu_trapstat_data(void *buf, uint_t tstat_pgszs)
-{
-}
-
-#define	MAX_PAGE_COLORS		(1 << MAX_PAGE_COLORS_SHIFT)
-#define	MAX_PAGE_COLORS_SHIFT	(5)
-
-/*ARGSUSED*/
-uint_t
-page_pfn_2_color_cpu(pfn_t pfn, uchar_t szc, void *cookie)
-{
-	uint_t	color;
-
-	pfn = PFN_BASE(pfn, szc);
-	color = pfn ^ (pfn >> 20);
-	color = color ^ (color >> 10);
-	return ((color ^ (color >> 5)) & 0x1f);
-}
-
-/*
- * this macro rotates value "x" n steps to the right
- * mask consists of "n + m" bits
- * ASSERT(x < (1 << (n + m));
- */
-#define	ROTATE_BITS(x, n, m) (((x) >> (n)) | (((x) & ((1 << (n)) - 1)) << m))
-
-
-uchar_t clr2sqnclr_table[MMU_PAGE_SIZES][MAX_PAGE_COLORS];
-
-/*
- * on Rock, the hash cache index is calculated as follows:
- * pa[47:43]^pa[42:38]^pa[37:33]^pa[32:28]^
- * 	pa[27:23]^pa[22:18]^pa[17:13].pa[12:6]
- * That is, every 5 bits is folded and XORd together. Page sizes
- * differ by 3 bits, which is a factor of 8. This function computes
- * the next sequential color by rotating by 3 steps within a field of 5 bits
- * for every page size.
- */
-void
-clr2sqnclr_table_init()
-{
-	uchar_t szc;
-	uint_t  color;
-	uint_t  rot = 0;
-
-	for (szc = 0; szc < MMU_PAGE_SIZES; szc++) {
-		rot = (szc * 3) % MAX_PAGE_COLORS_SHIFT;
-		for (color = 0; color < MAX_PAGE_COLORS; color++) {
-			clr2sqnclr_table[szc][color] =
-			    ROTATE_BITS(color, rot,
-			    (MAX_PAGE_COLORS_SHIFT - rot));
-		}
-	}
-}
-
-uint_t
-clr2sqnclr(uchar_t szc, uint_t color)
-{
-	ASSERT(szc < MMU_PAGE_SIZES);
-	ASSERT(color < MAX_PAGE_COLORS);
-
-	return (clr2sqnclr_table[szc][color]);
-}
-
-#if MMU_PAGE_SIZES > 8
-#error MMU_PAGE_SIZES can be at most 8
-#endif
-
-uint_t
-page_get_nsz_color_mask_cpu(uchar_t szc, uint_t mask)
-{
-	static uint_t rock_color_masks[7] = {0x18, 6, 0x11, 0xc, 3, 0x18, 6};
-
-	ASSERT(szc < MMU_PAGE_SIZES - 1);
-	return (mask & rock_color_masks[szc]);
-}
-
-/*ARGSUSED*/
-uint_t
-page_get_nsz_color_cpu(uchar_t szc, uint_t color)
-{
-	return (color);
-}
-
-uint_t
-page_get_color_shift_cpu(uchar_t szc, uchar_t nszc)
-{
-	ASSERT(nszc >= szc);
-	return (0);
-}
-
-/*ARGSUSED*/
-pfn_t
-page_next_pfn_for_color_cpu(pfn_t pfn, uchar_t szc, uint_t color,
-    uint_t ceq_mask, uint_t color_mask, void *cookie)
-{
-	uint_t	sqn_ceq_mask = clr2sqnclr(szc, ceq_mask);
-	uint_t	sqn_color = clr2sqnclr(szc, color);
-	uint_t	pfn_shift = PNUM_SHIFT(szc);
-	pfn_t	cpfn, npfn, base_pfn = pfn & (~(pfn_t)color_mask << pfn_shift);
-	uint_t  base_sqn_color, nsqn_color, wrap = 0;
-
-	ASSERT((color & ~ceq_mask) == 0);
-
-	base_sqn_color = clr2sqnclr(szc,
-	    page_pfn_2_color_cpu(base_pfn, szc, NULL)) ^ sqn_color;
-	nsqn_color = base_sqn_color;
-
-	cpfn = (pfn_t)-1L;
-	do {
-		npfn = base_pfn | (nsqn_color << pfn_shift);
-
-		ASSERT(((page_pfn_2_color_cpu(npfn, szc, NULL) ^ color) &
-		    ceq_mask) == 0);
-
-		if (npfn > pfn && npfn < cpfn)
-			cpfn = npfn;
-
-		nsqn_color = INC_MASKED(nsqn_color, sqn_ceq_mask, color_mask);
-		if (nsqn_color != base_sqn_color)
-			continue;
-
-		if (cpfn != (pfn_t)-1L)
-			break;
-
-		base_pfn += ((pfn_t)color_mask + 1) << pfn_shift;
-
-		base_sqn_color = clr2sqnclr(szc,
-		    page_pfn_2_color_cpu(base_pfn, szc, NULL)) ^ sqn_color;
-		nsqn_color = base_sqn_color;
-		wrap++;
-
-	} while (nsqn_color != base_sqn_color || wrap < 2);
-
-	ASSERT(cpfn != (pfn_t)-1L);
-
-	return (cpfn);
-}
-
-void
-page_coloring_init_cpu()
-{
-	int i;
-	uint_t colors = 1 << MAX_PAGE_COLORS_SHIFT;
-
-	for (i = 0; i < mmu_page_sizes; i++) {
-		hw_page_array[i].hp_colors = colors;
-	}
-
-	/*
-	 * initialise conversion table between page colors and
-	 * sequential colors
-	 */
-	clr2sqnclr_table_init();
-
-}
-
-/*
- * group colorequiv colors on Rock by low order bits of the color first
- */
-void
-page_set_colorequiv_arr_cpu(void)
-{
-	static uint_t nequiv_shades_log2[MMU_PAGE_SIZES] = {0, 3, 0, 0, 0, 0};
-
-	if (colorequiv > 1) {
-		int i;
-		uint_t sv_a = lowbit(colorequiv) - 1;
-
-		if (sv_a > 15)
-			sv_a = 15;
-
-		for (i = 0; i < MMU_PAGE_SIZES; i++) {
-			uint_t colors;
-			uint_t a = sv_a;
-
-			if ((colors = hw_page_array[i].hp_colors) <= 1)
-				continue;
-			while ((colors >> a) == 0)
-				a--;
-			if (a > (colorequivszc[i] & 0xf) +
-			    (colorequivszc[i] >> 4)) {
-				if (a <= nequiv_shades_log2[i]) {
-					colorequivszc[i] = (uchar_t)a;
-				} else {
-					colorequivszc[i] =
-					    ((a - nequiv_shades_log2[i]) << 4) |
-					    nequiv_shades_log2[i];
-				}
-			}
-		}
-	}
-}
-
-/*
- * Calculate the page sizes needed to program Rock TLB page size register.
- * The invctx parameter is a flag which indicates that it will be necessary to
- * synchronize by invalidating contexts if the sfmmu pagesize register is
- * updated.
- */
-void
-mmu_set_pgsz_order(sfmmu_t *sfmmup, int invctx)
-{
-	uchar_t private_pgsz_mask;
-	uchar_t shared_pgsz_mask;
-	uint16_t pgsz_order_hv[MAX_PGSZ_SEARCH_ORDER];
-	uint64_t pgsz_order = 0;
-	uchar_t pgsz_map = 0;
-	int private_pgsz_num = 0;
-	int shared_pgsz_num = 0;
-	int tot_pgsz_num;
-	sf_scd_t *scdp;
-	int ret;
-	int i;
-
-	/*
-	 * The hatlock must be held in all cases except when the sfmmu is
-	 * being initialized by hat_alloc() or we are calling hat_dup(), in
-	 * these cases no other thread will be using the sfmmu yet.
-	 */
-
-	ASSERT(!invctx || sfmmu_hat_lock_held(sfmmup));
-
-	if (pgsz_search_on == 0)
-		return;
-
-	/* Always enable 8K private mappings */
-	private_pgsz_mask = 1 << TTE8K;
-
-	/* Enable 64K private mappings unless specifically disabled */
-	if (!(disable_large_pages & (1 << TTE64K))) {
-		private_pgsz_mask |= 1 << TTE64K;
-	}
-
-	/*
-	 * First check for ISM segments not in an SCD. The algorithm for
-	 * creating an SCD is to create one when an (D)ISM segment is attached
-	 * unless the process's shared segments are a subset of an SCD which
-	 * already exists.
-	 *
-	 * This situation also arises when we attach to more than the maximum
-	 * number of (D)ISM segments defined in the region bit map
-	 * (currently 64).
-	 *
-	 * We have set mmu_disable_ism_large_pages to force ISM segments to use
-	 * only 4M and 256M pages.
-	 */
-	if (SFMMU_FLAGS_ISSET(sfmmup, HAT_ISMNOTINSCD)) {
-		private_pgsz_mask |= 1 << TTE4M;
-		if (SFMMU_FLAGS_ISSET(sfmmup, HAT_256M_ISM)) {
-			private_pgsz_mask |= 1 << TTE256M;
-		}
-	}
-
-	/* Now check for regions not included in the SCD. */
-	if ((scdp = sfmmup->sfmmu_scdp) != NULL) {
-		SF_RGNMAP_EQUAL(&scdp->scd_hmeregion_map,
-		    &sfmmup->sfmmu_hmeregion_map,
-		    SFMMU_HMERGNMAP_WORDS, ret);
-		if (!ret) {
-			private_pgsz_mask |= sfmmup->sfmmu_rtteflags;
-		}
-	} else {
-		private_pgsz_mask |= sfmmup->sfmmu_rtteflags;
-	}
-
-	private_pgsz_mask |= sfmmup->sfmmu_tteflags;
-
-	/*
-	 * If the process is part of an SCD then enable 4M and 256M shared
-	 * page sizes - unless these are specifically disabled. If the 4M
-	 * shared page size is specifically disabled and the process has (D)ISM
-	 * segments attached or 4M regions then enable the private 4M page size.
-	 * If the 256M shared page size is disabled and the process has a 256M
-	 * page size region then enable the 256M private page size. The trap
-	 * handler looks at the shared page sizes enabled and if a shared
-	 * mapping does not correspond to one these sizes then it is treated
-	 * as a private mapping.
-	 *
-	 * The SCD includes the process's main text segment and (D)ISM segments
-	 * but we only enable the 4M shared page size so an 8K main text
-	 * segment will be treated as private due to the trap handler support.
-	 *
-	 * Note that for simplicity the ordering of the shared page sizes is
-	 * hard coded.
-	 */
-	shared_pgsz_mask = 0;
-	if (sfmmup->sfmmu_scdp != NULL) {
-		if (!(disable_shctx_large_pages  & (1 << TTE4M))) {
-			shared_pgsz_mask |= 1 << TTE4M;
-		} else if (sfmmup->sfmmu_iblk != NULL ||
-		    (sfmmup->sfmmu_rtteflags &
-		    (1 << TTE4M))) {
-			private_pgsz_mask |= 1 << TTE4M;
-		}
-
-		if (SFMMU_FLAGS_ISSET(sfmmup, HAT_256M_ISM) ||
-		    (sfmmup->sfmmu_rtteflags & (1 << TTE256M))) {
-			if (!(disable_shctx_large_pages  & (1 << TTE256M))) {
-				shared_pgsz_mask |= 1 << TTE256M;
-			} else {
-				private_pgsz_mask |= 1 << TTE256M;
-			}
-		}
-	}
-
-	set_pgsz_order(private_pgsz_mask, shared_pgsz_mask, &pgsz_order,
-	    &private_pgsz_num, &shared_pgsz_num, sfmmup);
-
-	encode_pgsz_order(pgsz_order, private_pgsz_num, shared_pgsz_num,
-	    pgsz_order_hv, &pgsz_map);
-
-	tot_pgsz_num = private_pgsz_num + shared_pgsz_num;
-	ASSERT(tot_pgsz_num <= MAX_PGSZ_SEARCH_ORDER);
-
-	for (i = 0; i < tot_pgsz_num; i++) {
-		if (pgsz_order_hv[i] != sfmmup->sfmmu_pgsz_order_hv[i])
-			break;
-	}
-
-	/*
-	 * If either we've reached the maximum number of page sizes or the
-	 * next element is 0, indicating the end of the list, then both the
-	 * entries and their number in both arrays is the same and we return.
-	 */
-	if ((i == tot_pgsz_num) && (i == MAX_PGSZ_SEARCH_ORDER ||
-	    sfmmup->sfmmu_pgsz_order_hv[i] == 0)) {
-		ASSERT(pgsz_map == sfmmup->sfmmu_pgsz_map);
-		return;
-	}
-
-	/* Otherwise update the sw page size register setting */
-	if (invctx) {
-		sfmmu_invalidate_ctx(sfmmup);
-	}
-
-	for (i = 0; i < tot_pgsz_num; i++) {
-		sfmmup->sfmmu_pgsz_order_hv[i] = pgsz_order_hv[i];
-	}
-
-	/* Disable next entry in search list to mark the end */
-	if (i < MAX_PGSZ_SEARCH_ORDER) {
-		sfmmup->sfmmu_pgsz_order_hv[i] = 0;
-	}
-	sfmmup->sfmmu_pgsz_map = pgsz_map;
-}
-
-/*
- * Encode the Rock TLB page size register.
- *
- * Input:
- *        pgsz_order, ordered list of page sizes, private and shared, the order
- *        between these depends on the pgsz_order_shared_first config variable.
- *        private_pgsz_num, number of private page sizes.
- *        shared_pgsz_num, number of shared page sizes.
- * Output:
- *        pgsz_order_hv contains the encoded pagesize search order for the hv
- *	  pgsz_map field contains the page size bit map used by the trap
- *        handler to prevent unauthorized shared page sizes being used.
- */
-
-static void
-encode_pgsz_order(uint64_t pgsz_order, int private_pgsz_num,
-    int shared_pgsz_num, uint16_t *pgsz_order_hv, uchar_t *pgsz_map)
-{
-	int i;
-	int tot_pgsz_num;
-	uint16_t pgsz_entry;
-	uint16_t first_entry_mask, second_entry_mask;
-	int	first_pgsz_num;
-
-	ASSERT(private_pgsz_num < MMU_PAGE_SIZES);
-	ASSERT(shared_pgsz_num < MMU_PAGE_SIZES);
-	ASSERT(private_pgsz_num > 0);
-
-	if (pgsz_order_shared_first) {
-		first_entry_mask = TLB_PGSZ_CONTEXT1_ENABLE;
-		second_entry_mask = TLB_PGSZ_ENABLE;
-		first_pgsz_num = shared_pgsz_num;
-	} else {
-		first_entry_mask = TLB_PGSZ_ENABLE;
-		second_entry_mask = TLB_PGSZ_CONTEXT1_ENABLE;
-		first_pgsz_num = private_pgsz_num;
-	}
-
-	tot_pgsz_num = private_pgsz_num + shared_pgsz_num;
-	for (i = 0; i < tot_pgsz_num; i++) {
-		pgsz_entry = pgsz_order & TTE_SZ_BITS;
-		if (i < first_pgsz_num) {
-			if (pgsz_order_shared_first) {
-				*pgsz_map |= (1 << pgsz_entry);
-			}
-			pgsz_entry |= first_entry_mask;
-		} else {
-			if (!pgsz_order_shared_first) {
-				*pgsz_map |= (1 << pgsz_entry);
-			}
-			pgsz_entry |= second_entry_mask;
-		}
-		pgsz_order >>= 4;
-		pgsz_order_hv[i] = pgsz_entry;
-	}
-}
-
-/*
- * The function returns the mmu-specific values for the
- * hat's disable_large_pages, disable_ism_large_pages, and
- * disable_auto_data_large_pages and
- * disable_text_data_large_pages variables.
- */
-uint_t
-mmu_large_pages_disabled(uint_t flag)
-{
-	uint_t pages_disable = 0;
-
-	if (flag == HAT_LOAD) {
-		pages_disable =  mmu_disable_large_pages;
-	} else if (flag == HAT_LOAD_SHARE) {
-		pages_disable = mmu_disable_ism_large_pages;
-	} else if (flag == HAT_AUTO_DATA) {
-		pages_disable = mmu_disable_auto_data_large_pages;
-	} else if (flag == HAT_AUTO_TEXT) {
-		pages_disable = mmu_disable_auto_text_large_pages;
-	}
-	return (pages_disable);
-}
-
-/*
- * Uses private and shared page size bitmaps to produce an ordered list
- * of page sizes and counts to be passed to encode_pgsz_order().
- *
- * Input:
- *        private_pgsz_mask, bit map of private page sizes.
- *        shared_pgsz_mask,  bit map of private page sizes.
- *	  sfmmup, pointer to hat structure.
- *
- * Output:
- *        pgsz_order, ordered list of page sizes.
- *        private_pgsz_num, number of private page sizes in pgsz_order.
- *        shared_pgsz_num, number of shared page sizes in pgsz_order.
- */
-static void
-set_pgsz_order(uchar_t private_pgsz_mask, uchar_t shared_pgsz_mask,
-    uint64_t *pgsz_order, int *private_pgsz_num, int *shared_pgsz_num,
-    sfmmu_t *sfmmup)
-{
-	int64_t sortcnt[MMU_PAGE_SIZES];
-	int8_t tmp_pgsz[MMU_PAGE_SIZES];
-	ulong_t tmp;
-	uint8_t i, j, max;
-
-	*private_pgsz_num = 0;
-	*shared_pgsz_num = 0;
-	*pgsz_order = 0;
-
-	/* Sort pages by area mapped */
-	for (i = 0; i < mmu_page_sizes; i++) {
-		tmp = sfmmup->sfmmu_ttecnt[i] + sfmmup->sfmmu_ismttecnt[i];
-		sortcnt[i] = tmp << TTE_PAGE_SHIFT(i);
-	}
-
-	for (j = 0; j < mmu_page_sizes; j++) {
-		for (i = mmu_page_sizes - 1, max = 0; i > 0; i--) {
-			if (sortcnt[i] > sortcnt[max])
-				max = i;
-		}
-		tmp_pgsz[j] = max;
-		sortcnt[max] = -1;
-	}
-
-	/* Add shared page sizes to page order if these come first */
-	if (pgsz_order_shared_first) {
-		if (shared_pgsz_mask & (1 << TTE256M)) {
-			*pgsz_order =  TTE256M;
-			(*shared_pgsz_num)++;
-		}
-		if (shared_pgsz_mask & (1 << TTE4M)) {
-			*pgsz_order |= (TTE4M << (*shared_pgsz_num * 4));
-			(*shared_pgsz_num)++;
-		}
-	}
-
-
-	/* Add private page sizes to page order */
-	for (i = 0; i < mmu_page_sizes; i++) {
-		if (private_pgsz_mask & (1 << tmp_pgsz[i])) {
-			*pgsz_order |= (tmp_pgsz[i] <<
-			    ((*private_pgsz_num + *shared_pgsz_num) * 4));
-			(*private_pgsz_num)++;
-		}
-	}
-
-	/* Add shared page sizes to page order if these come last */
-	if (!pgsz_order_shared_first) {
-		if (shared_pgsz_mask & (1 << TTE256M)) {
-			*pgsz_order |=  (TTE256M <<
-			    ((*private_pgsz_num + *shared_pgsz_num) * 4));
-			(*shared_pgsz_num)++;
-		}
-		if (shared_pgsz_mask & (1 << TTE4M)) {
-			*pgsz_order |= (TTE4M <<
-			    ((*private_pgsz_num + *shared_pgsz_num) * 4));
-			(*shared_pgsz_num)++;
-		}
-	}
-
-	ASSERT(*pgsz_order);
-	ASSERT(*private_pgsz_num);
-	ASSERT((*private_pgsz_num + *shared_pgsz_num)
-	    <= MAX_PGSZ_SEARCH_ORDER);
-}
-
-/*
- * This routine is called without holding the hat lock to determine
- * whether the process's optimal page size order has changed significantly
- * since the page size register was last set. If it has changed we get the
- * hat lock and call mmu_set_pgsz_order() to update the effective pagesize
- * order.
- */
-void
-mmu_check_page_sizes(sfmmu_t *sfmmup, uint64_t *ttecnt)
-{
-	int64_t sortcnt[MMU_PAGE_SIZES];
-	int8_t tmp_pgsz[MMU_PAGE_SIZES];
-	ulong_t tmp;
-	int8_t i, j, max;
-	uint_t pgsz;
-	uint16_t *pgsz_order_hv;
-	int page_order_changed;
-	hatlock_t *hatlockp;
-	int pgsz_count = 0;
-
-	ASSERT(!sfmmu_hat_lock_held(sfmmup));
-
-	if (pgsz_search_on == 0)
-		return;
-
-	/*
-	 * Check if ttecnt has changed significantly, since the last time we
-	 * were called. If the shared page sizes have changed then this is
-	 * handled by mmu_set_pgsz_order() being called directly when we join
-	 * the SCD.
-	 */
-	for (i = 0; i < mmu_page_sizes; i++) {
-		if (ttecnt[i] > (sfmmup->sfmmu_mmuttecnt[i] << 1) ||
-		    ttecnt[i] < (sfmmup->sfmmu_mmuttecnt[i] >> 1))
-			break;
-	}
-
-	if (i == mmu_page_sizes) {
-		return;
-	}
-
-	/* Sort pages by area mapped */
-	for (i = 0; i < mmu_page_sizes; i++) {
-		tmp = ttecnt[i];
-		sortcnt[i] = tmp << TTE_PAGE_SHIFT(i);
-	}
-
-	for (j = 0; j < mmu_page_sizes; j++) {
-		for (i = mmu_page_sizes - 1, max = 0; i > 0; i--) {
-			if (sortcnt[i] > sortcnt[max])
-				max = i;
-		}
-		tmp_pgsz[j] = max;
-		sortcnt[max] = -1;
-	}
-
-	/*
-	 * Check if the order of the private page sizes has changed. We call
-	 * mmu_set_pgsz_order() directly if additional page sizes are used,
-	 * so we can assume that the number of entries is unchanged.
-	 */
-	pgsz_order_hv = sfmmup->sfmmu_pgsz_order_hv;
-	if (pgsz_order_shared_first) {
-		/* skip over shared pgsz entries */
-		while ((pgsz_order_hv[pgsz_count] & TLB_PGSZ_CONTEXT1_ENABLE) ==
-		    TLB_PGSZ_CONTEXT1_ENABLE) {
-			pgsz_count++;
-		}
-	}
-
-	i = 0;
-	page_order_changed = 0;
-	while ((pgsz_order_hv[pgsz_count] & TLB_PGSZ_ENABLE) &&
-	    !(pgsz_order_hv[pgsz_count] & TLB_PGSZ_CONTEXT1) &&
-	    (pgsz_count < MAX_PGSZ_SEARCH_ORDER)) {
-		pgsz = (pgsz_order_hv[pgsz_count] & TTE_SZ_BITS);
-		ASSERT(pgsz < MMU_PAGE_SIZES);
-
-		if (pgsz != tmp_pgsz[i]) {
-			page_order_changed = 1;
-			break;
-		}
-		pgsz_count++;
-		i++;
-	}
-
-	if (page_order_changed) {
-		hatlockp = sfmmu_hat_enter(sfmmup);
-		/* Save old values of ttecnt */
-		for (i = 0; i < mmu_page_sizes; i++) {
-			sfmmup->sfmmu_mmuttecnt[i] = ttecnt[i];
-		}
-		mmu_set_pgsz_order(sfmmup, 1);
-		sfmmu_hat_exit(hatlockp);
-	}
-}
-
-/*
- * If the mmu extension API is supported and pgsz_search_on is set,
- * patch out the instruction to branch over the hypervisor call in
- * sfmmu_load_mmustate().
- */
-void
-mmu_enable_pgsz_search()
-{
-	if ((hsvc_mmu_ext_available == B_TRUE) && pgsz_search_on) {
-		/* patch in hcall to set pgsz order */
-		sfmmu_patch_pgsz_reg();
-	}
-}
--- a/usr/src/uts/sun4v/cpu/rock_asm.s	Wed Aug 05 18:08:09 2009 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,486 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License (the "License").
- * You may not use this file except in compliance with the License.
- *
- * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
- * or http://www.opensolaris.org/os/licensing.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information: Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- */
-
-/*
- * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
- * Use is subject to license terms.
- */
-
-#include <sys/asm_linkage.h>
-#include <sys/hypervisor_api.h>		/* For FAST_TRAP */
-#include <sys/rock_hypervisor_api.h>
-#include <sys/sun4asi.h>	/* ASI_BLK_P */
-#include <sys/machthread.h>	/* THREAD_REG */
-#include <sys/fsr.h>		/* FPRS_FEF, FPRS_DU */
-#include <vm/hat_sfmmu.h>	/* TSBTAG_INVALID */
-
-#if defined(lint)
-#include <sys/types.h>
-
-void
-cpu_smt_pause(void)
-{}
-
-void
-fp_zero(void)
-{}
-
-/*ARGSUSED*/
-uint64_t
-hv_rk_perf_count_init(uint64_t counter)
-{ return (0); }
-
-/*ARGSUSED*/
-uint64_t
-hv_rk_perf_count_release(uint64_t counter)
-{ return (0); }
-
-/*ARGSUSED*/
-uint64_t
-hv_rk_perf_count_set(uint64_t counter, uint64_t value)
-{ return (0); }
-
-/*ARGSUSED*/
-uint64_t
-hv_rk_perf_count_get(uint64_t counter, uint64_t *value)
-{ return (0); }
-
-/*ARGSUSED*/
-uint64_t
-hv_rk_perf_count_start(uint64_t counter, uint64_t value)
-{ return (0); }
-
-/*ARGSUSED*/
-uint64_t
-hv_rk_perf_count_overflow(uint64_t counter, uint64_t *ovf_cnt)
-{ return (0); }
-
-/*ARGSUSED*/
-uint64_t
-hv_rk_perf_count_stop(uint64_t counter)
-{ return (0); }
-
-/*ARGSUSED*/
-uint64_t
-hv_rk_perf_sample_init(uint64_t sampler, uint64_t ringbuf_pa)
-{ return (0); }
-
-/*ARGSUSED*/
-uint64_t
-hv_rk_perf_sample_release(uint64_t sampler)
-{ return (0); }
-
-/*ARGSUSED*/
-uint64_t
-hv_rk_perf_sample_start(uint64_t sampler, uint64_t freq,
-	 		uint64_t list_size, uint64_t valist_pa)
-{ return (0); }
-
-/*ARGSUSED*/
-uint64_t
-hv_rk_perf_sample_config(uint64_t sampler, uint64_t reg_va, uint64_t reg_value)
-{ return (0); }
-
-/*ARGSUSED*/
-uint64_t
-hv_rk_perf_sample_pending(uint64_t sampler, uint64_t *pend_cnt)
-{ return (0); }
-
-/*ARGSUSED*/
-uint64_t
-hv_rk_perf_sample_stop(uint64_t sampler)
-{ return (0); }
-
-/*ARGSUSED*/
-void
-cpu_inv_tsb(caddr_t tsb_base, uint_t tsb_bytes)
-{}
-
-void
-cpu_atomic_delay(void)
-{}
-
-void
-rock_mutex_delay(void)
-{}
-#else	/* lint */
-
-/*
- * Called from various spin loops to prevent this strand from
- * stealing too many cycles from its sibling, who is presumably
- * doing useful work.
- *
- * With a 2.1 GHz clock, 100 membar #Halt instructions plus
- * the call/return overhead will take approximately 500 nanoseconds.
- * That is a suitable time for a PAUSE, as it is roughly equal to
- * two memory accesses.
- */
-	ENTRY_NP(cpu_smt_pause)
-	mov	10, %o0
-1:	membar	#Halt
-	membar	#Halt
-	membar	#Halt
-	membar	#Halt
-	membar	#Halt
-	membar	#Halt
-	membar	#Halt
-	membar	#Halt
-	membar	#Halt
-	subcc	%o0, 1, %o0
-	bg,pt	%xcc, 1b
-	membar	#Halt
-	retl
-	membar	#Halt
-	SET_SIZE(cpu_smt_pause)
-
-/*
- * fp_zero() - clear all fp data registers and the fsr
- */
-
-.global	fp_zero_zero
-.align 8
-fp_zero_zero:
-	.xword	0
-
-	ENTRY_NP(fp_zero)
-	sethi	%hi(fp_zero_zero), %o0
-	ldx	[%o0 + %lo(fp_zero_zero)], %fsr
-	movxtod %g0, %d0
-	fzero   %d2
-	movxtod %g0, %d4
-	fzero   %d6
-	movxtod %g0, %d8
-	fzero   %d10
-	movxtod %g0, %d12
-	fzero   %d14
-	movxtod %g0, %d16
-	fzero   %d18
-	movxtod %g0, %d20
-	fzero   %d22
-	movxtod %g0, %d24
-	fzero   %d26
-	movxtod %g0, %d28
-	fzero   %d30
-	movxtod %g0, %d32
-	fzero   %d34
-	movxtod %g0, %d36
-	fzero   %d38
-	movxtod %g0, %d40
-	fzero   %d42
-	movxtod %g0, %d44
-	fzero   %d46
-	movxtod %g0, %d48
-	fzero   %d50
-	movxtod %g0, %d52
-	fzero   %d54
-	movxtod %g0, %d56
-	fzero   %d58
-	movxtod %g0, %d60
-	retl
-	fzero   %d62
-	SET_SIZE(fp_zero)
-
-	/* hcalls for performance counters */
-
-	/*
-	 * uint64_t hv_rk_perf_count_init(uint64_t counter);
-	 */
-	ENTRY(hv_rk_perf_count_init)
-	mov	HV_RK_PERF_COUNT_INIT, %o5
-	ta	FAST_TRAP
-	retl
-	  nop
-	SET_SIZE(hv_rk_perf_count_init)
-
-	/*
-	 * uint64_t hv_rk_perf_count_release(uint64_t counter);
-	 */
-	ENTRY(hv_rk_perf_count_release)
-	mov	HV_RK_PERF_COUNT_RELEASE, %o5
-	ta	FAST_TRAP
-	retl
-	  nop
-	SET_SIZE(hv_rk_perf_count_release)
-
-	/*
-	 * uint64_t hv_rk_perf_count_set(uint64_t counter, uint64_t value)
-	 */
-	ENTRY(hv_rk_perf_count_set)
-	mov	HV_RK_PERF_COUNT_SET, %o5
-	ta	FAST_TRAP
-	retl
-	  nop
-	SET_SIZE(hv_rk_perf_count_set)
-
-	/*
-	 * uint64_t hv_rk_perf_count_get(uint64_t counter, uint64_t *value)
-	 */
-	ENTRY(hv_rk_perf_count_get)
-	mov	HV_RK_PERF_COUNT_GET, %o5
-	mov	%o1, %o2	! Save the address
-	ta	FAST_TRAP
-	retl
-	  stx	%o1, [%o2]	! Value is returned in %o1 by the HV
-	SET_SIZE(hv_rk_perf_count_get)
-
-	/*
-	 * uint64_t hv_rk_perf_count_start(uint64_t counter, uint64_t value)
-	 */
-	ENTRY(hv_rk_perf_count_start)
-	mov	HV_RK_PERF_COUNT_START, %o5
-	ta	FAST_TRAP
-	retl
-	  nop
-	SET_SIZE(hv_rk_perf_count_start)
-
-	/*
-	 * uint64_t hv_rk_perf_count_overflow(uint64_t counter,
-	 * 						uint64_t *ovf_cnt)
-	 */
-	ENTRY(hv_rk_perf_count_overflow)
-	mov	%o1, %o2
-	mov	HV_RK_PERF_COUNT_OVERFLOW, %o5
-	ta	FAST_TRAP
-	retl
-	  stx	%o1, [%o2]
-	SET_SIZE(hv_rk_perf_count_overflow)
-
-	/*
-	 * uint64_t hv_rk_perf_count_stop(uint64_t counter)
-	 */
-	ENTRY(hv_rk_perf_count_stop)
-	mov	HV_RK_PERF_COUNT_STOP, %o5
-	ta	FAST_TRAP
-	retl
-	  nop
-	SET_SIZE(hv_rk_perf_count_stop)
-
-	/*
-	 * uint64_t hv_rk_perf_sample_init(uint64_t counter,
-						uint64_t ringbuf_pa)
-	 */
-	ENTRY(hv_rk_perf_sample_init)
-	mov	HV_RK_PERF_SAMPLE_INIT, %o5
-	ta	FAST_TRAP
-	retl
-	  nop
-	SET_SIZE(hv_rk_perf_sample_init)
-
-	/*
-	 * uint64_t hv_rk_perf_sample_release(uint64_t counter)
-	 */
-	ENTRY(hv_rk_perf_sample_release)
-	mov	HV_RK_PERF_SAMPLE_RELEASE, %o5
-	ta	FAST_TRAP
-	retl
-	  nop
-	SET_SIZE(hv_rk_perf_sample_release)
-
-	/*
-	 * uint64_t hv_rk_perf_sample_config(uint64_t sampler, uint64_t reg_va,
-	 *					uint64_t reg_value)
-	 */
-	ENTRY(hv_rk_perf_sample_config)
-	mov	HV_RK_PERF_SAMPLE_CONFIG, %o5
-	ta	FAST_TRAP
-	retl
-	  nop
-	SET_SIZE(hv_rk_perf_sample_config)
-
-	/*
-	 * uint64_t hv_rk_perf_sample_start(uint64_t sampler, uint64_t freq,
-	 *			uint64_t list_size, uint64_t valist_pa)
-	 */
-	ENTRY(hv_rk_perf_sample_start)
-	mov	HV_RK_PERF_SAMPLE_START, %o5
-	ta	FAST_TRAP
-	retl
-	  nop
-	SET_SIZE(hv_rk_perf_sample_start)
-
-	/*
-	 * uint64_t hv_rk_perf_sample_pending(uint64_t sampler, 
-	 *					uint64_t *pend_cnt)
-	 */
-	ENTRY(hv_rk_perf_sample_pending)
-	mov	%o1, %o2
-	mov	HV_RK_PERF_SAMPLE_PENDING, %o5
-	ta	FAST_TRAP
-	retl
-	  stx	%o1, [%o2]
-	SET_SIZE(hv_rk_perf_sample_pending)
-
-	/*
-	 * uint64_t hv_rk_perf_sample_stop(uint64_t sampler)
-	 */
-	ENTRY(hv_rk_perf_sample_stop)
-	mov	HV_RK_PERF_SAMPLE_STOP, %o5
-	ta	FAST_TRAP
-	retl
-	  nop
-	SET_SIZE(hv_rk_perf_sample_stop)
-
-/*
- * Invalidate all of the entries within the TSB, by setting the inv bit
- * in the tte_tag field of each tsbe.
- *
- * We take advantage of the fact that the TSBs are page aligned and a
- * multiple of PAGESIZE to use ASI_BLK_INIT_xxx ASI.
- *
- * See TSB_LOCK_ENTRY and the miss handlers for how this works in practice
- * (in short, we set all bits in the upper word of the tag, and we give the
- * invalid bit precedence over other tag bits in both places).
- */
-
-#define	VIS_BLOCKSIZE	64
-#include "assym.h"	/* T_PREEMPT */
-
-	ENTRY(cpu_inv_tsb)
-
-	! Get space for aligned block of saved fp regs.
-	save	%sp, -SA(MINFRAME + 2*VIS_BLOCKSIZE), %sp
-
-	! kpreempt_disable();
-	ldsb	[THREAD_REG + T_PREEMPT], %l3
-	inc	%l3
-	stb	%l3, [THREAD_REG + T_PREEMPT]
-
-	! See if fpu was in use.  If it was, we need to save off the
-	! floating point registers to the stack.
-	rd	%fprs, %l0			! %l0 = cached copy of fprs
-	mov	%g0, %l2
-
-	btst	FPRS_FEF, %l0
-	bz,pt	%icc, 4f
-	nop
-
-	! If upper half fp registers are in use, save them as they will be
-	! used below.
-	btst	FPRS_DU, %l0
-	bz,pt	%icc, 4f
-	nop
-
-	! save in-use fpregs on stack
-
-	add	%fp, STACK_BIAS - 65, %l1	! get stack frame for fp regs
-	and	%l1, -VIS_BLOCKSIZE, %l1	! block align frame
-	stda	%d32, [%l1]ASI_BLK_P		! %l1 = addr of saved fp regs
-
-	! Set a flag saying fp regs are saved.
-	mov	1, %l2
-
-	! enable fp
-
-4:	membar	#StoreStore|#StoreLoad|#LoadStore
-	wr	%g0, FPRS_FEF|FPRS_DU, %fprs
-	wr	%g0, ASI_BLK_P, %asi
-
-	! load up FP registers with invalid TSB tag.
-	set	TSBTAG_INVALID, %l3
-	movxtod	%l3, %d32
-	movxtod	%l3, %d36
-	movxtod	%l3, %d40	! Invalidate context
-	movxtod	%l3, %d44
-	movxtod	%g0, %d34
-	movxtod	%g0, %d38
-	movxtod	%g0, %d42	! Zero in TTE
-	movxtod	%g0, %d46
-
-	ba,pt	%xcc, .cpu_inv_doblock
-	mov	(4*VIS_BLOCKSIZE), %i4	! we do 4 stda's each loop below
-
-.cpu_inv_blkstart:
-	stda	%d32, [%i0+128]%asi
-	stda	%d32, [%i0+64]%asi
-	stda	%d32, [%i0]%asi
-
-	add	%i0, %i4, %i0
-	sub	%i1, %i4, %i1
-
-.cpu_inv_doblock:
-	cmp	%i1, (4*VIS_BLOCKSIZE)	! check for completion
-	bgeu,a	%icc, .cpu_inv_blkstart
-	  stda	%d32, [%i0+192]%asi
-
-.cpu_inv_finish:
-	membar	#Sync
-	brz,a	%l2, .cpu_inv_finished
-	  wr	%l0, 0, %fprs		! restore fprs
-
-	! restore fpregs from stack
-	ldda    [%l1]ASI_BLK_P, %d32
-
-	membar	#Sync
-	wr	%l0, 0, %fprs		! restore fprs
-
-.cpu_inv_finished:
-	! kpreempt_enable();
-	ldsb	[THREAD_REG + T_PREEMPT], %l3
-	dec	%l3
-	stb	%l3, [THREAD_REG + T_PREEMPT]
-	ret
-	restore
-	SET_SIZE(cpu_inv_tsb)
-
-/*
- * This is CPU specific delay routine for atomic backoff.
- * It is used in case of Rock CPU. The rd instruction uses
- * less resources than casx on these CPUs.
- */
-	.align	32
-	ENTRY(cpu_atomic_delay)
-	rd	%ccr, %g0
-	rd	%ccr, %g0
-	retl
-	rd	%ccr, %g0
-	SET_SIZE(cpu_atomic_delay)
-
-/*
- * Delay to last ~100 nano seconds on a 2.1 GHz. Membars
- * should be linear and not in a loop to avoid impact
- * on the sibling strand (BR pipeline is shared by
- * two sibling strands).
- */
-	.align	64
-	ENTRY(rock_mutex_delay)
-	membar	#Halt
-	membar	#Halt
-	membar	#Halt
-	membar	#Halt
-	membar	#Halt
-	membar	#Halt
-	membar	#Halt
-	membar	#Halt
-	membar	#Halt
-	membar	#Halt
-	membar	#Halt
-	membar	#Halt
-	membar	#Halt
-	membar	#Halt
-	membar	#Halt
-	membar	#Halt
-	membar	#Halt
-	membar	#Halt
-	membar	#Halt
-	retl
-	membar	#Halt
-	SET_SIZE(rock_mutex_delay)
-#endif /* lint */
--- a/usr/src/uts/sun4v/cpu/rock_copy.s	Wed Aug 05 18:08:09 2009 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,4941 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License (the "License").
- * You may not use this file except in compliance with the License.
- *
- * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
- * or http://www.opensolaris.org/os/licensing.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information: Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- */
-
-/*
- * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
- * Use is subject to license terms.
- */
-
-#include <sys/param.h>
-#include <sys/errno.h>
-#include <sys/asm_linkage.h>
-#include <sys/vtrace.h>
-#include <sys/machthread.h>
-#include <sys/clock.h>
-#include <sys/asi.h>
-#include <sys/fsr.h>
-#include <sys/privregs.h>
-#include <sys/rockasi.h>
-
-#if !defined(lint)
-#include "assym.h"
-#endif	/* lint */
-
-/*
- * VIS_COPY_THRESHOLD indicates the minimum number of bytes needed
- * to "break even" using FP/VIS-accelerated memory operations.
- * The FPBLK code assumes a minimum number of bytes are available
- * to be moved on entry.  Check that code carefully before 
- * reducing VIS_COPY_THRESHOLD below 256.
- */
-/*
- * This shadows sys/machsystm.h which can't be included due to
- * the lack of _ASM guards in include files it references.
- * Change it here, change it there.
- */
-#define VIS_COPY_THRESHOLD 256
-
-/*
- * TEST for very short copies
- * Be aware that the maximum unroll for the short unaligned case
- * is SHORTCOPY+1
- */
-#define SHORTCOPY 3
-#define CHKSIZE  39
-
-/*
- * Indicates that we're to trampoline to the error handler.
- * Entry points bcopy, copyin_noerr, and copyout_noerr use this flag.
- * kcopy, copyout, xcopyout, copyin, and xcopyin do not set this flag.
- */
-#define	FPUSED_FLAG	1
-#define	TRAMP_FLAG	2
-#define	KCOPY_FLAG	4
-#define	FPSAVED_FLAG	8
-#define	MASK_FLAGS	0xf
-
-/*
- * LOFAULT_SET : Flag set by kzero and kcopy to indicate that t_lofault
- * handler was set
- */
-#define	LOFAULT_SET 2
-
-/*
- * Number of outstanding prefetches.
- * Testing with 1200 MHz Cheetah+ and Jaguar gives best results with
- * two prefetches, one with a reach of 8*BLOCK_SIZE+8 and one with a
- * reach of 5*BLOCK_SIZE.  The double prefetch gives an typical improvement
- * of 5% for large copies as compared to a single prefetch.  The reason
- * for the improvement is that with Cheetah and Jaguar, some prefetches
- * are dropped due to the prefetch queue being full.  The second prefetch
- * reduces the number of cache lines that are dropped. 
- * Do not remove the double prefetch or change either FIRST_PREFETCH
- * or SECOND_PREFETCH without extensive performance tests to prove
- * there is no loss of performance.
- * XXX: For ROCK, the prefetch depth can be upto 16, but sticking
- *      with 8 as of now pending more clarity on this.
- */
-#define	FIRST_PREFETCH	8
-#define	SECOND_PREFETCH	5
-
-#define	VIS_BLOCKSIZE		64
-
-/*
- * Size of stack frame in order to accomodate a 64-byte aligned
- * floating-point register save area and 2 64-bit temp locations.
- * All copy functions use two quadrants of fp registers; to assure a
- * block-aligned two block buffer in which to save we must reserve
- * three blocks on stack.  Not all functions preserve %pfrs on stack
- * or need to preserve %gsr but we use HWCOPYFRAMESIZE for all.
- *
- *    _______________________________________ <-- %fp + STACK_BIAS
- *    | We may need to preserve 2 quadrants |
- *    | of fp regs, but since we do so with |
- *    | BST/BLD we need room in which to    |
- *    | align to VIS_BLOCKSIZE bytes.  So   |
- *    | this area is 3 * VIS_BLOCKSIZE.     | <--  - SAVED_FPREGS_OFFSET
- *    |-------------------------------------|
- *    | 8 bytes to save %fprs               | <--  - SAVED_FPRS_OFFSET
- *    |-------------------------------------|
- *    | 8 bytes to save %gsr                | <--  - SAVED_GSR_OFFSET
- *    ---------------------------------------
- */
-#define	HWCOPYFRAMESIZE		((VIS_BLOCKSIZE * (2 + 1)) + (2 * 8))
-#define SAVED_FPREGS_OFFSET	(VIS_BLOCKSIZE * 3)
-#define SAVED_FPREGS_ADJUST	((VIS_BLOCKSIZE * 2) - 1)
-#define	SAVED_FPRS_OFFSET	(SAVED_FPREGS_OFFSET + 8)
-#define	SAVED_GSR_OFFSET	(SAVED_FPRS_OFFSET + 8)
-
-#define	ICACHE_LINE_SIZE	64
-
-#define	MEDIUM_MAX	255
-#define	MED_WMAX	256 /* max copy for medium word-aligned case */
-#define	MED_MAX		256 /* max copy for medium longword-aligned case */
-
-#define	PAGE_MASK	8191
-#define	ST_CACHE_ALIGN	127
-
-#ifndef	BSTORE_SIZE
-#define	BSTORE_SIZE	256	/* min copy size for block store */
-#endif
-
-/*
- * Common macros used by the various versions of the block copy
- * routines in this file.
- */
-
-/*
- * In FP copies if we do not have preserved data to restore over
- * the fp regs we used then we must zero those regs to avoid
- * exposing portions of the data to later threads (data security).
- *
- * Copy functions use either quadrants 1 and 3 or 2 and 4.
- *
- * FZEROQ3Q4: Zero quadrants 3 and 4, ie %d32 - %d46 and %d48 - %d62
- *
- */
-#define	FZEROQ3Q4		\
-	movxtod	%g0, %d32	;\
-	movxtod	%g0, %d34	;\
-	fsrc1	%d0, %d36	;\
-	fsrc1	%d0, %d38	;\
-	fsrc1	%d0, %d40	;\
-	fsrc1	%d0, %d42	;\
-	fsrc1	%d0, %d44	;\
-	fsrc1	%d0, %d46	;\
-	fsrc1	%d0, %d48	;\
-	fsrc1	%d0, %d50	;\
-	fsrc1	%d0, %d52	;\
-	fsrc1	%d0, %d54	;\
-	fsrc1	%d0, %d56	;\
-	fsrc1	%d0, %d58	;\
-	fsrc1	%d0, %d60	;\
-	fsrc1	%d0, %d62
-
-
-/*
- * Macros to save and restore quadrants 1 and 3 or 2 and 4 to/from the stack.
- * Used to save and restore in-use fp registers when we want to use FP
- * and find fp already in use and copy size still large enough to justify
- * the additional overhead of this save and restore.
- *
- * A membar #Sync is needed before save to sync fp ops initiated before
- * the call to the copy function (by whoever has fp in use); for example
- * an earlier block load to the quadrant we are about to save may still be
- * "in flight".  A membar #Sync is required at the end of the save to
- * sync our block store (the copy code is about to begin ldd's to the
- * first quadrant).  Note, however, that since Cheetah pipeline block load
- * is blocking we can omit the initial membar before saving fp state (they're
- * commented below in case of future porting to a chip that does not block
- * on block load).
- *
- * Similarly: a membar #Sync before restore allows the block stores of
- * the copy operation to complete before we fill the quadrants with their
- * original data, and a membar #Sync after restore lets the block loads
- * of the restore complete before we return to whoever has the fp regs
- * in use.  To avoid repeated membar #Sync we make it the responsibility
- * of the copy code to membar #Sync immediately after copy is complete
- * and before using the BLD_*_FROMSTACK macro.
- */
-#if !defined(lint)
-#define BST_FPQ3Q4_TOSTACK(tmp1)				\
-	/* membar #Sync	*/					;\
-	add	%fp, STACK_BIAS - SAVED_FPREGS_ADJUST, tmp1	;\
-	and	tmp1, -VIS_BLOCKSIZE, tmp1 /* block align */	;\
-	stda	%d32, [tmp1]ASI_BLK_P				;\
-	add	tmp1, VIS_BLOCKSIZE, tmp1			;\
-	stda	%d48, [tmp1]ASI_BLK_P				;\
-	membar	#Sync
-
-#define	BLD_FPQ3Q4_FROMSTACK(tmp1)				\
-	/* membar #Sync - provided at copy completion */	;\
-	add	%fp, STACK_BIAS - SAVED_FPREGS_ADJUST, tmp1	;\
-	and	tmp1, -VIS_BLOCKSIZE, tmp1 /* block align */	;\
-	ldda	[tmp1]ASI_BLK_P, %d32				;\
-	add	tmp1, VIS_BLOCKSIZE, tmp1			;\
-	ldda	[tmp1]ASI_BLK_P, %d48				;\
-	membar	#Sync
-#endif
-
-/*
- * FP_NOMIGRATE and FP_ALLOWMIGRATE.  Prevent migration (or, stronger,
- * prevent preemption if there is no t_lwp to save FP state to on context
- * switch) before commencing a FP copy, and reallow it on completion or
- * in error trampoline paths when we were using FP copy.
- *
- * Both macros may call other functions, so be aware that all outputs are
- * forfeit after using these macros.  For this reason we do not pass registers
- * to use - we just use any outputs we want.
- *
- * For fpRAS we need to perform the fpRAS mechanism test on the same
- * CPU as we use for the copy operation, both so that we validate the
- * CPU we perform the copy on and so that we know which CPU failed
- * if a failure is detected.  Hence we need to be bound to "our" CPU.
- * This could be achieved through disabling preemption (and we have do it that
- * way for threads with no t_lwp) but for larger copies this may hold
- * higher priority threads off of cpu for too long (eg, realtime).  So we
- * make use of the lightweight t_nomigrate mechanism where we can (ie, when
- * we have a t_lwp).
- *
- * Pseudo code:
- *
- * FP_NOMIGRATE:
- *
- * if (curthread->t_lwp) {
- *	thread_nomigrate();
- * } else {
- *	kpreempt_disable();
- * }
- *
- * FP_ALLOWMIGRATE:
- *
- * if (curthread->t_lwp) {
- *	thread_allowmigrate();
- * } else {
- *	kpreempt_enable();
- * }
- */
-
-#define	FP_NOMIGRATE(label1, label2)				\
-	ldn	[THREAD_REG + T_LWP], %o0			;\
-	brz,a,pn %o0, label1/**/f				;\
-	  ldsb	[THREAD_REG + T_PREEMPT], %o1			;\
-	call	thread_nomigrate				;\
-	  nop							;\
-	ba	label2/**/f					;\
-	  nop							;\
-label1:								;\
-	inc	%o1						;\
-	stb	%o1, [THREAD_REG + T_PREEMPT]			;\
-label2:
-
-#define	FP_ALLOWMIGRATE(label1, label2)			\
-	ldn	[THREAD_REG + T_LWP], %o0			;\
-	brz,a,pn %o0, label1/**/f				;\
-	  ldsb	[THREAD_REG + T_PREEMPT], %o1			;\
-	call thread_allowmigrate				;\
-	  nop							;\
-	ba	label2/**/f					;\
-	  nop							;\
-label1:								;\
-	dec	%o1						;\
-	brnz,pn	%o1, label2/**/f				;\
-	  stb	%o1, [THREAD_REG + T_PREEMPT]			;\
-	ldn	[THREAD_REG + T_CPU], %o0			;\
-	ldub	[%o0 + CPU_KPRUNRUN], %o0			;\
-	brz,pt	%o0, label2/**/f				;\
-	  nop							;\
-	call	kpreempt					;\
-	  rdpr	%pil, %o0					;\
-label2:
-
-/*
- * Copy a block of storage, returning an error code if `from' or
- * `to' takes a kernel pagefault which cannot be resolved.
- * Returns errno value on pagefault error, 0 if all ok
- */
-
-#if defined(lint)
-
-/* ARGSUSED */
-int
-kcopy(const void *from, void *to, size_t count)
-{ return(0); }
-
-#else	/* lint */
-
-	.seg	".text"
-	.align	4
-
-	ENTRY(kcopy)
-
-	sethi	%hi(.copyerr_no_fp_used), %o4
-	or	%o4, %lo(.copyerr_fp_used), %o4
-	stn	%o4, [THREAD_REG + T_LOFAULT]	! set t_lofault
-	ldn	[THREAD_REG + T_LOFAULT], %o5	! save existing handler
-	or	%o5, KCOPY_FLAG, %o5
-	membar	#Sync				! sync error barrier
-	ba,pt	%ncc, .forcpy			! common code
-	 nop
-
-
-/*
- * We got here because of a fault in .copyerr_fp_used.  We can't safely
- * restore fp state, so we panic.
- */
-fp_panic_msg:
-	.asciz	"Unable to restore fp state after copy operation"
-
-	.align	4
-.copyerr2:
-	set	fp_panic_msg, %o0
-	call	panic
-	  nop
-
-/*
- * We got here because of a fault during a small kcopy or bcopy.
- * No floating point registers were used in this copy.
- * Errno value is in %g1.
- */
-.copyerr_no_fp_used:
-	btst	TRAMP_FLAG, %o5
-	membar	#Sync
-	andn	%o5, TRAMP_FLAG, %o5
-	bnz,pn	%ncc, 3f
-	  stn	%o5, [THREAD_REG + T_LOFAULT]	! restore old t_lofault
-	retl
-	  mov	%g1, %o0
-3:
-	jmp	%o5				! goto real handler
-	  mov	%g0, %o0			! 
-
-/*
- * We got here because of a fault during a small kcopy or bcopy.
- * floating point registers were used in this copy.
- * Errno value is in %g1.
- */
-.copyerr_fp_used:
-	set	.copyerr2, %l0
-	membar	#Sync				! sync error barrier
-	stn	%l0, [THREAD_REG + T_LOFAULT]	! set t_lofault
-	btst	FPUSED_FLAG, %l6
-	bz	%ncc, 1f
-	  and	%l6, TRAMP_FLAG, %l0		! copy trampoline flag to %l0
-
-	ldx	[%fp + STACK_BIAS - SAVED_GSR_OFFSET], %o2	! restore gsr
-	wr	%o2, 0, %gsr
-
-	ld	[%fp + STACK_BIAS - SAVED_FPRS_OFFSET], %o3
-	! No need to restore regs if they were not saved
-	btst	FPSAVED_FLAG, %l6
-	bz	%ncc, 4f
-	  nop
-
-	BLD_FPQ3Q4_FROMSTACK(%o2)
-
-	ba,pt	%ncc, 1f
-	  wr	%o3, 0, %fprs		! restore fprs
-
-4:
-	FZEROQ3Q4
-	wr	%o3, 0, %fprs		! restore fprs
-
-	!
-	! Need to cater for the different expectations of kcopy
-	! and bcopy. kcopy will *always* set a t_lofault handler
-	! If it fires, we're expected to just return the error code
-	! and *not* to invoke any existing error handler. As far as
-	! bcopy is concerned, we only set t_lofault if there was an
-	! existing lofault handler. In that case we're expected to
-	! invoke the previously existing handler after resetting the
-	! t_lofault value.
-	!
-1:
-	andn	%l6, MASK_FLAGS, %l6		! turn trampoline flag off
-	membar	#Sync				! sync error barrier
-	stn	%l6, [THREAD_REG + T_LOFAULT]	! restore old t_lofault
-	FP_ALLOWMIGRATE(5, 6)
-
-	btst	TRAMP_FLAG, %l0
-	bnz,pn	%ncc, 3f
-	  nop
-	ret
-	  restore	%g1, 0, %o0
-
-3:
-	!
-	! We're here via bcopy. There *must* have been an error handler
-	! in place otherwise we would have died a nasty death already.
-	!
-	jmp	%l6				! goto real handler
-	  restore	%g0, 0, %o0		! dispose of copy window
-
-	SET_SIZE(kcopy)
-#endif	/* lint */
-
-#define	ALIGN8(X)	(((X) + 7) & ~7)
-#define	ICACHE_LINE_SIZE	64
-#define	PF_FAR		2048
-#define	PF_NEAR		1024
-#define	SMALL_MAX	39
-/*
- * Copy a block of storage - must not overlap (from + len <= to).
- * Registers: l6 - saved t_lofault
- * (for short copies, o5 - saved t_lofault)
- *
- * Copy a page of memory.
- * Assumes double word alignment and a count >= 256.
- */
-#if defined(lint)
-
-/* ARGSUSED */
-void
-bcopy(const void *from, void *to, size_t count)
-{}
-#else	/* lint */
-
-	.align ICACHE_LINE_SIZE
-	ENTRY(bcopy)
-	ENTRY(__align_cpy_1)
-	ldn	[THREAD_REG + T_LOFAULT], %o5	! save t_lofault
-	tst	%o5
-	bz,pt	%icc, .forcpy
-	  nop
-	sethi	%hi(.copyerr_no_fp_used), %o4
-	or	%o4, %lo(.copyerr_no_fp_used), %o4
-	membar	#Sync				! sync error barrier
-	stn	%o4, [THREAD_REG + T_LOFAULT]	! install new vector
-	or	%o5, TRAMP_FLAG, %o5		! error should trampoline
-.forcpy:
-	cmp	%o2, SMALL_MAX		! check for not small case
-	bgu,pn	%ncc, .medium_bcopy		! go to larger cases
-	cmp	%o2, SHORTCOPY		! check for really short case
-	ble,pt	%ncc, .smallleft_bcopy	!
-	or	%o1, %o0, %o3		! prepare alignment check
-	andcc	%o3, 0x3, %g0		! test for alignment
-	bz,pt	%ncc, .smallword_bcopy	! branch to word aligned case
-	sub	%o2, 3, %o2		! adjust count to allow cc zero test
-.smallnotalign4_bcopy:
-	ldub	[%o0], %o3		! read byte
-	subcc	%o2, 4, %o2		! reduce count by 4
-	stb	%o3, [%o1]		! write byte
-	ldub	[%o0+1], %o3		! repeat for a total of 4 bytes
-	add	%o0, 4, %o0		! advance SRC by 4
-	stb	%o3, [%o1+1]
-	ldub	[%o0-2], %o3
-	add	%o1, 4, %o1		! advance DST by 4
-	stb	%o3, [%o1-2]
-	ldub	[%o0-1], %o3
-	bgu,pt	%ncc, .smallnotalign4_bcopy	! loop til 3 or fewer bytes remain
-	stb	%o3, [%o1-1]
-	add	%o2, 3, %o2		! restore count
-.smallleft_bcopy:
-	tst	%o2
-	bz,pt	%ncc, .smallexit_bcopy
-	nop
-.smallleft3_bcopy:				! 1, 2, or 3 bytes remain
-	ldub	[%o0], %o3		! load one byte
-	deccc	%o2			! reduce count for cc test
-	bz,pt	%ncc, .smallexit_bcopy
-	stb	%o3, [%o1]		! store one byte
-	ldub	[%o0+1], %o3		! load second byte
-	deccc	%o2
-	bz,pt	%ncc, .smallexit_bcopy
-	stb	%o3, [%o1+1]		! store second byte
-	ldub	[%o0+2], %o3		! load third byte
-	stb	%o3, [%o1+2]		! store third byte
-	membar	#Sync				! sync error barrier
-	andn	%o5, TRAMP_FLAG, %o5
-	stn	%o5, [THREAD_REG + T_LOFAULT]	! restore old t_lofault
-	retl
-	clr	%o0
-
-	.align	16
-	nop				! affects loop icache alignment
-.smallwords_bcopy:
-	lduw	[%o0], %o3		! read word
-.smallwordx_bcopy:
-	subcc	%o2, 8, %o2		! update count
-	stw	%o3, [%o1]		! write word
-	add	%o0, 8, %o0		! update SRC
-	lduw	[%o0-4], %o3		! read word
-	add	%o1, 8, %o1		! update DST
-	bgu,pt	%ncc, .smallwords_bcopy	! loop until done
-	stw	%o3, [%o1-4]		! write word
-	addcc	%o2, 7, %o2		! restore count
-	bz,pt	%ncc, .smallexit_bcopy	! check for completion
-	nop
-	cmp	%o2, 4			! check for 4 or more bytes left
-	blt	.smallleft3_bcopy		! if not, go to finish up
-	nop
-	lduw	[%o0], %o3
-	add	%o0, 4, %o0
-	subcc	%o2, 4, %o2
-	stw	%o3, [%o1]
-	add	%o1, 4, %o1
-	bnz,pt	%ncc, .smallleft3_bcopy
-	nop
-	membar	#Sync				! sync error barrier
-	andn	%o5, TRAMP_FLAG, %o5
-	stn	%o5, [THREAD_REG + T_LOFAULT]	! restore old t_lofault
-	retl
-	clr	%o0
-
-.smallword_bcopy:
-	subcc	%o2, 4, %o2		! update count
-	bgu,pt	%ncc, .smallwordx_bcopy
-	lduw	[%o0], %o3		! read word
-	addcc	%o2, 3, %o2		! restore count
-	bz,pt	%ncc, .smallexit_bcopy
-	stw	%o3, [%o1]		! write word
-	deccc	%o2			! reduce count for cc test
-	ldub	[%o0+4], %o3		! load one byte
-	bz,pt	%ncc, .smallexit_bcopy
-	stb	%o3, [%o1+4]		! store one byte
-	ldub	[%o0+5], %o3		! load second byte
-	deccc	%o2
-	bz,pt	%ncc, .smallexit_bcopy
-	stb	%o3, [%o1+5]		! store second byte
-	ldub	[%o0+6], %o3		! load third byte
-	stb	%o3, [%o1+6]		! store third byte
-.smallexit_bcopy:
-	membar	#Sync				! sync error barrier
-	andn	%o5, TRAMP_FLAG, %o5
-	stn	%o5, [THREAD_REG + T_LOFAULT]	! restore old t_lofault
-	retl
-	clr	%o0
-	.align 16
-.medium_bcopy:
-	neg	%o1, %g5
-	neg	%o0, %o3	
-	andcc	%g5, 7, %g5	! bytes till DST 8 byte aligned
-	and	%o3, 7, %o3	! bytes till SRC 8 byte aligned
-	cmp	%g5, %o3
-	bne	%ncc, continue
-	sub	%g5, %o3, %o3	! -(bytes till SRC aligned after DST aligned)
-				! o3={-7, -6, ... 7}  o3>0 => SRC overaligned
-	! src and dst are aligned.
-	mov	%o3, %g1		! save %o3
-	andcc	%o0, 7, %o3		! is src buf  aligned on a 8 byte bound
-	brz,pt	%o3, src_dst_aligned_on_8		
-	nop
-	mov	%o3, %g5
-	mov	8, %o4
-	sub 	%o4, %o3, %o3
-	cmp	%o3, %o2
-	bg,a,pn	%ncc, 1f
-	mov	%o2, %o3	
-1:
-	! %o3 has the bytes to be written in partial store.
-	sub	%o2, %o3, %o2
-	prefetch	[%o0],2
-7:
-	deccc	%o3			! byte clearing loop
-	ldub	[%o0], %o4		! load one byte
-	stb	%o4, [%o1]
-	inc	%o1			! increment dst
-	bgu,pt	%ncc, 7b
-	inc	%o0			! increment src
-	mov	%g1, %o3		! restore %o3
-src_dst_aligned_on_8:
-	! check  if we are copying 1k or more bytes
-	cmp	%o2, 511
-	bgu,pt	%ncc, copying_ge_512
-	nop
-	ba	.medlword_bcopy
-	nop
-
-continue:
-	andcc	%g5, 7, %g5	! bytes till DST 8 byte aligned
-	bz	%ncc, 2f
-	nop
-
-	sub	%o2, %g5, %o2	! update count
-
-1:
-	ldub	[%o0], %o4
-	deccc	%g5
-	inc	%o0
-	stb	%o4, [%o1]
-	bgu,pt	%ncc, 1b
-	inc	%o1
-
-	! Now DST is 8-byte aligned.  dst, from, o2 are current.
-
-2:
-	andcc	%o0, 0x3, %g0		! test alignment
-	bnz,pt	%ncc, .mediumsetup_bcopy	! branch to skip aligned cases
-					! if src, dst not aligned
-	prefetch [%o0 + (1 * VIS_BLOCKSIZE)], #n_reads
-
-/*
- * Handle all cases where src and dest are aligned on word
- * or long word boundaries.  Use unrolled loops for better
- * performance.  This option wins over standard large data
- * move when source and destination is in cache for medium
- * to short data moves.
- */
-	andcc	%o0, 0x7, %g0		! test word alignment
-	bz,pt	%ncc, src_dst_lword_aligned	! branch to long word aligned case
-	prefetch [%o0 + (2 * VIS_BLOCKSIZE)], #n_reads
-	cmp	%o2, MED_WMAX		! limit to store buffer size
-	bgu,pt	%ncc, .mediumrejoin_bcopy	! otherwise rejoin main loop
-	nop
-	subcc	%o2, 15, %o2		! adjust length to allow cc test
-					! for end of loop
-	ble,pt	%ncc, .medw15_bcopy		! skip big loop if less than 16
-	prefetch [%o0 + (3 * VIS_BLOCKSIZE)], #n_reads
-/*
- * no need to put prefetch in loop as prefetches have
- * already been issued for maximum loop size
- */
-.medw16_bcopy:
-	ld	[%o0], %o4		! load
-	subcc	%o2, 16, %o2		! decrement length count
-	stw	%o4, [%o1]		! and store
-	ld	[%o0+4], %o3		! a block of 16 bytes
-	add	%o0, 16, %o0		! increase src ptr by 16
-	stw	%o3, [%o1+4]
-	ld	[%o0-8], %o4
-	add	%o1, 16, %o1		! increase dst ptr by 16
-	stw	%o4, [%o1-8]
-	ld	[%o0-4], %o3
-	bgu,pt	%ncc, .medw16_bcopy		! repeat if at least 16 bytes left
-	stw	%o3, [%o1-4]
-.medw15_bcopy:
-	addcc	%o2, 15, %o2		! restore count
-	bz,pt	%ncc, .medwexit_bcopy		! exit if finished
-	nop
-	cmp	%o2, 8
-	blt,pt	%ncc, .medw7_bcopy		! skip if 7 or fewer bytes left
-	nop				!
-	ld	[%o0], %o4		! load 4 bytes
-	subcc	%o2, 8, %o2		! decrease count by 8
-	stw	%o4, [%o1]		! and store 4 bytes
-	add	%o0, 8, %o0		! increase src ptr by 8
-	ld	[%o0-4], %o3		! load 4 bytes
-	add	%o1, 8, %o1		! increase dst ptr by 8
-	stw	%o3, [%o1-4]		! and store 4 bytes
-	bz	%ncc, .medwexit_bcopy		! exit if finished
-	nop
-.medw7_bcopy:					! count is ge 1, less than 8
-	cmp	%o2, 3			! check for 4 bytes left
-	ble,pt	%ncc, .medw3_bcopy		! skip if 3 or fewer bytes left
-	nop				!
-	ld	[%o0], %o4		! load 4 bytes
-	sub	%o2, 4, %o2		! decrease count by 4
-	add	%o0, 4, %o0		! increase src ptr by 4
-	stw	%o4, [%o1]		! and store 4 bytes
-	add	%o1, 4, %o1		! increase dst ptr by 4
-	tst	%o2			! check for zero bytes left
-	bz	%ncc, .medwexit_bcopy		! exit if finished
-	nop
-.medw3_bcopy:					! count is known to be 1, 2, or 3
-	deccc	%o2			! reduce count by one
-	ldub	[%o0], %o3		! load one byte
-	bz,pt	%ncc, .medwexit_bcopy		! exit if last byte
-	stb	%o3, [%o1]		! store one byte
-	ldub	[%o0+1], %o3		! load second byte
-	deccc	%o2			! reduce count by one
-	bz,pt	%ncc, .medwexit_bcopy		! exit if last byte
-	stb	%o3, [%o1+1]		! store second byte
-	ldub	[%o0+2], %o3		! load third byte
-	stb	%o3, [%o1+2]		! store third byte
-.medwexit_bcopy:
-	membar	#Sync				! sync error barrier
-	andn	%o5, TRAMP_FLAG, %o5
-	stn	%o5, [THREAD_REG + T_LOFAULT]	! restore old t_lofault
-	retl
-	clr	%o0
-	
-/*
- * Special case for handling when src and dest are both long word aligned
- * and total data to move is between SMALL_MAX and MED_MAX bytes
- */
-
-	.align 16
-	nop
-src_dst_lword_aligned:
-.medlword_bcopy:				! long word aligned
-	cmp	%o2, MED_MAX		! limit to store buffer size
-	bgu,pt	%ncc, .mediumrejoin_bcopy	! otherwise rejoin main loop
-	nop
-	subcc	%o2, 31, %o2		! adjust length to allow cc test
-					! for end of loop
-	ble,pt	%ncc, .medl31_bcopy		! skip big loop if less than 32
-	prefetch [%o0 + (3 * VIS_BLOCKSIZE)], #n_reads ! into the l2 cache
-/*
- * no need to put prefetch in loop as prefetches have
- * already been issued for maximum loop size
- */
-.medl32_bcopy:
-	ldx	[%o0], %o4		! load
-	subcc	%o2, 32, %o2		! decrement length count
-	stx	%o4, [%o1]		! and store
-	ldx	[%o0+8], %o3		! a block of 32 bytes
-	add	%o0, 32, %o0		! increase src ptr by 32
-	stx	%o3, [%o1+8]
-	ldx	[%o0-16], %o4
-	add	%o1, 32, %o1		! increase dst ptr by 32
-	stx	%o4, [%o1-16]
-	ldx	[%o0-8], %o3
-	bgu,pt	%ncc, .medl32_bcopy		! repeat if at least 32 bytes left
-	stx	%o3, [%o1-8]
-.medl31_bcopy:
-	addcc	%o2, 16, %o2		! adjust remaining count
-	ble,pt	%ncc, .medl15_bcopy		! skip if 15 or fewer bytes left
-	nop				!
-	ldx	[%o0], %o4		! load and store 16 bytes
-	add	%o0, 16, %o0		! increase src ptr by 16
-	stx	%o4, [%o1]		!
-	sub	%o2, 16, %o2		! decrease count by 16
-	ldx	[%o0-8], %o3		!
-	add	%o1, 16, %o1		! increase dst ptr by 16
-	stx	%o3, [%o1-8]
-.medl15_bcopy:
-	addcc	%o2, 15, %o2		! restore count
-	bz,pt	%ncc, .medwexit_bcopy		! exit if finished
-	nop
-	cmp	%o2, 8
-	blt,pt	%ncc, .medw7_bcopy		! skip if 7 or fewer bytes left
-	nop
-	ldx	[%o0], %o4		! load 8 bytes
-	add	%o0, 8, %o0		! increase src ptr by 8
-	stx	%o4, [%o1]		! and store 8 bytes
-	subcc	%o2, 8, %o2		! decrease count by 8
-	bz	%ncc, .medwexit_bcopy		! exit if finished
-	add	%o1, 8, %o1		! increase dst ptr by 8
-	ba	.medw7_bcopy
-	nop
-
-	.align 16
-	nop
-	nop
-	nop
-unaligned_src_dst:
-
-.mediumsetup_bcopy:
-	prefetch [%o0 + (2 * VIS_BLOCKSIZE)], #one_read
-.mediumrejoin_bcopy:
-	! %o5 has the saved T_LOFAULT when we come here.
-	! We set a new error handler if the T_LOFAULT was set earlier OR
-	! KCOPY_FLAG is set.
-	save	%sp, -SA(MINFRAME + HWCOPYFRAMESIZE), %sp
-	mov	%i5, %l6
-	andn	%l6, TRAMP_FLAG, %o2
-	brz,pt	%o2, 1f
-	  nop
-	! We enter here if KCOPY_FLAG was set OR
-	! T_LOFAULT was set earlier.
-	! We only change the error handler pointer here.
-	! The flags TRAMP_FLAG or KCOPY_FLAG is left as it is in %l6.
-	sethi	%hi(.copyerr_fp_used), %o2
-	or	%o2, %lo(.copyerr_fp_used), %o2
-	membar	#Sync				! sync error barrier
-	stn	%o2, [THREAD_REG + T_LOFAULT]	! install new vector
-1:
-	FP_NOMIGRATE(6, 7)
-	mov	%i0, %o0
-	mov	%i1, %o1
-	mov	%i2, %o2
-	mov	%i3, %o3
-	mov	%i5, %o5
-	rd	%fprs, %o4		! check for unused fp
-	st	%o4, [%fp + STACK_BIAS - SAVED_FPRS_OFFSET] ! save orig %fprs
-
-	! FPU enabled ?  If not, enable it.
-	btst	FPRS_FEF, %o4
-	bz,a,pt	%icc, continue_bcopy
-	  wr	%g0, FPRS_FEF, %fprs
-
-	! save the FP registers even if DU is not set.
-
-	BST_FPQ3Q4_TOSTACK(%o4)
-	or	%l6, FPSAVED_FLAG, %l6
-	
-continue_bcopy:
-	rd	%gsr, %o4
-	stx	%o4, [%fp + STACK_BIAS - SAVED_GSR_OFFSET]	! save gsr
-	or	%l6, FPUSED_FLAG, %l6
-
-	add	%o0, 8, %o0		! prepare to round SRC upward
-
-	sethi	%hi(0x1234567f), %o5	! For GSR.MASK 
-	or	%o5, 0x67f, %o5
-
-	cmp	%o2, MEDIUM_MAX
-	bmask	%o5, %g0, %g0
-
-	! Compute o5 (number of bytes that need copying using the main loop).
-	! First, compute for the medium case.
-	! Then, if large case, o5 is replaced by count for block alignment.
-	! Be careful not to read past end of SRC
-	! Currently, o2 is the actual count remaining
-	!	    o3 is how much sooner we'll cross the alignment boundary
-	!		in SRC compared to in DST
-	!
-	! Examples:  Let # denote bytes that should not be accessed
-	!	    Let x denote a byte already copied to align DST
-	!	    Let . and - denote bytes not yet copied
-	!	    Let | denote double alignment boundaries
-	!
-	!	    DST:  ######xx|........|--------|..######   o2 = 18
-	!			  dst
-	!
-	!  o3 = -3:  SRC:  ###xx...|.....---|-----..#|########   o5 = 8
-	!			  from
-	!
-	!  o3 =  0:  SRC:  ######xx|........|--------|..######   o5 = 16-8 = 8
-	!				   from
-	!
-	!  o3 = +1:  SRC:  #######x|x.......|.-------|-..#####   o5 = 16-8 = 8
-	!				   from
-
-	mov	%asi, %g1		! save curr %asi
-	wr	%g0, ASI_CACHE_SPARING_P, %asi
-
-	or	%g0, -8, %o5
-	alignaddr %o0, %g0, %o0		! set GSR.ALIGN and align from
-
-	movrlz	%o3, %g0, %o5		! subtract 8 from o2+o3 only if o3>=0
-	add	%o5, %o2, %o5
-	add	%o5, %o3, %o5
-
-	bleu	%ncc, 4f
-	andn	%o5, 7, %o5		! 8 byte aligned count
-	neg	%o1, %o5		! 'large' case
-	and	%o5, VIS_BLOCKSIZE-1, %o5  ! bytes till DST block aligned
-4:	
-	brgez,a	%o3, .beginmedloop_bcopy
-	ldda	[%o0-8]%asi, %d32
-
-	add	%o0, %o3, %o0		! back up from
-5:
-	ldda	[%o0]ASI_FL8_P, %d34
-	inc	%o0
-	andcc	%o0, 7, %g0
-	bnz	%ncc, 5b
-	bshuffle %d32, %d34, %d32		! shifts d32 left 1 byte and or's in d34
-
-.beginmedloop_bcopy:
-	tst	%o5
-	bz	%ncc, .endmedloop_bcopy
-	sub	%o2, %o5, %o2		! update count for later
-
-	! Main loop to write out doubles.  Note: o5 & 7 == 0
-	
-	ldd	[%o0], %d34
-	subcc	%o5, 8, %o5		! update local count
-	bz,pn	%ncc, 1f
-	add	%o0, 8, %o0		! update SRC
-
-.medloop_bcopy:
-	faligndata %d32, %d34, %d36
-	ldda	[%o0]%asi, %d32
-	subcc	%o5, 8, %o5		! update local count
-	add	%o0, 16, %o0		! update SRC
-	std	%d36, [%o1]
-	bz,pn	%ncc, 2f
-	faligndata %d34, %d32, %d38
-	ldda	[%o0 - 8]%asi, %d34
-	subcc	%o5, 8, %o5		! update local count
-	std	%d38, [%o1 + 8]
-	bnz,pt	%ncc, .medloop_bcopy
-	add	%o1, 16, %o1		! update DST
-
-1:	
-	faligndata %d32, %d34, %d36
-	fmovd	%d34, %d32
-	std	%d36, [%o1]
-	ba	.endmedloop_bcopy
-	add	%o1, 8, %o1
-	
-2:
-	std	%d38, [%o1 + 8]
-	sub	%o0, 8, %o0
-	add	%o1, 16, %o1
-	
-
-.endmedloop_bcopy:
-	! Currently, from is pointing to the next double-aligned byte in SRC
-	! The 8 bytes starting at [from-8] are available in d32
-	! At least one, and possibly all, of these need to be written.
-
-	cmp	%o2, VIS_BLOCKSIZE	
-	bgu	%ncc, .large_bcopy		! otherwise, less than 16 bytes left
-	
-#if 1
-
-	/* This code will use partial stores.  */
-
-	mov	%g0, %o5
-	and	%o3, 7, %o3		! Number of bytes needed to completely
-					! fill %d32 with good (unwritten) data.
-
-	subcc	%o2, 8, %o2		! update count (maybe too much)
-	movl	%ncc, %o2, %o5		
-	addcc	%o3, %o5, %o5		! extra bytes we can stuff into %d32
-	sub	%o3, %o5, %o3		! update o3 (# bad bytes in %d32)
-
-	bz	%ncc, 2f
-	alignaddr %o3, %g0, %g0		! set GSR.ALIGN
-	
-1:
-	deccc	%o5
-	ldda	[%o0]ASI_FL8_P, %d34
-	inc	%o0
-	bgu	%ncc, 1b
-	bshuffle %d32, %d34, %d32		! shifts d32 left 1 byte and or's in d34
-
-2:
-	not     %o3
-	faligndata %d32, %d32, %d32	! shift bytes to the left
-	and	%o3, 7, %o3		! last byte to be stored in [%o1+%o3]
-	edge8n	%g0, %o3, %o5
-	stda	%d32, [%o1]%o5, ASI_PST8_P
-	brlez	%o2, exit_bcopy		
-	add	%o1, %o3, %o1		! update DST to last stored byte
-3:	
-	inc	%o1
-	deccc	%o2
-	ldub	[%o0], %o3
-	stb	%o3, [%o1]
-	bgu	%ncc, 3b
-	inc	%o0
-
-#else
-
-	andcc	%o3, 7, %o5		! Number of bytes needed to completely
-					! fill %d32 with good (unwritten) data.
-	bz	%ncc, 2f
-	sub	%o5, 8, %o3		! -(number of good bytes in %d32)
-	cmp	%o2, 8
-	bl,a	%ncc, 3f		! Not enough bytes to fill %d32
-	add	%o0, %o3, %o0 		! Back up %o0
-
-1:
-	deccc	%o5
-	ldda	[%o0]ASI_FL8_P, %d34
-	inc	%o0
-	bgu	%ncc, 1b
-	bshuffle %d32, %d34, %d32		! shifts d32 left 1 byte and or's in d34
-
-2:	
-	subcc	%o2, 8, %o2
-	std	%d32, [%o1]
-	bz	%ncc, exit_bcopy
-	add	%o1, 8, %o1
-3:	
-	ldub	[%o0], %o3
-	deccc	%o2
-	inc	%o0
-	stb	%o3, [%o1]
-	bgu	%ncc, 3b
-	inc	%o1
-#endif	
-
-exit_bcopy:
-	membar	#Sync
-
-	ldx	[%fp + STACK_BIAS - SAVED_GSR_OFFSET], %o2	! restore gsr
-	wr	%o2, 0, %gsr
-
-	ld	[%fp + STACK_BIAS - SAVED_FPRS_OFFSET], %o3
-	! No need to restore regs if they were not saved
-	btst	FPSAVED_FLAG, %l6
-	bz	%ncc, 4f
-	  nop
-
-	BLD_FPQ3Q4_FROMSTACK(%o2)
-
-	ba,pt	%ncc, 5f
-	  wr	%o3, 0, %fprs		! restore fprs
-4:
-	FZEROQ3Q4
-	wr	%o3, 0, %fprs		! restore fprs
-5:
-	membar	#Sync				! sync error barrier
-	andn	%l6, MASK_FLAGS, %l6
-	stn	%l6, [THREAD_REG + T_LOFAULT]	! restore old t_lofault
-
-	mov	%g1, %asi		! restore %asi
-	FP_ALLOWMIGRATE(6, 7)
-	ret
-	  restore	%g0, 0, %o0
-
-
-	.align ICACHE_LINE_SIZE
-.large_bcopy:
-	! The following test for BSTORE_SIZE is used to decide whether
-	! to store data with a block store or with individual stores.
-	! The block store wins when the amount of data is so large
-	! that it is causes other application data to be moved out
-	! of the L1 or L2 cache.
-	! On a Panther, block store can lose more often because block
-	! store forces the stored data to be removed from the L3 cache.
-	!
-	sethi	%hi(BSTORE_SIZE),%o5
-	or	%o5,%lo(BSTORE_SIZE),%o5
-	cmp	%o2, %o5
-	bgu	%ncc, .xlarge_bcopy		
-
-	! %o1 I/O DST is 64-byte aligned
-	! %o0 I/O 8-byte aligned (and we've set GSR.ALIGN)
-	! %d32 I/O already loaded with SRC data from [%o0-8]
-	! %o2 I/O count (number of bytes that need to be written)
-	! %o3 I   Not written.  If zero, then SRC is double aligned.
-	! %o4 I   Not written.  Holds fprs.
-	! %o5   O The number of doubles that remain to be written.
-
-	! Load the rest of the current block 
-	! Recall that %o0 is further into SRC than %o1 is into DST
-
-	prefetch [%o1 + (0 * VIS_BLOCKSIZE)], #n_writes
-	prefetch [%o1 + (1 * VIS_BLOCKSIZE)], #n_writes
-	prefetch [%o1 + (2 * VIS_BLOCKSIZE)], #n_writes
-	ldda	[%o0]%asi, %d34
-	prefetch [%o0 + (3 * VIS_BLOCKSIZE)], #one_read
-	ldda	[%o0 + 0x8]%asi, %d36
-	faligndata %d32, %d34, %d48
-	ldda	[%o0 + 0x10]%asi, %d38
-	faligndata %d34, %d36, %d50
-	ldda	[%o0 + 0x18]%asi, %d40
-	faligndata %d36, %d38, %d52
-	ldda	[%o0 + 0x20]%asi, %d42
-	or	%g0, -8, %o5		! if %o3 >= 0, %o5 = -8
-	prefetch [%o0 + (4 * VIS_BLOCKSIZE)], #one_read
-	faligndata %d38, %d40, %d54
-	ldda	[%o0 + 0x28]%asi, %d44
-	movrlz	%o3, %g0, %o5		! if %o3 < 0, %o5 = 0  (needed lter)
-	faligndata %d40, %d42, %d56
-	ldda	[%o0 + 0x30]%asi, %d46
-	faligndata %d42, %d44, %d58
-	ldda	[%o0 + 0x38]%asi, %d32
-	sub	%o2, VIS_BLOCKSIZE, %o2	! update count
-	prefetch [%o0 + (5 * VIS_BLOCKSIZE)], #one_read
-	add	%o0, VIS_BLOCKSIZE, %o0		! update SRC
-
-	! Main loop.  Write previous block.  Load rest of current block.
-	! Some bytes will be loaded that won't yet be written.
-1:	
-	ldda	[%o0]%asi, %d34
-	faligndata %d44, %d46, %d60
-	ldda	[%o0 + 0x8]%asi, %d36
-	faligndata %d46, %d32, %d62
-	std	%d48, [%o1]
-	std	%d50, [%o1+8]
-	std	%d52, [%o1+16]
-	std	%d54, [%o1+24]
-	std	%d56, [%o1+32]
-	std	%d58, [%o1+40]
-	std	%d60, [%o1+48]
-	std	%d62, [%o1+56]
-	sub	%o2, VIS_BLOCKSIZE, %o2		! update count
-	prefetch [%o1 + (6 * VIS_BLOCKSIZE)], #n_writes
-	prefetch [%o1 + (3 * VIS_BLOCKSIZE)], #n_writes
-	add	%o1, VIS_BLOCKSIZE, %o1		! update DST
-	ldda	[%o0 + 0x10]%asi, %d38
-	faligndata %d32, %d34, %d48
-	ldda	[%o0 + 0x18]%asi, %d40
-	faligndata %d34, %d36, %d50
-	ldda	[%o0 + 0x20]%asi, %d42
-	faligndata %d36, %d38, %d52
-	ldda	[%o0 + 0x28]%asi, %d44
-	faligndata %d38, %d40, %d54
-	ldda	[%o0 + 0x30]%asi, %d46
-	faligndata %d40, %d42, %d56
-	ldda	[%o0 + 0x38]%asi, %d32
-	faligndata %d42, %d44, %d58
-	cmp	%o2, VIS_BLOCKSIZE + 8
-	prefetch [%o0 + (5 * VIS_BLOCKSIZE)], #one_read
-	bgu,pt	%ncc, 1b
-	add	%o0, VIS_BLOCKSIZE, %o0	! update SRC
-	faligndata %d44, %d46, %d60
-	faligndata %d46, %d32, %d62
-	stda	%d48, [%o1]ASI_BLK_P	! store 64 bytes, bypass cache
-	cmp	%o2, VIS_BLOCKSIZE
-	bne	%ncc, 2f		! exactly 1 block remaining?
-	add	%o1, VIS_BLOCKSIZE, %o1	! update DST
-	brz,a	%o3, 3f			! is SRC double aligned?
-	ldd	[%o0], %d34
-
-2:	
-	add	%o5, %o2, %o5		! %o5 was already set to 0 or -8 
-	add	%o5, %o3, %o5
-
-	ba	.beginmedloop_bcopy
-	andn	%o5, 7, %o5		! 8 byte aligned count
-
-	! This is when there is exactly 1 block remaining and SRC is aligned
-3:
-	!  %d32 was loaded in the last iteration of the loop above, and
-	!  %d34 was loaded in the branch delay slot that got us here.
-	ldd	[%o0 + 0x08], %d36
-	ldd	[%o0 + 0x10], %d38
-	ldd	[%o0 + 0x18], %d40
-	ldd	[%o0 + 0x20], %d42
-	ldd	[%o0 + 0x28], %d44
-	ldd	[%o0 + 0x30], %d46
-	stda	%d32, [%o1]ASI_BLK_P
-
-	ba	exit_bcopy
-	nop
-
-	.align 16
-	! two nops here causes loop starting at 1f below to be
-	! on a cache line boundary, improving performance
-	nop
-	nop
-xlarge:
-.xlarge_bcopy:
-	/*
-	set	4096, %l2
-	subcc	%o2, %l2, %g0
-	bge	%ncc, size_ge_4k
-	nop
-	*/
-	! %o1 I/O DST is 64-byte aligned
-	! %o0 I/O 8-byte aligned (and we've set GSR.ALIGN)
-	! %d32 I/O already loaded with SRC data from [%o0-8]
-	! %o2 I/O count (number of bytes that need to be written)
-	! %o3 I   Not written.  If zero, then SRC is double aligned.
-	! %o4 I   Not written.  Holds fprs.
-	! %o5   O The number of doubles that remain to be written.
-
-	! Load the rest of the current block 
-	! Recall that %o0 is further into SRC than %o1 is into DST
-
-	! prefetch [%o0 + (3 * VIS_BLOCKSIZE)], #one_read
-	! executed in delay slot for branch to .xlarge
-	prefetch [%o0 + (4 * VIS_BLOCKSIZE)], #one_read
-	prefetch [%o0 + (5 * VIS_BLOCKSIZE)], #one_read
-	ldda	[%o0]%asi, %d34
-	prefetch [%o0 + (6 * VIS_BLOCKSIZE)], #one_read
-	ldda	[%o0 + 0x8]%asi, %d36
-	faligndata %d32, %d34, %d48
-	ldda	[%o0 + 0x10]%asi, %d38
-	faligndata %d34, %d36, %d50
-	ldda	[%o0 + 0x18]%asi, %d40
-	faligndata %d36, %d38, %d52
-	ldda	[%o0 + 0x20]%asi, %d42
-	or	%g0, -8, %o5		! if %o3 >= 0, %o5 = -8
-	faligndata %d38, %d40, %d54
-	ldda	[%o0 + 0x28]%asi, %d44
-	movrlz	%o3, %g0, %o5		! if %o3 < 0, %o5 = 0  (needed later)
-	faligndata %d40, %d42, %d56
-	ldda	[%o0 + 0x30]%asi, %d46
-	faligndata %d42, %d44, %d58
-	ldda	[%o0 + 0x38]%asi, %d32
-	sub	%o2, VIS_BLOCKSIZE, %o2	! update count
-	prefetch [%o0 + (7 * VIS_BLOCKSIZE)], #one_read
-	add	%o0, VIS_BLOCKSIZE, %o0	! update SRC
-
-	! This point is 32-byte aligned since 24 instructions appear since
-	! the previous alignment directive.
-	
-
-	! Main loop.  Write previous block.  Load rest of current block.
-	! Some bytes will be loaded that won't yet be written.
-1:
-	ldda	[%o0]%asi, %d34
-	faligndata %d44, %d46, %d60
-	ldda	[%o0 + 0x8]%asi, %d36
-	faligndata %d46, %d32, %d62
-	stda	%d48, [%o1]ASI_BLK_P
-	sub	%o2, VIS_BLOCKSIZE, %o2		! update count
-	ldda	[%o0 + 0x10]%asi, %d38
-	faligndata %d32, %d34, %d48
-	ldda	[%o0 + 0x18]%asi, %d40
-	faligndata %d34, %d36, %d50
-	ldda	[%o0 + 0x20]%asi, %d42
-	faligndata %d36, %d38, %d52
-	ldda	[%o0 + 0x28]%asi, %d44
-	faligndata %d38, %d40, %d54
-	ldda	[%o0 + 0x30]%asi, %d46
-	faligndata %d40, %d42, %d56
-	ldda	[%o0 + 0x38]%asi, %d32
-	faligndata %d42, %d44, %d58
-	! offset of 8*BLK+8 bytes works best over range of (src-dst) mod 1K
-	prefetch [%o0 + (8 * VIS_BLOCKSIZE) + 8], #one_read
-	add	%o1, VIS_BLOCKSIZE, %o1		! update DST
-	cmp	%o2, VIS_BLOCKSIZE + 8
-	! second prefetch important to correct for occasional dropped
-	! initial prefetches, 5*BLK works best over range of (src-dst) mod 1K
-	! strong prefetch prevents drops on Panther, but Jaguar and earlier
-	! US-III models treat strong prefetches as weak prefetchs
-	! to avoid regressions on customer hardware, we retain the prefetch
-	prefetch [%o0 + (5 * VIS_BLOCKSIZE)], #one_read
-	bgu,pt	%ncc, 1b
-	add	%o0, VIS_BLOCKSIZE, %o0	! update SRC
-
-	faligndata %d44, %d46, %d60
-	faligndata %d46, %d32, %d62
-	stda	%d48, [%o1]ASI_BLK_P	! store 64 bytes, bypass cache
-	cmp	%o2, VIS_BLOCKSIZE		
-	bne	%ncc, 2f		! exactly 1 block remaining?
-	add	%o1, VIS_BLOCKSIZE, %o1	! update DST
-	brz,a	%o3, 3f			! is SRC double aligned?
-	ldd	[%o0], %d34
-
-2:	
-	add	%o5, %o2, %o5		! %o5 was already set to 0 or -8 
-	add	%o5, %o3, %o5
-
-
-	ba	.beginmedloop_bcopy
-	andn	%o5, 7, %o5		! 8 byte aligned count
-
-
-	! This is when there is exactly 1 block remaining and SRC is aligned
-3:
-	!  %d32 was loaded in the last iteration of the loop above, and
-	!  %d34 was loaded in the branch delay slot that got us here.
-	ldd	[%o0 + 0x08], %d36
-	ldd	[%o0 + 0x10], %d38
-	ldd	[%o0 + 0x18], %d40
-	ldd	[%o0 + 0x20], %d42
-	ldd	[%o0 + 0x28], %d44
-	ldd	[%o0 + 0x30], %d46
-	stda	%d32, [%o1]ASI_BLK_P
-
-	ba	exit_bcopy
-	nop
-
-copying_ge_512:
-	! both src and dst are aligned to 8 byte boundary
-	! and the number of bytes to copy is 512 or more.
-	! %o5 has the saved T_LOFAULT when we come here.
-	! We set a new error handler if the T_LOFAULT was set earlier OR
-	! KCOPY_FLAG is set.
-	save	%sp, -SA(MINFRAME + HWCOPYFRAMESIZE), %sp
-	mov	%i5, %l6
-	andn	%l6, TRAMP_FLAG, %o2
-	brz,pt	%o2, 1f
-	  nop
-	! We enter here if KCOPY_FLAG was set OR
-	! T_LOFAULT was set earlier.
-	! We only change the error handler pointer here.
-	! The flags TRAMP_FLAG or KCOPY_FLAG is left as it is in %l6.
-	sethi	%hi(.copyerr_fp_used), %o2
-	or	%o2, %lo(.copyerr_fp_used), %o2
-	membar	#Sync				! sync error barrier
-	stn	%o2, [THREAD_REG + T_LOFAULT]	! install new vector
-1:
-	FP_NOMIGRATE(6, 7)
-	mov	%i0, %o0
-	mov	%i1, %o1
-	mov	%i2, %o2
-	mov	%i3, %o3
-	mov	%i5, %o5
-	rd	%fprs, %o5		! check for unused fp
-	st	%o5, [%fp + STACK_BIAS - SAVED_FPRS_OFFSET] ! save orig %fprs
-
-	! FPU enabled ?  If not, enable it.
-	btst	FPRS_FEF, %o5
-	bz,a,pt	%icc, 1f
-	  wr	%g0, FPRS_FEF, %fprs
-
-
-	! save the FP registers even if DU is not set.
-
-	BST_FPQ3Q4_TOSTACK(%o5)
-	or	%l6, FPSAVED_FLAG, %l6
-1:
-	rd	%gsr, %o5
-	stx	%o5, [%fp + STACK_BIAS - SAVED_GSR_OFFSET]	! save gsr
-	or	%l6, FPUSED_FLAG, %l6
-	!prefetch 256 bytes from nearest 128 byte aligned src buf
-	sub     %o0,1,%o3
-	andn    %o3,0x7f,%l1
-	add     %l1,128,%l1
-	prefetch [%l1],2
-	prefetch [%l1+64],2
-	prefetch [%l1+(2*64)],2
-	prefetch [%l1+(3*64)],2
-	!prefetch 256 bytes from nearest 128 byte aligned dst buf
-	sub     %o1,1,%o3
-	andn    %o3,0x7f,%l1
-	add     %l1,128,%l1
-	prefetch [%l1],2
-	prefetch [%l1+64],2
-	prefetch [%l1+(2*64)],2
-	prefetch [%l1+(3*64)],2
-
-	andcc   %o1,0x7f,%o3	    !Check if buffers are 128 byte aligned
-	brz,pn  %o3,aligned_on_128
-	sub     %o3,128,%o3
-
-	add     %o2,%o3,%o2
-align_to_128:
-	ldxa	[%o0]ASI_CACHE_SPARING_P, %o4
-	add     %o0,8,%o0		! increment src pointer
-	stxa    %o4,[%o1]ASI_CACHE_SPARING_P
-	addcc   %o3,8,%o3
-	bl,pt   %ncc,align_to_128
-	add     %o1,8,%o1		! increment dst pointer
-
-aligned_on_128:
-	andcc	%o1,0x1ff,%o3	!Check if buffers are 512 byte aligned.
-	brnz,pn	%o3, 4f
-	mov	%o2,%l4		!l4=number of bytes to copy
-	! buffers are now 512 byte aligned.
-	! if we have 4096 or more bytes to copy we will use the
-	! stingray_optimized_copy
-	set	4096, %l2
-	subcc	%o2, %l2, %g0
-	bge,pn	%ncc, stingray_optimized_copy
-	nop
-4:
-	! determine how many bytes are left to be copied after the buffers
-	! are aligned to 512 byte boundary.
-	! if we have 4096 or more then we can perform stingray_optimized_copy
-	! register l4 will contain the number of bytes to copy after buffers\
-	! are aligned to 512 byte boundary. l4 is set to 0 if we have less than
-	! 4096 bytes to  copy after aligning buffers to 512 byte.
-	sub	%o1,8,%o5	! should be in current 512 chunk
-	andn 	%o5,0x1ff,%o3	! %o3=aligned 512b addr
-	add 	%o3,0x200,%o3	! %o3=next aligned 512b addr
-	sub 	%o3,%o1,%o3	! %o3=how many bytes to copy for 512 byte
-				! alignment
-	sub	%o2,%o3,%l4	! l4=bytes to copy after aligning buffers to 512
-	! if l4 is < 4096 do interleave128_copy only.
-	set	4096, %l2
-	subcc	%l4, %l2, %g0
-	bge,pn	%ncc,6f
-	nop
-	mov	%g0, %l4
-	add	%o1, %o2, %l1
-	ba	interleave128_copy
-	nop
-6:
-	mov	%o3, %o2
-	subcc 	%o3,256,%g0	!use interleave128_copy if 256 or more
-	bl,pn	%ncc,copy_word	!o.w use copy_word to finish the 512 byte alignment.
-	!%o2=new count i.e how many bytes to write
-	add     %o1,%o2,%l1	     !cal the last byte to write %l1
-	ba	interleave128_copy
-	nop
-
-	.align	64
-interleave128_copy:
-	! %l1 has the addr of the dest. buffer at or beyond which no write
-	! is to be done.
-	! %l4 has the number of bytes to zero using stingray_optimized_bzero
-	!prefetch src 
-
-	add	%o0, 256, %o3
-	prefetch [%o3], 2	!1st 64 byte line of next 256 byte block
-	add	%o0, 384, %o3
-	prefetch [%o3], 2	!3rd 64 byte line of next 256 byte block
-	add	%o0, 320, %o3
-	prefetch [%o3], 2	!2nd 64 byte line of next 256 byte block
-	add	%o0, 448, %o3
-	prefetch [%o3], 2	!4th 64 byte line of next 256 byte block
-
-	!prefetch dst 
-
-	add	%o1, 256, %o3
-	prefetch [%o3], 2	!1st 64 byte line of next 256 byte block
-	add	%o1, 384, %o3
-	prefetch [%o3], 2	!3rd 64 byte line of next 256 byte block
-	add	%o1, 320, %o3
-	prefetch [%o3], 2	!2nd 64 byte line of next 256 byte block
-	add	%o1, 448, %o3
-	prefetch [%o3], 2	!4th 64 byte line of next 256 byte block
-
-	ldxa	[%o0]ASI_CACHE_SPARING_P, %o4
-	stxa     %o4,[%o1]ASI_CACHE_SPARING_P
-	add	%o0, 128, %o3
-	ldxa	[%o3]ASI_CACHE_SPARING_P, %o4
-	add     %o1, 128, %o3
-	stxa    %o4,[%o3]ASI_CACHE_SPARING_P	
-	add     %o0, (1 * 8), %o3
-	ldxa	[%o3]ASI_CACHE_SPARING_P, %o4
-	add	%o1, (1 * 8), %o3
-	stxa    %o4,[%o3]ASI_CACHE_SPARING_P	
-	add     %o0, (1 * 8 + 128), %o3
-	ldxa	[%o3]ASI_CACHE_SPARING_P, %o4
-	add     %o1, (1 * 8 + 128), %o3
-	stxa    %o4,[%o3]ASI_CACHE_SPARING_P	
-	add     %o0, (2 * 8),%o3
-	ldxa	[%o3]ASI_CACHE_SPARING_P, %o4
-	add     %o1, (2 * 8),%o3
-	stxa    %o4,[%o3]ASI_CACHE_SPARING_P	
-	add     %o0, (2 * 8 + 128) ,%o3
-	ldxa	[%o3]ASI_CACHE_SPARING_P, %o4
-	add     %o1, (2 * 8 + 128) ,%o3
-	stxa    %o4,[%o3]ASI_CACHE_SPARING_P	
-	add     %o0, (3 * 8) ,%o3
-	ldxa	[%o3]ASI_CACHE_SPARING_P, %o4
-	add     %o1, (3 * 8) ,%o3
-	stxa    %o4,[%o3]ASI_CACHE_SPARING_P	
-	add     %o0, (3 * 8 + 128) ,%o3
-	ldxa	[%o3]ASI_CACHE_SPARING_P, %o4
-	add     %o1, (3 * 8 + 128) ,%o3
-	stxa    %o4,[%o3]ASI_CACHE_SPARING_P	
-	add     %o0, (4 * 8) ,%o3
-	ldxa	[%o3]ASI_CACHE_SPARING_P, %o4
-	add     %o1, (4 * 8) ,%o3
-	stxa    %o4,[%o3]ASI_CACHE_SPARING_P	
-	add     %o0, (4 * 8 + 128) ,%o3
-	ldxa	[%o3]ASI_CACHE_SPARING_P, %o4
-	add     %o1, (4 * 8 + 128) ,%o3
-	stxa    %o4,[%o3]ASI_CACHE_SPARING_P	
-	add     %o0, (5 * 8) ,%o3
-	ldxa	[%o3]ASI_CACHE_SPARING_P, %o4
-	add     %o1, (5 * 8) ,%o3
-	stxa    %o4,[%o3]ASI_CACHE_SPARING_P	
-	add     %o0, (5 * 8 + 128) ,%o3
-	ldxa	[%o3]ASI_CACHE_SPARING_P, %o4
-	add     %o1, (5 * 8 + 128) ,%o3
-	stxa    %o4,[%o3]ASI_CACHE_SPARING_P	
-	add     %o0, (6 * 8) ,%o3
-	ldxa	[%o3]ASI_CACHE_SPARING_P, %o4
-	add     %o1, (6 * 8) ,%o3
-	stxa    %o4,[%o3]ASI_CACHE_SPARING_P	
-	add     %o0, (6 * 8 + 128) ,%o3
-	ldxa	[%o3]ASI_CACHE_SPARING_P, %o4
-	add     %o1, (6 * 8 + 128) ,%o3
-	stxa    %o4,[%o3]ASI_CACHE_SPARING_P	
-	add     %o0, (7 * 8) ,%o3
-	ldxa	[%o3]ASI_CACHE_SPARING_P, %o4
-	add     %o1, (7 * 8) ,%o3
-	stxa    %o4,[%o3]ASI_CACHE_SPARING_P	
-	add     %o0, (7 * 8 + 128) ,%o3
-	ldxa	[%o3]ASI_CACHE_SPARING_P, %o4
-	add     %o1, (7 * 8 + 128) ,%o3
-	stxa    %o4,[%o3]ASI_CACHE_SPARING_P	
-	add     %o0, (8 * 8) ,%o3
-	ldxa	[%o3]ASI_CACHE_SPARING_P, %o4
-	add     %o1, (8 * 8) ,%o3
-	stxa    %o4,[%o3]ASI_CACHE_SPARING_P	
-	add     %o0, (8 * 8 + 128) ,%o3
-	ldxa	[%o3]ASI_CACHE_SPARING_P, %o4
-	add     %o1, (8 * 8 + 128) ,%o3
-	stxa    %o4,[%o3]ASI_CACHE_SPARING_P	
-	add     %o0, (9 * 8) ,%o3
-	ldxa	[%o3]ASI_CACHE_SPARING_P, %o4
-	add     %o1, (9 * 8) ,%o3
-	stxa    %o4,[%o3]ASI_CACHE_SPARING_P	
-	add     %o0, (9 * 8 + 128) ,%o3
-	ldxa	[%o3]ASI_CACHE_SPARING_P, %o4
-	add     %o1, (9 * 8 + 128) ,%o3
-	stxa    %o4,[%o3]ASI_CACHE_SPARING_P	
-	add     %o0, (10 * 8) ,%o3
-	ldxa	[%o3]ASI_CACHE_SPARING_P, %o4
-	add     %o1, (10 * 8) ,%o3
-	stxa    %o4,[%o3]ASI_CACHE_SPARING_P	
-	add     %o0, (10 * 8 + 128) ,%o3
-	ldxa	[%o3]ASI_CACHE_SPARING_P, %o4
-	add     %o1, (10 * 8 + 128) ,%o3
-	stxa    %o4,[%o3]ASI_CACHE_SPARING_P	
-	add     %o0, (11 * 8) ,%o3
-	ldxa	[%o3]ASI_CACHE_SPARING_P, %o4
-	add     %o1, (11 * 8) ,%o3
-	stxa    %o4,[%o3]ASI_CACHE_SPARING_P	
-	add     %o0, (11 * 8 + 128) ,%o3
-	ldxa	[%o3]ASI_CACHE_SPARING_P, %o4
-	add     %o1, (11 * 8 + 128) ,%o3
-	stxa    %o4,[%o3]ASI_CACHE_SPARING_P	
-	add     %o0, (12 * 8) ,%o3
-	ldxa	[%o3]ASI_CACHE_SPARING_P, %o4
-	add     %o1, (12 * 8) ,%o3
-	stxa    %o4,[%o3]ASI_CACHE_SPARING_P	
-	add     %o0, (12 * 8 + 128) ,%o3
-	ldxa	[%o3]ASI_CACHE_SPARING_P, %o4
-	add     %o1, (12 * 8 + 128) ,%o3
-	stxa    %o4,[%o3]ASI_CACHE_SPARING_P	
-	add     %o0, (13 * 8) ,%o3
-	ldxa	[%o3]ASI_CACHE_SPARING_P, %o4
-	add     %o1, (13 * 8) ,%o3
-	stxa    %o4,[%o3]ASI_CACHE_SPARING_P	
-	add     %o0, (13 * 8 + 128) ,%o3
-	ldxa	[%o3]ASI_CACHE_SPARING_P, %o4
-	add     %o1, (13 * 8 + 128) ,%o3
-	stxa    %o4,[%o3]ASI_CACHE_SPARING_P	
-	add     %o0, (14 * 8) ,%o3
-	ldxa	[%o3]ASI_CACHE_SPARING_P, %o4
-	add     %o1, (14 * 8) ,%o3
-	stxa    %o4,[%o3]ASI_CACHE_SPARING_P	
-	add     %o0, (14 * 8 + 128) ,%o3
-	ldxa	[%o3]ASI_CACHE_SPARING_P, %o4
-	add     %o1, (14 * 8 + 128) ,%o3
-	stxa    %o4,[%o3]ASI_CACHE_SPARING_P	
-	add     %o0, (15 * 8) ,%o3
-	ldxa	[%o3]ASI_CACHE_SPARING_P, %o4
-	add     %o1, (15 * 8) ,%o3
-	stxa    %o4,[%o3]ASI_CACHE_SPARING_P	
-	add     %o0, (15 * 8 + 128) ,%o3
-	ldxa	[%o3]ASI_CACHE_SPARING_P, %o4
-	add     %o1, (15 * 8 + 128) ,%o3
-	stxa    %o4,[%o3]ASI_CACHE_SPARING_P	
-	add	%o0, 256, %o0
-
-	! check if the next 256 byte copy will not exceed the number of
-	! bytes remaining to be copied.
-	! %l2 points to the dest buffer after copying 256 bytes more.
-	! %l1 points to dest. buffer at or beyond which no writes should be done.
-	add     %o1,512,%l2
-	subcc   %l1,%l2,%g0
-	bge,pt  %ncc,interleave128_copy
-	add     %o1,256,%o1
-
-copy_word:
-	and     %o2,255,%o3
-	and     %o3,7,%o2
-
-	! Set the remaining doubles
-	subcc   %o3, 8, %o3		! Can we store any doubles?
-	bl,pn  %ncc, 6f
-	and	%o2, 7, %o2		! calc bytes left after doubles
-
-	!prefetch src 
-
-	mov	%o0, %o4
-	prefetch [%o4], 2	!1st 64 byte line of next 256 byte block
-	add	%o0, 128, %o4
-	prefetch [%o4], 2	!3rd 64 byte line of next 256 byte block
-	add	%o0, 64, %o4
-	prefetch [%o4], 2	!2nd 64 byte line of next 256 byte block
-	add	%o0, 192, %o4
-	prefetch [%o4], 2	!4th 64 byte line of next 256 byte block
-
-	!prefetch dst 
-
-	mov	%o1, %o4
-	prefetch [%o4], 2	!1st 64 byte line of next 256 byte block
-	add	%o1, 128, %o4
-	prefetch [%o4], 2	!3rd 64 byte line of next 256 byte block
-	add	%o1, 64, %o4
-	prefetch [%o4], 2	!2nd 64 byte line of next 256 byte block
-	add	%o1, 192, %o4
-	prefetch [%o4], 2	!4th 64 byte line of next 256 byte block
-
-5:	
-	ldxa	[%o0]ASI_CACHE_SPARING_P, %o4
-	add     %o0, 8, %o0      
-	stxa	%o4, [%o1]ASI_CACHE_SPARING_P
-	subcc   %o3, 8, %o3
-	bge,pt	%ncc, 5b
-	add     %o1, 8, %o1      
-6:
-	! Set the remaining bytes
-	brz	%o2,  can_we_do_stingray_optimized_copy
-	nop
-	
-7:
-	deccc	%o2			! byte clearing loop
-	ldub	[%o0], %o4		! load one byte
-	stb	%o4, [%o1]
-	inc	%o1			! increment dst
-	bgu,pt	%ncc, 7b
-	inc	%o0			! increment src
-
-can_we_do_stingray_optimized_copy:
-	! %l4 contains the number of bytes to be copied
-	mov	%l4, %o2
-	brnz,pn	%o2, stingray_optimized_copy
-	nop
-	
-exit:	
-	membar	#Sync
-
-	ldx	[%fp + STACK_BIAS - SAVED_GSR_OFFSET], %o5	! restore gsr
-	wr	%o5, 0, %gsr
-
-	ld	[%fp + STACK_BIAS - SAVED_FPRS_OFFSET], %o3
-	! No need to restore regs if they were not saved
-	btst	FPSAVED_FLAG, %l6
-	bz	%ncc, 4f
-	  nop
-
-	BLD_FPQ3Q4_FROMSTACK(%o5)
-
-	ba,pt	%ncc, 5f
-	  wr	%o3, 0, %fprs		! restore fprs
-4:
-	FZEROQ3Q4
-	wr	%o3, 0, %fprs		! restore fprs
-5:
-	membar	#Sync				! sync error barrier
-	andn	%l6, MASK_FLAGS, %l6
-	stn	%l6, [THREAD_REG + T_LOFAULT]	! restore old t_lofault
-	FP_ALLOWMIGRATE(6, 7)
-	ret
-	  restore	%g0, 0, %o0
-
-
-stingray_optimized_copy:
-	 ! This code tries to maximize bandwidth by being clever about
-	 ! accessing the two cache lines that are BUDDY PAIRS in the L3 cache.  
-	 ! THIS VERSION IS OPTIMIZED FOR THE CASE OF SWAPPING PA BITS 6 and 9. 
-	 ! To keep this code simple, we assume the addresses given are aligned
-	 ! at least on a 128-byte boundary, and the length is assumed to be
-	 ! a multiple of 4k bytes.
-	 ! THIS VERSION USES BLKSTORES, AND PREFETCHES BOTH SOURCE AND
-	 ! DESTINATION DATA.
-
-	add	%o1, %l4, %o2
-
-	!save original value of %o0 so we can restore it.
-	or      %g0,%o0,%l2
-	
-	wr      %g0,ASI_BLK_P,%asi
-
-	prefetch [%o0+0],2
-	prefetch [%o0+(64*1)],2
-	prefetch [%o0+(64*2)],2
-	prefetch [%o0+(64*3)],2
-	prefetch [%o0+(64*4)],2
-	prefetch [%o0+(64*5)],2
-	prefetch [%o0+(64*6)],2
-	prefetch [%o0+(64*7)],2
-	prefetch [%o0+(64*8)],2
-	prefetch [%o0+(64*9)],2
-	prefetch [%o0+(64*10)],2
-	prefetch [%o0+(64*11)],2
-	prefetch [%o0+(64*12)],2
-	prefetch [%o0+(64*13)],2
-	prefetch [%o0+(64*14)],2
-	prefetch [%o0+(64*15)],2
-
-	prefetch [%o1+0],2
-	prefetch [%o1+(64*1)],2
-	prefetch [%o1+(64*2)],2
-	prefetch [%o1+(64*3)],2
-	prefetch [%o1+(64*4)],2
-	prefetch [%o1+(64*5)],2
-	prefetch [%o1+(64*6)],2
-	prefetch [%o1+(64*7)],2
-	prefetch [%o1+(64*8)],2
-	prefetch [%o1+(64*9)],2
-	prefetch [%o1+(64*10)],2
-	prefetch [%o1+(64*11)],2
-	prefetch [%o1+(64*12)],2
-	prefetch [%o1+(64*13)],2
-	prefetch [%o1+(64*14)],2
-	prefetch [%o1+(64*15)],2
-	
-	ba      stingray_optimized_4k_copy_loop
-	srl	%l4, 12, %l4
-	
-	! Local register usage:
-	! %l1   address at short distance ahead of current src buf for prefetching
-	!	into L1 cache. 
-	! %l2   address at far ahead of current src buf for prefetching
-	!	into L2 cache.
-	! %l3   save %o1 at start of inner loop. 
-	! %l4	Number of 4k blocks to copy
-	! %g1   save src buf pointer at start of inner loop. 
-	! %l5   iteration counter to make buddy loop execute 2 times. 
-	! %o5   iteration counter to make inner loop execute 4 times. 
-	! %l7   address at far ahead of current dst buf for prefetching dest
-	!	into L2 cache.
-	       
-	.align 64
-stingray_optimized_4k_copy_loop:
-	set      2, %l5		! %l5 is the loop count for the buddy loop
-	add      %o1, 0, %l3 
-	add      %o0, 0, %g1 
-buddyloop_bcopy:
-	set      PF_FAR, %g5
-	add      %o0, %g5, %l2	! Set %l2 to far ahead of src buffer to prefetch
-	!  For prefetching into L1 D$, set %l1 a little ahead of src buffer
-	add      %o0, PF_NEAR, %l1
-	add      %o1, %g5, %l7	! Set %l7 to far ahead of dst buffer to prefetch
-
-	add      %l2, %g5, %g5	! %g5 is now double far ahead of the src buffer
-	prefetch [%g5+%g0],2	! Prefetch ahead to get TLB entry in advance.
-	set      2*PF_FAR, %g5
-	add      %o1, %g5, %g5	! %g5 is now double far ahead of the dst buffer
-	prefetch [%g5+%g0],2	! Prefetch ahead to get TLB entry in advance.
-
-	set      4,%o5		! %o5 = loop count for the inner loop
-	set      0, %g5
-	
-	! Each iteration of the inner loop below copies 8 sequential lines.
-	! This loop is iterated 4 times, to move a total of 32 lines, all of
-	! which have the same value of PA[9], so we increment the base 
-	! address by 1024 bytes in each iteration, which varies PA[10].
-innerloop_bcopy:	  
-	! copy line 1 of 8
-	prefetch [%l2+%g5],2
-	prefetch [%l7+%g5],2
-	prefetch [%l1+%g5],1
-
-	ldd     [%o0],%d32
-	ldd     [%o0+8],%d34
-	ldd     [%o0+16],%d36
-	ldd     [%o0+24],%d38
-	ldd     [%o0+32],%d40
-	ldd     [%o0+40],%d42
-	ldd     [%o0+48],%d44
-	ldd     [%o0+56],%d46
-	stda    %d32,[%o1+0] %asi
-	add     %g5, 64, %g5
-	add     %o1, 64, %o1
-	add     %o0, 64, %o0
-
-	! copy line 2 of 8
-	prefetch [%l2+%g5],2
-	prefetch [%l7+%g5],2
-	prefetch [%l1+%g5],1
-
-	ldd     [%o0],%d32
-	ldd     [%o0+8],%d34
-	ldd     [%o0+16],%d36
-	ldd     [%o0+24],%d38
-	ldd     [%o0+32],%d40
-	ldd     [%o0+40],%d42
-	ldd     [%o0+48],%d44
-	ldd     [%o0+56],%d46
-	stda    %d32,[%o1+0] %asi
-	add     %g5, 64, %g5
-	add     %o1, 64, %o1
-	add     %o0, 64, %o0
-
-	! copy line 3 of 8
-	prefetch [%l2+%g5],2
-	prefetch [%l7+%g5],2
-	prefetch [%l1+%g5],1
-
-	ldd     [%o0],%d32
-	ldd     [%o0+8],%d34
-	ldd     [%o0+16],%d36
-	ldd     [%o0+24],%d38
-	ldd     [%o0+32],%d40
-	ldd     [%o0+40],%d42
-	ldd     [%o0+48],%d44
-	ldd     [%o0+56],%d46
-	stda    %d32,[%o1+0] %asi
-	add     %g5, 64, %g5
-	add     %o1, 64, %o1
-	add     %o0, 64, %o0
-
-	! copy line 4 of 8
-	prefetch [%l2+%g5],2
-	prefetch [%l7+%g5],2
-	prefetch [%l1+%g5],1
-
-	ldd     [%o0],%d32
-	ldd     [%o0+8],%d34
-	ldd     [%o0+16],%d36
-	ldd     [%o0+24],%d38
-	ldd     [%o0+32],%d40
-	ldd     [%o0+40],%d42
-	ldd     [%o0+48],%d44
-	ldd     [%o0+56],%d46
-	stda    %d32,[%o1+0] %asi
-	add     %g5, 64, %g5
-	add     %o1, 64, %o1
-	add     %o0, 64, %o0
-
-	! copy line 5 of 8
-	prefetch [%l2+%g5],2
-	prefetch [%l7+%g5],2
-	prefetch [%l1+%g5],1
-
-	ldd     [%o0],%d32
-	ldd     [%o0+8],%d34
-	ldd     [%o0+16],%d36
-	ldd     [%o0+24],%d38
-	ldd     [%o0+32],%d40
-	ldd     [%o0+40],%d42
-	ldd     [%o0+48],%d44
-	ldd     [%o0+56],%d46
-	stda    %d32,[%o1+0] %asi
-	add     %g5, 64, %g5
-	add     %o1, 64, %o1
-	add     %o0, 64, %o0
-
-	! copy line 6 of 8
-	prefetch [%l2+%g5],2
-	prefetch [%l7+%g5],2
-	prefetch [%l1+%g5],1
-
-	ldd     [%o0],%d32
-	ldd     [%o0+8],%d34
-	ldd     [%o0+16],%d36
-	ldd     [%o0+24],%d38
-	ldd     [%o0+32],%d40
-	ldd     [%o0+40],%d42
-	ldd     [%o0+48],%d44
-	ldd     [%o0+56],%d46
-	stda    %d32,[%o1+0] %asi
-	add     %g5, 64, %g5
-	add     %o1, 64, %o1
-	add     %o0, 64, %o0
-
-	! copy line 7 of 8
-	prefetch [%l2+%g5],2
-	prefetch [%l7+%g5],2
-	prefetch [%l1+%g5],1
-
-	ldd     [%o0],%d32
-	ldd     [%o0+8],%d34
-	ldd     [%o0+16],%d36
-	ldd     [%o0+24],%d38
-	ldd     [%o0+32],%d40
-	ldd     [%o0+40],%d42
-	ldd     [%o0+48],%d44
-	ldd     [%o0+56],%d46
-	stda    %d32,[%o1+0] %asi
-	add     %g5, 64, %g5
-	add     %o1, 64, %o1
-	add     %o0, 64, %o0
-
-	! copy line 8 of 8
-	prefetch [%l2+%g5],2
-	prefetch [%l7+%g5],2
-	prefetch [%l1+%g5],1
-
-	ldd     [%o0],%d32
-	ldd     [%o0+8],%d34
-	ldd     [%o0+16],%d36
-	ldd     [%o0+24],%d38
-	ldd     [%o0+32],%d40
-	ldd     [%o0+40],%d42
-	ldd     [%o0+48],%d44
-	ldd     [%o0+56],%d46
-	stda    %d32,[%o1+0] %asi
-
-	subcc   %o5,1,%o5	! Decrement the inner loop counter.
-	
-	! Now increment by 64 + 512 so we don't toggle PA[9]
-
-	add     %g5, 576, %g5
-	add     %o1, 576, %o1	! increment dst buffer
-
-	bg,pt   %icc,innerloop_bcopy
-	add     %o0, 576, %o0	! increment src buffer
-	! END OF INNER LOOP
-
-
-	subcc   %l5,1,%l5
-	add     %l3, 512, %o1	! increment dst buf to the first buddy line
-	bg,pt   %icc,buddyloop_bcopy
-	add     %g1, 512 ,%o0	! increment src buf to the first buddy lines. */
-
-	subcc   %l4, 1, %l4
-	add     %o1, 3584, %o1	! Advance src and dst buffers by 4k
-	add     %o0, 3584, %o0	! They were already incremented by 512,
-				! so just add 3584.
-
-	bg,pt   %icc,stingray_optimized_4k_copy_loop
-	nop
-
-	! End of stingray_optimized_copy
-	! if we have 256 or more bytes to copy we use interleave128_copy
-	! else we use copy_word
-
-	sub	%o2,%o1,%o2	! bytes remaining to be copied
-	brz,pn	%o2,exit
-	mov	%g0,%l4
-	add     %o1,%o2,%l1	!cal the last byte to write %l1
-	subcc	%o2,256,%g0
-	bge,pt	%ncc,interleave128_copy
-	mov	%g0, %l4
-	
-	ba	copy_word
-	nop
-	
-	SET_SIZE(bcopy)
-	SET_SIZE(__align_cpy_1)
-#endif	/* lint */
-
-#define	REALSRC	%i0
-#define	DST	%i1
-#define	CNT	%i2
-#define	SRC	%i3
-#define	TMP	%i5
-
-/*
- * Block copy with possibly overlapped operands.
- */
-
-#if defined(lint)
-
-/*ARGSUSED*/
-void
-ovbcopy(const void *from, void *to, size_t count)
-{}
-
-#else	/* lint */
-
-	ENTRY(ovbcopy)
-	tst	%o2			! check count
-	bgu,a	%ncc, 1f		! nothing to do or bad arguments
-	  subcc	%o0, %o1, %o3		! difference of from and to address
-
-	retl				! return
-	  nop
-1:
-	bneg,a	%ncc, 2f
-	  neg	%o3			! if < 0, make it positive
-2:	cmp	%o2, %o3		! cmp size and abs(from - to)
-	bleu	%ncc, bcopy		! if size <= abs(diff): use bcopy,
-	  .empty				!   no overlap
-	  cmp	%o0, %o1		! compare from and to addresses
-	blu	%ncc, .ov_bkwd		! if from < to, copy backwards
-	  nop
-	!
-	! Copy forwards.
-	!
-.ov_fwd:
-	ldub	[%o0], %o3		! read from address
-	inc	%o0			! inc from address
-	stb	%o3, [%o1]		! write to address
-	deccc	%o2			! dec count
-	bgu	%ncc, .ov_fwd		! loop till done
-	  inc	%o1			! inc to address
-
-	retl				! return
-	  nop
-	!
-	! Copy backwards.
-	!
-.ov_bkwd:
-	deccc	%o2			! dec count
-	ldub	[%o0 + %o2], %o3	! get byte at end of src
-	bgu	%ncc, .ov_bkwd		! loop till done
-	  stb	%o3, [%o1 + %o2]	! delay slot, store at end of dst
-
-	retl				! return
-	  nop
-
-	SET_SIZE(ovbcopy)
-
-#endif	/* lint */
-
-
-/*
- * hwblkpagecopy()
- *
- * Copies exactly one page.  This routine assumes the caller (ppcopy)
- * has already disabled kernel preemption and has checked
- * use_hw_bcopy.  Preventing preemption also prevents cpu migration.
- */
-#ifdef lint
-/*ARGSUSED*/
-void
-hwblkpagecopy(const void *src, void *dst)
-{ }
-#else /* lint */
-	ENTRY(hwblkpagecopy)
-	! get another window w/space for three aligned blocks of saved fpregs
-	save	%sp, -SA(MINFRAME + HWCOPYFRAMESIZE), %sp
-
-	! %i0 - source address (arg)
-	! %i1 - destination address (arg)
-	! %i2 - length of region (not arg)
-	! %l0 - saved fprs
-	! %l1 - pointer to saved fpregs
-
-	rd	%fprs, %l0		! check for unused fp
-
-	! FPU enabled ?  If not, enable it.
-	btst	FPRS_FEF, %l0
-	bz,a,pt	%icc, 1f
-	  wr	%g0, FPRS_FEF, %fprs
-
-	! save the FP registers even if DU is not set.
-
-	BST_FPQ3Q4_TOSTACK(%l1)
-
-1:	set	PAGESIZE, CNT
-	mov	%i1, %o0		! store destination address for flushing
-	mov	REALSRC, SRC
-
-	prefetch [SRC], #one_read
-	prefetch [SRC + (1 * VIS_BLOCKSIZE)], #one_read
-	prefetch [SRC + (2 * VIS_BLOCKSIZE)], #one_read
-	prefetch [SRC + (3 * VIS_BLOCKSIZE)], #one_read
-	ldd	[SRC], %d32
-#if FIRST_PREFETCH > 4
-	prefetch [SRC + (4 * VIS_BLOCKSIZE)], #one_read
-#endif
-	ldd	[SRC + 0x08], %d34
-#if FIRST_PREFETCH > 5
-	prefetch [SRC + (5 * VIS_BLOCKSIZE)], #one_read
-#endif
-	ldd	[SRC + 0x10], %d36
-#if FIRST_PREFETCH > 6
-	prefetch [SRC + (6 * VIS_BLOCKSIZE)], #one_read
-#endif
-	faligndata %d32, %d34, %d48
-	ldd	[SRC + 0x18], %d38
-#if FIRST_PREFETCH > 7
-	prefetch [SRC + (7 * VIS_BLOCKSIZE)], #one_read
-#endif
-	faligndata %d34, %d36, %d50
-	ldd	[SRC + 0x20], %d40
-	faligndata %d36, %d38, %d52
-	ldd	[SRC + 0x28], %d42
-	faligndata %d38, %d40, %d54
-	ldd	[SRC + 0x30], %d44
-	faligndata %d40, %d42, %d56
-	ldd	[SRC + 0x38], %d46
-	faligndata %d42, %d44, %d58
-	ldd	[SRC + VIS_BLOCKSIZE], %d32
-	sub	CNT, VIS_BLOCKSIZE, CNT
-	add	SRC, VIS_BLOCKSIZE, SRC
-	ba,a,pt	%ncc, 2f
-	  nop
-	.align	ICACHE_LINE_SIZE
-2:
-	ldd	[SRC + 0x08], %d34
-	faligndata %d44, %d46, %d60
-	ldd	[SRC + 0x10], %d36
-	faligndata %d46, %d32, %d62
-	stda	%d48, [DST]ASI_BLK_P
-	ldd	[SRC + 0x18], %d38
-	faligndata %d32, %d34, %d48
-	ldd	[SRC + 0x20], %d40
-	faligndata %d34, %d36, %d50
-	ldd	[SRC + 0x28], %d42
-	faligndata %d36, %d38, %d52
-	ldd	[SRC + 0x30], %d44
-	faligndata %d38, %d40, %d54
-	ldd	[SRC + 0x38], %d46
-	faligndata %d40, %d42, %d56
-	ldd	[SRC + VIS_BLOCKSIZE], %d32
-	faligndata %d42, %d44, %d58
-	prefetch [SRC + ((FIRST_PREFETCH) * VIS_BLOCKSIZE) + 8], #one_read
-	sub	CNT, VIS_BLOCKSIZE, CNT
-	add	DST, VIS_BLOCKSIZE, DST
-	cmp	CNT, VIS_BLOCKSIZE + 8
-	prefetch [SRC + ((SECOND_PREFETCH) * VIS_BLOCKSIZE)], #one_read
-	bgu,pt	%ncc, 2b
-	  add	SRC, VIS_BLOCKSIZE, SRC
-
-	! trailing block
-	ldd	[SRC + 0x08], %d34
-	faligndata %d44, %d46, %d60
-	ldd	[SRC + 0x10], %d36
-	faligndata %d46, %d32, %d62
-	stda	%d48, [DST]ASI_BLK_P
-	ldd	[SRC + 0x18], %d38
-	ldd	[SRC + 0x20], %d40
-	ldd	[SRC + 0x28], %d42
-	ldd	[SRC + 0x30], %d44
-	ldd	[SRC + 0x38], %d46
-	sub	CNT, VIS_BLOCKSIZE, CNT
-	add	DST, VIS_BLOCKSIZE, DST
-	add	SRC, VIS_BLOCKSIZE, SRC
-	stda	%d32, [DST]ASI_BLK_P
-
-	set	PAGESIZE, %o1
-	call	rock_sync_icache
-	nop
-
-	membar	#Sync
-
-	btst	FPRS_FEF, %l0
-	bz,pt	%icc, 2f
-	  nop
-
-	BLD_FPQ3Q4_FROMSTACK(%l3)
-	ba	3f
-	  nop
-
-2:	FZEROQ3Q4
-
-3:	wr	%l0, 0, %fprs		! restore fprs
-	ret
-	  restore	%g0, 0, %o0
-
-	SET_SIZE(hwblkpagecopy)
-#endif	/* lint */
-
-
-/*
- * Transfer data to and from user space -
- * Note that these routines can cause faults
- * It is assumed that the kernel has nothing at
- * less than KERNELBASE in the virtual address space.
- *
- * Note that copyin(9F) and copyout(9F) are part of the
- * DDI/DKI which specifies that they return '-1' on "errors."
- *
- * Sigh.
- *
- * So there's two extremely similar routines - xcopyin() and xcopyout()
- * which return the errno that we've faithfully computed.  This
- * allows other callers (e.g. uiomove(9F)) to work correctly.
- * Given that these are used pretty heavily, we expand the calling
- * sequences inline for all flavours (rather than making wrappers).
- *
- * There are also stub routines for xcopyout_little and xcopyin_little,
- * which currently are intended to handle requests of <= 16 bytes from
- * do_unaligned. Future enhancement to make them handle 8k pages efficiently
- * is left as an exercise...
- */
-
-/*
- * Copy user data to kernel space (copyOP/xcopyOP/copyOP_noerr)
- *	
- * General theory of operation:
- *
- * The only difference between copy{in,out} and
- * xcopy{in,out} is in the error handling routine they invoke
- * when a memory access error occurs. xcopyOP returns the errno
- * while copyOP returns -1 (see above). copy{in,out}_noerr set
- * a special flag (by oring the TRAMP_FLAG into the fault handler address)
- * if they are called with a fault handler already in place. That flag
- * causes the default handlers to trampoline to the previous handler
- * upon an error.
- *
- * None of the copyops routines grab a window until it's decided that
- * we need to do a HW block copy operation. This saves a window
- * spill/fill when we're called during socket ops. The typical IO
- * path won't cause spill/fill traps.
- *
- * This code uses a set of 4 limits for the maximum size that will
- * be copied given a particular input/output address alignment.
- * If the value for a particular limit is zero, the copy will be performed
- * by the plain copy loops rather than FPBLK.
- *
- * See the description of bcopy above for more details of the
- * data copying algorithm and the default limits.
- *
- */
-
-/*
- * Copy kernel data to user space (copyout/xcopyout/xcopyout_little).
- */
-
-#if defined(lint)
-
-
-#else	/* lint */
-/*
- * We save the arguments in the following registers in case of a fault:
- *	kaddr - %l1
- *	uaddr - %l2
- *	count - %l3
- */
-#define SAVE_SRC	%l1
-#define SAVE_DST	%l2
-#define SAVE_COUNT	%l3
-
-#define SM_SAVE_SRC		%g4
-#define SM_SAVE_DST		%g5
-#define SM_SAVE_COUNT		%o5
-#define ERRNO		%l5
-
-
-#define REAL_LOFAULT	%l4
-/*
- * Generic copyio fault handler.  This is the first line of defense when a
- * fault occurs in (x)copyin/(x)copyout.  In order for this to function
- * properly, the value of the 'real' lofault handler should be in REAL_LOFAULT.
- * This allows us to share common code for all the flavors of the copy
- * operations, including the _noerr versions.
- *
- * Note that this function will restore the original input parameters before
- * calling REAL_LOFAULT.  So the real handler can vector to the appropriate
- * member of the t_copyop structure, if needed.
- */
-	ENTRY(copyio_fault)
-	membar	#Sync
-	mov	%g1,ERRNO			! save errno in ERRNO
-	btst	FPUSED_FLAG, %l6
-	bz	%ncc, 1f
-	  nop
-
-	ldx	[%fp + STACK_BIAS - SAVED_GSR_OFFSET], %o2
-	wr	%o2, 0, %gsr    	! restore gsr
-
-	ld	[%fp + STACK_BIAS - SAVED_FPRS_OFFSET], %o3
-	btst	FPRS_FEF, %o3
-	bz,pt	%icc, 4f
-	  nop
-
-	BLD_FPQ3Q4_FROMSTACK(%o2)
-
-	ba,pt	%ncc, 1f
-	  wr	%o3, 0, %fprs   	! restore fprs
-
-4:
-	FZEROQ3Q4
-	wr	%o3, 0, %fprs   	! restore fprs
-
-1:
-	andn	%l6, FPUSED_FLAG, %l6
-	membar	#Sync
-	stn	%l6, [THREAD_REG + T_LOFAULT]   ! restore old t_lofault
-	FP_ALLOWMIGRATE(5, 6)
-
-	mov	SAVE_SRC, %i0
-	mov	SAVE_DST, %i1
-	jmp	REAL_LOFAULT
-	  mov	SAVE_COUNT, %i2
-
-	SET_SIZE(copyio_fault)
-
-
-#endif
-
-#if defined(lint)
-
-/*ARGSUSED*/
-int
-copyout(const void *kaddr, void *uaddr, size_t count)
-{ return (0); }
-
-#else	/* lint */
-
-	ENTRY(copyout)
-
-	cmp	%o2, VIS_COPY_THRESHOLD		! check for leaf rtn case
-	bleu,pt	%ncc, .copyout_small		! go to larger cases
-	  xor	%o0, %o1, %o3			! are src, dst alignable?
-	btst	7, %o3				!
-	bz,pt	%ncc, .copyout_8		! check for longword alignment
-	  nop
-	btst	1, %o3				! 
-	bz,pt	%ncc, .copyout_2		! check for half-word
-	  nop
-	sethi	%hi(hw_copy_limit_1), %o3	! Check copy limit
-	ld	[%o3 + %lo(hw_copy_limit_1)], %o3
-	tst	%o3
-	bz,pn	%icc, .copyout_small		! if zero, disable HW copy
-	  cmp	%o2, %o3			! if length <= limit
-	bleu,pt	%ncc, .copyout_small		! go to small copy
-	  nop
-	ba,pt	%ncc, .copyout_more		! otherwise go to large copy
-	  nop
-.copyout_2:
-	btst	3, %o3				!
-	bz,pt	%ncc, .copyout_4		! check for word alignment
-	  nop
-	sethi	%hi(hw_copy_limit_2), %o3	! Check copy limit
-	ld	[%o3 + %lo(hw_copy_limit_2)], %o3
-	tst	%o3
-	bz,pn	%icc, .copyout_small		! if zero, disable HW copy
-	  cmp	%o2, %o3			! if length <= limit
-	bleu,pt	%ncc, .copyout_small		! go to small copy
-	  nop
-	ba,pt	%ncc, .copyout_more		! otherwise go to large copy
-	  nop
-.copyout_4:
-	! already checked longword, must be word aligned
-	sethi	%hi(hw_copy_limit_4), %o3	! Check copy limit
-	ld	[%o3 + %lo(hw_copy_limit_4)], %o3
-	tst	%o3
-	bz,pn	%icc, .copyout_small		! if zero, disable HW copy
-	  cmp	%o2, %o3			! if length <= limit
-	bleu,pt	%ncc, .copyout_small		! go to small copy
-	  nop
-	ba,pt	%ncc, .copyout_more		! otherwise go to large copy
-	  nop
-.copyout_8:
-	sethi	%hi(hw_copy_limit_8), %o3	! Check copy limit
-	ld	[%o3 + %lo(hw_copy_limit_8)], %o3
-	tst	%o3
-	bz,pn	%icc, .copyout_small		! if zero, disable HW copy
-	  cmp	%o2, %o3			! if length <= limit
-	bleu,pt	%ncc, .copyout_small		! go to small copy
-	  nop
-	ba,pt	%ncc, .copyout_more		! otherwise go to large copy
-	  nop
-
-	.align	16
-	nop				! instruction alignment
-					! see discussion at start of file
-.copyout_small:
-	sethi	%hi(.sm_copyout_err), %o5	! .sm_copyout_err is lofault
-	or	%o5, %lo(.sm_copyout_err), %o5
-	ldn	[THREAD_REG + T_LOFAULT], %o4	! save existing handler
-	membar	#Sync				! sync error barrier
-	stn	%o5, [THREAD_REG + T_LOFAULT]	! set t_lofault
-.sm_do_copyout:
-	mov	%o0, SM_SAVE_SRC
-	mov	%o1, SM_SAVE_DST
-	cmp	%o2, SHORTCOPY		! check for really short case
-	bleu,pt	%ncc, .co_sm_left	!
-	  mov	%o2, SM_SAVE_COUNT
-	cmp	%o2, CHKSIZE		! check for medium length cases
-	bgu,pn	%ncc, .co_med		!
-	  or	%o0, %o1, %o3		! prepare alignment check
-	andcc	%o3, 0x3, %g0		! test for alignment
-	bz,pt	%ncc, .co_sm_word	! branch to word aligned case
-.co_sm_movebytes:
-	  sub	%o2, 3, %o2		! adjust count to allow cc zero test
-.co_sm_notalign4:
-	ldub	[%o0], %o3		! read byte
-	subcc	%o2, 4, %o2		! reduce count by 4
-	stba	%o3, [%o1]ASI_USER	! write byte
-	inc	%o1			! advance DST by 1
-	ldub	[%o0 + 1], %o3		! repeat for a total of 4 bytes
-	add	%o0, 4, %o0		! advance SRC by 4
-	stba	%o3, [%o1]ASI_USER
-	inc	%o1			! advance DST by 1
-	ldub	[%o0 - 2], %o3
-	stba	%o3, [%o1]ASI_USER
-	inc	%o1			! advance DST by 1
-	ldub	[%o0 - 1], %o3
-	stba	%o3, [%o1]ASI_USER
-	bgt,pt	%ncc, .co_sm_notalign4	! loop til 3 or fewer bytes remain
-	  inc	%o1			! advance DST by 1
-	add	%o2, 3, %o2		! restore count
-.co_sm_left:
-	tst	%o2
-	bz,pt	%ncc, .co_sm_exit	! check for zero length
-	  nop
-	ldub	[%o0], %o3		! load one byte
-	deccc	%o2			! reduce count for cc test
-	bz,pt	%ncc, .co_sm_exit
-	  stba	%o3,[%o1]ASI_USER	! store one byte
-	ldub	[%o0 + 1], %o3		! load second byte
-	deccc	%o2
-	inc	%o1
-	bz,pt	%ncc, .co_sm_exit
-	  stba	%o3,[%o1]ASI_USER	! store second byte
-	ldub	[%o0 + 2], %o3		! load third byte
-	inc	%o1
-	stba	%o3,[%o1]ASI_USER	! store third byte
-	membar	#Sync				! sync error barrier
-	stn	%o4, [THREAD_REG + T_LOFAULT]	! restore old t_lofault
-	retl
-	  mov	%g0, %o0		! return 0
-	.align	16
-.co_sm_words:
-	lduw	[%o0], %o3		! read word
-.co_sm_wordx:
-	subcc	%o2, 8, %o2		! update count
-	stwa	%o3, [%o1]ASI_USER	! write word
-	add	%o0, 8, %o0		! update SRC
-	lduw	[%o0 - 4], %o3		! read word
-	add	%o1, 4, %o1		! update DST
-	stwa	%o3, [%o1]ASI_USER	! write word
-	bgt,pt	%ncc, .co_sm_words	! loop til done
-	  add	%o1, 4, %o1		! update DST
-	addcc	%o2, 7, %o2		! restore count
-	bz,pt	%ncc, .co_sm_exit
-	  nop
-	deccc	%o2
-	bz,pt	%ncc, .co_sm_byte
-.co_sm_half:
-	  subcc	%o2, 2, %o2		! reduce count by 2
-	lduh	[%o0], %o3		! read half word
-	add	%o0, 2, %o0		! advance SRC by 2
-	stha	%o3, [%o1]ASI_USER	! write half word
-	bgt,pt	%ncc, .co_sm_half	! loop til done
-	  add	%o1, 2, %o1		! advance DST by 2
-	addcc	%o2, 1, %o2		! restore count
-	bz,pt	%ncc, .co_sm_exit
-	  nop
-.co_sm_byte:
-	ldub	[%o0], %o3
-	stba	%o3, [%o1]ASI_USER
-	membar	#Sync				! sync error barrier
-	stn	%o4, [THREAD_REG + T_LOFAULT]	! restore old t_lofault
-	retl
-	  mov	%g0, %o0		! return 0
-	.align 16
-.co_sm_word:
-	subcc	%o2, 4, %o2		! update count
-	bgt,pt	%ncc, .co_sm_wordx
-	  lduw	[%o0], %o3		! read word
-	addcc	%o2, 3, %o2		! restore count
-	bz,pt	%ncc, .co_sm_exit
-	  stwa	%o3, [%o1]ASI_USER	! write word
-	deccc	%o2			! reduce count for cc test
-	ldub	[%o0 + 4], %o3		! load one byte
-	add	%o1, 4, %o1
-	bz,pt	%ncc, .co_sm_exit
-	  stba	%o3, [%o1]ASI_USER	! store one byte
-	ldub	[%o0 + 5], %o3		! load second byte
-	deccc	%o2
-	inc	%o1
-	bz,pt	%ncc, .co_sm_exit
-	  stba	%o3, [%o1]ASI_USER	! store second byte
-	ldub	[%o0 + 6], %o3		! load third byte
-	inc	%o1
-	stba	%o3, [%o1]ASI_USER	! store third byte
-.co_sm_exit:
-	  membar	#Sync				! sync error barrier
-	stn	%o4, [THREAD_REG + T_LOFAULT]	! restore old t_lofault
-	retl
-	  mov	%g0, %o0		! return 0
-
-	.align 16
-.co_med:
-	xor	%o0, %o1, %o3		! setup alignment check
-	btst	1, %o3
-	bnz,pt	%ncc, .co_sm_movebytes	! unaligned
-	  nop
-	btst	3, %o3
-	bnz,pt	%ncc, .co_med_half	! halfword aligned
-	  nop
-	btst	7, %o3
-	bnz,pt	%ncc, .co_med_word	! word aligned
-	  nop
-.co_med_long:
-	btst	3, %o0			! check for
-	bz,pt	%ncc, .co_med_long1	! word alignment
-	  nop
-.co_med_long0:
-	ldub	[%o0], %o3		! load one byte
-	inc	%o0
-	stba	%o3,[%o1]ASI_USER	! store byte
-	inc	%o1
-	btst	3, %o0
-	bnz,pt	%ncc, .co_med_long0
-	  dec	%o2
-.co_med_long1:			! word aligned
-	btst	7, %o0			! check for long word
-	bz,pt	%ncc, .co_med_long2
-	  nop
-	lduw	[%o0], %o3		! load word
-	add	%o0, 4, %o0		! advance SRC by 4
-	stwa	%o3, [%o1]ASI_USER	! store word
-	add	%o1, 4, %o1		! advance DST by 4
-	sub	%o2, 4, %o2		! reduce count by 4
-!
-!  Now long word aligned and have at least 32 bytes to move
-!
-.co_med_long2:
-	sub	%o2, 31, %o2		! adjust count to allow cc zero test
-	sub	%o1, 8, %o1		! adjust pointer to allow store in
-					! branch delay slot instead of add
-.co_med_lmove:
-	add	%o1, 8, %o1		! advance DST by 8
-	ldx	[%o0], %o3		! read long word
-	subcc	%o2, 32, %o2		! reduce count by 32
-	stxa	%o3, [%o1]ASI_USER	! write long word
-	add	%o1, 8, %o1		! advance DST by 8
-	ldx	[%o0 + 8], %o3		! repeat for a total for 4 long words
-	add	%o0, 32, %o0		! advance SRC by 32
-	stxa	%o3, [%o1]ASI_USER
-	ldx	[%o0 - 16], %o3
-	add	%o1, 8, %o1		! advance DST by 8
-	stxa	%o3, [%o1]ASI_USER
-	ldx	[%o0 - 8], %o3
-	add	%o1, 8, %o1		! advance DST by 8
-	bgt,pt	%ncc, .co_med_lmove	! loop til 31 or fewer bytes left
-	  stxa	%o3, [%o1]ASI_USER
-	add	%o1, 8, %o1		! advance DST by 8
-	addcc	%o2, 24, %o2		! restore count to long word offset
-	ble,pt	%ncc, .co_med_lextra	! check for more long words to move
-	  nop
-.co_med_lword:
-	ldx	[%o0], %o3		! read long word
-	subcc	%o2, 8, %o2		! reduce count by 8
-	stxa	%o3, [%o1]ASI_USER	! write long word
-	add	%o0, 8, %o0		! advance SRC by 8
-	bgt,pt	%ncc, .co_med_lword	! loop til 7 or fewer bytes left
-	  add	%o1, 8, %o1		! advance DST by 8
-.co_med_lextra:
-	addcc	%o2, 7, %o2		! restore rest of count
-	bz,pt	%ncc, .co_sm_exit	! if zero, then done
-	  deccc	%o2
-	bz,pt	%ncc, .co_sm_byte
-	  nop
-	ba,pt	%ncc, .co_sm_half
-	  nop
-
-	.align 16
-	nop				! instruction alignment
-					! see discussion at start of file
-.co_med_word:
-	btst	3, %o0			! check for
-	bz,pt	%ncc, .co_med_word1	! word alignment
-	  nop
-.co_med_word0:
-	ldub	[%o0], %o3		! load one byte
-	inc	%o0
-	stba	%o3,[%o1]ASI_USER	! store byte
-	inc	%o1
-	btst	3, %o0
-	bnz,pt	%ncc, .co_med_word0
-	  dec	%o2
-!
-!  Now word aligned and have at least 36 bytes to move
-!
-.co_med_word1:
-	sub	%o2, 15, %o2		! adjust count to allow cc zero test
-.co_med_wmove:
-	lduw	[%o0], %o3		! read word
-	subcc	%o2, 16, %o2		! reduce count by 16
-	stwa	%o3, [%o1]ASI_USER	! write word
-	add	%o1, 4, %o1		! advance DST by 4
-	lduw	[%o0 + 4], %o3		! repeat for a total for 4 words
-	add	%o0, 16, %o0		! advance SRC by 16
-	stwa	%o3, [%o1]ASI_USER
-	add	%o1, 4, %o1		! advance DST by 4
-	lduw	[%o0 - 8], %o3
-	stwa	%o3, [%o1]ASI_USER
-	add	%o1, 4, %o1		! advance DST by 4
-	lduw	[%o0 - 4], %o3
-	stwa	%o3, [%o1]ASI_USER
-	bgt,pt	%ncc, .co_med_wmove	! loop til 15 or fewer bytes left
-	  add	%o1, 4, %o1		! advance DST by 4
-	addcc	%o2, 12, %o2		! restore count to word offset
-	ble,pt	%ncc, .co_med_wextra	! check for more words to move
-	  nop
-.co_med_word2:
-	lduw	[%o0], %o3		! read word
-	subcc	%o2, 4, %o2		! reduce count by 4
-	stwa	%o3, [%o1]ASI_USER	! write word
-	add	%o0, 4, %o0		! advance SRC by 4
-	bgt,pt	%ncc, .co_med_word2	! loop til 3 or fewer bytes left
-	  add	%o1, 4, %o1		! advance DST by 4
-.co_med_wextra:
-	addcc	%o2, 3, %o2		! restore rest of count
-	bz,pt	%ncc, .co_sm_exit	! if zero, then done
-	  deccc	%o2
-	bz,pt	%ncc, .co_sm_byte
-	  nop
-	ba,pt	%ncc, .co_sm_half
-	  nop
-
-	.align 16
-	nop				! instruction alignment
-	nop				! see discussion at start of file
-	nop
-.co_med_half:
-	btst	1, %o0			! check for
-	bz,pt	%ncc, .co_med_half1	! half word alignment
-	  nop
-	ldub	[%o0], %o3		! load one byte
-	inc	%o0
-	stba	%o3,[%o1]ASI_USER	! store byte
-	inc	%o1
-	dec	%o2
-!
-!  Now half word aligned and have at least 38 bytes to move
-!
-.co_med_half1:
-	sub	%o2, 7, %o2		! adjust count to allow cc zero test
-.co_med_hmove:
-	lduh	[%o0], %o3		! read half word
-	subcc	%o2, 8, %o2		! reduce count by 8
-	stha	%o3, [%o1]ASI_USER	! write half word
-	add	%o1, 2, %o1		! advance DST by 2
-	lduh	[%o0 + 2], %o3		! repeat for a total for 4 halfwords
-	add	%o0, 8, %o0		! advance SRC by 8
-	stha	%o3, [%o1]ASI_USER
-	add	%o1, 2, %o1		! advance DST by 2
-	lduh	[%o0 - 4], %o3
-	stha	%o3, [%o1]ASI_USER
-	add	%o1, 2, %o1		! advance DST by 2
-	lduh	[%o0 - 2], %o3
-	stha	%o3, [%o1]ASI_USER
-	bgt,pt	%ncc, .co_med_hmove	! loop til 7 or fewer bytes left
-	  add	%o1, 2, %o1		! advance DST by 2
-	addcc	%o2, 7, %o2		! restore count
-	bz,pt	%ncc, .co_sm_exit
-	  deccc	%o2
-	bz,pt	%ncc, .co_sm_byte
-	  nop
-	ba,pt	%ncc, .co_sm_half
-	  nop
-
-/*
- * We got here because of a fault during short copyout.
- * Errno value is in ERRNO, but DDI/DKI says return -1 (sigh).
- */
-.sm_copyout_err:
-	membar	#Sync
-	stn	%o4, [THREAD_REG + T_LOFAULT]   ! restore old t_lofault
-	mov	SM_SAVE_SRC, %o0
-	mov	SM_SAVE_DST, %o1
-	mov	SM_SAVE_COUNT, %o2
-	ldn	[THREAD_REG + T_COPYOPS], %o3	! check for copyop handler
-	tst	%o3
-	bz,pt	%ncc, 3f			! if not, return error
-	  nop
-	ldn	[%o3 + CP_COPYOUT], %o5		! if handler, invoke it with
-	jmp	%o5				! original arguments
-	  nop
-3:
-	retl
-	  or	%g0, -1, %o0		! return error value
-
-	SET_SIZE(copyout)
-
-/*
- * The _more entry points are not intended to be used directly by
- * any caller from outside this file.  They are provided to allow
- * profiling and dtrace of the portions of the copy code that uses
- * the floating point registers.
- * This entry is particularly important as DTRACE (at least as of
- * 4/2004) does not support leaf functions.
- */
-
-	ENTRY(copyout_more)
-.copyout_more:
-	save	%sp, -SA(MINFRAME + HWCOPYFRAMESIZE), %sp
-	set	.copyout_err, REAL_LOFAULT
-
-/*
- * Copy outs that reach here are larger than VIS_COPY_THRESHOLD bytes
- */
-.do_copyout:
-        set     copyio_fault, %l7		! .copyio_fault is lofault val
-
-	ldn	[THREAD_REG + T_LOFAULT], %l6	! save existing handler
-	membar	#Sync				! sync error barrier
-	stn	%l7, [THREAD_REG + T_LOFAULT]	! set t_lofault
-
-	mov	%i0, SAVE_SRC
-	mov	%i1, SAVE_DST
-	mov	%i2, SAVE_COUNT
-
-	FP_NOMIGRATE(6, 7)
-
-	rd	%fprs, %o2		! check for unused fp
-	st	%o2, [%fp + STACK_BIAS - SAVED_FPRS_OFFSET] ! save orig %fprs
-
-	! FPU enabled ?  If not, enable it.
-	btst	FPRS_FEF, %o2
-	bz,a,pt	%icc, .do_blockcopyout
-	  wr	%g0, FPRS_FEF, %fprs
-
-	! save the FP registers even if DU is not set.
-
-	BST_FPQ3Q4_TOSTACK(%o2)
-
-.do_blockcopyout:
-	rd	%gsr, %o2
-	stx	%o2, [%fp + STACK_BIAS - SAVED_GSR_OFFSET]	! save gsr
-	or	%l6, FPUSED_FLAG, %l6
-
-	andcc	DST, VIS_BLOCKSIZE - 1, TMP
-	mov	ASI_USER, %asi
-	bz,pt	%ncc, 2f
-	  neg	TMP
-	add	TMP, VIS_BLOCKSIZE, TMP
-
-	! TMP = bytes required to align DST on FP_BLOCK boundary
-	! Using SRC as a tmp here
-	cmp	TMP, 3
-	bleu,pt	%ncc, 1f
-	  sub	CNT,TMP,CNT		! adjust main count
-	sub	TMP, 3, TMP		! adjust for end of loop test
-.co_blkalign:
-	ldub	[REALSRC], SRC		! move 4 bytes per loop iteration
-	stba	SRC, [DST]%asi
-	subcc	TMP, 4, TMP
-	ldub	[REALSRC + 1], SRC
-	add	REALSRC, 4, REALSRC
-	stba	SRC, [DST + 1]%asi
-	ldub	[REALSRC - 2], SRC
-	add	DST, 4, DST
-	stba	SRC, [DST - 2]%asi
-	ldub	[REALSRC - 1], SRC
-	bgu,pt	%ncc, .co_blkalign
-	  stba	SRC, [DST - 1]%asi
-
-	addcc	TMP, 3, TMP		! restore count adjustment
-	bz,pt	%ncc, 2f		! no bytes left?
-	  nop
-1:	ldub	[REALSRC], SRC
-	inc	REALSRC
-	inc	DST
-	deccc	TMP
-	bgu	%ncc, 1b
-	  stba	SRC, [DST - 1]%asi
-
-2:
-	andn	REALSRC, 0x7, SRC
-	alignaddr REALSRC, %g0, %g0
-
-	! SRC - 8-byte aligned
-	! DST - 64-byte aligned
-	prefetch [SRC], #one_read
-	prefetch [SRC + (1 * VIS_BLOCKSIZE)], #one_read
-	prefetch [SRC + (2 * VIS_BLOCKSIZE)], #one_read
-	prefetch [SRC + (3 * VIS_BLOCKSIZE)], #one_read
-	ldd	[SRC], %d32
-#if FIRST_PREFETCH > 4
-	prefetch [SRC + (4 * VIS_BLOCKSIZE)], #one_read
-#endif
-	ldd	[SRC + 0x08], %d34
-#if FIRST_PREFETCH > 5
-	prefetch [SRC + (5 * VIS_BLOCKSIZE)], #one_read
-#endif
-	ldd	[SRC + 0x10], %d36
-#if FIRST_PREFETCH > 6
-	prefetch [SRC + (6 * VIS_BLOCKSIZE)], #one_read
-#endif
-	faligndata %d32, %d34, %d48
-	ldd	[SRC + 0x18], %d38
-#if FIRST_PREFETCH > 7
-	prefetch [SRC + (7 * VIS_BLOCKSIZE)], #one_read
-#endif
-	faligndata %d34, %d36, %d50
-	ldd	[SRC + 0x20], %d40
-	faligndata %d36, %d38, %d52
-	ldd	[SRC + 0x28], %d42
-	faligndata %d38, %d40, %d54
-	ldd	[SRC + 0x30], %d44
-	faligndata %d40, %d42, %d56
-	ldd	[SRC + 0x38], %d46
-	faligndata %d42, %d44, %d58
-	ldd	[SRC + VIS_BLOCKSIZE], %d32
-	sub	CNT, VIS_BLOCKSIZE, CNT
-	add	SRC, VIS_BLOCKSIZE, SRC
-	add	REALSRC, VIS_BLOCKSIZE, REALSRC
-	ba,a,pt	%ncc, 1f
-	  nop
-	.align	ICACHE_LINE_SIZE
-1:
-	ldd	[SRC + 0x08], %d34
-	faligndata %d44, %d46, %d60
-	ldd	[SRC + 0x10], %d36
-	faligndata %d46, %d32, %d62
-	stda	%d48, [DST]ASI_BLK_AIUS
-	ldd	[SRC + 0x18], %d38
-	faligndata %d32, %d34, %d48
-	ldd	[SRC + 0x20], %d40
-	faligndata %d34, %d36, %d50
-	ldd	[SRC + 0x28], %d42
-	faligndata %d36, %d38, %d52
-	ldd	[SRC + 0x30], %d44
-	faligndata %d38, %d40, %d54
-	ldd	[SRC + 0x38], %d46
-	faligndata %d40, %d42, %d56
-	sub	CNT, VIS_BLOCKSIZE, CNT
-	ldd	[SRC + VIS_BLOCKSIZE], %d32
-	faligndata %d42, %d44, %d58
-	prefetch [SRC + ((FIRST_PREFETCH) * VIS_BLOCKSIZE) + 8], #one_read
-	add	DST, VIS_BLOCKSIZE, DST
-	prefetch [SRC + ((SECOND_PREFETCH) * VIS_BLOCKSIZE)], #one_read
-	add	REALSRC, VIS_BLOCKSIZE, REALSRC
-	cmp	CNT, VIS_BLOCKSIZE + 8
-	bgu,pt	%ncc, 1b
-	  add	SRC, VIS_BLOCKSIZE, SRC
-
-	! only if REALSRC & 0x7 is 0
-	cmp	CNT, VIS_BLOCKSIZE
-	bne	%ncc, 3f
-	  andcc	REALSRC, 0x7, %g0
-	bz,pt	%ncc, 2f
-	  nop
-3:
-	faligndata %d44, %d46, %d60
-	faligndata %d46, %d32, %d62
-	stda	%d48, [DST]ASI_BLK_AIUS
-	add	DST, VIS_BLOCKSIZE, DST
-	ba,pt	%ncc, 3f
-	  nop
-2:
-	ldd	[SRC + 0x08], %d34
-	faligndata %d44, %d46, %d60
-	ldd	[SRC + 0x10], %d36
-	faligndata %d46, %d32, %d62
-	stda	%d48, [DST]ASI_BLK_AIUS
-	ldd	[SRC + 0x18], %d38
-	ldd	[SRC + 0x20], %d40
-	ldd	[SRC + 0x28], %d42
-	ldd	[SRC + 0x30], %d44
-	ldd	[SRC + 0x38], %d46
-	sub	CNT, VIS_BLOCKSIZE, CNT
-	add	DST, VIS_BLOCKSIZE, DST
-	add	SRC, VIS_BLOCKSIZE, SRC
-	add	REALSRC, VIS_BLOCKSIZE, REALSRC
-	stda	%d32, [DST]ASI_BLK_AIUS
-	add	DST, VIS_BLOCKSIZE, DST
-	ba,a,pt	%ncc, 4f
-	  nop
-
-3:	tst	CNT
-	bz,a	%ncc, 4f
-	  nop
-
-5:	ldub	[REALSRC], TMP
-	inc	REALSRC
-	inc	DST
-	deccc	CNT
-	bgu	%ncc, 5b
-	  stba	TMP, [DST - 1]%asi
-4:
-
-.copyout_exit:
-	membar	#Sync
-
-	ldx	[%fp + STACK_BIAS - SAVED_GSR_OFFSET], %o2
-	wr	%o2, 0, %gsr		! restore gsr
-
-	ld	[%fp + STACK_BIAS - SAVED_FPRS_OFFSET], %o3
-	btst	FPRS_FEF, %o3
-	bz,pt	%icc, 4f
-	  nop
-
-	BLD_FPQ3Q4_FROMSTACK(%o2)
-
-	ba,pt	%ncc, 1f
-	  wr	%o3, 0, %fprs		! restore fprs
-
-4:
-	FZEROQ3Q4
-	wr	%o3, 0, %fprs		! restore fprs
-
-1:
-	membar	#Sync
-	andn	%l6, FPUSED_FLAG, %l6
-	stn	%l6, [THREAD_REG + T_LOFAULT]	! restore old t_lofault
-	FP_ALLOWMIGRATE(5, 6)
-	ret
-	  restore	%g0, 0, %o0
-
-/*
- * We got here because of a fault during copyout.
- * Errno value is in ERRNO, but DDI/DKI says return -1 (sigh).
- */
-.copyout_err:
-	ldn	[THREAD_REG + T_COPYOPS], %o4	! check for copyop handler
-	tst	%o4
-	bz,pt	%ncc, 2f			! if not, return error
-	  nop
-	ldn	[%o4 + CP_COPYOUT], %g2		! if handler, invoke it with
-	jmp	%g2				! original arguments
-	  restore %g0, 0, %g0			! dispose of copy window
-2:
-        ret
-	  restore %g0, -1, %o0			! return error value
-
-
-	SET_SIZE(copyout_more)
-
-#endif	/* lint */
-
-
-#ifdef	lint
-
-/*ARGSUSED*/
-int
-xcopyout(const void *kaddr, void *uaddr, size_t count)
-{ return (0); }
-
-#else	/* lint */
-
-	ENTRY(xcopyout)
-	cmp	%o2, VIS_COPY_THRESHOLD		! check for leaf rtn case
-	bleu,pt	%ncc, .xcopyout_small		! go to larger cases
-	  xor	%o0, %o1, %o3			! are src, dst alignable?
-	btst	7, %o3				!
-	bz,pt	%ncc, .xcopyout_8		!
-	  nop
-	btst	1, %o3				! 
-	bz,pt	%ncc, .xcopyout_2		! check for half-word
-	  nop
-	sethi	%hi(hw_copy_limit_1), %o3	! Check copy limit
-	ld	[%o3 + %lo(hw_copy_limit_1)], %o3
-	tst	%o3
-	bz,pn	%icc, .xcopyout_small		! if zero, disable HW copy
-	  cmp	%o2, %o3			! if length <= limit
-	bleu,pt	%ncc, .xcopyout_small		! go to small copy
-	  nop
-	ba,pt	%ncc, .xcopyout_more		! otherwise go to large copy
-	  nop
-.xcopyout_2:
-	btst	3, %o3				!
-	bz,pt	%ncc, .xcopyout_4		! check for word alignment
-	  nop
-	sethi	%hi(hw_copy_limit_2), %o3	! Check copy limit
-	ld	[%o3 + %lo(hw_copy_limit_2)], %o3
-	tst	%o3
-	bz,pn	%icc, .xcopyout_small		! if zero, disable HW copy
-	  cmp	%o2, %o3			! if length <= limit
-	bleu,pt	%ncc, .xcopyout_small		! go to small copy
-	  nop
-	ba,pt	%ncc, .xcopyout_more		! otherwise go to large copy
-	  nop
-.xcopyout_4:
-	! already checked longword, must be word aligned
-	sethi	%hi(hw_copy_limit_4), %o3	! Check copy limit
-	ld	[%o3 + %lo(hw_copy_limit_4)], %o3
-	tst	%o3
-	bz,pn	%icc, .xcopyout_small		! if zero, disable HW copy
-	  cmp	%o2, %o3			! if length <= limit
-	bleu,pt	%ncc, .xcopyout_small		! go to small copy
-	  nop
-	ba,pt	%ncc, .xcopyout_more		! otherwise go to large copy
-	  nop
-.xcopyout_8:
-	sethi	%hi(hw_copy_limit_8), %o3	! Check copy limit
-	ld	[%o3 + %lo(hw_copy_limit_8)], %o3
-	tst	%o3
-	bz,pn	%icc, .xcopyout_small		! if zero, disable HW copy
-	  cmp	%o2, %o3			! if length <= limit
-	bleu,pt	%ncc, .xcopyout_small		! go to small copy
-	  nop
-	ba,pt	%ncc, .xcopyout_more		! otherwise go to large copy
-	  nop
-
-.xcopyout_small:
-	sethi	%hi(.sm_xcopyout_err), %o5	! .sm_xcopyout_err is lofault
-	or	%o5, %lo(.sm_xcopyout_err), %o5
-	ldn	[THREAD_REG + T_LOFAULT], %o4	! save existing handler
-	membar	#Sync				! sync error barrier
-	ba,pt	%ncc, .sm_do_copyout		! common code
-	  stn	%o5, [THREAD_REG + T_LOFAULT]	! set t_lofault
-
-.xcopyout_more:
-	save	%sp, -SA(MINFRAME + HWCOPYFRAMESIZE), %sp
-	sethi	%hi(.xcopyout_err), REAL_LOFAULT
-	ba,pt	%ncc, .do_copyout		! common code
-	  or	REAL_LOFAULT, %lo(.xcopyout_err), REAL_LOFAULT
-
-/*
- * We got here because of fault during xcopyout
- * Errno value is in ERRNO
- */
-.xcopyout_err:
-	ldn	[THREAD_REG + T_COPYOPS], %o4	! check for copyop handler
-	tst	%o4
-	bz,pt	%ncc, 2f			! if not, return error
-	  nop
-	ldn	[%o4 + CP_XCOPYOUT], %g2	! if handler, invoke it with
-	jmp	%g2				! original arguments
-	  restore %g0, 0, %g0			! dispose of copy window
-2:
-        ret
-	  restore ERRNO, 0, %o0			! return errno value
-
-.sm_xcopyout_err:
-
-	membar	#Sync
-	stn	%o4, [THREAD_REG + T_LOFAULT]   ! restore old t_lofault
-	mov	SM_SAVE_SRC, %o0
-	mov	SM_SAVE_DST, %o1
-	mov	SM_SAVE_COUNT, %o2
-	ldn	[THREAD_REG + T_COPYOPS], %o3	! check for copyop handler
-	tst	%o3
-	bz,pt	%ncc, 3f			! if not, return error
-	  nop
-	ldn	[%o3 + CP_XCOPYOUT], %o5	! if handler, invoke it with
-	jmp	%o5				! original arguments
-	  nop
-3:
-	retl
-	  or	%g1, 0, %o0		! return errno value
-
-	SET_SIZE(xcopyout)
-
-#endif	/* lint */
-	
-#ifdef	lint
-
-/*ARGSUSED*/
-int
-xcopyout_little(const void *kaddr, void *uaddr, size_t count)
-{ return (0); }
-
-#else	/* lint */
-
-	ENTRY(xcopyout_little)
-	sethi	%hi(.xcopyio_err), %o5
-	or	%o5, %lo(.xcopyio_err), %o5
-	ldn	[THREAD_REG + T_LOFAULT], %o4
-	membar	#Sync				! sync error barrier
-	stn	%o5, [THREAD_REG + T_LOFAULT]
-	mov	%o4, %o5
-
-	subcc	%g0, %o2, %o3
-	add	%o0, %o2, %o0
-	bz,pn	%ncc, 2f		! check for zero bytes
-	  sub	%o2, 1, %o4
-	add	%o0, %o4, %o0		! start w/last byte
-	add	%o1, %o2, %o1
-	ldub	[%o0 + %o3], %o4
-
-1:	stba	%o4, [%o1 + %o3]ASI_AIUSL
-	inccc	%o3
-	sub	%o0, 2, %o0		! get next byte
-	bcc,a,pt %ncc, 1b
-	  ldub	[%o0 + %o3], %o4
-
-2:
-	membar	#Sync				! sync error barrier
-	stn	%o5, [THREAD_REG + T_LOFAULT]	! restore old t_lofault
-	retl
-	  mov	%g0, %o0		! return (0)
-
-	SET_SIZE(xcopyout_little)
-
-#endif	/* lint */
-
-/*
- * Copy user data to kernel space (copyin/xcopyin/xcopyin_little)
- */
-
-#if defined(lint)
-
-/*ARGSUSED*/
-int
-copyin(const void *uaddr, void *kaddr, size_t count)
-{ return (0); }
-
-#else	/* lint */
-
-	ENTRY(copyin)
-	cmp	%o2, VIS_COPY_THRESHOLD		! check for leaf rtn case
-	bleu,pt	%ncc, .copyin_small		! go to larger cases
-	  xor	%o0, %o1, %o3			! are src, dst alignable?
-	btst	7, %o3				!
-	bz,pt	%ncc, .copyin_8			! check for longword alignment
-	  nop
-	btst	1, %o3				! 
-	bz,pt	%ncc, .copyin_2			! check for half-word
-	  nop
-	sethi	%hi(hw_copy_limit_1), %o3	! Check copy limit
-	ld	[%o3 + %lo(hw_copy_limit_1)], %o3
-	tst	%o3
-	bz,pn	%icc, .copyin_small		! if zero, disable HW copy
-	  cmp	%o2, %o3			! if length <= limit
-	bleu,pt	%ncc, .copyin_small		! go to small copy
-	  nop
-	ba,pt	%ncc, .copyin_more		! otherwise go to large copy
-	  nop
-.copyin_2:
-	btst	3, %o3				!
-	bz,pt	%ncc, .copyin_4			! check for word alignment
-	  nop
-	sethi	%hi(hw_copy_limit_2), %o3	! Check copy limit
-	ld	[%o3 + %lo(hw_copy_limit_2)], %o3
-	tst	%o3
-	bz,pn	%icc, .copyin_small		! if zero, disable HW copy
-	  cmp	%o2, %o3			! if length <= limit
-	bleu,pt	%ncc, .copyin_small		! go to small copy
-	  nop
-	ba,pt	%ncc, .copyin_more		! otherwise go to large copy
-	  nop
-.copyin_4:
-	! already checked longword, must be word aligned
-	sethi	%hi(hw_copy_limit_4), %o3	! Check copy limit
-	ld	[%o3 + %lo(hw_copy_limit_4)], %o3
-	tst	%o3
-	bz,pn	%icc, .copyin_small		! if zero, disable HW copy
-	  cmp	%o2, %o3			! if length <= limit
-	bleu,pt	%ncc, .copyin_small		! go to small copy
-	  nop
-	ba,pt	%ncc, .copyin_more		! otherwise go to large copy
-	  nop
-.copyin_8:
-	sethi	%hi(hw_copy_limit_8), %o3	! Check copy limit
-	ld	[%o3 + %lo(hw_copy_limit_8)], %o3
-	tst	%o3
-	bz,pn	%icc, .copyin_small		! if zero, disable HW copy
-	  cmp	%o2, %o3			! if length <= limit
-	bleu,pt	%ncc, .copyin_small		! go to small copy
-	  nop
-	ba,pt	%ncc, .copyin_more		! otherwise go to large copy
-	  nop
-
-	.align	16
-	nop				! instruction alignment
-					! see discussion at start of file
-.copyin_small:
-	sethi	%hi(.sm_copyin_err), %o5	! .sm_copyin_err is lofault 
-	or	%o5, %lo(.sm_copyin_err), %o5
-	ldn	[THREAD_REG + T_LOFAULT], %o4	! set/save t_lofault, no tramp
-	membar	#Sync				! sync error barrier
-	stn	%o5, [THREAD_REG + T_LOFAULT]
-.sm_do_copyin:
-	mov	%o0, SM_SAVE_SRC
-	mov	%o1, SM_SAVE_DST
-	cmp	%o2, SHORTCOPY		! check for really short case
-	bleu,pt	%ncc, .ci_sm_left	!
-	  mov	%o2, SM_SAVE_COUNT
-	cmp	%o2, CHKSIZE		! check for medium length cases
-	bgu,pn	%ncc, .ci_med		!
-	  or	%o0, %o1, %o3		! prepare alignment check
-	andcc	%o3, 0x3, %g0		! test for alignment
-	bz,pt	%ncc, .ci_sm_word	! branch to word aligned case
-.ci_sm_movebytes:
-	  sub	%o2, 3, %o2		! adjust count to allow cc zero test
-.ci_sm_notalign4:
-	lduba	[%o0]ASI_USER, %o3	! read byte
-	subcc	%o2, 4, %o2		! reduce count by 4
-	stb	%o3, [%o1]		! write byte
-	add	%o0, 1, %o0		! advance SRC by 1
-	lduba	[%o0]ASI_USER, %o3	! repeat for a total of 4 bytes
-	add	%o0, 1, %o0		! advance SRC by 1
-	stb	%o3, [%o1 + 1]
-	add	%o1, 4, %o1		! advance DST by 4
-	lduba	[%o0]ASI_USER, %o3
-	add	%o0, 1, %o0		! advance SRC by 1
-	stb	%o3, [%o1 - 2]
-	lduba	[%o0]ASI_USER, %o3
-	add	%o0, 1, %o0		! advance SRC by 1
-	bgt,pt	%ncc, .ci_sm_notalign4	! loop til 3 or fewer bytes remain
-	  stb	%o3, [%o1 - 1]
-	add	%o2, 3, %o2		! restore count
-.ci_sm_left:
-	tst	%o2
-	bz,pt	%ncc, .ci_sm_exit
-	  nop
-	lduba	[%o0]ASI_USER, %o3		! load one byte
-	deccc	%o2			! reduce count for cc test
-	bz,pt	%ncc, .ci_sm_exit
-	  stb	%o3,[%o1]		! store one byte
-	inc	%o0
-	lduba	[%o0]ASI_USER, %o3	! load second byte
-	deccc	%o2
-	bz,pt	%ncc, .ci_sm_exit
-	  stb	%o3,[%o1 + 1]		! store second byte
-	inc	%o0
-	lduba	[%o0]ASI_USER, %o3	! load third byte
-	stb	%o3,[%o1 + 2]		! store third byte
-	membar	#Sync				! sync error barrier
-	stn	%o4, [THREAD_REG + T_LOFAULT]	! restore old t_lofault
-	retl
-	  mov	%g0, %o0		! return 0
-	.align	16
-.ci_sm_words:
-	lduwa	[%o0]ASI_USER, %o3		! read word
-.ci_sm_wordx:
-	subcc	%o2, 8, %o2		! update count
-	stw	%o3, [%o1]		! write word
-	add	%o0, 4, %o0		! update SRC
-	add	%o1, 8, %o1		! update DST
-	lduwa	[%o0]ASI_USER, %o3	! read word
-	add	%o0, 4, %o0		! update SRC
-	bgt,pt	%ncc, .ci_sm_words	! loop til done
-	  stw	%o3, [%o1 - 4]		! write word
-	addcc	%o2, 7, %o2		! restore count
-	bz,pt	%ncc, .ci_sm_exit
-	  nop
-	deccc	%o2
-	bz,pt	%ncc, .ci_sm_byte
-.ci_sm_half:
-	  subcc	%o2, 2, %o2		! reduce count by 2
-	lduha	[%o0]ASI_USER, %o3	! read half word
-	add	%o0, 2, %o0		! advance SRC by 2
-	add	%o1, 2, %o1		! advance DST by 2
-	bgt,pt	%ncc, .ci_sm_half	! loop til done
-	  sth	%o3, [%o1 - 2]		! write half word
-	addcc	%o2, 1, %o2		! restore count
-	bz,pt	%ncc, .ci_sm_exit
-	  nop
-.ci_sm_byte:
-	lduba	[%o0]ASI_USER, %o3
-	stb	%o3, [%o1]
-	membar	#Sync				! sync error barrier
-	stn	%o4, [THREAD_REG + T_LOFAULT]	! restore old t_lofault
-	retl
-	  mov	%g0, %o0		! return 0
-	.align	16
-.ci_sm_word:
-	subcc	%o2, 4, %o2		! update count
-	bgt,pt	%ncc, .ci_sm_wordx
-	  lduwa	[%o0]ASI_USER, %o3		! read word
-	addcc	%o2, 3, %o2		! restore count
-	bz,pt	%ncc, .ci_sm_exit
-	  stw	%o3, [%o1]		! write word
-	deccc	%o2			! reduce count for cc test
-	add	%o0, 4, %o0
-	lduba	[%o0]ASI_USER, %o3	! load one byte
-	bz,pt	%ncc, .ci_sm_exit
-	  stb	%o3, [%o1 + 4]		! store one byte
-	inc	%o0
-	lduba	[%o0]ASI_USER, %o3	! load second byte
-	deccc	%o2
-	bz,pt	%ncc, .ci_sm_exit
-	  stb	%o3, [%o1 + 5]		! store second byte
-	inc	%o0
-	lduba	[%o0]ASI_USER, %o3	! load third byte
-	stb	%o3, [%o1 + 6]		! store third byte
-.ci_sm_exit:
-	membar	#Sync				! sync error barrier
-	stn	%o4, [THREAD_REG + T_LOFAULT]	! restore old t_lofault
-	retl
-	  mov	%g0, %o0		! return 0
-
-	.align 16
-.ci_med:
-	xor	%o0, %o1, %o3		! setup alignment check
-	btst	1, %o3
-	bnz,pt	%ncc, .ci_sm_movebytes	! unaligned
-	  nop
-	btst	3, %o3
-	bnz,pt	%ncc, .ci_med_half	! halfword aligned
-	  nop
-	btst	7, %o3
-	bnz,pt	%ncc, .ci_med_word	! word aligned
-	  nop
-.ci_med_long:
-	btst	3, %o0			! check for
-	bz,pt	%ncc, .ci_med_long1	! word alignment
-	  nop
-.ci_med_long0:
-	lduba	[%o0]ASI_USER, %o3		! load one byte
-	inc	%o0
-	stb	%o3,[%o1]		! store byte
-	inc	%o1
-	btst	3, %o0
-	bnz,pt	%ncc, .ci_med_long0
-	  dec	%o2
-.ci_med_long1:			! word aligned
-	btst	7, %o0			! check for long word
-	bz,pt	%ncc, .ci_med_long2
-	  nop
-	lduwa	[%o0]ASI_USER, %o3	! load word
-	add	%o0, 4, %o0		! advance SRC by 4
-	stw	%o3, [%o1]		! store word
-	add	%o1, 4, %o1		! advance DST by 4
-	sub	%o2, 4, %o2		! reduce count by 4
-!
-!  Now long word aligned and have at least 32 bytes to move
-!
-.ci_med_long2:
-	sub	%o2, 31, %o2		! adjust count to allow cc zero test
-.ci_med_lmove:
-	ldxa	[%o0]ASI_USER, %o3	! read long word
-	subcc	%o2, 32, %o2		! reduce count by 32
-	stx	%o3, [%o1]		! write long word
-	add	%o0, 8, %o0		! advance SRC by 8
-	ldxa	[%o0]ASI_USER, %o3	! repeat for a total for 4 long words
-	add	%o0, 8, %o0		! advance SRC by 8
-	stx	%o3, [%o1 + 8]
-	add	%o1, 32, %o1		! advance DST by 32
-	ldxa	[%o0]ASI_USER, %o3
-	add	%o0, 8, %o0		! advance SRC by 8
-	stx	%o3, [%o1 - 16]
-	ldxa	[%o0]ASI_USER, %o3
-	add	%o0, 8, %o0		! advance SRC by 8
-	bgt,pt	%ncc, .ci_med_lmove	! loop til 31 or fewer bytes left
-	  stx	%o3, [%o1 - 8]
-	addcc	%o2, 24, %o2		! restore count to long word offset
-	ble,pt	%ncc, .ci_med_lextra	! check for more long words to move
-	  nop
-.ci_med_lword:
-	ldxa	[%o0]ASI_USER, %o3	! read long word
-	subcc	%o2, 8, %o2		! reduce count by 8
-	stx	%o3, [%o1]		! write long word
-	add	%o0, 8, %o0		! advance SRC by 8
-	bgt,pt	%ncc, .ci_med_lword	! loop til 7 or fewer bytes left
-	  add	%o1, 8, %o1		! advance DST by 8
-.ci_med_lextra:
-	addcc	%o2, 7, %o2		! restore rest of count
-	bz,pt	%ncc, .ci_sm_exit	! if zero, then done
-	  deccc	%o2
-	bz,pt	%ncc, .ci_sm_byte
-	  nop
-	ba,pt	%ncc, .ci_sm_half
-	  nop
-
-	.align 16
-	nop				! instruction alignment
-					! see discussion at start of file
-.ci_med_word:
-	btst	3, %o0			! check for
-	bz,pt	%ncc, .ci_med_word1	! word alignment
-	  nop
-.ci_med_word0:
-	lduba	[%o0]ASI_USER, %o3	! load one byte
-	inc	%o0
-	stb	%o3,[%o1]		! store byte
-	inc	%o1
-	btst	3, %o0
-	bnz,pt	%ncc, .ci_med_word0
-	  dec	%o2
-!
-!  Now word aligned and have at least 36 bytes to move
-!
-.ci_med_word1:
-	sub	%o2, 15, %o2		! adjust count to allow cc zero test
-.ci_med_wmove:
-	lduwa	[%o0]ASI_USER, %o3	! read word
-	subcc	%o2, 16, %o2		! reduce count by 16
-	stw	%o3, [%o1]		! write word
-	add	%o0, 4, %o0		! advance SRC by 4
-	lduwa	[%o0]ASI_USER, %o3	! repeat for a total for 4 words
-	add	%o0, 4, %o0		! advance SRC by 4
-	stw	%o3, [%o1 + 4]
-	add	%o1, 16, %o1		! advance DST by 16
-	lduwa	[%o0]ASI_USER, %o3
-	add	%o0, 4, %o0		! advance SRC by 4
-	stw	%o3, [%o1 - 8]
-	lduwa	[%o0]ASI_USER, %o3
-	add	%o0, 4, %o0		! advance SRC by 4
-	bgt,pt	%ncc, .ci_med_wmove	! loop til 15 or fewer bytes left
-	  stw	%o3, [%o1 - 4]
-	addcc	%o2, 12, %o2		! restore count to word offset
-	ble,pt	%ncc, .ci_med_wextra	! check for more words to move
-	  nop
-.ci_med_word2:
-	lduwa	[%o0]ASI_USER, %o3	! read word
-	subcc	%o2, 4, %o2		! reduce count by 4
-	stw	%o3, [%o1]		! write word
-	add	%o0, 4, %o0		! advance SRC by 4
-	bgt,pt	%ncc, .ci_med_word2	! loop til 3 or fewer bytes left
-	  add	%o1, 4, %o1		! advance DST by 4
-.ci_med_wextra:
-	addcc	%o2, 3, %o2		! restore rest of count
-	bz,pt	%ncc, .ci_sm_exit	! if zero, then done
-	  deccc	%o2
-	bz,pt	%ncc, .ci_sm_byte
-	  nop
-	ba,pt	%ncc, .ci_sm_half
-	  nop
-
-	.align 16
-	nop				! instruction alignment
-					! see discussion at start of file
-.ci_med_half:
-	btst	1, %o0			! check for
-	bz,pt	%ncc, .ci_med_half1	! half word alignment
-	  nop
-	lduba	[%o0]ASI_USER, %o3	! load one byte
-	inc	%o0
-	stb	%o3,[%o1]		! store byte
-	inc	%o1
-	dec	%o2
-!
-!  Now half word aligned and have at least 38 bytes to move
-!
-.ci_med_half1:
-	sub	%o2, 7, %o2		! adjust count to allow cc zero test
-.ci_med_hmove:
-	lduha	[%o0]ASI_USER, %o3	! read half word
-	subcc	%o2, 8, %o2		! reduce count by 8
-	sth	%o3, [%o1]		! write half word
-	add	%o0, 2, %o0		! advance SRC by 2
-	lduha	[%o0]ASI_USER, %o3	! repeat for a total for 4 halfwords
-	add	%o0, 2, %o0		! advance SRC by 2
-	sth	%o3, [%o1 + 2]
-	add	%o1, 8, %o1		! advance DST by 8
-	lduha	[%o0]ASI_USER, %o3
-	add	%o0, 2, %o0		! advance SRC by 2
-	sth	%o3, [%o1 - 4]
-	lduha	[%o0]ASI_USER, %o3
-	add	%o0, 2, %o0		! advance SRC by 2
-	bgt,pt	%ncc, .ci_med_hmove	! loop til 7 or fewer bytes left
-	  sth	%o3, [%o1 - 2]
-	addcc	%o2, 7, %o2		! restore count
-	bz,pt	%ncc, .ci_sm_exit
-	  deccc	%o2
-	bz,pt	%ncc, .ci_sm_byte
-	  nop
-	ba,pt	%ncc, .ci_sm_half
-	  nop
-
-.sm_copyin_err:
-	membar	#Sync
-	stn	%o4, [THREAD_REG + T_LOFAULT]   ! restore old t_lofault
-	mov	SM_SAVE_SRC, %o0
-	mov	SM_SAVE_DST, %o1
-	mov	SM_SAVE_COUNT, %o2
-	ldn	[THREAD_REG + T_COPYOPS], %o3	! check for copyop handler
-	tst	%o3
-	bz,pt	%ncc, 3f			! if not, return error
-	  nop
-	ldn	[%o3 + CP_COPYIN], %o5		! if handler, invoke it with
-	jmp	%o5				! original arguments
-	  nop
-3:
-	retl
-	  or	%g0, -1, %o0		! return errno value
-
-	SET_SIZE(copyin)
-
-
-/*
- * The _more entry points are not intended to be used directly by
- * any caller from outside this file.  They are provided to allow
- * profiling and dtrace of the portions of the copy code that uses
- * the floating point registers.
- * This entry is particularly important as DTRACE (at least as of
- * 4/2004) does not support leaf functions.
- */
-
-	ENTRY(copyin_more)
-.copyin_more:
-	save	%sp, -SA(MINFRAME + HWCOPYFRAMESIZE), %sp
-	set	.copyin_err, REAL_LOFAULT
-
-/*
- * Copy ins that reach here are larger than VIS_COPY_THRESHOLD bytes
- */
-.do_copyin:
-	set	copyio_fault, %l7		! .copyio_fault is lofault val
-
-	ldn	[THREAD_REG + T_LOFAULT], %l6	! save existing handler
-	membar	#Sync				! sync error barrier
-	stn	%l7, [THREAD_REG + T_LOFAULT]	! set t_lofault
-
-	mov	%i0, SAVE_SRC
-	mov	%i1, SAVE_DST
-	mov	%i2, SAVE_COUNT
-
-	FP_NOMIGRATE(6, 7)
-
-	rd	%fprs, %o2		! check for unused fp
-	st	%o2, [%fp + STACK_BIAS - SAVED_FPRS_OFFSET] ! save orig %fprs
-
-	! FPU enabled ?  If not, enable it.
-	btst	FPRS_FEF, %o2
-	bz,a,pt	%icc, .do_blockcopyin
-	  wr	%g0, FPRS_FEF, %fprs
-
-	! save the FP registers even if DU is not set.
-
-	BST_FPQ3Q4_TOSTACK(%o2)
-
-.do_blockcopyin:
-	rd	%gsr, %o2
-	stx	%o2, [%fp + STACK_BIAS - SAVED_GSR_OFFSET]	! save gsr
-	or	%l6, FPUSED_FLAG, %l6
-
-	andcc	DST, VIS_BLOCKSIZE - 1, TMP
-	mov	ASI_USER, %asi
-	bz,pt	%ncc, 2f
-	  neg	TMP
-	add	TMP, VIS_BLOCKSIZE, TMP
-
-	! TMP = bytes required to align DST on FP_BLOCK boundary
-	! Using SRC as a tmp here
-	cmp	TMP, 3
-	bleu,pt	%ncc, 1f
-	  sub	CNT,TMP,CNT		! adjust main count
-	sub	TMP, 3, TMP		! adjust for end of loop test
-.ci_blkalign:
-	lduba	[REALSRC]%asi, SRC	! move 4 bytes per loop iteration
-	stb	SRC, [DST]
-	subcc	TMP, 4, TMP
-	lduba	[REALSRC + 1]%asi, SRC
-	add	REALSRC, 4, REALSRC
-	stb	SRC, [DST + 1]
-	lduba	[REALSRC - 2]%asi, SRC
-	add	DST, 4, DST
-	stb	SRC, [DST - 2]
-	lduba	[REALSRC - 1]%asi, SRC
-	bgu,pt	%ncc, .ci_blkalign
-	  stb	SRC, [DST - 1]
-
-	addcc	TMP, 3, TMP		! restore count adjustment
-	bz,pt	%ncc, 2f		! no bytes left?
-	  nop
-1:	lduba	[REALSRC]%asi, SRC
-	inc	REALSRC
-	inc	DST
-	deccc	TMP
-	bgu	%ncc, 1b
-	  stb	SRC, [DST - 1]
-
-2:
-	andn	REALSRC, 0x7, SRC
-	alignaddr REALSRC, %g0, %g0
-
-	! SRC - 8-byte aligned
-	! DST - 64-byte aligned
-	prefetcha [SRC]%asi, #one_read
-	prefetcha [SRC + (1 * VIS_BLOCKSIZE)]%asi, #one_read
-	prefetcha [SRC + (2 * VIS_BLOCKSIZE)]%asi, #one_read
-	prefetcha [SRC + (3 * VIS_BLOCKSIZE)]%asi, #one_read
-	ldda	[SRC]%asi, %d32
-#if FIRST_PREFETCH > 4
-	prefetcha [SRC + (4 * VIS_BLOCKSIZE)]%asi, #one_read
-#endif
-	ldda	[SRC + 0x08]%asi, %d34
-#if FIRST_PREFETCH > 5
-	prefetcha [SRC + (5 * VIS_BLOCKSIZE)]%asi, #one_read
-#endif
-	ldda	[SRC + 0x10]%asi, %d36
-#if FIRST_PREFETCH > 6
-	prefetcha [SRC + (6 * VIS_BLOCKSIZE)]%asi, #one_read
-#endif
-	faligndata %d32, %d34, %d48
-	ldda	[SRC + 0x18]%asi, %d38
-#if FIRST_PREFETCH > 7
-	prefetcha [SRC + (7 * VIS_BLOCKSIZE)]%asi, #one_read
-#endif
-	faligndata %d34, %d36, %d50
-	ldda	[SRC + 0x20]%asi, %d40
-	faligndata %d36, %d38, %d52
-	ldda	[SRC + 0x28]%asi, %d42
-	faligndata %d38, %d40, %d54
-	ldda	[SRC + 0x30]%asi, %d44
-	faligndata %d40, %d42, %d56
-	ldda	[SRC + 0x38]%asi, %d46
-	faligndata %d42, %d44, %d58
-	ldda	[SRC + VIS_BLOCKSIZE]%asi, %d32
-	sub	CNT, VIS_BLOCKSIZE, CNT
-	add	SRC, VIS_BLOCKSIZE, SRC
-	add	REALSRC, VIS_BLOCKSIZE, REALSRC
-	ba,a,pt	%ncc, 1f
-	  nop
-	.align	ICACHE_LINE_SIZE
-1:
-	ldda	[SRC + 0x08]%asi, %d34
-	faligndata %d44, %d46, %d60
-	ldda	[SRC + 0x10]%asi, %d36
-	faligndata %d46, %d32, %d62
-	stda	%d48, [DST]ASI_BLK_P
-	ldda	[SRC + 0x18]%asi, %d38
-	faligndata %d32, %d34, %d48
-	ldda	[SRC + 0x20]%asi, %d40
-	faligndata %d34, %d36, %d50
-	ldda	[SRC + 0x28]%asi, %d42
-	faligndata %d36, %d38, %d52
-	ldda	[SRC + 0x30]%asi, %d44
-	faligndata %d38, %d40, %d54
-	ldda	[SRC + 0x38]%asi, %d46
-	faligndata %d40, %d42, %d56
-	sub	CNT, VIS_BLOCKSIZE, CNT
-	ldda	[SRC + VIS_BLOCKSIZE]%asi, %d32
-	faligndata %d42, %d44, %d58
-	prefetcha [SRC + ((FIRST_PREFETCH) * VIS_BLOCKSIZE) + 8]%asi, #one_read
-	add	DST, VIS_BLOCKSIZE, DST
-	prefetcha [SRC + ((SECOND_PREFETCH) * VIS_BLOCKSIZE)]%asi, #one_read
-	add	REALSRC, VIS_BLOCKSIZE, REALSRC
-	cmp	CNT, VIS_BLOCKSIZE + 8
-	bgu,pt	%ncc, 1b
-	  add	SRC, VIS_BLOCKSIZE, SRC
-
-	! only if REALSRC & 0x7 is 0
-	cmp	CNT, VIS_BLOCKSIZE
-	bne	%ncc, 3f
-	  andcc	REALSRC, 0x7, %g0
-	bz,pt	%ncc, 2f
-	  nop
-3:	
-	faligndata %d44, %d46, %d60
-	faligndata %d46, %d32, %d62
-	stda	%d48, [DST]ASI_BLK_P
-	add	DST, VIS_BLOCKSIZE, DST
-	ba,pt	%ncc, 3f
-	  nop
-2:
-	ldda	[SRC + 0x08]%asi, %d34
-	faligndata %d44, %d46, %d60
-	ldda	[SRC + 0x10]%asi, %d36
-	faligndata %d46, %d32, %d62
-	stda	%d48, [DST]ASI_BLK_P
-	ldda	[SRC + 0x18]%asi, %d38
-	ldda	[SRC + 0x20]%asi, %d40
-	ldda	[SRC + 0x28]%asi, %d42
-	ldda	[SRC + 0x30]%asi, %d44
-	ldda	[SRC + 0x38]%asi, %d46
-	sub	CNT, VIS_BLOCKSIZE, CNT
-	add	DST, VIS_BLOCKSIZE, DST
-	add	SRC, VIS_BLOCKSIZE, SRC
-	add	REALSRC, VIS_BLOCKSIZE, REALSRC
-	stda	%d32, [DST]ASI_BLK_P
-	add	DST, VIS_BLOCKSIZE, DST
-	ba,a,pt	%ncc, 4f
-	  nop
-
-3:	tst	CNT
-	bz,a	%ncc, 4f
-	  nop
-
-5:	lduba	[REALSRC]ASI_USER, TMP
-	inc	REALSRC
-	inc	DST
-	deccc	CNT
-	bgu	%ncc, 5b
-	  stb	TMP, [DST - 1]
-4:
-
-.copyin_exit:
-	membar	#Sync
-
-	ldx	[%fp + STACK_BIAS - SAVED_GSR_OFFSET], %o2	! restore gsr
-	wr	%o2, 0, %gsr
-
-	ld	[%fp + STACK_BIAS - SAVED_FPRS_OFFSET], %o3
-	btst	FPRS_FEF, %o3
-	bz,pt	%icc, 4f
-	  nop
-
-	BLD_FPQ3Q4_FROMSTACK(%o2)
-
-	ba,pt	%ncc, 1f
-	  wr	%o3, 0, %fprs		! restore fprs
-
-4:
-	FZEROQ3Q4
-	wr	%o3, 0, %fprs		! restore fprs
-
-1:
-	membar	#Sync				! sync error barrier
-	andn	%l6, FPUSED_FLAG, %l6
-	stn	%l6, [THREAD_REG + T_LOFAULT]	! restore old t_lofault
-	FP_ALLOWMIGRATE(5, 6)
-	ret
-	  restore	%g0, 0, %o0
-/*
- * We got here because of a fault during copyin
- * Errno value is in ERRNO, but DDI/DKI says return -1 (sigh).
- */
-.copyin_err:
-	ldn	[THREAD_REG + T_COPYOPS], %o4	! check for copyop handler
-	tst	%o4
-	bz,pt	%ncc, 2f			! if not, return error
-	nop
-	ldn	[%o4 + CP_COPYIN], %g2		! if handler, invoke it with
-	jmp	%g2				! original arguments
-	restore %g0, 0, %g0			! dispose of copy window
-2:
-	ret
-	restore %g0, -1, %o0			! return error value
-
-
-	SET_SIZE(copyin_more)
-
-#endif	/* lint */
-
-#ifdef	lint
-
-/*ARGSUSED*/
-int
-xcopyin(const void *uaddr, void *kaddr, size_t count)
-{ return (0); }
-
-#else	/* lint */
-
-	ENTRY(xcopyin)
-
-	cmp	%o2, VIS_COPY_THRESHOLD		! check for leaf rtn case
-	bleu,pt	%ncc, .xcopyin_small		! go to larger cases
-	  xor	%o0, %o1, %o3			! are src, dst alignable?
-	btst	7, %o3				!
-	bz,pt	%ncc, .xcopyin_8		! check for longword alignment
-	  nop
-	btst	1, %o3				! 
-	bz,pt	%ncc, .xcopyin_2		! check for half-word
-	  nop
-	sethi	%hi(hw_copy_limit_1), %o3	! Check copy limit
-	ld	[%o3 + %lo(hw_copy_limit_1)], %o3
-	tst	%o3
-	bz,pn	%icc, .xcopyin_small		! if zero, disable HW copy
-	  cmp	%o2, %o3			! if length <= limit
-	bleu,pt	%ncc, .xcopyin_small		! go to small copy
-	  nop
-	ba,pt	%ncc, .xcopyin_more		! otherwise go to large copy
-	  nop
-.xcopyin_2:
-	btst	3, %o3				!
-	bz,pt	%ncc, .xcopyin_4		! check for word alignment
-	  nop
-	sethi	%hi(hw_copy_limit_2), %o3	! Check copy limit
-	ld	[%o3 + %lo(hw_copy_limit_2)], %o3
-	tst	%o3
-	bz,pn	%icc, .xcopyin_small		! if zero, disable HW copy
-	  cmp	%o2, %o3			! if length <= limit
-	bleu,pt	%ncc, .xcopyin_small		! go to small copy
-	  nop
-	ba,pt	%ncc, .xcopyin_more		! otherwise go to large copy
-	  nop
-.xcopyin_4:
-	! already checked longword, must be word aligned
-	sethi	%hi(hw_copy_limit_4), %o3	! Check copy limit
-	ld	[%o3 + %lo(hw_copy_limit_4)], %o3
-	tst	%o3
-	bz,pn	%icc, .xcopyin_small		! if zero, disable HW copy
-	  cmp	%o2, %o3			! if length <= limit
-	bleu,pt	%ncc, .xcopyin_small		! go to small copy
-	  nop
-	ba,pt	%ncc, .xcopyin_more		! otherwise go to large copy
-	  nop
-.xcopyin_8:
-	sethi	%hi(hw_copy_limit_8), %o3	! Check copy limit
-	ld	[%o3 + %lo(hw_copy_limit_8)], %o3
-	tst	%o3
-	bz,pn	%icc, .xcopyin_small		! if zero, disable HW copy
-	  cmp	%o2, %o3			! if length <= limit
-	bleu,pt	%ncc, .xcopyin_small		! go to small copy
-	  nop
-	ba,pt	%ncc, .xcopyin_more		! otherwise go to large copy
-	  nop
-
-.xcopyin_small:
-	sethi	%hi(.sm_xcopyin_err), %o5  ! .sm_xcopyin_err is lofault value
-	or	%o5, %lo(.sm_xcopyin_err), %o5
-	ldn	[THREAD_REG + T_LOFAULT], %o4	! set/save t_lofaul
-	membar	#Sync				! sync error barrier
-	ba,pt	%ncc, .sm_do_copyin		! common code
-	  stn	%o5, [THREAD_REG + T_LOFAULT]
-	
-.xcopyin_more:
-	save	%sp, -SA(MINFRAME + HWCOPYFRAMESIZE), %sp
-	sethi	%hi(.xcopyin_err), REAL_LOFAULT	! .xcopyin_err is lofault value
-	ba,pt	%ncc, .do_copyin
-	  or	REAL_LOFAULT, %lo(.xcopyin_err), REAL_LOFAULT
-
-/*
- * We got here because of fault during xcopyin
- * Errno value is in ERRNO
- */
-.xcopyin_err:
-	ldn	[THREAD_REG + T_COPYOPS], %o4	! check for copyop handler
-	tst	%o4
-	bz,pt	%ncc, 2f			! if not, return error
-	  nop
-	ldn	[%o4 + CP_XCOPYIN], %g2		! if handler, invoke it with
-	jmp	%g2				! original arguments
-	  restore %g0, 0, %g0			! dispose of copy window
-2:
-        ret
-	  restore ERRNO, 0, %o0			! return errno value
-
-.sm_xcopyin_err:
-
-	membar	#Sync
-	stn	%o4, [THREAD_REG + T_LOFAULT]   ! restore old t_lofault
-	mov	SM_SAVE_SRC, %o0
-	mov	SM_SAVE_DST, %o1
-	mov	SM_SAVE_COUNT, %o2
-	ldn	[THREAD_REG + T_COPYOPS], %o3	! check for copyop handler
-	tst	%o3
-	bz,pt	%ncc, 3f			! if not, return error
-	  nop
-	ldn	[%o3 + CP_XCOPYIN], %o5		! if handler, invoke it with
-	jmp	%o5				! original arguments
-	  nop
-3:
-	retl
-	  or	%g1, 0, %o0		! return errno value
-
-	SET_SIZE(xcopyin)
-
-#endif	/* lint */
-
-#ifdef	lint
-
-/*ARGSUSED*/
-int
-xcopyin_little(const void *uaddr, void *kaddr, size_t count)
-{ return (0); }
-
-#else	/* lint */
-
-	ENTRY(xcopyin_little)
-	sethi	%hi(.xcopyio_err), %o5
-	or	%o5, %lo(.xcopyio_err), %o5
-	ldn	[THREAD_REG + T_LOFAULT], %o4
-	membar	#Sync				! sync error barrier
-	stn	%o5, [THREAD_REG + T_LOFAULT]	
-	mov	%o4, %o5
-
-	subcc	%g0, %o2, %o3
-	add	%o0, %o2, %o0
-	bz,pn	%ncc, 2f		! check for zero bytes
-	  sub	%o2, 1, %o4
-	add	%o0, %o4, %o0		! start w/last byte	
-	add	%o1, %o2, %o1
-	lduba	[%o0 + %o3]ASI_AIUSL, %o4
-
-1:	stb	%o4, [%o1 + %o3]
-	inccc	%o3
-	sub	%o0, 2, %o0		! get next byte
-	bcc,a,pt %ncc, 1b
-	  lduba	[%o0 + %o3]ASI_AIUSL, %o4
-
-2:
-	membar	#Sync				! sync error barrier
-	stn	%o5, [THREAD_REG + T_LOFAULT]	! restore old t_lofault
-	retl
-	  mov	%g0, %o0		! return (0)
-
-.xcopyio_err:
-	membar	#Sync				! sync error barrier
-	stn	%o5, [THREAD_REG + T_LOFAULT]	! restore old t_lofault
-	retl
-	  mov	%g1, %o0
-
-	SET_SIZE(xcopyin_little)
-
-#endif	/* lint */
-
-
-/*
- * Copy a block of storage - must not overlap (from + len <= to).
- * No fault handler installed (to be called under on_fault())
- */
-#if defined(lint)
-
-/* ARGSUSED */
-void
-copyin_noerr(const void *ufrom, void *kto, size_t count)
-{}
-
-#else	/* lint */
-	ENTRY(copyin_noerr)
-
-	cmp	%o2, VIS_COPY_THRESHOLD		! check for leaf rtn case
-	bleu,pt	%ncc, .copyin_ne_small		! go to larger cases
-	  xor	%o0, %o1, %o3			! are src, dst alignable?
-	btst	7, %o3				!
-	bz,pt	%ncc, .copyin_ne_8		! check for longword alignment
-	  nop
-	btst	1, %o3				! 
-	bz,pt	%ncc, .copyin_ne_2		! check for half-word
-	  nop
-	sethi	%hi(hw_copy_limit_1), %o3	! Check copy limit
-	ld	[%o3 + %lo(hw_copy_limit_1)], %o3
-	tst	%o3
-	bz,pn	%icc, .copyin_ne_small		! if zero, disable HW copy
-	  cmp	%o2, %o3			! if length <= limit
-	bleu,pt	%ncc, .copyin_ne_small		! go to small copy
-	  nop
-	ba,pt	%ncc, .copyin_noerr_more	! otherwise go to large copy
-	  nop
-.copyin_ne_2:
-	btst	3, %o3				!
-	bz,pt	%ncc, .copyin_ne_4		! check for word alignment
-	  nop
-	sethi	%hi(hw_copy_limit_2), %o3	! Check copy limit
-	ld	[%o3 + %lo(hw_copy_limit_2)], %o3
-	tst	%o3
-	bz,pn	%icc, .copyin_ne_small		! if zero, disable HW copy
-	  cmp	%o2, %o3			! if length <= limit
-	bleu,pt	%ncc, .copyin_ne_small		! go to small copy
-	  nop
-	ba,pt	%ncc, .copyin_noerr_more	! otherwise go to large copy
-	  nop
-.copyin_ne_4:
-	! already checked longword, must be word aligned
-	sethi	%hi(hw_copy_limit_4), %o3	! Check copy limit
-	ld	[%o3 + %lo(hw_copy_limit_4)], %o3
-	tst	%o3
-	bz,pn	%icc, .copyin_ne_small		! if zero, disable HW copy
-	  cmp	%o2, %o3			! if length <= limit
-	bleu,pt	%ncc, .copyin_ne_small		! go to small copy
-	  nop
-	ba,pt	%ncc, .copyin_noerr_more	! otherwise go to large copy
-	  nop
-.copyin_ne_8:
-	sethi	%hi(hw_copy_limit_8), %o3	! Check copy limit
-	ld	[%o3 + %lo(hw_copy_limit_8)], %o3
-	tst	%o3
-	bz,pn	%icc, .copyin_ne_small		! if zero, disable HW copy
-	  cmp	%o2, %o3			! if length <= limit
-	bleu,pt	%ncc, .copyin_ne_small		! go to small copy
-	  nop
-	ba,pt	%ncc, .copyin_noerr_more	! otherwise go to large copy
-	  nop
-
-.copyin_ne_small:
-	ldn	[THREAD_REG + T_LOFAULT], %o4
-	tst	%o4
-	bz,pn	%ncc, .sm_do_copyin
-	  nop
-	sethi	%hi(.sm_copyio_noerr), %o5
-	or	%o5, %lo(.sm_copyio_noerr), %o5
-	membar	#Sync				! sync error barrier
-	ba,pt	%ncc, .sm_do_copyin
-	  stn	%o5, [THREAD_REG + T_LOFAULT]	! set/save t_lofault
-
-.copyin_noerr_more:
-	save	%sp, -SA(MINFRAME + HWCOPYFRAMESIZE), %sp
-	sethi	%hi(.copyio_noerr), REAL_LOFAULT
-	ba,pt	%ncc, .do_copyin
-	  or	REAL_LOFAULT, %lo(.copyio_noerr), REAL_LOFAULT
-
-.copyio_noerr:
-	jmp	%l6
-	  restore %g0,0,%g0
-
-.sm_copyio_noerr:
-	membar	#Sync
-	stn	%o4, [THREAD_REG + T_LOFAULT]	! restore t_lofault
-	jmp	%o4
-	  nop
-
-	SET_SIZE(copyin_noerr)
-#endif /* lint */
-
-/*
- * Copy a block of storage - must not overlap (from + len <= to).
- * No fault handler installed (to be called under on_fault())
- */
-
-#if defined(lint)
-
-/* ARGSUSED */
-void
-copyout_noerr(const void *kfrom, void *uto, size_t count)
-{}
-
-#else	/* lint */
-	ENTRY(copyout_noerr)
-
-	cmp	%o2, VIS_COPY_THRESHOLD		! check for leaf rtn case
-	bleu,pt	%ncc, .copyout_ne_small		! go to larger cases
-	  xor	%o0, %o1, %o3			! are src, dst alignable?
-	btst	7, %o3				!
-	bz,pt	%ncc, .copyout_ne_8		! check for longword alignment
-	  nop
-	btst	1, %o3				! 
-	bz,pt	%ncc, .copyout_ne_2		! check for half-word
-	  nop
-	sethi	%hi(hw_copy_limit_1), %o3	! Check copy limit
-	ld	[%o3 + %lo(hw_copy_limit_1)], %o3
-	tst	%o3
-	bz,pn	%icc, .copyout_ne_small		! if zero, disable HW copy
-	  cmp	%o2, %o3			! if length <= limit
-	bleu,pt	%ncc, .copyout_ne_small		! go to small copy
-	  nop
-	ba,pt	%ncc, .copyout_noerr_more	! otherwise go to large copy
-	  nop
-.copyout_ne_2:
-	btst	3, %o3				!
-	bz,pt	%ncc, .copyout_ne_4		! check for word alignment
-	  nop
-	sethi	%hi(hw_copy_limit_2), %o3	! Check copy limit
-	ld	[%o3 + %lo(hw_copy_limit_2)], %o3
-	tst	%o3
-	bz,pn	%icc, .copyout_ne_small		! if zero, disable HW copy
-	  cmp	%o2, %o3			! if length <= limit
-	bleu,pt	%ncc, .copyout_ne_small		! go to small copy
-	  nop
-	ba,pt	%ncc, .copyout_noerr_more	! otherwise go to large copy
-	  nop
-.copyout_ne_4:
-	! already checked longword, must be word aligned
-	sethi	%hi(hw_copy_limit_4), %o3	! Check copy limit
-	ld	[%o3 + %lo(hw_copy_limit_4)], %o3
-	tst	%o3
-	bz,pn	%icc, .copyout_ne_small		! if zero, disable HW copy
-	  cmp	%o2, %o3			! if length <= limit
-	bleu,pt	%ncc, .copyout_ne_small		! go to small copy
-	  nop
-	ba,pt	%ncc, .copyout_noerr_more	! otherwise go to large copy
-	  nop
-.copyout_ne_8:
-	sethi	%hi(hw_copy_limit_8), %o3	! Check copy limit
-	ld	[%o3 + %lo(hw_copy_limit_8)], %o3
-	tst	%o3
-	bz,pn	%icc, .copyout_ne_small		! if zero, disable HW copy
-	  cmp	%o2, %o3			! if length <= limit
-	bleu,pt	%ncc, .copyout_ne_small		! go to small copy
-	  nop
-	ba,pt	%ncc, .copyout_noerr_more	! otherwise go to large copy
-	  nop
-
-.copyout_ne_small:
-	ldn	[THREAD_REG + T_LOFAULT], %o4
-	tst	%o4
-	bz,pn	%ncc, .sm_do_copyout
-	  nop
-	sethi	%hi(.sm_copyio_noerr), %o5
-	or	%o5, %lo(.sm_copyio_noerr), %o5
-	membar	#Sync				! sync error barrier
-	ba,pt	%ncc, .sm_do_copyout
-	stn	%o5, [THREAD_REG + T_LOFAULT]	! set/save t_lofault
-
-.copyout_noerr_more:
-	save	%sp, -SA(MINFRAME + HWCOPYFRAMESIZE), %sp
-	sethi	%hi(.copyio_noerr), REAL_LOFAULT
-	ba,pt	%ncc, .do_copyout
-	  or	REAL_LOFAULT, %lo(.copyio_noerr), REAL_LOFAULT
-
-	SET_SIZE(copyout_noerr)
-#endif /* lint */
-
-
-/*
- * hwblkclr - clears block-aligned, block-multiple-sized regions that are
- * longer than 256 bytes in length using spitfire's block stores.  If
- * the criteria for using this routine are not met then it calls bzero
- * and returns 1.  Otherwise 0 is returned indicating success.
- * Caller is responsible for ensuring use_hw_bzero is true and that
- * kpreempt_disable() has been called.
- */
-#ifdef lint
-/*ARGSUSED*/
-int
-hwblkclr(void *addr, size_t len)
-{ 
-	return(0);
-}
-#else /* lint */
-	! %i0 - start address
-	! %i1 - length of region (multiple of 64)
-	! %l0 - saved fprs
-	! %l1 - pointer to saved %d32 block
-	! %l2 - saved curthread->t_lwp
-
-
-	ENTRY(hwblkclr)
-	! get another window w/space for one aligned block of saved fpregs
-	save	%sp, -SA(MINFRAME + 2*VIS_BLOCKSIZE), %sp
-
-#ifdef ROCK_CR_6654578
-	! Address aligned to 128 byte
-	andcc	%i0, ST_CACHE_ALIGN, %g0
-	bnz,pn  %ncc, .normal_hwblkclr
-	 nop
-	! multiple of 8k len, call page_hwblkclr
-	set	PAGE_MASK, %i3
-	andcc	%i1, %i3, %g0
-	bnz,pn	%ncc, .normal_hwblkclr
-	 nop
-	mov     %i0, %o0
-	call page_hwblkclr
-	 mov     %i1, %o1
-	ret
-	restore %g0, 0, %o0     ! I$ sync not required
-
-.normal_hwblkclr:
-#endif
-	! Must be block-aligned
-	andcc	%i0, (VIS_BLOCKSIZE-1), %g0
-	bnz,pn	%ncc, 1f
-	  nop
-
-	! ... and must be 256 bytes or more
-	cmp	%i1, 256
-	blu,pn	%ncc, 1f
-	  nop
-
-	! ... and length must be a multiple of VIS_BLOCKSIZE
-	andcc	%i1, (VIS_BLOCKSIZE-1), %g0
-	bz,pn	%ncc, 2f
-	  nop
-
-1:	! punt, call bzero but notify the caller that bzero was used
-	mov	%i0, %o0
-	call	bzero
-	mov	%i1, %o1
-	! call rock_sync_icache
-	mov     %i0, %o0
-	call	rock_sync_icache
-	mov     %i0, %o0
-	ret
-	  restore	%g0, 0, %o0 !  did not use block operations
-
-2:	mov	%g0, %l3		! clear flag to say fp regs not saved
-	rd	%fprs, %l0		! check for unused fp
-
-	! FPU enabled ?  If not, enable it.
-	btst	FPRS_FEF, %l0
-	bz,a,pt	%icc, 1f
-	  wr	%g0, FPRS_FEF, %fprs
-
-	! save the FP registers even if DU is not set.
-
-	membar	#Sync
-	add	%fp, STACK_BIAS - 65, %l1
-	and	%l1, -VIS_BLOCKSIZE, %l1
-	stda	%d32, [%l1]ASI_BLK_P
-        ! Set a flag saying fp regs are saved.
-	mov	1, %l3
-
-        ! Need to wait only here for the above save to be completed
-	membar	#StoreStore|#StoreLoad|#LoadStore
-
-1:	wr	%g0, ASI_BLK_P, %asi
-
-	! Clear block
-	movxtod	%g0, %d32
-	movxtod	%g0, %d34
-	fsrc1	%d32, %d36
-	fsrc1	%d32, %d38
-	fsrc1	%d32, %d40
-	fsrc1	%d32, %d42
-	fsrc1	%d32, %d44
-	fsrc1	%d32, %d46
-
-	mov	256, %i3
-	ba,pt	%ncc, .pz_doblock
-	  nop
-
-.pz_blkstart:	
-      ! stda	%d32, [%i0 + 192]%asi  ! in dly slot of branch that got us here
-#ifdef ROCK_CR_6654578
-	prefetcha [%i0 + VIS_COPY_THRESHOLD + 128]%asi, #n_writes
-#endif
-	stda	%d32, [%i0 + 128]%asi
-#ifdef ROCK_CR_6654578
-	prefetcha [%i0 + VIS_COPY_THRESHOLD + 64]%asi, #n_writes
-#endif
-	stda	%d32, [%i0 + 64]%asi
-#ifdef ROCK_CR_6654578
-	prefetcha [%i0 + VIS_COPY_THRESHOLD + 0]%asi, #n_writes
-#endif
-	stda	%d32, [%i0]%asi
-.pz_zinst:
-	add	%i0, %i3, %i0
-	sub	%i1, %i3, %i1
-.pz_doblock:
-#ifdef ROCK_CR_6654578
-	prefetcha [%i0 + VIS_COPY_THRESHOLD + 192]%asi, #n_writes
-#endif
-	cmp	%i1, 256
-	bgeu,a	%ncc, .pz_blkstart
-	  stda	%d32, [%i0 + 192]%asi
-
-	cmp	%i1, 64
-	blu	%ncc, .pz_finish
-	
-	  andn	%i1, (64-1), %i3
-	srl	%i3, 4, %i2		! using blocks, 1 instr / 16 words
-	set	.pz_zinst, %i4
-	sub	%i4, %i2, %i4
-	jmp	%i4
-	  nop
-
-.pz_finish:
-	brz,a	%l3, .pz_finished
-	  wr	%l0, 0, %fprs		! restore fprs
-
-	! restore fpregs from stack
-	ldda	[%l1]ASI_BLK_P, %d32
-	wr	%l0, 0, %fprs		! restore fprs
-
-.pz_finished:
-	membar	#Sync
-	ret
-	  restore	%g0, 0, %o0		! return (bzero or not)
-
-	SET_SIZE(hwblkclr)
-#endif	/* lint */
-
-#ifdef lint
-/*ARGSUSED*/
-void
-hw_pa_bcopy32(uint64_t src, uint64_t dst)
-{}
-#else /*!lint */
-	/*
-	 * Copy 32 bytes of data from src (%o0) to dst (%o1)
-	 * using physical addresses.
-	 */
-	ENTRY_NP(hw_pa_bcopy32)
-	rdpr	%pstate, %g1
-	andn	%g1, PSTATE_IE, %g2
-	wrpr	%g0, %g2, %pstate
-
-	rdpr	%pstate, %g0
-	ldxa	[%o0]ASI_MEM, %o2
-	add	%o0, 8, %o0
-	ldxa	[%o0]ASI_MEM, %o3
-	add	%o0, 8, %o0
-	ldxa	[%o0]ASI_MEM, %o4
-	add	%o0, 8, %o0
-	ldxa	[%o0]ASI_MEM, %o5
-	stxa	%o2, [%o1]ASI_MEM
-	add	%o1, 8, %o1
-	stxa	%o3, [%o1]ASI_MEM
-	add	%o1, 8, %o1
-	stxa	%o4, [%o1]ASI_MEM
-	add	%o1, 8, %o1
-	stxa	%o5, [%o1]ASI_MEM
-
-	retl
-	  wrpr	  %g0, %g1, %pstate
-
-	SET_SIZE(hw_pa_bcopy32)
-
-#endif /* lint */
-
-
-/*
- * Zero a block of storage.
- *
- * uzero is used by the kernel to zero a block in user address space.
- */
-
-
-#if defined(lint)
-
-/* ARGSUSED */
-int
-kzero(void *addr, size_t count)
-{ return(0); }
-
-/* ARGSUSED */
-void
-uzero(void *addr, size_t count)
-{}
-
-#else	/* lint */
-
-	ENTRY(uzero)
-	!
-	! Set a new lo_fault handler only if we came in with one
-	! already specified.
-	!
-	wr	%g0, ASI_USER, %asi
-	ldn	[THREAD_REG + T_LOFAULT], %o5
-	tst	%o5
-	bz,pt	%ncc, .do_zero
-	sethi	%hi(.zeroerr), %o2
-	or	%o2, %lo(.zeroerr), %o2
-	membar	#Sync
-	ba,pt	%ncc, .do_zero
-	stn	%o2, [THREAD_REG + T_LOFAULT]
-
-	ENTRY(kzero)
-	!
-	! Always set a lo_fault handler
-	!
-	wr	%g0, ASI_P, %asi
-	ldn	[THREAD_REG + T_LOFAULT], %o5
-	sethi	%hi(.zeroerr), %o2
-	or	%o5, LOFAULT_SET, %o5
-	or	%o2, %lo(.zeroerr), %o2
-	membar	#Sync
-	ba,pt	%ncc, .do_zero
-	stn	%o2, [THREAD_REG + T_LOFAULT]
-
-/*
- * We got here because of a fault during kzero or if
- * uzero or bzero was called with t_lofault non-zero.
- * Otherwise we've already run screaming from the room.
- * Errno value is in %g1. Note that we're here iff
- * we did set t_lofault.
- */
-.zeroerr:
-	!
-	! Undo asi register setting. Just set it to be the
-        ! kernel default without checking.
-	!
-	wr	%g0, ASI_P, %asi
-
-	!
-	! We did set t_lofault. It may well have been zero coming in.
-	!
-1:
-	tst	%o5
-	membar #Sync
-	bne,pn	%ncc, 3f		
-	andncc	%o5, LOFAULT_SET, %o5
-2:
-	!
-	! Old handler was zero. Just return the error.
-	!
-	retl				! return
-	mov	%g1, %o0		! error code from %g1
-3:
-	!
-	! We're here because %o5 was non-zero. It was non-zero
-	! because either LOFAULT_SET was present, a previous fault
-	! handler was present or both. In all cases we need to reset
-	! T_LOFAULT to the value of %o5 after clearing LOFAULT_SET
-	! before we either simply return the error or we invoke the
-	! previously specified handler.
-	!
-	be	%ncc, 2b
-	stn	%o5, [THREAD_REG + T_LOFAULT]
-	jmp	%o5			! goto real handler
-	  nop
-	SET_SIZE(kzero)
-	SET_SIZE(uzero)
-
-#endif	/* lint */
-
-/*
- * Zero a block of storage.
- */
-
-#if defined(lint)
-
-/* ARGSUSED */
-void
-bzero(void *addr, size_t count)
-{}
-
-#else	/* lint */
-
-	ENTRY(bzero)
-
-	wr	%g0, ASI_P, %asi
-	ldn	[THREAD_REG + T_LOFAULT], %o5	! save old vector
-	tst	%o5
-	bz,pt	%ncc, .do_zero
-	sethi	%hi(.zeroerr), %o2
-	or	%o2, %lo(.zeroerr), %o2
-	membar	#Sync				! sync error barrier
-	stn	%o2, [THREAD_REG + T_LOFAULT]	! install new vector
-
-.do_zero:
-	/*
-	 * If 0 bytes to xfer return
-	 */
-	brnz	%o1, continue_bzero
-	nop
-	ba	.bzero_exit
-	nop
-continue_bzero:
-	prefetch	[%o0],2
-	cmp	%o1, 8
-	bge,pt	%ncc, xfer_8_or_more
-	nop
-
-.byteclr:
-	deccc	%o1			! byte clearing loop
-	stba	%g0, [%o0]%asi
-	bgu,pt	%ncc, .byteclr
-	inc	%o0
-	ba	.bzero_exit
-	nop
-
-xfer_8_or_more:
-	andcc	%o0, 7, %o3		! is add aligned on a 8 byte bound
-	brz,pt	%o3, blkchk		
-	sub	%o3, 8, %o3		! -(bytes till double aligned)
-	add	%o1, %o3, %o1		! update o1 with new count
-1:
-	stba	%g0, [%o0]%asi
-	inccc	%o3
-	bl,pt	%ncc, 1b
-	inc	%o0
-
-	! Now addr is double word aligned
-blkchk:
-	cmp     %o1, 767		! if large count use Block ld/st
-	bg,pt	%ncc,blkwr
-	nop
-	and	%o1, 24, %o3		! o3 is {0, 8, 16, 24}
-	brz	%o3, skip_dw_loop
-	nop
-1:	subcc	%o3, 8, %o3		! double-word loop
-	stxa	%g0, [%o0]%asi
-	bgu,pt %ncc, 1b
-	add	%o0, 8, %o0
-skip_dw_loop:
-	andncc	%o1, 31, %o4		! o4 has 32 byte aligned count
-	brz,pn	%o4, 3f
-	nop
-	ba	loop_32byte
-	nop
-
-	.align	ICACHE_LINE_SIZE
-
-loop_32byte:
-	subcc	%o4, 32, %o4		! main loop, 32 bytes per iteration
-	stxa	%g0, [%o0]%asi
-	stxa	%g0, [%o0 + 8]%asi
-	stxa	%g0, [%o0 + 16]%asi
-	stxa	%g0, [%o0 + 24]%asi
-	bne,pt  %ncc, loop_32byte
-	add	%o0, 32, %o0
-3:	
-	and	%o1, 7, %o1		! o1 has the remaining bytes (<8)
-	brnz	%o1, .byteclr
-	nop
-	ba	.bzero_exit
-	nop
-blkwr:
-	sub     %o0,1,%o3
-	andn    %o3,0x7f,%o4
-	add     %o4,128,%o4
-	prefetch [%o4],2		!prefetch next 128b
-	prefetch [%o4+64],2
-	prefetch [%o4+(2*64)],2	
-	prefetch [%o4+(3*64)],2
-
-	andcc   %o0,0x7f,%o3	    !o3=0 , means it is already 128 align
-	brz,pn  %o3,aligned_on_128_bzero
-	sub     %o3,128,%o3
-
-	add     %o1,%o3,%o1
-align_to_128_bzero:
-	stxa    %g0,[%o0]%asi
-	addcc   %o3,8,%o3
-	bl,pt   %ncc,align_to_128_bzero
-	add     %o0,8,%o0
-
-
-
-aligned_on_128_bzero:
-	! if the addr is 512 byte aligned and bytes to zero
-	! are greater than or equal to 4096 do a stingray_optimized_bzero
-	andcc	%o0,0x1ff,%o3	! Is addr 512 byte aligned ?
-	brnz,pn	%o3, 4f
-	mov	%o1,%g5
-	set	4096, %g4
-	subcc	%o1, %g4, %g0
-	bge,pn	%ncc, stingray_optimized_bzero
-	nop
-4:
-	! addr(dest. buffer) is not aligned to 512 byte
-	! if the number of bytes to zero are less than 4096 after
-	! aligning the addr to 512 byte then do interleave128_bzero.
-
-	sub	%o0,8,%o4
-	andn 	%o4,0x1ff,%o3
-	add 	%o3,0x200,%o3	!o3 = addr aligned to 512 byte.
-	sub 	%o3,%o0,%o3	!o3 = number of bytes to zero to align addr to 512
-	sub	%o1,%o3,%g5	!g5 = bytes to zero from 512 byte aligned addr
-	set	4096, %g4
-	subcc	%g5, %g4, %g0
-	bge,pn	%ncc,6f
-	nop
-	! clear %g5 to indicate that there is no need to do
-	! stingray_optimized_bzero
-	mov	%g0, %g5
-	add	%o0, %o1, %o4
-	ba	interleave128_bzero
-	nop
-6:
-	! %g5 contains the number of bytes to zero after 512 byte alignment
-	! We zero the bytes in dest. buffer until it is 512 byte aligned
-	! and call stingray_optimized_bzero
-	! if the nuber of bytes to zero(until 512 alignment) is less than 256
-	! we call bzero_word, else we call interleave128_bzero
-	mov	%o3, %o1
-	subcc 	%o3,256,%g0
-	bl,pn	%ncc,bzero_word
-	add     %o0,%o1,%o4	     !cal the last byte to write %o4
-	ba	interleave128_bzero
-	nop
-
-	.align	64
-interleave128_bzero:
-	! %o0 has the dest. buffer addr
-	! %o1 has the number of bytes to zero
-	! %o4 has the addr of the dest. buffer at or beyond which no write
-	! is to be done.
-	! %g5 has the number of bytes to zero using stingray_optimized_bzero
-
-	add	%o0, 256, %o3
-	prefetch [%o3], 2	!1st 64 byte line of next 256 byte block
-	add	%o0, 384, %o3
-	prefetch [%o3], 2	!3rd 64 byte line of next 256 byte block
-	add	%o0, 320, %o3
-	prefetch [%o3], 2	!2nd 64 byte line of next 256 byte block
-	add	%o0, 448, %o3
-	prefetch [%o3], 2	!4th 64 byte line of next 256 byte block
-	mov	%o0, %o3
-	stxa     %g0,[%o3]%asi	!1st 64 byte line
-	add     %o0,128,%o3
-	stxa     %g0,[%o3]%asi	!3rd 64 byte line
-	add     %o0,8,%o3
-	stxa     %g0,[%o3]%asi
-	add     %o3,128,%o3
-	stxa     %g0,[%o3]%asi
-	add     %o0,(2 * 8),%o3
-	stxa     %g0,[%o3]%asi
-	add     %o3,128 ,%o3
-	stxa     %g0,[%o3]%asi
-	add     %o0,(3 * 8),%o3
-	stxa     %g0,[%o3]%asi
-	add     %o3,128,%o3
-	stxa     %g0,[%o3]%asi
-	add     %o0,(4 * 8),%o3
-	stxa     %g0,[%o3]%asi
-	add     %o3,128,%o3
-	stxa     %g0,[%o3]%asi
-	add     %o0,(5 * 8),%o3
-	stxa     %g0,[%o3]%asi
-	add     %o3,128,%o3
-	stxa     %g0,[%o3]%asi
-	add     %o0,(6 * 8),%o3
-	stxa     %g0,[%o3]%asi
-	add     %o3,128,%o3
-	stxa     %g0,[%o3]%asi
-	add     %o0,(7 * 8),%o3
-	stxa     %g0,[%o3]%asi
-	add     %o3,128,%o3
-	stxa     %g0,[%o3]%asi
-	add     %o0,(8 * 8),%o3
-	stxa     %g0,[%o3]%asi
-	add     %o3,128,%o3
-	stxa     %g0,[%o3]%asi
-	add     %o0,(9 * 8),%o3
-	stxa     %g0,[%o3]%asi
-	add     %o3,128,%o3
-	stxa     %g0,[%o3]%asi
-	add     %o0,(10 * 8),%o3
-	stxa     %g0,[%o3]%asi
-	add     %o3,128,%o3
-	stxa     %g0,[%o3]%asi
-	add     %o0,(11 * 8),%o3
-	stxa     %g0,[%o3]%asi
-	add     %o3,128,%o3
-	stxa     %g0,[%o3]%asi
-	add     %o0,(12 * 8),%o3
-	stxa     %g0,[%o3]%asi
-	add     %o3,128,%o3
-	stxa     %g0,[%o3]%asi
-	add     %o0,(13 * 8),%o3
-	stxa     %g0,[%o3]%asi
-	add     %o3,128,%o3
-	stxa     %g0,[%o3]%asi
-	add     %o0,(14 * 8),%o3
-	stxa     %g0,[%o3]%asi
-	add     %o3,128,%o3
-	stxa     %g0,[%o3]%asi
-	add     %o0,(15 * 8),%o3
-	stxa     %g0,[%o3]%asi
-	add     %o3,128,%o3
-	stxa     %g0,[%o3]%asi
-	! check if the next 256 byte copy will not exceed the number of
-	! bytes remaining to be copied.
-	! %g4 points to the dest buffer after copying 256 bytes more.
-	! %o4 points to dest. buffer at or beyond which no writes should be done.
-	add     %o0,512,%g4
-	subcc   %o4,%g4,%g0
-	bge,pt  %ncc,interleave128_bzero
-	add     %o0,256,%o0
-
-bzero_word:
-	and     %o1,255,%o3
-	and     %o3,7,%o1
-
-	! Set the remaining doubles
-	subcc   %o3, 8, %o3		! Can we store any doubles?
-	bl,pn  %ncc, 6f
-	and	%o1, 7, %o1		! calc bytes left after doubles
-
-5:	
-	stxa	%g0, [%o0]%asi
-	subcc   %o3, 8, %o3
-	bge,pt	%ncc, 5b
-	add     %o0, 8, %o0      
-6:
-	! Set the remaining bytes
-	brz	%o1,  can_we_do_stingray_optimized_bzero
-	
-7:
-	deccc	%o1			! byte clearing loop
-	stba	%g0, [%o0]%asi
-	bgu,pt	%ncc, 7b
-	inc	%o0
-can_we_do_stingray_optimized_bzero:
-	mov	%g5, %o1
-	brnz,pn	%o1, stingray_optimized_bzero
-	nop
-	
-	ba	.bzero_exit
-	nop
-
-stingray_optimized_bzero:
-	save	%sp, -SA(MINFRAME), %sp
-	mov	%i0, %o0
-	mov	%i1, %o1
-	mov	%i2, %o2
-	mov	%i3, %o3
-	mov	%i5, %o5
-init:
-	set     4096,%o2
-
-	prefetch [%o0+0],2
-	prefetch [%o0+(64*1)],2
-	prefetch [%o0+(64*2)],2
-	prefetch [%o0+(64*3)],2
-	prefetch [%o0+(64*4)],2
-	prefetch [%o0+(64*5)],2
-	prefetch [%o0+(64*6)],2
-	prefetch [%o0+(64*7)],2
-	prefetch [%o0+(64*8)],2
-	prefetch [%o0+(64*9)],2
-	prefetch [%o0+(64*10)],2
-	prefetch [%o0+(64*11)],2
-	prefetch [%o0+(64*12)],2
-	prefetch [%o0+(64*13)],2
-	prefetch [%o0+(64*14)],2
-	prefetch [%o0+(64*15)],2
-	ba      stingray_optimized_4k_zero_loop
-	add     %o0,%g5,%g5
-	! Local register usage:
-	! prefetching into L1 cache.
-	! %l3   dest. buffer at start of inner loop.
-	! %l5   iteration counter to make buddy loop execute 2 times.
-	! %l6   iteration counter to make inner loop execute 4 times.
-	! %l7   address at far ahead of current dest. buffer for prefetching
-	!	into L2 cache.
-
-	.align 64
-stingray_optimized_4k_zero_loop:
-	set      2,%l5
-	add      %o0, 0, %l3
-bzero_buddyloop:
-	set      PF_FAR, %g4
-	add      %o0, %g4, %l7
-
-	!  Prefetch ahead by 2 pages to get TLB entry in advance.
-	set      2*PF_FAR, %g4
-	add      %o0, %g4, %g4
-	prefetch [%g4+%g0],2
-
-	set      4,%l6
-	set      0, %g4
-
-	! Each iteration of the inner loop below writes 8 sequential lines.
-	! This loop is iterated 4 times, to move a total of 32 lines, all of
-	! which have the same value of PA[9], so we increment the base 
-	! address by 1024 bytes in each iteration, which varies PA[10].
-bzero_innerloop:
-	add	%o0, PF_FAR, %o3
-	prefetch [%o3],2
-	add	%o3, 64, %o3
-	prefetch [%o3],2
-	add	%o3, 64, %o3
-	prefetch [%o3],2
-	add	%o3, 64, %o3
-	prefetch [%o3],2
-	add	%o3, 64, %o3
-	prefetch [%o3],2
-	add	%o3, 64, %o3
-	prefetch [%o3],2 
-	add	%o3, 64, %o3
-	prefetch [%o3],2
-	add	%o3, 64, %o3
-	prefetch [%o3],2
-
-	mov	%o0, %o3
-	stxa     %g0,[%o3]%asi	!1st 64 byte line
-	add     %o0,128,%o3
-	stxa     %g0,[%o3]%asi	!3rd 64 byte line
-	add     %o0,8,%o3
-	stxa     %g0,[%o3]%asi
-	add     %o3,128,%o3
-	stxa     %g0,[%o3]%asi
-	add     %o0,(2 * 8),%o3
-	stxa     %g0,[%o3]%asi
-	add     %o3,128 ,%o3
-	stxa     %g0,[%o3]%asi
-	add     %o0,(3 * 8),%o3
-	stxa     %g0,[%o3]%asi
-	add     %o3,128,%o3
-	stxa     %g0,[%o3]%asi
-	add     %o0,(4 * 8),%o3
-	stxa     %g0,[%o3]%asi
-	add     %o3,128,%o3
-	stxa     %g0,[%o3]%asi
-	add     %o0,(5 * 8),%o3
-	stxa     %g0,[%o3]%asi
-	add     %o3,128,%o3
-	stxa     %g0,[%o3]%asi
-	add     %o0,(6 * 8),%o3
-	stxa     %g0,[%o3]%asi
-	add     %o3,128,%o3
-	stxa     %g0,[%o3]%asi
-	add     %o0,(7 * 8),%o3
-	stxa     %g0,[%o3]%asi
-	add     %o3,128,%o3
-	stxa     %g0,[%o3]%asi
-	add     %o0,(8 * 8),%o3
-	stxa     %g0,[%o3]%asi
-	add     %o3,128,%o3
-	stxa     %g0,[%o3]%asi
-	add     %o0,(9 * 8),%o3
-	stxa     %g0,[%o3]%asi
-	add     %o3,128,%o3
-	stxa     %g0,[%o3]%asi
-	add     %o0,(10 * 8),%o3
-	stxa     %g0,[%o3]%asi
-	add     %o3,128,%o3
-	stxa     %g0,[%o3]%asi
-	add     %o0,(11 * 8),%o3
-	stxa     %g0,[%o3]%asi
-	add     %o3,128,%o3
-	stxa     %g0,[%o3]%asi
-	add     %o0,(12 * 8),%o3
-	stxa     %g0,[%o3]%asi
-	add     %o3,128,%o3
-	stxa     %g0,[%o3]%asi
-	add     %o0,(13 * 8),%o3
-	stxa     %g0,[%o3]%asi
-	add     %o3,128,%o3
-	stxa     %g0,[%o3]%asi
-	add     %o0,(14 * 8),%o3
-	stxa     %g0,[%o3]%asi
-	add     %o3,128,%o3
-	stxa     %g0,[%o3]%asi
-	add     %o0,(15 * 8),%o3
-	stxa     %g0,[%o3]%asi
-	add     %o3,128,%o3
-	stxa     %g0,[%o3]%asi
-
-	add     %o0,256,%o0
-
-	mov	%o0, %o3
-	stxa     %g0,[%o3]%asi	!1st 64 byte line
-	add     %o0,128,%o3
-	stxa     %g0,[%o3]%asi	!3rd 64 byte line
-	add     %o0,8,%o3
-	stxa     %g0,[%o3]%asi
-	add     %o3,128,%o3
-	stxa     %g0,[%o3]%asi
-	add     %o0,(2 * 8),%o3
-	stxa     %g0,[%o3]%asi
-	add     %o3,128 ,%o3
-	stxa     %g0,[%o3]%asi
-	add     %o0,(3 * 8),%o3
-	stxa     %g0,[%o3]%asi
-	add     %o3,128,%o3
-	stxa     %g0,[%o3]%asi
-	add     %o0,(4 * 8),%o3
-	stxa     %g0,[%o3]%asi
-	add     %o3,128,%o3
-	stxa     %g0,[%o3]%asi
-	add     %o0,(5 * 8),%o3
-	stxa     %g0,[%o3]%asi
-	add     %o3,128,%o3
-	stxa     %g0,[%o3]%asi
-	add     %o0,(6 * 8),%o3
-	stxa     %g0,[%o3]%asi
-	add     %o3,128,%o3
-	stxa     %g0,[%o3]%asi
-	add     %o0,(7 * 8),%o3
-	stxa     %g0,[%o3]%asi
-	add     %o3,128,%o3
-	stxa     %g0,[%o3]%asi
-	add     %o0,(8 * 8),%o3
-	stxa     %g0,[%o3]%asi
-	add     %o3,128,%o3
-	stxa     %g0,[%o3]%asi
-	add     %o0,(9 * 8),%o3
-	stxa     %g0,[%o3]%asi
-	add     %o3,128,%o3
-	stxa     %g0,[%o3]%asi
-	add     %o0,(10 * 8),%o3
-	stxa     %g0,[%o3]%asi
-	add     %o3,128,%o3
-	stxa     %g0,[%o3]%asi
-	add     %o0,(11 * 8),%o3
-	stxa     %g0,[%o3]%asi
-	add     %o3,128,%o3
-	stxa     %g0,[%o3]%asi
-	add     %o0,(12 * 8),%o3
-	stxa     %g0,[%o3]%asi
-	add     %o3,128,%o3
-	stxa     %g0,[%o3]%asi
-	add     %o0,(13 * 8),%o3
-	stxa     %g0,[%o3]%asi
-	add     %o3,128,%o3
-	stxa     %g0,[%o3]%asi
-	add     %o0,(14 * 8),%o3
-	stxa     %g0,[%o3]%asi
-	add     %o3,128,%o3
-	stxa     %g0,[%o3]%asi
-	add     %o0,(15 * 8),%o3
-	stxa     %g0,[%o3]%asi
-	add     %o3,128,%o3
-	stxa     %g0,[%o3]%asi
-
-	subcc   %l6,1,%l6	! Decrement the inner loop counter.
-
-	! Now increment by 256 + 512 so we don't toggle PA[9]
-	add     %o0, 768, %o0
-
-	bg,pt   %ncc,bzero_innerloop
-	nop
-	! END OF INNER LOOP
-
-	subcc   %l5,1,%l5
-	add     %l3, 512, %o0	! increment %o0 to first buddy line of dest.
-	bg,pt   %ncc, bzero_buddyloop
-	nop
-	add     %o0, 3584, %o0	! Advance both base addresses by 4k
-	add %o0,%o2,%i5
-	subcc %g5,%i5,%g0
-	bge,pt   %ncc,stingray_optimized_4k_zero_loop
-	nop
-
-	! stingray_optimized_bzero_ends_here
-
-	mov	%o0, %i0
-	mov	%o1, %i1
-	mov	%o2, %i2
-	mov	%o3, %i3
-	mov	%o5, %i5
-	restore
-	sub	%g5,%o0,%o1	!how many byte left
-	brz,pn	%o1,.bzero_exit
-	mov	%g0,%g5
-	add     %o0,%o1,%o4	!cal the last byte to write %o4
-	subcc	%o1,256,%g0
-	bge,pt	%ncc,interleave128_bzero
-	mov	%g0,%g5
-	
-	ba	bzero_word
-	nop
-
-.bzero_exit:
-	!
-	! We're just concerned with whether t_lofault was set
-	! when we came in. We end up here from either kzero()
-	! or bzero(). kzero() *always* sets a lofault handler.
-	! It ors LOFAULT_SET into %o5 to indicate it has done
-	! this even if the value of %o5 is otherwise zero.
-	! bzero() sets a lofault handler *only* if one was
-	! previously set. Accordingly we need to examine
-	! %o5 and if it is non-zero be sure to clear LOFAULT_SET
-	! before resetting the error handler.
-	!
-	tst	%o5
-	bz	%ncc, 1f
-	andn	%o5, LOFAULT_SET, %o5
-	membar	#Sync				! sync error barrier
-	stn	%o5, [THREAD_REG + T_LOFAULT]	! restore old t_lofault
-1:
-	retl
-	clr	%o0			! return (0)
-
-	SET_SIZE(bzero)
-#endif	/* lint */
-
-#ifdef ROCK_CR_6654578
-/* This code tries to maximize bandwidth by being clever about accessing
- * the two cache lines that are BUDDY PAIRS in the L3 cache.  When line 0
- * of a pair is accessed, it will take hundreds of cycles to get the line
- * from memory, which brings in a 128-byte line to L3.  Until the line is
- * installed in L3, any other access to that line (such as buddy line 1)
- * is blocked.  For best throughput, we access many lines that are the first
- * of their buddy pairs, and only after many such accesses have been made,
- * we access the sequence of second buddy pair lines.  Hopefully the second
- * set of accesses comes after the L3 lines are installed, so the accesses
- * hitin L3 without being delayed.  This should yield better throughput. 
- * To keep this code simple, we assume the addresses given are aligned at
- * least on a 128 byte boundary, and the length is assumed to be a multiple
- * of 8k bytes.
- */
-
-#ifdef lint
-/*ARGSUSED*/
-int
-page_hwblkclr(void *addr, size_t len)
-{ 
-	return(0);
-}
-#else /* lint */
-	ENTRY(page_hwblkclr)
-	save	%sp, -SA(MINFRAME + 2*VIS_BLOCKSIZE), %sp
-
-	! %i0 address
-	! %i1 len
-	
-	rd      %fprs, %l0
-	mov     %g0, %l2		! clear flag to say fp regs not saved
-
-	! FPU enabled ?  If not, enable it.
-	btst    FPRS_FEF, %l0
-	bz,a,pt   %icc, 1f
-	  wr      %g0, FPRS_FEF, %fprs
-
-        ! save in-use fpregs on stack
-
-        add     %fp, STACK_BIAS - 65, %l1       ! get stack frame for fp regs
-        and     %l1, -VIS_BLOCKSIZE, %l1        ! block align frame
-        stda    %d32, [%l1]ASI_BLK_P            ! %l1 = addr of saved fp regs
-
-        ! Set a flag saying fp regs are saved.
-        mov     1, %l2
-
-        ! enable fp
-
-1:      membar  #StoreStore|#StoreLoad|#LoadStore
-
-        movxtod %g0, %d32
-        movxtod %g0, %d34
-        movxtod %g0, %d36
-        movxtod %g0, %d38
-        movxtod %g0, %d40
-        movxtod %g0, %d42
-        movxtod %g0, %d44
-        movxtod %g0, %d46
-
-        ba      myloop2
-        srl     %i1,12,%i1
-.align 64
-myloop2:
-        mov      2,%l5
-        mov      %i0, %l3 
-buddyloop:
-        set      4096, %l4    
-        add      %i0, %l4, %l4
-        prefetcha [%l4]ASI_BLK_P, #n_writes
-        mov      32,%l6
-innerloop:          
-
-        subcc   %l6,1,%l6
-        stda    %d32,[%i0]ASI_BLK_P
-        bg,pt   %icc,innerloop
-        add     %i0, 128, %i0
-
-        subcc   %l5,1,%l5
-        add     %l3, 64, %i0
-        bg,pt   %icc,buddyloop
-	nop
-	subcc	%i1,1,%i1
-        add     %i0, 4032, %i0
-        bg,pt   %icc,myloop2
-        nop
-
-        brz,a   %l2, 2f
-          wr    %l0, 0, %fprs           ! restore fprs
-
-        ! restore fpregs from stack
-        ldda    [%l1]ASI_BLK_P, %d32
-
-        wr      %l0, 0, %fprs           ! restore fprs
-2:
-        membar  #Sync
-
-        ret
-        restore  %g0, 0, %o0
-
-	SET_SIZE(page_hwblkclr)
-#endif	/* lint */
-#endif	/* ROCK_CR_6654578 */
-
-#if defined(lint)
-
-int use_hw_bcopy = 1;
-int use_hw_bzero = 1;
-uint_t hw_copy_limit_1 = 0x100;
-uint_t hw_copy_limit_2 = 0x200;
-uint_t hw_copy_limit_4 = 0x400;
-uint_t hw_copy_limit_8 = 0x400;
-
-#else /* !lint */
-
-	DGDEF(use_hw_bcopy)
-	.word	1
-	DGDEF(use_hw_bzero)
-	.word	1
-	DGDEF(hw_copy_limit_1)
-	.word	0x100
-	DGDEF(hw_copy_limit_2)
-	.word	0x200
-	DGDEF(hw_copy_limit_4)
-	.word	0x400
-	DGDEF(hw_copy_limit_8)
-	.word	0x400
-
-
-	.align	64
-	.section ".text"
-#endif /* !lint */
--- a/usr/src/uts/sun4v/io/px/px_lib4v.c	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/uts/sun4v/io/px/px_lib4v.c	Mon Aug 10 10:43:48 2009 -0400
@@ -41,8 +41,6 @@
 #include <sys/hotplug/pci/pcihp.h>
 #include "px_lib4v.h"
 #include "px_err.h"
-#include <vm/vm_dep.h>
-#include <vm/hat_sfmmu.h>
 
 /* mask for the ranges property in calculating the real PFN range */
 uint_t px_ranges_phi_mask = ((1 << 28) -1);
@@ -547,9 +545,6 @@
 	else
 		sync_dir = HVIO_DMA_SYNC_DIR_TO_DEV;
 
-	if (force_sync_icache_after_dma == 0 && !icache_is_coherent)
-		sync_dir |= HVIO_DMA_SYNC_DIR_NO_ICACHE_FLUSH;
-
 	off += mp->dmai_offset;
 	pg_off = off & MMU_PAGEOFFSET;
 
@@ -560,27 +555,12 @@
 	end = MMU_BTOPR(off + len - 1);
 	for (idx = MMU_BTOP(off); idx < end; idx++,
 	    len -= bytes_synced, pg_off = 0) {
-		size_t bytes_to_sync =  MIN(len, MMU_PAGESIZE - pg_off);
-
-		while (hvio_dma_sync(hdl,
-		    MMU_PTOB(PX_GET_MP_PFN(mp, idx)) + pg_off,
-		    bytes_to_sync, sync_dir, &bytes_synced) != H_EOK) {
-
-			if (!(sync_dir & HVIO_DMA_SYNC_DIR_NO_ICACHE_FLUSH)) {
-				bytes_synced = 0;
-				break;
-			}
+		size_t bytes_to_sync = bytes_to_sync =
+		    MIN(len, MMU_PAGESIZE - pg_off);
 
-			/*
-			 * Some versions of firmware do not support
-			 * this sync_dir flag. If the call fails clear
-			 * the flag and retry the call. Also, set the
-			 * global so that we dont set the sync_dir
-			 * flag again.
-			 */
-			sync_dir &= ~HVIO_DMA_SYNC_DIR_NO_ICACHE_FLUSH;
-			force_sync_icache_after_dma = 1;
-		}
+		if (hvio_dma_sync(hdl, MMU_PTOB(PX_GET_MP_PFN(mp, idx)) +
+		    pg_off, bytes_to_sync, sync_dir, &bytes_synced) != H_EOK)
+			break;
 
 		DBG(DBG_LIB_DMA, dip, "px_lib_dma_sync: Called hvio_dma_sync "
 		    "ra = %p bytes to sync = %x bytes synced %x\n",
--- a/usr/src/uts/sun4v/io/px/px_lib4v.h	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/uts/sun4v/io/px/px_lib4v.h	Mon Aug 10 10:43:48 2009 -0400
@@ -97,8 +97,7 @@
 
 #define	PX_VPCI_MINOR_VER_0	0x0ull
 #define	PX_VPCI_MINOR_VER_1	0x1ull
-#define	PX_VPCI_MINOR_VER_2	0x2ull
-#define	PX_VPCI_MINOR_VER	PX_VPCI_MINOR_VER_2
+#define	PX_VPCI_MINOR_VER	PX_VPCI_MINOR_VER_1
 
 extern uint64_t hvio_config_get(devhandle_t dev_hdl, pci_device_t bdf,
     pci_config_offset_t off, pci_config_size_t size, pci_cfg_data_t *data_p);
--- a/usr/src/uts/sun4v/ml/hcall.s	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/uts/sun4v/ml/hcall.s	Mon Aug 10 10:43:48 2009 -0400
@@ -20,7 +20,7 @@
  */
 
 /*
- * Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
+ * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
  * Use is subject to license terms.
  */
 
@@ -321,20 +321,10 @@
 
 /*ARGSUSED*/
 uint64_t
-hv_mem_iflush(uint64_t real_addr, uint64_t length, uint64_t *flushed_len)
-{ return (0); }
-
-/*ARGSUSED*/
-uint64_t
-hv_mem_iflush_all()
-{ return (0); }
-
-/*ARGSUSED*/
-uint64_t
 hv_tm_enable(uint64_t enable)
 { return (0); }
 
-/*ARGSUSED*/
+/*ARGSUSED*/	
 uint64_t
 hv_mach_set_watchdog(uint64_t timeout, uint64_t *time_remaining)
 { return (0); }
@@ -742,34 +732,7 @@
 	SET_SIZE(hv_mem_sync)
 
 	/*
-	 * HV_MEM_IFLUSH
-	 * 	arg0 memory real address
-	 * 	arg1 flush length
-	 *	ret0 status
-	 *	ret1 flushed length
-	 *
-	 */
-	ENTRY(hv_mem_iflush)
-	mov	%o2, %o4
-	mov	HV_MEM_IFLUSH, %o5
-	ta	FAST_TRAP
-	retl
-	stx	%o1, [%o4]
-	SET_SIZE(hv_mem_iflush)
-
-	/*
-	 * HV_MEM_IFLUSH_ALL
-	 *	ret0 status
-	 */
-	ENTRY(hv_mem_iflush_all)
-	mov	HV_MEM_IFLUSH_ALL, %o5
-	ta	FAST_TRAP
-	retl
-	nop
-	SET_SIZE(hv_mem_iflush_all)
-
-	/*
-	 * uint64_t hv_rk_tm_enable(uint64_t enable)
+	 * uint64_t hv_tm_enable(uint64_t enable)
 	 */
 	ENTRY(hv_tm_enable)
 	mov	HV_TM_ENABLE, %o5
--- a/usr/src/uts/sun4v/ml/mach_interrupt.s	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/uts/sun4v/ml/mach_interrupt.s	Mon Aug 10 10:43:48 2009 -0400
@@ -19,7 +19,7 @@
  * CDDL HEADER END
  */
 /*
- * Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
+ * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
  * Use is subject to license terms.
  */
 
@@ -41,20 +41,7 @@
 #include <sys/error.h>
 #include <sys/mmu.h>
 #include <vm/hat_sfmmu.h>
-
 #define	INTR_REPORT_SIZE	64
-#define	ERRH_ASI_SHIFT		56		/* bits[63:56]; see errh_er_t */
-#define	NRE_ASI			0x00000001	/* ASI observed in attr field */
-#define	NRE_CTX			0x00000002	/* ASI equals ASI_MMU_CTX */
-#define	CRP_OBSERVED		(NRE_ASI | NRE_CTX)
-
-#define	OR_MCPU_NRE_ERROR(reg1,reg2,val)	\
-	add	reg1, CPU_MCPU, reg2;		\
-	add	reg2, MCPU_NRE_ERROR, reg2;	\
-	ldxa	[reg2]ASI_MEM, reg1;		\
-	or	reg1, val, reg1;		\
-	stxa	reg1, [reg2]ASI_MEM
-	
 
 #ifdef TRAPTRACE
 #include <sys/traptrace.h>
@@ -533,10 +520,6 @@
 
 	CPU_PADDR(%g1, %g4)			! %g1 = cpu struct paddr
 
-	add	%g1, CPU_MCPU, %g4
-	add	%g4, MCPU_NRE_ERROR, %g4	! &CPU->cpu_m.cpu_nre_error
-	stxa	%g0, [%g4]ASI_MEM		! clear cpu_nre_error
-
 2:	set	CPU_NRQ_BASE_OFF, %g4
 	ldxa	[%g1 + %g4]ASI_MEM, %g4		! %g4 = queue base PA
 	add	%g6, %g4, %g4			! %g4 = PA of ER in Q		
@@ -548,7 +531,7 @@
 	bne,pn	%xcc, 1f			! first 8 byte is not 0
 	nop
 
-	/* BEGIN: move 64 bytes from queue to buf */
+	/* Now we can move 64 bytes from queue to buf */
 	set	0, %g5
 	ldxa	[%g4 + %g5]ASI_MEM, %g1
 	stxa	%g1, [%g7 + %g5]ASI_MEM		! byte 0 - 7	
@@ -558,14 +541,7 @@
 	add	%g5, 8, %g5
 	ldxa	[%g4 + %g5]ASI_MEM, %g1
 	stxa	%g1, [%g7 + %g5]ASI_MEM		! byte 16 - 23
-	/* Check for sun4v ASI */
-	and	%g1, ERRH_ATTR_ASI, %g1		! isolate ASI bit
-	cmp	%g1, ERRH_ATTR_ASI
-	bne,pt	%xcc, 3f
-	  nop
-	CPU_PADDR(%g1, %g5)
-	OR_MCPU_NRE_ERROR(%g1, %g5, NRE_ASI)	! cpu_nre_error |= NRE_ASI
-3:	set	24, %g5
+	add	%g5, 8, %g5
 	ldxa	[%g4 + %g5]ASI_MEM, %g1
 	stxa	%g1, [%g7 + %g5]ASI_MEM		! byte 24 - 31
 	add	%g5, 8, %g5
@@ -574,20 +550,12 @@
 	add	%g5, 8, %g5
 	ldxa	[%g4 + %g5]ASI_MEM, %g1
 	stxa	%g1, [%g7 + %g5]ASI_MEM		! byte 40 - 47
-	/* Check for ASI==ASI_MMU_CTX */
-	srlx	%g1, ERRH_ASI_SHIFT, %g1	! isolate the ASI field
-	cmp	%g1, ASI_MMU_CTX		! ASI=0x21 for CRP
-	bne,pt	%xcc, 4f
-	  nop
-	CPU_PADDR(%g1, %g5)
-	OR_MCPU_NRE_ERROR(%g1, %g5, NRE_CTX)	! cpu_nre_error |= NRE_CTX
-4:	set	48, %g5
+	add	%g5, 8, %g5
 	ldxa	[%g4 + %g5]ASI_MEM, %g1
 	stxa	%g1, [%g7 + %g5]ASI_MEM		! byte 48 - 55
 	add	%g5, 8, %g5
 	ldxa	[%g4 + %g5]ASI_MEM, %g1
 	stxa	%g1, [%g7 + %g5]ASI_MEM		! byte 56 - 63
-	/* END: move 64 bytes from queue to buf */
 
 	set	CPU_NRQ_SIZE, %g5		! %g5 = queue size
 	sub	%g5, 1, %g5			! %g5 = queu size mask
@@ -608,36 +576,6 @@
 	membar	#Sync
 
 	/*
-	 * For CRP, force a hat reload as if the context were stolen
-	 * by storing INVALID_CONTEXT in the secondary and nulling TSB.
-	 * Primary will be reset by usr_rtt for user-mode traps, or 
-	 * has been reset in iae_crp or dae_crp for kernel-mode.
-	 */
-	CPU_PADDR(%g1, %g5)
-	add	%g1, CPU_MCPU, %g5
-	add	%g5, MCPU_NRE_ERROR, %g5	! &CPU->cpu_m.cpu_nre_error
-	ldxa	[%g5]ASI_MEM, %g4
-	cmp	%g4, CRP_OBSERVED		! confirm CRP
-	bne,pt	%xcc, 5f
-	  nop
-	mov	INVALID_CONTEXT, %g5		! force hat reload of context
-	mov	MMU_SCONTEXT, %g7
-	sethi	%hi(FLUSH_ADDR), %g4
-	stxa	%g5, [%g7]ASI_MMU_CTX		! set secondary context reg
-	flush	%g4
-	mov	%o0, %g4
-	mov	%o1, %g5
-	mov	%o5, %g7
-	mov	%g0, %o0
-	mov	%g0, %o1
-	mov	MMU_TSB_CTXNON0, %o5
-	ta      FAST_TRAP			! null TSB
-	  nop
-	mov	%g4, %o0
-	mov	%g5, %o1
-	mov	%g7, %o5
-
-	/*
 	 * Call sys_trap. %g2 is TL(arg2), %g3 is head and tail
 	 * offset(arg3).
 	 * %g3 looks like following:
@@ -648,7 +586,7 @@
 	 *
 	 * Run at PIL 14 unless we're already at PIL 15.
 	 */
-5:	sllx	%g3, 32, %g3			! %g3.h = tail offset
+	sllx	%g3, 32, %g3			! %g3.h = tail offset
 	or	%g3, %g2, %g3			! %g3.l = head offset
 	rdpr	%tl, %g2			! %g2 = current tl
 
--- a/usr/src/uts/sun4v/ml/mach_offsets.in	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/uts/sun4v/ml/mach_offsets.in	Mon Aug 10 10:43:48 2009 -0400
@@ -98,7 +98,6 @@
 	cpu_nrq_base_pa		MCPU_NRQ_BASE
 	cpu_nrq_size		MCPU_NRQ_SIZE
 	cpu_tstat_flags		MCPU_TSTAT_FLAGS
-	cpu_nre_error		MCPU_NRE_ERROR
 
 \#define	CPU_MPCB_PA	(CPU_MCPU + MCPU_MPCB_PA)
 \#define	CPU_KWBUF_FULL	(CPU_MCPU + MCPU_KWBUF_FULL)
@@ -145,8 +144,6 @@
 	sfmmu_cext
 	sfmmu_ctx_lock
 	sfmmu_ctxs
-	sfmmu_pgsz_order
-	sfmmu_pgsz_map
 
 sf_scd SCD_SIZE
 	scd_sfmmup
@@ -184,7 +181,6 @@
 	scratch		TSBMISS_SCRATCH
 	shmermap	TSBMISS_SHMERMAP
 	scd_shmermap	TSBMISS_SCDSHMERMAP
-	pgsz_bitmap	TSBMISS_PGSZ_BITMAP
 
 \#define	TSB_TAGACC	(0 * TSBMISS_SCRATCH_INCR)
 \#define	TSBMISS_HMEBP	(1 * TSBMISS_SCRATCH_INCR)
@@ -252,9 +248,6 @@
 	hv_tsb_info_pa
 	hv_tsb_info_cnt
 
-hv_pgsz_order
-	hv_pgsz_order_pa
-
 cpu_node	CPU_NODE_SIZE
 	nodeid
 	clock_freq
--- a/usr/src/uts/sun4v/ml/trap_table.s	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/uts/sun4v/ml/trap_table.s	Mon Aug 10 10:43:48 2009 -0400
@@ -1396,10 +1396,6 @@
  * (0=kernel, 1=invalid, or 2=user) rather than context ID)
  */
 	ALTENTRY(exec_fault)
-	set	icache_is_coherent, %g6		/* check soft exec mode */
-	ld	[%g6], %g6
-	brz,pn	%g6, sfmmu_slow_immu_miss
-	  nop
 	TRACE_TSBHIT(TT_MMU_EXEC)
 	MMU_FAULT_STATUS_AREA(%g4)
 	ldx	[%g4 + MMFSA_I_ADDR], %g2	/* g2 = address */
--- a/usr/src/uts/sun4v/os/error.c	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/uts/sun4v/os/error.c	Mon Aug 10 10:43:48 2009 -0400
@@ -38,8 +38,6 @@
 #include <sys/error.h>
 #include <sys/fm/util.h>
 #include <sys/ivintr.h>
-#include <sys/machasi.h>
-#include <sys/mmu.h>
 #include <sys/archsystm.h>
 
 #define	MAX_CE_FLTS		10
@@ -212,7 +210,6 @@
 	int expected = DDI_FM_ERR_UNEXPECTED;
 	uint64_t exec_mode;
 	uint8_t u_spill_fill;
-	int u_kill = 1;
 
 	mcpup = &(CPU->cpu_m);
 
@@ -278,33 +275,8 @@
 				break;
 			}
 			/*
-			 * Context Register Parity - for reload of secondary
-			 * context register, see nonresumable_error.
-			 */
-			if ((errh_flt.errh_er.attr & ERRH_ATTR_ASI) &&
-			    (errh_flt.errh_er.asi == ASI_MMU_CTX)) {
-
-				if (aflt->flt_tl)	/* TL>0, so panic */
-					break;
-
-				/* Panic on unknown context registers */
-				if (errh_flt.errh_er.addr < MMU_PCONTEXT0 ||
-				    errh_flt.errh_er.addr + errh_flt.errh_er.sz
-				    > MMU_SCONTEXT1 + sizeof (uint64_t)) {
-					cmn_err(CE_WARN, "Parity error on "
-					    "unknown context register\n");
-					aflt->flt_panic = 1;
-					break;
-				}
-
-				u_kill = 0;		/* do not terminate */
-				break;
-			}
-			/*
-			 * All other PR_NRE fall through in order to
-			 * check for protection.  The list can include
-			 * ERRH_ATTR_FRF, ERRH_ATTR_IRF, ERRH_ATTR_MEM,
-			 * and ERRH_ATTR_PIO.
+			 * Fall through, precise fault also need to check
+			 * to see if it was protected.
 			 */
 			/*FALLTHRU*/
 
@@ -344,7 +316,7 @@
 			 * for fatal errors.
 			 */
 			if (aflt->flt_class == BUS_FAULT) {
-				aflt->flt_addr = errh_flt.errh_er.addr;
+				aflt->flt_addr = errh_flt.errh_er.ra;
 				errh_cpu_run_bus_error_handlers(aflt,
 				    expected);
 			}
@@ -393,13 +365,13 @@
 			errh_page_retire(&errh_flt, PR_UE);
 
 		/*
-		 * If we queued an error for a thread that should terminate
-		 * and it was in user mode or protected by t_lofault, set AST
-		 * flag so the queue will be drained before returning to user
-		 * mode.  Note that user threads can be killed via pcb_flags.
+		 * If we queued an error and the it was in user mode, or
+		 * protected by t_lofault, or user_spill_fill is set, we
+		 * set AST flag so the queue will be drained before
+		 * returning to user mode.
 		 */
-		if (u_kill && (!aflt->flt_priv ||
-		    aflt->flt_prot == AFLT_PROT_COPY || u_spill_fill)) {
+		if (!aflt->flt_priv || aflt->flt_prot == AFLT_PROT_COPY ||
+		    u_spill_fill) {
 			int pcb_flag = 0;
 
 			if (aflt->flt_class == CPU_FAULT)
@@ -550,7 +522,7 @@
 			 * If we are going to panic, scrub the page first
 			 */
 			if (errh_fltp->cmn_asyncflt.flt_panic)
-				mem_scrub(errh_fltp->errh_er.addr,
+				mem_scrub(errh_fltp->errh_er.ra,
 				    errh_fltp->errh_er.sz);
 		}
 		break;
@@ -606,7 +578,7 @@
 static void
 errh_page_retire(errh_async_flt_t *errh_fltp, uchar_t flag)
 {
-	uint64_t flt_real_addr_start = errh_fltp->errh_er.addr;
+	uint64_t flt_real_addr_start = errh_fltp->errh_er.ra;
 	uint64_t flt_real_addr_end = flt_real_addr_start +
 	    errh_fltp->errh_er.sz - 1;
 	int64_t current_addr;
--- a/usr/src/uts/sun4v/os/fillsysinfo.c	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/uts/sun4v/os/fillsysinfo.c	Mon Aug 10 10:43:48 2009 -0400
@@ -41,7 +41,6 @@
 #include <sys/cmp.h>
 #include <sys/async.h>
 #include <vm/page.h>
-#include <vm/vm_dep.h>
 #include <vm/hat_sfmmu.h>
 #include <sys/sysmacros.h>
 #include <sys/mach_descrip.h>
@@ -66,7 +65,6 @@
 static uint64_t get_mmu_tsbs(md_t *, mde_cookie_t);
 static uint64_t	get_mmu_shcontexts(md_t *, mde_cookie_t);
 static uint64_t get_cpu_pagesizes(md_t *, mde_cookie_t);
-static int check_mmu_pgsz_search(md_t *, mde_cookie_t);
 static char *construct_isalist(md_t *, mde_cookie_t, char **);
 static void init_md_broken(md_t *, mde_cookie_t *);
 static int get_l2_cache_info(md_t *, mde_cookie_t, uint64_t *, uint64_t *,
@@ -356,68 +354,13 @@
 			}
 			md_free_scan_dag(mdp, &node);
 		}
+
+
 		md_free_scan_dag(mdp, &eunit);
 	}
 }
 
 /*
- * Setup instruction cache coherency.  The "memory-coherent" property
- * is optional.  Default for Icache_coherency is 1 (I$ is coherent).
- * If we find an Icache with coherency == 0, then enable non-coherent
- * Icache support.
- */
-void
-setup_icache_coherency(md_t *mdp)
-{
-	int ncache;
-	mde_cookie_t *cachelist;
-	int i;
-
-	ncache = md_alloc_scan_dag(mdp, md_root_node(mdp), "cache",
-	    "fwd", &cachelist);
-
-	/*
-	 * The "cache" node is optional in MD, therefore ncaches can be 0.
-	 */
-	if (ncache < 1) {
-		return;
-	}
-
-	for (i = 0; i < ncache; i++) {
-		uint64_t cache_level;
-		uint64_t memory_coherent;
-		uint8_t *type;
-		int typelen;
-
-		if (md_get_prop_val(mdp, cachelist[i], "level",
-		    &cache_level))
-			continue;
-
-		if (cache_level != 1)
-			continue;
-
-		if (md_get_prop_data(mdp, cachelist[i], "type",
-		    &type, &typelen))
-			continue;
-
-		if (strcmp((char *)type, "instn") != 0)
-			continue;
-
-		if (md_get_prop_val(mdp, cachelist[i], "memory-coherent",
-		    &memory_coherent))
-			continue;
-
-		if (memory_coherent != 0)
-			continue;
-
-		mach_setup_icache(memory_coherent);
-		break;
-	}
-
-	md_free_scan_dag(mdp, &cachelist);
-}
-
-/*
  * All the common setup of sun4v CPU modules is done by this routine.
  */
 void
@@ -461,11 +404,6 @@
 		shctx_on = 1;
 	}
 
-	/*
-	 *  Get and check page search register properties.
-	 */
-	pgsz_search_on = check_mmu_pgsz_search(mdp, cpulist[0]);
-
 	for (i = 0; i < nocpus; i++)
 		fill_cpu(mdp, cpulist[i]);
 
@@ -474,7 +412,6 @@
 
 	setup_chip_mappings(mdp);
 	setup_exec_unit_mappings(mdp);
-	setup_icache_coherency(mdp);
 
 	/*
 	 * If MD is broken then append the passed ISA set,
@@ -1116,50 +1053,3 @@
 
 	md_free_scan_dag(mdp, &platlist);
 }
-
-/*
- * This routine gets the MD properties associated with the TLB search order API
- * and compares these against the expected values for a processor which supports
- * this API. The return value is used to determine whether use the API.
- */
-static int
-check_mmu_pgsz_search(md_t *mdp, mde_cookie_t cpu_node_cookie)
-{
-
-	uint64_t mmu_search_nshared_contexts;
-	uint64_t mmu_max_search_order;
-	uint64_t mmu_non_priv_search_unified;
-	uint64_t mmu_search_page_size_list;
-
-	if (md_get_prop_val(mdp, cpu_node_cookie,
-	    "mmu-search-#shared-contexts", &mmu_search_nshared_contexts))
-		mmu_search_nshared_contexts = 0;
-
-	if (mmu_search_nshared_contexts == 0 ||
-	    mmu_search_nshared_contexts != NSEARCH_SHCONTEXTS)
-		return (0);
-
-	if (md_get_prop_val(mdp, cpu_node_cookie, "mmu-max-search-order",
-	    &mmu_max_search_order))
-		mmu_max_search_order = 0;
-
-	if (mmu_max_search_order == 0 || mmu_max_search_order !=
-	    MAX_PGSZ_SEARCH_ORDER)
-		return (0);
-
-	if (md_get_prop_val(mdp, cpu_node_cookie,
-	    "mmu-non-priv-search-unified", &mmu_non_priv_search_unified))
-		mmu_non_priv_search_unified = -1;
-
-	if (mmu_non_priv_search_unified != 1) {
-		return (0);
-	}
-
-	if (md_get_prop_val(mdp, cpu_node_cookie,
-	    "mmu-search-page-size-list", &mmu_search_page_size_list)) {
-		mmu_search_page_size_list = 0;
-		return (0);
-	}
-
-	return (1);
-}
--- a/usr/src/uts/sun4v/os/mach_cpu_states.c	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/uts/sun4v/os/mach_cpu_states.c	Mon Aug 10 10:43:48 2009 -0400
@@ -1075,20 +1075,7 @@
 void
 kdi_flush_caches(void)
 {
-	/*
-	 * May not be implemented by all sun4v architectures.
-	 *
-	 * Cannot use hsvc_version to see if the group is already
-	 * negotiated or not because, this function is called by
-	 * KMDB when it is at the console prompt which is running
-	 * at highest PIL. hsvc_version grabs an adaptive mutex and
-	 * this is a no-no at this PIL level.
-	 */
-	if (hsvc_kdi_mem_iflush_negotiated) {
-		uint64_t	status = hv_mem_iflush_all();
-		if (status != H_EOK)
-			cmn_err(CE_PANIC, "Flushing all I$ entries failed");
-	}
+	/* Not required on sun4v architecture. */
 }
 
 /*ARGSUSED*/
@@ -1101,16 +1088,6 @@
 void
 cpu_kdi_init(kdi_t *kdi)
 {
-	/*
-	 * Any API negotiation this early in the boot will be unsuccessful.
-	 * Therefore firmware for Sun4v platforms that have incoherent I$ are
-	 * assumed to support pre-negotiated MEM_IFLUSH APIs. Successful
-	 * invokation the MEM_IFLUSH_ALL is a test for is availability.
-	 * Set a flag if successful indicating its availabitlity.
-	 */
-	if (hv_mem_iflush_all() == 0)
-		hsvc_kdi_mem_iflush_negotiated = B_TRUE;
-
 	kdi->kdi_flush_caches = kdi_flush_caches;
 	kdi->mkdi_cpu_init = kdi_cpu_init;
 	kdi->mkdi_cpu_ready_iter = kdi_cpu_ready_iter;
--- a/usr/src/uts/sun4v/pcbe/rock_pcbe.c	Wed Aug 05 18:08:09 2009 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,2316 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License (the "License").
- * You may not use this file except in compliance with the License.
- *
- * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
- * or http://www.opensolaris.org/os/licensing.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information: Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- */
-/*
- * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
- * Use is subject to license terms.
- */
-/*
- * Rock Performance Counter Back End
- */
-
-#include <sys/cpuvar.h>
-#include <sys/systm.h>
-#include <sys/cmn_err.h>
-#include <sys/cpc_impl.h>
-#include <sys/cpc_pcbe.h>
-#include <sys/modctl.h>
-#include <sys/machsystm.h>
-#include <sys/sdt.h>
-#include <sys/hypervisor_api.h>
-#include <sys/rock_hypervisor_api.h>
-#include <sys/hsvc.h>
-
-#define	NT_END			0xFF
-
-/* Counter Types */
-#define	NUM_PCBE_COUNTERS	6
-#define	RK_PERF_CYC		0x0100
-#define	RK_PERF_INSTR		0x0200
-#define	RK_PERF_L2		0x0400
-#define	RK_PERF_MMU		0x0800
-#define	RK_PERF_YANK		0x2000
-#define	RK_PERF_SIBLK		0x4000
-#define	RK_PERF_LVLK		0x8000
-#define	RK_PERF_SPEC		0x1000	/* Reserved */
-
-#define	NORMAL_COUNTER		0x1
-#define	SYNTHETIC_COUNTER	0x2
-
-/* ASI_PERF_MMU_CNT_FILTER TXN bits */
-#define	ASI_PERF_MMU_CNT_FILTER_UTLB_HITS	0x1
-#define	ASI_PERF_MMU_CNT_FILTER_UTLB_MISS	0x2
-#define	ASI_PERF_MMU_CNT_FILTER_DATA_ACCESS	0x8
-#define	ASI_PERF_MMU_CNT_FILTER_INSTR_ACCESS	0x10
-#define	ASI_PERF_MMU_CNT_FILTER_EA_VIRTUAL	0x20
-#define	ASI_PERF_MMU_CNT_FILTER_EA_REAL		0x40
-
-#define	MMU_ALL_TXNS		(ASI_PERF_MMU_CNT_FILTER_UTLB_HITS | \
-				ASI_PERF_MMU_CNT_FILTER_UTLB_MISS | \
-				ASI_PERF_MMU_CNT_FILTER_DATA_ACCESS | \
-				ASI_PERF_MMU_CNT_FILTER_INSTR_ACCESS | \
-				ASI_PERF_MMU_CNT_FILTER_EA_VIRTUAL | \
-				ASI_PERF_MMU_CNT_FILTER_EA_REAL)
-
-#define	MMU_ITLB_MISS		(ASI_PERF_MMU_CNT_FILTER_EA_REAL | \
-				ASI_PERF_MMU_CNT_FILTER_EA_VIRTUAL | \
-				ASI_PERF_MMU_CNT_FILTER_INSTR_ACCESS | \
-				ASI_PERF_MMU_CNT_FILTER_UTLB_MISS | \
-				ASI_PERF_MMU_CNT_FILTER_UTLB_HITS)
-
-#define	MMU_DTLB_MISS		(ASI_PERF_MMU_CNT_FILTER_EA_REAL | \
-				ASI_PERF_MMU_CNT_FILTER_EA_VIRTUAL | \
-				ASI_PERF_MMU_CNT_FILTER_DATA_ACCESS | \
-				ASI_PERF_MMU_CNT_FILTER_UTLB_MISS | \
-				ASI_PERF_MMU_CNT_FILTER_UTLB_HITS)
-
-#define	MMU_UTLB_MISS		(ASI_PERF_MMU_CNT_FILTER_EA_REAL | \
-				ASI_PERF_MMU_CNT_FILTER_EA_VIRTUAL | \
-				ASI_PERF_MMU_CNT_FILTER_INSTR_ACCESS | \
-				ASI_PERF_MMU_CNT_FILTER_DATA_ACCESS | \
-				ASI_PERF_MMU_CNT_FILTER_UTLB_MISS)
-
-#define	MMU_UTLB_HIT		(ASI_PERF_MMU_CNT_FILTER_EA_REAL | \
-				ASI_PERF_MMU_CNT_FILTER_EA_VIRTUAL | \
-				ASI_PERF_MMU_CNT_FILTER_INSTR_ACCESS | \
-				ASI_PERF_MMU_CNT_FILTER_DATA_ACCESS | \
-				ASI_PERF_MMU_CNT_FILTER_UTLB_HITS)
-
-#define	MMU_ITLB_MISS_UTLB_HIT	(ASI_PERF_MMU_CNT_FILTER_EA_REAL | \
-				ASI_PERF_MMU_CNT_FILTER_EA_VIRTUAL | \
-				ASI_PERF_MMU_CNT_FILTER_INSTR_ACCESS | \
-				ASI_PERF_MMU_CNT_FILTER_UTLB_HITS)
-
-#define	MMU_ITLB_MISS_UTLB_MISS	(ASI_PERF_MMU_CNT_FILTER_EA_REAL | \
-				ASI_PERF_MMU_CNT_FILTER_EA_VIRTUAL | \
-				ASI_PERF_MMU_CNT_FILTER_INSTR_ACCESS | \
-				ASI_PERF_MMU_CNT_FILTER_UTLB_MISS)
-
-#define	MMU_DTLB_MISS_UTLB_HIT	(ASI_PERF_MMU_CNT_FILTER_EA_REAL | \
-				ASI_PERF_MMU_CNT_FILTER_EA_VIRTUAL | \
-				ASI_PERF_MMU_CNT_FILTER_DATA_ACCESS | \
-				ASI_PERF_MMU_CNT_FILTER_UTLB_HITS)
-
-#define	MMU_DTLB_MISS_UTLB_MISS	(ASI_PERF_MMU_CNT_FILTER_EA_REAL | \
-				ASI_PERF_MMU_CNT_FILTER_EA_VIRTUAL | \
-				ASI_PERF_MMU_CNT_FILTER_DATA_ACCESS | \
-				ASI_PERF_MMU_CNT_FILTER_UTLB_MISS)
-
-/*
- * These values will be loaded to nametable.bits which is a 32 bit number.
- * Please see the description of bits in nametable struct. If the counters
- * are a part of different pic, then we can re-use GROUP and TYPE.
- */
-#define	SYN_BIT			((uint32_t)1 << 31)	/* Set bit 32 */
-#define	GROUP_MASK		0xFFF000		/* Bits 12-23 */
-#define	ID_TO_GROUP(GROUP_ID)	((GROUP_ID)<<12)
-#define	GROUP(SYN_COUNTER)	((SYN_COUNTER) & GROUP_MASK)
-#define	TYPE(SYN_COUNTER)   ((SYN_COUNTER) & 0x000FFF)	/* Bits 0-12 */
-
-/* Synthetic counter types */
-#define	L2_GROUP_DS		ID_TO_GROUP(0)
-#define	DS_DRAM		0x0	/* From PRM */
-#define	DS_L3		0x1	/*   ditto  */
-#define	DS_OTHER_L2	0x2	/*   ditto  */
-#define	DS_LOCAL_L2	0x3	/*   ditto  */
-
-#define	L2_DS_DRAM		(SYN_BIT | L2_GROUP_DS | DS_DRAM)
-#define	L2_DS_L3		(SYN_BIT | L2_GROUP_DS | DS_L3)
-#define	L2_DS_OTHER_L2		(SYN_BIT | L2_GROUP_DS | DS_OTHER_L2)
-#define	L2_DS_LOCAL_L2		(SYN_BIT | L2_GROUP_DS | DS_LOCAL_L2)
-
-#define	L2_GROUP_TXN_MISS	ID_TO_GROUP(1)
-#define	TXN_LD			0x3	/* From PRM */
-#define	TXN_ST			0x18	/*   ditto  */
-#define	L2_TXN_LD_MISS		(SYN_BIT | L2_GROUP_TXN_MISS | TXN_LD)
-#define	L2_TXN_ST_MISS		(SYN_BIT | L2_GROUP_TXN_MISS | TXN_ST)
-
-#define	L2_GROUP_TXN_HIT	ID_TO_GROUP(2)
-#define	L2_TXN_LD_HIT		(SYN_BIT | L2_GROUP_TXN_HIT | TXN_LD)
-#define	L2_TXN_ST_HIT		(SYN_BIT | L2_GROUP_TXN_HIT | TXN_ST)
-
-#define	L2_GROUP_EVT		ID_TO_GROUP(3)
-#define	EVT_L2_MISS		0x8	/* From PRM */
-#define	EVT_L2_PEND_ST		0x2	/*   ditto  */
-#define	EVT_L2_PRIOR_MISS	0x1	/*   ditto  */
-#define	EVT_L2_NOEVENTS		0x0	/*   ditto  */
-#define	L2_HIT			0
-#define	L2_MISS			1
-
-#define	L2_EVT_HIT		(SYN_BIT | L2_GROUP_EVT | L2_HIT)
-#define	L2_EVT_MISS		(SYN_BIT | L2_GROUP_EVT | L2_MISS)
-
-/* Instruction types. Corresponds to ASI_PERF_IS_INFO.TYP */
-#define	I_GROUP_TYPE		ID_TO_GROUP(0)
-#define	TYPE_HELPER		(1<<0)
-#define	TYPE_LD			(1<<1)
-#define	TYPE_ST			(1<<2)
-#define	TYPE_CTI		(1<<3)
-#define	TYPE_FP			(1<<4)
-#define	TYPE_INT_ALU		(1<<5)
-#define	TYPE_CMPLX_ALU		(1<<6)
-
-#define	INSTR_TYPE_LD		(SYN_BIT | I_GROUP_TYPE | TYPE_LD)
-#define	INSTR_TYPE_ST		(SYN_BIT | I_GROUP_TYPE | TYPE_ST)
-#define	INSTR_TYPE_CTI		(SYN_BIT | I_GROUP_TYPE | TYPE_CTI)
-#define	INSTR_TYPE_FP		(SYN_BIT | I_GROUP_TYPE | TYPE_FP)
-
-/* Execution modes. Corresponds to ASI_PERF_IS_INFO.MODE */
-#define	I_GROUP_MODE		ID_TO_GROUP(1)
-#define	MODE_NOR		0x0	/* From PRM */
-#define	MODE_OOO		0x1	/*   ditto  */
-#define	MODE_EXE		0x2	/*   ditto  */
-#define	MODE_DLY		0x3	/*   ditto  */
-#define	MODE_DEF		0x4	/*   ditto  */
-#define	MODE_HWS		0x5	/*   ditto  */
-
-#define	INSTR_MODE_NOR		(SYN_BIT | I_GROUP_MODE | MODE_NOR)
-#define	INSTR_MODE_OOO		(SYN_BIT | I_GROUP_MODE | MODE_OOO)
-#define	INSTR_MODE_EXE		(SYN_BIT | I_GROUP_MODE | MODE_EXE)
-#define	INSTR_MODE_DLY		(SYN_BIT | I_GROUP_MODE | MODE_DLY)
-#define	INSTR_MODE_DEF		(SYN_BIT | I_GROUP_MODE | MODE_DEF)
-#define	INSTR_MODE_HWS		(SYN_BIT | I_GROUP_MODE | MODE_HWS)
-
-/* Instruction events. Corresponds to ASI_PERF_IS_INFO.EVT */
-#define	I_GROUP_EVT		ID_TO_GROUP(2)
-
-/* Bit numbers from PRM  */
-#define	EVT_DC_MISS		(1<<0)
-#define	EVT_PRIOR_MISS		(1<<1)
-#define	EVT_DTLB_MISS		(1<<2)
-#define	EVT_LDB_FULL		(1<<3)
-#define	EVT_STB_FULL		(1<<4)
-#define	EVT_FE_STALL		(1<<5)
-#define	EVT_FROM_DQ		(1<<6)
-#define	EVT_CORRECT_BP		(1<<7)
-#define	EVT_BYPASS_RAW		(1<<8)
-#define	EVT_NONBYPASS_RAW	(1<<9)
-#define	EVT_CTI_TAKEN		(1<<10)
-#define	EVT_FAILED_SPEC		(1<<11)
-
-#define	INSTR_EVT_DC_MISS	(SYN_BIT | I_GROUP_EVT | EVT_DC_MISS)
-#define	INSTR_EVT_PRIOR_MISS	(SYN_BIT | I_GROUP_EVT | EVT_PRIOR_MISS)
-#define	INSTR_EVT_DTLB_MISS	(SYN_BIT | I_GROUP_EVT | EVT_DTLB_MISS)
-#define	INSTR_EVT_LDB_FULL	(SYN_BIT | I_GROUP_EVT | EVT_LDB_FULL)
-#define	INSTR_EVT_STB_FULL	(SYN_BIT | I_GROUP_EVT | EVT_STB_FULL)
-#define	INSTR_EVT_FE_STALL	(SYN_BIT | I_GROUP_EVT | EVT_FE_STALL)
-#define	INSTR_EVT_FROM_DQ	(SYN_BIT | I_GROUP_EVT | EVT_FROM_DQ)
-#define	INSTR_EVT_CORRECT_BP	(SYN_BIT | I_GROUP_EVT | EVT_CORRECT_BP)
-#define	INSTR_EVT_BYPASS_RAW	(SYN_BIT | I_GROUP_EVT | EVT_BYPASS_RAW)
-#define	INSTR_EVT_NONBYPASS_RAW	(SYN_BIT | I_GROUP_EVT | EVT_NONBYPASS_RAW)
-#define	INSTR_EVT_CTI_TAKEN	(SYN_BIT | I_GROUP_EVT | EVT_CTI_TAKEN)
-#define	INSTR_EVT_FAILED_SPEC	(SYN_BIT | I_GROUP_EVT | EVT_FAILED_SPEC)
-
-/*
- * Synthetic counters to count MCCDESR error events
- * All the events are mutually exclusive therefore can be counted
- * simultaneously. Hence each one is a different pic. Therefore
- * there is no need to have GROUP or TYPE for these counters.
- */
-#define	MCCDESR_YANK		(SYN_BIT)
-#define	MCCDESR_SIBLK		(SYN_BIT)
-#define	MCCDESR_LVLK		(SYN_BIT)
-
-/* Number of samples to be taken before Performance Event Trap is generated */
-/* Maximum frequencies that can be configured */
-#define	INSTR_SAM_MAX_FREQ	0x3FF	/* 10 bits */
-#define	L2_SAM_MAX_FREQ		0xFFFF	/* 16 bits */
-#define	MMU_SAM_MAX_FREQ	0xFFFF	/* 16 bits */
-
-/* Minimum frequencies that should be configured to prevent DOS */
-#define	INSTR_SAM_MIN_FREQ	100
-#define	L2_SAM_MIN_FREQ		250
-#define	MMU_SAM_MIN_FREQ	250
-
-/* Default frequencies that are configured */
-#define	INSTR_SAM_DEF_FREQ	250
-#define	L2_SAM_DEF_FREQ		1000
-
-/* Number of bits in the hardware for the counter */
-#define	CYC_COUNTER_BITS	18
-#define	INSTR_COUNTER_BITS	18
-#define	L2_COUNTER_BITS		48
-#define	MMU_COUNTER_BITS	48
-#define	YANK_COUNTER_BITS	64
-#define	SIBLK_COUNTER_BITS	64
-#define	LVLK_COUNTER_BITS	64
-
-#define	RK_PERF_COUNT_TOE_SHIFT	(63)
-
-#define	STATE_CONFIGURED	0x1
-#define	STATE_PROGRAMMED	0x2
-#define	STATE_STOPPED		0x4
-#define	STATE_RELEASED		0x8
-#define	UNINITIALIZED		2 /* should be other than 0/1 */
-#define	TLZ			1 /* Do not make it zero */
-#define	TLNZ			2
-
-#define	CPU_REF_URL " Documentation for Sun processors can be found at: " \
-			"http://www.sun.com/processors/manuals"
-
-#define	MIN_RINGBUF_ENTRIES	100
-
-#define	RINGBUF_GET_HEAD(RB)		\
-	(uint64_t *)((uint64_t)(&RB->va_values) + RB->head);
-
-#define	RINGBUF_GET_TAIL(RB)		\
-	(uint64_t *)((uint64_t)(&RB->va_values) + RB->tail);
-
-#define	RINGBUF_SET_HEAD(RB, PTR)					\
-	RB->head = (uint64_t)PTR - (uint64_t)(&RB->va_values);		\
-	RB->hwm = RB->head + (RB->size >> 1);				\
-	if (RB->hwm >= RB->size)					\
-		RB->hwm -= RB->size;
-
-#define	RINGBUF_MOVE_HEAD(RB, PTR, SAMPLE_SZ)				\
-	PTR = (uint64_t *)((uint64_t)PTR + SAMPLE_SZ);			\
-	if (PTR >= (uint64_t *)((uint64_t)(&RB->va_values) + RB->size))	\
-		PTR = (uint64_t *)&RB->va_values;
-
-#define	MAKE_MASK(NBITS, SHIFT)	(((unsigned long)(1<<(NBITS))-1)<<SHIFT)
-
-#define	COUNTER_MAX(_p)	((int64_t)((1ULL << (_p->counter_bits - 1)) - 1))
-#define	COUNTER_MIN(_p)	((int64_t)-(COUNTER_MAX(_p)))
-#define	COUNTER_MASK(_p)	(bitmask(_p->counter_bits))
-
-/* Global Structures and typedefs */
-struct	_rk_pcbe_ringbuf {	/*	  INIT-ER	WRITTER	  READER */
-	uint32_t	head;	/* offset  guest	guest	  guest	 */
-	uint32_t	tail;	/* offset  guest	hv	   both	 */
-	uint32_t	size;	/* bytes   guest	n/a	   both	 */
-	uint32_t	hwm;	/* bytes   guest	hv	  guest  */
-	uint64_t	va_values; /*	   guest	hv	  guest  */
-};
-
-typedef	struct _rk_pcbe_ringbuf rk_pcbe_ringbuf_t;
-
-typedef	struct _sampler {
-	rk_pcbe_ringbuf_t *ring_buffer;	/* Ring buffer start address */
-	uint64_t	synthetic_pic;
-	uint32_t	frequency;	/* Sampling Frequency */
-	uint32_t	syn_counter;	/* Synthetic Counter Type */
-	uint32_t	sample_size;	/* Size of each sample in bytes */
-	uint32_t	flags;		/* instr sampler: priv */
-	uint8_t		tl;		/* Trap Level Filtering */
-	uint8_t		nohws;		/* Filter out HW Scouting samples */
-} sampler_t;
-
-typedef struct _rk_pcbe_config {
-	uint8_t		pcbe_picno;	/* 0-6:instr,l2,mmu,yank,siblk,lvlk */
-	uint8_t		counter_bits;	/* Number of counter bits */
-	uint8_t		counter_type;	/* Normal or Synthetic */
-	uint8_t		toe;		/* Trap on Enable */
-	uint32_t	counter;	/* Counter name */
-	uint32_t	src_type;	/* Strand, Strands, SIU, MMU */
-	uint32_t	flags;		/* instr counter:priv. l2,mmu:Xn */
-	uint64_t	pcbe_pic;	/* PIC counter value */
-	uint8_t		inuse;		/* pic in use or not */
-	uint8_t		state;		/* Current state of the pic */
-	processorid_t	cpu;		/* CPU associated to this pic */
-	sampler_t	sampler;
-#ifdef	RKPCBE_DBG
-	char		name[64];	/* Human readable counter name */
-#endif
-} rk_pcbe_config_t;
-
-/* Function Prototypes for those that are invoked using rk_pcbe_ops */
-static int rk_pcbe_init(void);
-static int rk_pcbe_fini(void);
-static uint_t rk_pcbe_ncounters(void);
-static const char *rk_pcbe_impl_name(void);
-static const char *rk_pcbe_cpuref(void);
-static char *rk_pcbe_list_events(uint_t picnum);
-static char *rk_pcbe_list_attrs(void);
-static uint64_t rk_pcbe_event_coverage(char *event);
-static uint64_t rk_pcbe_overflow_bitmap(void);
-static int rk_pcbe_configure(uint_t picnum, char *event, uint64_t preset,
-    uint32_t flags, uint_t nattrs, kcpc_attr_t *attrs, void **data,
-    void *token);
-static void rk_pcbe_program(void *token);
-static void rk_pcbe_allstop(void);
-static void rk_pcbe_sample(void *token);
-static void rk_pcbe_free(void *config);
-
-pcbe_ops_t rk_pcbe_ops = {
-	PCBE_VER_1,
-	CPC_CAP_OVERFLOW_INTERRUPT,
-	rk_pcbe_ncounters,
-	rk_pcbe_impl_name,
-	rk_pcbe_cpuref,
-	rk_pcbe_list_events,
-	rk_pcbe_list_attrs,
-	rk_pcbe_event_coverage,
-	rk_pcbe_overflow_bitmap,
-	rk_pcbe_configure,
-	rk_pcbe_program,
-	rk_pcbe_allstop,
-	rk_pcbe_sample,
-	rk_pcbe_free
-};
-
-/*
- * bits:
- *
- * |     31     |30        24|23      12|11      0
- * | Syn/Normal |    Rsvd    |  Group   |  Type  |
- */
-struct nametable {
-	const uint32_t	bits;
-	const char	*name;
-};
-
-/* Instruction Counter. picno: 0 */
-static const struct nametable Rock_names0[] = {
-	{0x1, "Instr_All"},
-	/* Synthetic counters */
-	{INSTR_MODE_NOR, "Instr_Normal"},
-	{INSTR_MODE_OOO, "Instr_Out_Of_Order"},
-	{INSTR_MODE_EXE, "Instr_Execute_Ahead"},
-	{INSTR_MODE_DLY, "Instr_Delay"},
-	{INSTR_MODE_DEF, "Instr_Deferred"},
-	{INSTR_MODE_HWS, "Instr_Scout"},
-
-	{INSTR_TYPE_LD,  "Instr_Load"},
-	{INSTR_TYPE_ST,  "Instr_Store"},
-	{INSTR_TYPE_CTI, "Instr_Branch"},
-	{INSTR_TYPE_FP,  "Instr_Float"},
-
-	{INSTR_EVT_DC_MISS,	"Instr_Dcache_Miss"},
-	{INSTR_EVT_PRIOR_MISS,	"Instr_Prior_Miss"},
-	{INSTR_EVT_DTLB_MISS,	"Instr_Dtlb_Miss"},
-	{INSTR_EVT_LDB_FULL,	"Instr_Loadbuf_Full"},
-	{INSTR_EVT_STB_FULL,	"Instr_Storebuf_Full"},
-	{INSTR_EVT_FE_STALL,	"Instr_Stall"},
-	{INSTR_EVT_FROM_DQ,	"Instr_DQ"},
-	{INSTR_EVT_CORRECT_BP,	"Instr_Correct_Branch_Predict"},
-	{INSTR_EVT_BYPASS_RAW,	"Instr_Bypass_Raw"},
-	{INSTR_EVT_NONBYPASS_RAW, "Instr_Nonbypass_Raw"},
-	{INSTR_EVT_CTI_TAKEN, 	"Instr_Branch_Taken"},
-	{INSTR_EVT_FAILED_SPEC,	"Instr_Failed_Spec"},
-
-	{NT_END, ""}
-};
-
-/* L2 Counters. picno: 1 */
-static const struct nametable Rock_names1[] = {
-	{0x1,			"L2_Icache_Load"},
-	{0x2,			"L2_Dcache_Load"},
-	{0x4,			"L2_Instr_Prefetch"},
-	{0x8,			"L2_Store_Prefetch"},
-	{0x10,			"L2_Store"},
-	{0x20,			"L2_Atomic_Ops"},
-	{0x40,			"L2_Flush"},
-	/* Synthetic counters */
-	{L2_DS_L3,		"L2_Load_From_L3"},
-	{L2_DS_DRAM,		"L2_Load_From_Dram"},
-	{L2_DS_OTHER_L2,	"L2_Load_From_Other_L2"},
-
-	{L2_TXN_LD_MISS,	"L2_Load_Miss"},
-	{L2_TXN_ST_MISS,	"L2_Store_Miss"},
-	{L2_TXN_LD_HIT,		"L2_Load_Hit"},
-	{L2_TXN_ST_HIT,		"L2_Store_Hit"},
-
-	{L2_EVT_HIT,		"L2_Hit"},
-	{L2_EVT_MISS,		"L2_Miss"},
-	{NT_END, ""}
-};
-
-/* MMU Counters. picno: 2 */
-static const struct nametable Rock_names2[] = {
-	{MMU_ALL_TXNS,			"MMU_All"},
-	{MMU_ITLB_MISS,			"MMU_Itlb_Miss"},
-	{MMU_DTLB_MISS,			"MMU_Dtlb_Miss"},
-	{MMU_UTLB_MISS,			"MMU_Utlb_Miss"},
-	{MMU_UTLB_HIT,			"MMU_Utlb_Hit"},
-	{MMU_ITLB_MISS_UTLB_MISS,	"MMU_I_Utlb_Miss"},
-	{MMU_ITLB_MISS_UTLB_HIT,	"MMU_I_Utlb_Hit"},
-	{MMU_DTLB_MISS_UTLB_MISS,	"MMU_D_Utlb_Miss"},
-	{MMU_DTLB_MISS_UTLB_HIT,	"MMU_D_Utlb_Hit"},
-	{NT_END, ""}
-};
-
-/* YANK Counter. picno: 3 */
-static const struct nametable Rock_names3[] = {
-	{MCCDESR_YANK,			"Yank"},
-	{NT_END, ""}
-};
-
-/* SIBLK Counter. picno: 4 */
-static const struct nametable Rock_names4[] = {
-	{MCCDESR_SIBLK,			"Siblk"},
-	{NT_END, ""}
-};
-
-/* LVLK Counter. picno: 5 */
-static const struct nametable Rock_names5[] = {
-	{MCCDESR_LVLK,			"Lvlk"},
-	{NT_END, ""}
-};
-
-static const struct nametable *Rock_names[NUM_PCBE_COUNTERS] = {
-	Rock_names0,
-	Rock_names1,
-	Rock_names2,
-	Rock_names3,
-	Rock_names4,
-	Rock_names5
-};
-
-extern	char	cpu_module_name[];
-uint32_t num_ringbuf_entries = 500; /* Should be a EVEN # */
-static const struct nametable **events;
-static char *pic_events[NUM_PCBE_COUNTERS];
-static rk_pcbe_config_t *active_pics[NUM_PCBE_COUNTERS][NCPU];
-static	boolean_t	rock_pcbe_hsvc_available = B_TRUE;
-
-static	char	*rock_name;
-static	char	rock_cpuref[256];
-static	char	pcbe_module_name[64] = "pcbe.";
-
-static hsvc_info_t rock_pcbe_hsvc = {
-	HSVC_REV_1,		/* HSVC rev num */
-	NULL,			/* Private */
-	HSVC_GROUP_RKPERF,	/* Requested API Group */
-	ROCK_HSVC_MAJOR,	/* Requested Major */
-	ROCK_HSVC_MINOR,	/* Requested Minor */
-	pcbe_module_name	/* Module name */
-};
-
-/* Function Definitions */
-static struct modlpcbe modlpcbe = {
-	&mod_pcbeops,
-	"Perf Counters v1.1",
-	&rk_pcbe_ops
-};
-
-static struct modlinkage modl = {
-	MODREV_1,
-	&modlpcbe,
-};
-
-/*
- * Below two structures are used to pass data from program_*_sampler() to
- * program_a_sampler()
- */
-struct	asi {
-	uint64_t	va;
-	uint64_t	value;
-};
-
-typedef struct	_s {
-	char		name[32];	/* User friendly name */
-	int		asi_config_num;	/* Num of ASIs to be configured */
-	struct	asi	asi_config[10];	/* ASIs that gets configured */
-	int		asi_sample_num;	/* Num of data return ASIs */
-	uint64_t	asi_sample[10];	/* Data return ASIs when sampled */
-} program_sampler_data_t;
-
-/* Local Function prototypes */
-static void rk_pcbe_stop_synthetic(rk_pcbe_config_t *pic);
-static void rk_pcbe_release(rk_pcbe_config_t *pic);
-static void rk_pcbe_free_synthetic(rk_pcbe_config_t *pic);
-
-static int rk_pcbe_program_normal(rk_pcbe_config_t *pic);
-static int rk_pcbe_program_synthetic(rk_pcbe_config_t *pic);
-static int program_l2_sampler(rk_pcbe_config_t *pic);
-static int program_instr_sampler(rk_pcbe_config_t *pic);
-static int program_a_sampler(rk_pcbe_config_t *pic,
-			program_sampler_data_t *sdata);
-
-static int rk_pcbe_sample_internal(rk_pcbe_config_t *pic, uint64_t *diffp);
-static int rk_pcbe_sample_synthetic(rk_pcbe_config_t *pic, int64_t *diffp);
-static int sample_l2_sampler(rk_pcbe_config_t *pic, int64_t *diffp);
-static int sample_instr_sampler(rk_pcbe_config_t *pic, int64_t *diffp);
-static int sample_mccdesr(rk_pcbe_config_t *pic, int64_t *diffp);
-static int synthesize_sample_count(rk_pcbe_config_t *pic, uint64_t sample_count,
-	uint64_t sample_hit_count, char *name, int64_t *diffp);
-
-static int alloc_ringbuffer(rk_pcbe_config_t *pic, uint32_t size,
-							uint32_t num_samples);
-static void free_ringbuffer(rk_pcbe_config_t *pic);
-static void print_hv_error(uint64_t rc, int *cntp, char *funcname,
-					rk_pcbe_config_t *pic);
-static	void set_string_constants(void);
-static	uint64_t bitmask(uint8_t);
-
-#ifdef	RKPCBE_DBG
-static void print_pic(rk_pcbe_config_t *pic, char *heading);
-static void set_pic_name(rk_pcbe_config_t *pic);
-/* lock for print clarity */
-static kmutex_t print_pic_lock;
-#define	PRINT_PIC(pic, heading)	\
-	print_pic(pic, heading)
-#define	DBG_PRINT(_z) printf _z
-#else
-#define	PRINT_PIC(pic, heading) (void)0
-#define	DBG_PRINT(ignore) (void)0
-#endif
-
-int
-_init(void)
-{
-	if (rk_pcbe_init() != 0)
-		return (ENOTSUP);
-	return (mod_install(&modl));
-}
-
-int
-_fini(void)
-{
-	if (rk_pcbe_fini() != 0)
-		return (EBUSY);
-	return (mod_remove(&modl));
-}
-
-int
-_info(struct modinfo *mi)
-{
-	return (mod_info(&modl, mi));
-}
-
-static int
-rk_pcbe_init(void)
-{
-	const struct 	nametable	*n;
-	int		i, status, j;
-	size_t		size;
-	uint64_t	rock_pcbe_hsvc_sup_minor;
-
-	set_string_constants();
-	/*
-	 * Validate API version for Rock pcbe hypervisor services
-	 */
-	status = hsvc_register(&rock_pcbe_hsvc, &rock_pcbe_hsvc_sup_minor);
-	if ((status != 0) || (rock_pcbe_hsvc_sup_minor <
-	    (uint64_t)ROCK_HSVC_MINOR)) {
-		cmn_err(CE_WARN, "%s cannot negotiate hypervisor services: "
-		    "major: 0x%lx minor: 0x%lx group: 0x%x errno: %d",
-		    pcbe_module_name, rock_pcbe_hsvc.hsvc_major,
-		    rock_pcbe_hsvc.hsvc_minor, HSVC_GROUP_RKPERF, status);
-		rock_pcbe_hsvc_available = B_FALSE;
-		return (-1);
-	}
-
-	events = Rock_names;
-	/*
-	 * Initialize the list of events for each PIC.
-	 * Do two passes: one to compute the size necessary and another
-	 * to copy the strings. Need room for event, comma, and NULL terminator.
-	 */
-	for (i = 0; i < NUM_PCBE_COUNTERS; i++) {
-		size = 0;
-		for (n = events[i]; n->bits != NT_END; n++)
-			size += strlen(n->name) + 1;
-		pic_events[i] = kmem_alloc(size + 1, KM_SLEEP);
-		*pic_events[i] = '\0';
-		for (n = events[i]; n->bits != NT_END; n++) {
-			(void) strcat(pic_events[i], n->name);
-			(void) strcat(pic_events[i], ",");
-		}
-		/*
-		 * Remove trailing comma.
-		 */
-		pic_events[i][size - 1] = '\0';
-
-		/* Initialize all active pics as NULL */
-		for (j = 0; j < NCPU; j++)
-			active_pics[i][j] = NULL;
-	}
-#ifdef	RKPCBE_DBG
-	mutex_init(&print_pic_lock, NULL, MUTEX_DRIVER,
-	    (void *)ipltospl(PIL_15));
-#endif
-	return (0);
-}
-
-static	int
-rk_pcbe_fini(void)
-{
-	return (0);
-}
-
-static uint_t
-rk_pcbe_ncounters(void)
-{
-	return (NUM_PCBE_COUNTERS);
-}
-
-static const char *
-rk_pcbe_impl_name(void)
-{
-	return (rock_name);
-}
-
-static const char *
-rk_pcbe_cpuref(void)
-{
-	return (rock_cpuref);
-}
-
-static char *
-rk_pcbe_list_events(uint_t picnum)
-{
-	ASSERT(picnum >= (uint_t)0 && picnum < cpc_ncounters);
-
-	return (pic_events[picnum]);
-}
-
-static char *
-rk_pcbe_list_attrs(void)
-{
-	/*
-	 * If no value is spcified in the command line for the
-	 * attributes then, a default value of 1 is passed into
-	 * pcbe from cpc. Specifying a value as zero is as good as
-	 * not specifying it.
-	 * 'source' attribute is equivallent of 'single, shared,
-	 * siu, mmu' all put together. 'source' will take precedence
-	 * over others.
-	 * Valid 'source' values are defined in rock_hypervisor_api.h.
-	 * If multiple flags need to be specified then user has to
-	 * specify the bitwise OR of the flags he/she is interested in.
-	 * populate_pic_config validates the correctness of the flags
-	 * specified.
-	 * tl is little odd. To consider instructions at
-	 * tl == 0, specify tl = TLZ in command line
-	 * tl > 0, specify tl = TLNZ in command line
-	 * The reason for this oddness: attr = 0 means, neglect
-	 * that attr.
-	 */
-	return ("freq,source,single,shared,siu,mmu,nohws,tl,hpriv");
-}
-
-static const struct nametable *
-find_event(int picno, char *name)
-{
-	const struct nametable *n;
-
-	for (n = events[picno]; n->bits != NT_END; n++)
-		if (strcmp(name, n->name) == 0)
-			return (n);
-
-	return (NULL);
-}
-
-static uint64_t
-rk_pcbe_event_coverage(char *event)
-{
-	uint64_t	bitmap = 0;
-	int 		i;
-
-	/* There is no intersection of events between different PICs */
-	for (i = 0; i <  NUM_PCBE_COUNTERS; i++) {
-		if (find_event(i, event) != NULL) {
-			bitmap = 1 << i;
-			break;
-		}
-	}
-	return (bitmap);
-}
-
-static uint64_t
-rk_pcbe_overflow_bitmap(void)
-{
-	int 			i;
-	rk_pcbe_config_t	*pic;
-	uint64_t		ovf_bitmask = 0, ovf_cnt;
-
-	for (i = 0; i <  NUM_PCBE_COUNTERS; i++) {
-		pic = active_pics[i][CPU->cpu_id];
-
-		if (pic == NULL || pic->inuse != B_TRUE)
-			continue;
-
-		DBG_PRINT(("CPU-%d: Pic %s (#%d, cntr %X) overflowed\n",
-		    CPU->cpu_id, pic->name, pic->pcbe_picno, pic->counter));
-
-		/* Check if any of the active pics overflowed */
-		if (pic->counter_type == NORMAL_COUNTER) {
-			hv_rk_perf_count_overflow((uint64_t)(pic->counter |
-			    pic->src_type), &ovf_cnt);
-			if (ovf_cnt > 0)
-				pic->pcbe_pic += (0x1ULL << pic->counter_bits);
-		} else {
-		/*
-		 * Synthetic counters don't overflow, so we must have gotten
-		 * here because the ringbuffer is getting half-full or
-		 * one of the normal counter which is a part of synthetic
-		 * counter did overflow. Force cpc to call
-		 * rk_pcbe_sample_synthetic by setting ovf_cnt to 1. If
-		 * returned 0, then cpc prints a WARNING message:
-		 * "WARNING: interrupt 0x80c at level 15 not serviced"
-		 */
-			ovf_cnt = B_TRUE;
-		}
-
-		if (ovf_cnt > 0)
-			ovf_bitmask |= (1 << pic->pcbe_picno);
-	}
-	return (ovf_bitmask);
-}
-
-/*
- * populate_pic_config
- *
- * Checks the validity of all the attributes and then updates flags
- * to reflect priv bits for Cycle and Instruction counters and
- * transaction bits for L2 and makes sure that flags is 0 for MMU.
- *
- * Along with validating the inputs, pic is populated with appropriate
- * values.
- *
- * Returns 0 on success and CPC_INVALID_ATTRIBUTE on failure.
- */
-static int
-populate_pic_config(uint_t picnum, uint_t nattrs, kcpc_attr_t *attrs,
-				uint32_t bits, rk_pcbe_config_t *pic)
-{
-	int 		i;
-	uint32_t	freq = 0;
-	uint32_t	*flagsp = &(pic->flags);
-	uint32_t	source = 0;
-
-	pic->pcbe_picno = (uint8_t)picnum;
-	pic->toe = B_TRUE;
-	pic->sampler.synthetic_pic = 0;
-	pic->sampler.ring_buffer = NULL;
-	pic->inuse = UNINITIALIZED;
-	pic->counter_type = ((bits & SYN_BIT) == 0) ? NORMAL_COUNTER :
-	    SYNTHETIC_COUNTER;
-
-	/*
-	 * Initialized to 0. If a valid source attribute is specified, then
-	 * src_type field gets populated later, else will be defaulted to
-	 * HV_RK_PERF_SRC_STRAND
-	 */
-	pic->src_type = 0;
-	/*
-	 * Initialized to zero. In all the fallthrough case, this
-	 * is checked to determine if certain fields needs to be
-	 * populated or not
-	 */
-	pic->counter = 0;
-
-	/*
-	 * When synthetic counter's ring buffer reaches HWM, HV generates
-	 * PIC overflow trap to get guest's attention. This is not same as
-	 * a hardware counter overflow. Size of the ring buffer is configurable
-	 * and since there is no definite size, CPC_OVF_NOTIFY_EMT flag has no
-	 * meaning wrt synthetic counters.
-	 */
-	if ((bits & SYN_BIT) && (*flagsp & CPC_OVF_NOTIFY_EMT))
-		return (CPC_PIC_NOT_CAPABLE);
-
-	/*
-	 * This flag is used by CPC to inform the application of a counter
-	 * overflow. It is of no use to PCBE.
-	 */
-	*flagsp &= ~(CPC_OVF_NOTIFY_EMT);
-
-	switch (picnum) {
-#define	PRIV_BITS_MASK	0x7
-#define	PRIV_BIT0_MASK	0x1
-#define	PRIV_BIT1_MASK	0x2
-#define	PRIV_BIT2_MASK	0x4
-
-		case 0:	/* Instruction Counter */
-			pic->counter = RK_PERF_INSTR;
-			pic->counter_bits = INSTR_COUNTER_BITS;
-
-			freq = INSTR_SAM_DEF_FREQ; /* Default Frequency */
-
-			for (i = 0; i < nattrs; i++) {
-				if ((strcmp(attrs[i].ka_name, "freq") == 0)) {
-					if ((bits & SYN_BIT) == 0 &&
-					    attrs[i].ka_val) {
-						return (CPC_INVALID_ATTRIBUTE);
-					}
-					freq = attrs[i].ka_val;
-				} else if ((strcmp(attrs[i].ka_name,
-				    "single") == 0) && attrs[i].ka_val)
-					pic->src_type |=
-					    HV_RK_PERF_SRC_STRAND;
-				else if ((strcmp(attrs[i].ka_name,
-				    "shared") == 0) && attrs[i].ka_val)
-					pic->src_type |=
-					    HV_RK_PERF_SRC_STRAND_M;
-				else if ((strcmp(attrs[i].ka_name,
-				    "hpriv") == 0) && attrs[i].ka_val)
-					*flagsp |= CPC_COUNT_HV;
-				else if ((strcmp(attrs[i].ka_name,
-				    "source") == 0) && attrs[i].ka_val)
-					source = attrs[i].ka_val &
-					    HV_RK_PERF_SRC_MASK;
-				else if ((strcmp(attrs[i].ka_name,
-				    "nohws") == 0) && attrs[i].ka_val) {
-					if (bits & SYN_BIT)
-						pic->sampler.nohws = B_TRUE;
-					else if (attrs[i].ka_val)
-						return (CPC_INVALID_ATTRIBUTE);
-				} else if ((strcmp(attrs[i].ka_name,
-				    "tl") == 0) && attrs[i].ka_val) {
-					if (bits & SYN_BIT) {
-						pic->sampler.tl =
-						    (uint8_t)attrs[i].ka_val;
-					} else if (attrs[i].ka_val)
-						return (CPC_INVALID_ATTRIBUTE);
-				} else {
-					if (attrs[i].ka_val)
-						return (CPC_INVALID_ATTRIBUTE);
-				}
-			}
-
-			if (source) {
-				if (source & (HV_RK_PERF_SRC_SIU |
-				    HV_RK_PERF_SRC_MMU))
-					return (CPC_INVALID_ATTRIBUTE);
-				pic->src_type = source;
-			}
-
-			if (pic->src_type == 0)
-				pic->src_type = HV_RK_PERF_SRC_STRAND;
-
-			/*
-			 * hpriv, sys, user are sent as bits 3, 2, 1 from kcpc.
-			 * They are maintained by PCBE as bits 2, 1, & 0.
-			 */
-			*flagsp >>= 1;
-			*flagsp &= PRIV_BITS_MASK;
-			if (bits & SYN_BIT) {
-				pic->sampler.flags = *flagsp;
-				pic->sampler.syn_counter = bits;
-				if (freq > INSTR_SAM_MAX_FREQ) {
-					cmn_err(CE_NOTE, "CPU-%d: freq set "
-					    "> MAX. Resetting to %d",
-					    CPU->cpu_id, INSTR_SAM_MAX_FREQ);
-					freq = INSTR_SAM_MAX_FREQ;
-				}
-				if (freq < INSTR_SAM_MIN_FREQ) {
-					cmn_err(CE_NOTE, "CPU-%d: freq set "
-					    "< MIN. Resetting to %d",
-					    CPU->cpu_id, INSTR_SAM_MIN_FREQ);
-					freq = INSTR_SAM_MIN_FREQ;
-				}
-				pic->sampler.frequency = freq;
-			}
-			/*
-			 * When programming counter priv bits should be
-			 * 0, 1, & 2, i.e., in reverse order. Therefore swap
-			 * bits 2 & 0.
-			 */
-			*flagsp = ((*flagsp & PRIV_BIT0_MASK) << 2) |
-			    ((*flagsp & PRIV_BIT2_MASK) >> 2) |
-			    (*flagsp & PRIV_BIT1_MASK);
-			break;
-		case 1:	/* L2 counter */
-			/*
-			 * nouser and sys are also invalid attributes for L2
-			 * and MMU counters. If user has not specified any
-			 * attributes then *flagsp contains CPC_COUNT_USER.
-			 * Any priv attrs are not applicable for L2 counters.
-			 */
-			if (*flagsp != CPC_COUNT_USER)
-				return (CPC_INVALID_ATTRIBUTE);
-
-			pic->counter_bits = L2_COUNTER_BITS;
-			if ((bits & SYN_BIT) == 0) {
-				/*
-				 * Normal counter:
-				 * Find the attibutes for L2 Counter.
-				 */
-				for (i = 0; i < nattrs; i++) {
-					if ((strcmp(attrs[i].ka_name,
-					    "single") == 0) && attrs[i].ka_val)
-						pic->src_type |=
-						    HV_RK_PERF_SRC_STRAND;
-					else if ((strcmp(attrs[i].ka_name,
-					    "shared") == 0) && attrs[i].ka_val)
-						pic->src_type |=
-						    HV_RK_PERF_SRC_STRAND_M;
-					else if ((strcmp(attrs[i].ka_name,
-					    "siu") == 0) && attrs[i].ka_val)
-						pic->src_type |=
-						    HV_RK_PERF_SRC_SIU;
-					else if ((strcmp(attrs[i].ka_name,
-					    "mmu") == 0) && attrs[i].ka_val)
-						pic->src_type |=
-						    HV_RK_PERF_SRC_MMU;
-					else if ((strcmp(attrs[i].ka_name,
-					    "source") == 0) && attrs[i].ka_val)
-						source = attrs[i].ka_val &
-						    HV_RK_PERF_SRC_MASK;
-					else if (attrs[i].ka_val)
-						return (CPC_INVALID_ATTRIBUTE);
-				}
-				if (source)
-					pic->src_type = source;
-
-				if (pic->src_type == 0)
-					pic->src_type = HV_RK_PERF_SRC_STRAND;
-
-				/* At least one hot Xn flag for L2 counters */
-				*flagsp = bits;
-			} else {
-				/*
-				 * Synthetic Counter
-				 */
-				pic->sampler.syn_counter = bits;
-				freq = L2_SAM_DEF_FREQ;	/* Default Frequency */
-				/*
-				 * Find the attibutes for L2 Sampler.
-				 */
-				for (i = 0; i < nattrs; i++) {
-					if ((strcmp(attrs[i].ka_name,
-					    "freq") == 0) && attrs[i].ka_val)
-						freq = attrs[i].ka_val;
-					else if ((strcmp(attrs[i].ka_name,
-					    "single") == 0) && attrs[i].ka_val)
-						pic->src_type |=
-						    HV_RK_PERF_SRC_STRAND;
-					else if ((strcmp(attrs[i].ka_name,
-					    "shared") == 0) && attrs[i].ka_val)
-						pic->src_type |=
-						    HV_RK_PERF_SRC_STRAND_M;
-					else if ((strcmp(attrs[i].ka_name,
-					    "siu") == 0) && attrs[i].ka_val)
-						pic->src_type |=
-						    HV_RK_PERF_SRC_SIU;
-					else if ((strcmp(attrs[i].ka_name,
-					    "mmu") == 0) && attrs[i].ka_val)
-						pic->src_type |=
-						    HV_RK_PERF_SRC_MMU;
-					else if ((strcmp(attrs[i].ka_name,
-					    "source") == 0) && attrs[i].ka_val)
-						source = attrs[i].ka_val &
-						    HV_RK_PERF_SRC_MASK;
-					else if (attrs[i].ka_val)
-						return (CPC_INVALID_ATTRIBUTE);
-				}
-				if (source)
-					pic->src_type = source;
-
-				if (pic->src_type == 0)
-					pic->src_type = HV_RK_PERF_SRC_STRAND;
-
-				/* Range check to avoid DOS */
-				if (freq > L2_SAM_MAX_FREQ) {
-					cmn_err(CE_NOTE, "CPU-%d: freq set "
-					    "> MAX. Resetting to %d",
-					    CPU->cpu_id, L2_SAM_MAX_FREQ);
-					freq = L2_SAM_MAX_FREQ;
-				}
-				if (freq < L2_SAM_MIN_FREQ) {
-					cmn_err(CE_NOTE, "CPU-%d: freq set "
-					    "< MIN. Resetting to %d",
-					    CPU->cpu_id, L2_SAM_MIN_FREQ);
-					freq = L2_SAM_MIN_FREQ;
-				}
-				pic->sampler.frequency = freq;
-				*flagsp = 0;
-			}
-			pic->counter = RK_PERF_L2;
-			break;
-		case 2:	/* MMU Counter */
-			if (*flagsp != CPC_COUNT_USER)
-				return (CPC_INVALID_ATTRIBUTE);
-
-			*flagsp = bits;
-			pic->counter_bits = MMU_COUNTER_BITS;
-
-			for (i = 0; i < nattrs; i++) {
-				if ((strcmp(attrs[i].ka_name, "single") == 0) &&
-				    attrs[i].ka_val)
-					pic->src_type |= HV_RK_PERF_SRC_STRAND;
-				else if
-				    ((strcmp(attrs[i].ka_name, "shared") ==
-				    0) && attrs[i].ka_val)
-					pic->src_type |=
-					    HV_RK_PERF_SRC_STRAND_M;
-				else if ((strcmp(attrs[i].ka_name,
-				    "source") == 0) && attrs[i].ka_val)
-					source = attrs[i].ka_val &
-					    HV_RK_PERF_SRC_MASK;
-				else if (attrs[i].ka_val)
-					return (CPC_INVALID_ATTRIBUTE);
-			}
-			if (source) {
-				if (source & (HV_RK_PERF_SRC_SIU |
-				    HV_RK_PERF_SRC_MMU))
-					return (CPC_INVALID_ATTRIBUTE);
-				pic->src_type = source;
-			}
-
-
-			if (pic->src_type == 0)
-				pic->src_type = HV_RK_PERF_SRC_STRAND;
-
-			pic->counter = RK_PERF_MMU;
-			break;
-		case 3: /* YANK Counter */
-			pic->counter = RK_PERF_YANK;
-			pic->counter_bits = YANK_COUNTER_BITS;
-			/* FALLTHROUGH */
-		case 4: /* SIBLK Counter */
-			if (pic->counter == 0) {
-				pic->counter = RK_PERF_SIBLK;
-				pic->counter_bits = SIBLK_COUNTER_BITS;
-			}
-			/* FALLTHROUGH */
-		case 5: /* LVLK Counter */
-			if (pic->counter == 0) {
-				pic->counter = RK_PERF_LVLK;
-				pic->counter_bits = LVLK_COUNTER_BITS;
-			}
-
-			if (*flagsp != CPC_COUNT_USER)
-				return (CPC_INVALID_ATTRIBUTE);
-
-			for (i = 0; i < nattrs; i++) {
-				if ((strcmp(attrs[i].ka_name, "single") ==
-				    0) && attrs[i].ka_val)
-					pic->src_type |= HV_RK_PERF_SRC_STRAND;
-				else if
-				    ((strcmp(attrs[i].ka_name, "shared") ==
-				    0) && attrs[i].ka_val)
-					pic->src_type |=
-					    HV_RK_PERF_SRC_STRAND_M;
-				else if ((strcmp(attrs[i].ka_name,
-				    "source") == 0) && attrs[i].ka_val)
-					source = attrs[i].ka_val &
-					    HV_RK_PERF_SRC_MASK;
-				else if (attrs[i].ka_val)
-					return (CPC_INVALID_ATTRIBUTE);
-			}
-			if (source) {
-				if (source & (HV_RK_PERF_SRC_SIU |
-				    HV_RK_PERF_SRC_MMU))
-					return (CPC_INVALID_ATTRIBUTE);
-				pic->src_type = source;
-			}
-
-
-			if (pic->src_type == 0)
-				pic->src_type = HV_RK_PERF_SRC_STRAND;
-
-			*flagsp = 0;
-			pic->sampler.frequency = 0;
-			pic->sampler.syn_counter = bits;
-			break;
-		}
-
-	if ((int64_t)pic->pcbe_pic > COUNTER_MAX(pic) ||
-	    (int64_t)pic->pcbe_pic < COUNTER_MIN(pic))
-		return (CPC_ATTRIBUTE_OUT_OF_RANGE);
-
-	pic->pcbe_pic &= COUNTER_MASK(pic);
-
-#ifdef	RKPCBE_DBG
-	set_pic_name(pic);
-#endif
-	return (0);
-}
-
-/*ARGSUSED7*/
-static int
-rk_pcbe_configure(uint_t picnum, char *event, uint64_t preset, uint32_t flags,
-		    uint_t nattrs, kcpc_attr_t *attrs, void **data, void *token)
-{
-	rk_pcbe_config_t *pic;
-	const struct nametable *n;
-	int		rc;
-
-	/* Is API version for Rock pcbe hypervisor services negotiated? */
-	if (rock_pcbe_hsvc_available == B_FALSE)
-		return (CPC_RESOURCE_UNAVAIL);
-
-	/*
-	 * If we've been handed an existing configuration, we need only preset
-	 * the counter value.
-	 */
-	if (*data != NULL) {
-		pic = *data;
-		if ((int64_t)preset > COUNTER_MAX(pic) ||
-		    (int64_t)preset < COUNTER_MIN(pic))
-			return (CPC_ATTRIBUTE_OUT_OF_RANGE);
-		pic->pcbe_pic = preset & COUNTER_MASK(pic);
-		return (0);
-	}
-
-	if (picnum < (uint_t)0 || picnum > NUM_PCBE_COUNTERS)
-		return (CPC_INVALID_PICNUM);
-
-	/*
-	 * Find other requests that will be programmed with this one, and ensure
-	 * they don't conflict.
-	 * Any other counter in this pic group is active?
-	 */
-	if (active_pics[picnum][CPU->cpu_id] != NULL)
-		return (CPC_CONFLICTING_REQS);
-
-	if ((n = find_event(picnum, event)) == NULL)
-		return (CPC_INVALID_EVENT);
-
-	/* Check for supported attributes and populate pic */
-	pic = kmem_zalloc(sizeof (rk_pcbe_config_t), KM_SLEEP);
-	pic->flags = flags;
-	pic->pcbe_pic = preset;
-
-	if (rc = populate_pic_config(picnum, nattrs, attrs, n->bits, pic)) {
-		kmem_free(pic, sizeof (rk_pcbe_config_t));
-		return (rc);
-	}
-
-	/*
-	 * num_ringbuf_entries should be always even. Since this
-	 * /etc/system tunable, need to check for this.
-	 */
-	if (num_ringbuf_entries & 1) {
-		num_ringbuf_entries++;
-		cmn_err(CE_WARN, "num_ringbuf_entries should be even."
-		    " Changing %u to %u\n", num_ringbuf_entries - 1,
-		    num_ringbuf_entries);
-	}
-	if (num_ringbuf_entries < MIN_RINGBUF_ENTRIES) {
-		cmn_err(CE_WARN, "num_ringbuf_entries should be at least "
-		    "%u. Changing %u to %u\n", MIN_RINGBUF_ENTRIES,
-		    num_ringbuf_entries, MIN_RINGBUF_ENTRIES);
-		num_ringbuf_entries = MIN_RINGBUF_ENTRIES;
-	}
-
-	pic->state = STATE_CONFIGURED;
-	pic->cpu = CPU->cpu_id;
-	active_pics[picnum][pic->cpu] = pic;
-	*data = pic;
-
-	if (pic->counter_type == NORMAL_COUNTER)
-		PRINT_PIC(pic, "After Configuration (N)");
-	return (0);
-}
-
-static void
-rk_pcbe_program(void *token)
-{
-	rk_pcbe_config_t	*pic = NULL;
-	int			rc;
-	uint64_t		counter;
-
-	while ((pic = (rk_pcbe_config_t *)kcpc_next_config(token, pic, NULL))
-	    != NULL) {
-
-		if (pic->inuse == B_FALSE)
-			continue;
-
-		counter = (uint64_t)(pic->counter | pic->src_type);
-		rc = (int)hv_rk_perf_count_init(counter);
-
-		if (curthread->t_cpc_ctx) {
-			/*
-			 * If in thread context, pic should get an exclusive
-			 * lock. If it cannot then invalidate the pic.
-			 */
-			if (rc != H_EOK) {
-				kcpc_invalidate_config(token);
-				continue;
-			}
-		} else {
-			/* Must be cpu context */
-			ASSERT(CPU->cpu_cpc_ctx);
-			if (rc == H_EWOULDBLOCK &&
-			    (pic->src_type & HV_RK_PERF_SRC_STRAND_M)) {
-				/* pic in use by a cpu of current guest */
-				pic->inuse = B_FALSE;
-				continue;
-			} else if (rc != H_EOK) {
-				/*
-				 * Either the counter is in use by a different
-				 * guest or another cpu in the current guest is
-				 * already using it in single source mode. In
-				 * either case, invalidate the pic.
-				 */
-				kcpc_invalidate_config(token);
-				continue;
-			}
-		}
-
-		/*
-		 * rc = H_EOK, hence current cpu was successful in
-		 * obtaining exclusive access to the counter, Set this
-		 * pic as active.
-		 */
-		if (CPU->cpu_id != pic->cpu) {
-			active_pics[pic->pcbe_picno][pic->cpu] = NULL;
-			pic->cpu = CPU->cpu_id;
-			active_pics[pic->pcbe_picno][pic->cpu] = pic;
-		}
-		pic->inuse = B_TRUE;
-
-		if (pic->counter_type == NORMAL_COUNTER)
-			rc = rk_pcbe_program_normal(pic);
-		else
-			rc = rk_pcbe_program_synthetic(pic);
-
-		pic->state = STATE_PROGRAMMED;
-
-		if (rc != H_EOK) {
-			kcpc_invalidate_config(token);
-			continue;
-		}
-	}
-}
-
-static void
-rk_pcbe_allstop(void)
-{
-	int 			i;
-	rk_pcbe_config_t	*pic;
-	uint64_t		diff;
-
-	for (i = 0; i <  NUM_PCBE_COUNTERS; i++) {
-		pic = active_pics[i][CPU->cpu_id];
-
-		if (pic == NULL || pic->state != STATE_PROGRAMMED)
-			continue;
-
-		ASSERT(pic->inuse == B_TRUE && CPU->cpu_id == pic->cpu);
-
-		/* Stop all active pics */
-		if (pic->counter_type == NORMAL_COUNTER) {
-			hv_rk_perf_count_stop((uint64_t)(pic->counter |
-			    pic->src_type));
-			DBG_PRINT(("CPU-%d: Counter %s(%X) stopped.\n",
-			    CPU->cpu_id, pic->name, pic->counter));
-		} else {
-			DBG_PRINT(("CPU-%d: Stopping counter %s(%lX)\n",
-			    CPU->cpu_id, pic->name,
-			    pic->sampler.synthetic_pic));
-			rk_pcbe_stop_synthetic(pic);
-		}
-
-		/* Mark pic as stopped */
-		pic->state = STATE_STOPPED;
-
-		/*
-		 * If running in lwp context, kcpc ensures a cpu that
-		 * executed pcbe_program will be the one that executes
-		 * pcbe_allstop. However, pcbe_free may be executed on
-		 * a different strand. HV puts a restriction that the
-		 * strand that programmed the counter should be the one
-		 * that releases it. Therefore, when counters are bound
-		 * to thread context, counters are released everytime
-		 * they are stopped.
-		 */
-		if (CPU->cpu_cpc_ctx == NULL) {
-			/*
-			 * If counter is being released, cache the current
-			 * sample since we cannot sample a counter that has
-			 * been released.
-			 */
-			if (rk_pcbe_sample_internal(pic, &diff) == H_EOK)
-				pic->pcbe_pic = diff;
-			else
-				pic->pcbe_pic = 0;
-			rk_pcbe_release(pic);
-		}
-	}
-}
-
-static void
-rk_pcbe_sample(void *token)
-{
-	rk_pcbe_config_t	*pic = NULL;
-	uint64_t		*pic_data;
-	int			rc;
-	uint64_t		diff;
-
-	while ((pic = (rk_pcbe_config_t *)
-	    kcpc_next_config(token, pic, &pic_data)) != NULL) {
-
-		if (pic->inuse != B_TRUE) {
-			continue;
-		}
-
-		/*
-		 * If counter is already released, then return the
-		 * cached value
-		 */
-		if (pic->state == STATE_RELEASED) {
-			*pic_data += pic->pcbe_pic;
-			pic->pcbe_pic = 0;
-			continue;
-		}
-
-		ASSERT(CPU->cpu_id == pic->cpu);
-
-		rc = rk_pcbe_sample_internal(pic, &diff);
-
-		if (pic->state == STATE_STOPPED) {
-			pic->pcbe_pic = 0;
-			rk_pcbe_release(pic);
-		}
-
-		if (rc == H_EOK) {
-			*pic_data += diff;
-		} else  {
-			kcpc_invalidate_config(token);
-		}
-	}
-}
-
-static void
-rk_pcbe_free(void *config)
-{
-	rk_pcbe_config_t 	*pic = (rk_pcbe_config_t *)config;
-
-	/* Release counter */
-	if (pic->inuse == B_TRUE) {
-		if (pic->state != STATE_RELEASED) {
-			rk_pcbe_release(pic);
-		}
-		if (pic->counter_type == SYNTHETIC_COUNTER)
-			rk_pcbe_free_synthetic(pic);
-	}
-
-	/* Mark pic as inactive */
-	active_pics[pic->pcbe_picno][pic->cpu] = NULL;
-	kmem_free(pic, sizeof (rk_pcbe_config_t));
-}
-
-static void
-rk_pcbe_release(rk_pcbe_config_t *pic)
-{
-	int			rc = 0;
-
-	ASSERT(pic->inuse == B_TRUE && pic->state != STATE_RELEASED);
-
-	DBG_PRINT(("CPU-%d: Releasing Pic %s (#%d, cntr %X) %p",
-	    CPU->cpu_id, pic->name, pic->pcbe_picno, pic->counter,
-	    (void *)pic));
-
-	rc = (int)hv_rk_perf_count_release((uint64_t)
-	    (pic->counter | pic->src_type));
-	if (rc != 0) {
-		cmn_err(CE_WARN, "CPU-%d: Releasing Pic-%d, counter: %X failed "
-		    "%p. rc=%d", CPU->cpu_id, pic->pcbe_picno, pic->counter,
-		    (void *)pic, rc);
-	}
-	if (pic->counter_type == SYNTHETIC_COUNTER &&
-	    !(pic->counter == RK_PERF_YANK || pic->counter == RK_PERF_SIBLK ||
-	    pic->counter == RK_PERF_LVLK)) {
-		rc = (int)hv_rk_perf_sample_release((uint64_t)
-		    (pic->counter | pic->src_type));
-		if (rc != 0) {
-			cmn_err(CE_WARN, "CPU-%d: Releasing Pic-%d, sampler: %X"
-			    " failed %p. rc=%d", CPU->cpu_id, pic->pcbe_picno,
-			    pic->counter, (void *)pic, rc);
-			return;
-		}
-	}
-	pic->state = STATE_RELEASED;
-}
-
-static int
-rk_pcbe_program_normal(rk_pcbe_config_t *pic)
-{
-	uint64_t		counter;
-	uint64_t		config_value;
-	uint64_t		rc = H_EOK;
-
-	ASSERT(pic->inuse == B_TRUE);
-
-	counter = (uint64_t)(pic->counter | pic->src_type);
-
-	/* Preset the counter value if non zero */
-	if (pic->pcbe_pic > 0)  {
-		DBG_PRINT(("CPU-%d: Counter getting preset to %lu (%lX)\n",
-		    CPU->cpu_id, pic->pcbe_pic, pic->pcbe_pic));
-		rc = (int)hv_rk_perf_count_set(counter, pic->pcbe_pic);
-	}
-
-	if (rc != H_EOK) {
-		cmn_err(CE_WARN, "{%d} Pic %d cntr %X not set",
-		    CPU->cpu_id, pic->pcbe_picno, pic->counter);
-		PRINT_PIC(pic, "Set counter failed");
-		return ((int)rc);
-	}
-
-	/* Configure and start counter */
-	config_value = ((uint64_t)pic->toe << RK_PERF_COUNT_TOE_SHIFT)
-	    | pic->flags;
-	rc = (int)hv_rk_perf_count_start(counter, config_value);
-
-	if (rc != H_EOK) {
-		cmn_err(CE_WARN, "{%d} Pic %d cntr %X not configured",
-		    CPU->cpu_id, pic->pcbe_picno, pic->counter);
-		PRINT_PIC(pic, "Configure counter failed");
-	}
-	return ((int)rc);
-}
-
-static int
-rk_pcbe_program_synthetic(rk_pcbe_config_t *pic)
-{
-	int	rc;
-	ASSERT(pic->inuse == B_TRUE);
-	switch (pic->counter) {
-		case RK_PERF_INSTR:
-			rc = program_instr_sampler(pic);
-			break;
-		case RK_PERF_L2:
-			rc = program_l2_sampler(pic);
-			break;
-		case RK_PERF_YANK:
-			/* FALLTHROUGH */
-		case RK_PERF_SIBLK:
-			/* FALLTHROUGH */
-		case RK_PERF_LVLK:
-			rc = rk_pcbe_program_normal(pic);
-			break;
-		default:
-			PRINT_PIC(pic, "rk_pcbe_program_synthetic");
-			ASSERT(0);
-			rc = H_EINVAL;
-			break;
-	}
-	return (rc);
-}
-
-static void
-rk_pcbe_free_synthetic(rk_pcbe_config_t *pic)
-{
-	ASSERT(pic->inuse == B_TRUE);
-	switch (pic->counter) {
-		case RK_PERF_INSTR:
-			/* FALLTHROUGH */
-		case RK_PERF_L2:
-			free_ringbuffer(pic);
-			break;
-		case RK_PERF_YANK:
-			/* FALLTHROUGH */
-		case RK_PERF_SIBLK:
-			/* FALLTHROUGH */
-		case RK_PERF_LVLK:
-			/* Do nothing */
-			break;
-		default:
-			PRINT_PIC(pic, "rk_pcbe_free_synthetic");
-			ASSERT(0);
-			break;
-	}
-}
-
-static int
-rk_pcbe_sample_internal(rk_pcbe_config_t *pic, uint64_t *data)
-{
-	uint64_t		counter_value;
-	int			rc;
-	int64_t			diff;
-
-		if (pic->counter_type == NORMAL_COUNTER) {
-			rc = (int)hv_rk_perf_count_get((uint64_t)(pic->counter |
-			    pic->src_type), &counter_value);
-			if (rc == H_EOK) {
-				counter_value &= COUNTER_MASK(pic);
-				diff = counter_value - pic->pcbe_pic;
-				pic->pcbe_pic = counter_value;
-				/*
-				 * When counter overflows the overflow handler
-				 * (rk_pcbe_overflow_bitmap) would have added
-				 * MAX count value to pic->pcbe_pic. Therefore
-				 * -ve implies that the counter has overflowed.
-				 * The actual count amounts to,
-				 * (counter_value - (pic->pcbe_pic - MAX)) + MAX
-				 * => counter_value - pic->pcbe_pic + (2 * MAX)
-				 * => diff + (2 * MAX)
-				 */
-				if (diff < 0) {
-					diff +=
-					    (0x1ULL << (pic->counter_bits + 1));
-				}
-			}
-		} else {
-			/*
-			 * Difference returned by synthetic counters will
-			 * be always +ve
-			 */
-			rc = rk_pcbe_sample_synthetic(pic, &diff);
-		}
-
-		if (rc == H_EOK)
-			*data = (uint64_t)diff;
-
-		return ((int)rc);
-}
-
-/* All sample_synthetic code may be executed at TL=1 */
-static int
-rk_pcbe_sample_synthetic(rk_pcbe_config_t *pic, int64_t *diffp)
-{
-	int	rc;
-	ASSERT(pic->inuse == B_TRUE);
-	switch (pic->counter) {
-		case RK_PERF_INSTR:
-			rc = sample_instr_sampler(pic, diffp);
-			break;
-		case RK_PERF_L2:
-			rc = sample_l2_sampler(pic, diffp);
-			break;
-		case RK_PERF_YANK:
-			/* FALLTHROUGH */
-		case RK_PERF_SIBLK:
-			/* FALLTHROUGH */
-		case RK_PERF_LVLK:
-			rc = sample_mccdesr(pic, diffp);
-			break;
-		default:
-			PRINT_PIC(pic, "rk_pcbe_sample_synthetic");
-			ASSERT(0);
-			break;
-	}
-	return (rc);
-}
-
-static void
-rk_pcbe_stop_synthetic(rk_pcbe_config_t *pic)
-{
-	uint64_t	counter = (uint64_t)(pic->counter | pic->src_type);
-
-	ASSERT(pic->inuse == B_TRUE);
-	switch (pic->counter) {
-		case RK_PERF_INSTR:
-			/* FALLTHROUGH */
-		case RK_PERF_L2:
-			hv_rk_perf_count_stop(counter);
-			hv_rk_perf_sample_stop(counter);
-			break;
-		case RK_PERF_YANK:
-			/* FALLTHROUGH */
-		case RK_PERF_SIBLK:
-			/* FALLTHROUGH */
-		case RK_PERF_LVLK:
-			hv_rk_perf_count_stop(counter);
-			break;
-		default:
-			PRINT_PIC(pic, "rk_pcbe_stop_synthetic");
-			ASSERT(0);
-			break;
-	}
-}
-
-static int
-program_l2_sampler(rk_pcbe_config_t *pic)
-{
-#define	ASI_PERF_L2_TXN_INFO		0xF10010
-#define	ASI_PERF_L2_EA_MASK		0xF10018
-#define	ASI_PERF_L2_EA_MATCH		0xF10020
-#define	ASI_PERF_L2_TXN_INFO_FILTER	0xF10030
-#define	ASI_PERF_L2_CC			0xF10038
-#define	TXN_ICACHE_LOAD			0x1
-#define	TXN_DCACHE_LOAD			0x2
-#define	TXN_INSTR_PREFETCH		0x4
-#define	TXN_STORE_PREFETCH		0x8
-#define	TXN_DCACHE_STORE		0x10
-#define	TXN_ATOMIC_LOAD_STORE		0x20
-#define	TXN_FLUSH			0x40
-#define	L2_ALL_TXNS	(TXN_ICACHE_LOAD | TXN_DCACHE_LOAD | \
-			TXN_INSTR_PREFETCH | TXN_STORE_PREFETCH | \
-			TXN_DCACHE_STORE | TXN_ATOMIC_LOAD_STORE | TXN_FLUSH)
-#define	L2_TXN_SHIFT			3
-#define	L2_ALL_EVT			0x3
-#define	L2_ALL_EVT_SHIFT		10
-#define	L2_TXN_INFO_FILTER_MASK		(L2_ALL_EVT << L2_ALL_EVT_SHIFT) | \
-					(L2_ALL_TXNS << L2_TXN_SHIFT)
-
-	program_sampler_data_t	sdata;
-	int			i = 0;
-
-	(void) strcpy(sdata.name, "program_l2_sampler");
-	pic->flags = L2_ALL_TXNS; /* For L2 counter */
-
-	/*
-	 * If (((Reported EA ^ MATCH) & MASK) == 0) then sample is taken
-	 */
-	sdata.asi_config[i].va = ASI_PERF_L2_EA_MASK;
-	sdata.asi_config[i].value = 0;
-	i++;
-
-	sdata.asi_config[i].va = ASI_PERF_L2_EA_MATCH;
-	sdata.asi_config[i].value = 0;
-	i++;
-
-	sdata.asi_config[i].va = ASI_PERF_L2_CC;
-	sdata.asi_config[i].value = pic->sampler.frequency;
-	i++;
-
-	sdata.asi_config[i].va = ASI_PERF_L2_TXN_INFO_FILTER;
-	sdata.asi_config[i].value = L2_TXN_INFO_FILTER_MASK;
-
-	sdata.asi_config_num = i + 1;
-
-	sdata.asi_sample[0] = ASI_PERF_L2_TXN_INFO;
-	sdata.asi_sample_num = 1;
-
-	return (program_a_sampler(pic, &sdata));
-}
-
-static int
-sample_l2_sampler(rk_pcbe_config_t *pic, int64_t *diffp)
-{
-#define	DS_SHIFT	34
-#define	EVT_SHIFT	22
-#define	TXN_SHIFT	7
-#define	DS_MASK		MAKE_MASK(2, 0)
-#define	EVT_MASK	MAKE_MASK(4, 0)
-#define	TXN_MASK	MAKE_MASK(7, 0)
-
-	rk_pcbe_ringbuf_t	*ringbuf = pic->sampler.ring_buffer;
-	uint32_t	value, target;
-	uint64_t	*head, *tail;
-	uint32_t	sample_count = 0, sample_hit_count = 0;
-	uint32_t	size = pic->sampler.sample_size;
-	uint8_t		ds, evt;
-	int		ret;
-
-	head =  RINGBUF_GET_HEAD(ringbuf);
-	tail =  RINGBUF_GET_TAIL(ringbuf);
-
-	if (head == tail) {
-		DBG_PRINT(("CPU-%d: HEAD eq TAIL to start with\n",
-		    CPU->cpu_id));
-	}
-
-	/* Consume samples */
-	while (head != tail) {
-		uint64_t rawvalue = *head;
-		DBG_PRINT(("CPU-%d: rawvalue=0x%lX\n", CPU->cpu_id, rawvalue));
-		target = TYPE(pic->sampler.syn_counter);
-
-		switch (GROUP(pic->sampler.syn_counter)) {
-		case L2_GROUP_DS:
-			value = (rawvalue >> DS_SHIFT) & DS_MASK;
-			DBG_PRINT(("CPU-%d: value=0x%X, target=0x%X\n",
-			    CPU->cpu_id, value, target));
-			switch (target) {
-			case DS_DRAM: /* FALLTHROUGH */
-			case DS_L3: /* FALLTHROUGH */
-			case DS_OTHER_L2: /* FALLTHROUGH */
-				if (value == target)
-					sample_hit_count++;
-				break;
-			}
-			break;
-		case L2_GROUP_TXN_MISS:
-			value = (rawvalue >> TXN_SHIFT) & TXN_MASK;
-			ds = (uint8_t)((rawvalue >> DS_SHIFT) & DS_MASK);
-			evt = (uint8_t)((rawvalue >> EVT_SHIFT) & EVT_MASK);
-			DBG_PRINT(("CPU-%d: value=0x%X, target=0x%X, "
-			    " ds: 0x%X, evt: 0x%X\n", CPU->cpu_id, value,
-			    target, ds, evt));
-			if (((value & target) != 0) && (evt == EVT_L2_MISS ||
-			    evt == EVT_L2_PRIOR_MISS) && (ds != DS_LOCAL_L2))
-				sample_hit_count++;
-			break;
-		case L2_GROUP_TXN_HIT:
-			value = (rawvalue >> TXN_SHIFT) & TXN_MASK;
-			ds = (uint8_t)((rawvalue >> DS_SHIFT) & DS_MASK);
-			evt = (uint8_t)((rawvalue >> EVT_SHIFT) & EVT_MASK);
-			DBG_PRINT(("CPU-%d: value=0x%X, target=0x%X, "
-			    " ds: 0x%X, evt: 0x%X\n", CPU->cpu_id, value,
-			    target, ds, evt));
-			if (((value & target) != 0) && (evt == EVT_L2_PEND_ST ||
-			    evt == EVT_L2_NOEVENTS) && (ds == DS_LOCAL_L2))
-				sample_hit_count++;
-			break;
-		case L2_GROUP_EVT:
-			evt = (rawvalue >> EVT_SHIFT) & EVT_MASK;
-			ds = (uint8_t)((rawvalue >> DS_SHIFT) & DS_MASK);
-			DBG_PRINT(("CPU-%d: evt=0x%X, target=0x%X, "
-			    "ds: 0x%X\n", CPU->cpu_id, evt, target, ds));
-
-			switch (target) {
-			case L2_HIT:
-				if ((evt == EVT_L2_NOEVENTS || evt ==
-				    EVT_L2_PEND_ST) && ds == DS_LOCAL_L2)
-					sample_hit_count++;
-				break;
-			case L2_MISS:
-				if ((evt == EVT_L2_MISS || evt ==
-				    EVT_L2_PRIOR_MISS) && ds == DS_LOCAL_L2)
-					sample_hit_count++;
-				break;
-			}
-		}
-		sample_count++;
-		RINGBUF_MOVE_HEAD(ringbuf, head, size);
-	}
-	RINGBUF_SET_HEAD(ringbuf, head);
-
-	ret = synthesize_sample_count(pic, sample_count, sample_hit_count,
-	    "sample_l2_sampler", diffp);
-
-	return (ret);
-}
-
-static int
-program_instr_sampler(rk_pcbe_config_t *pic)
-{
-#define	ASI_PERF_IS_PC_MASK		0x10
-#define	ASI_PERF_IS_PC_MATCH		0x18
-#define	ASI_PERF_IS_CC_LATENCY_MASK	0x160
-#define	ASI_PERF_IS_CONTEXT_FILTER	0x168
-#define	ASI_PERF_IS_INFO_MASK		0x170
-#define	ASI_PERF_IS_INFO_MATCH		0x178
-
-#define	ASI_PERF_IS_CONTEXT		0x108
-#define	ASI_PERF_IS_INFO		0x148
-
-#define	IS_BHR_LATENCY_CLAT_MASK	0xFFF
-#define	IS_CC_FILTER_TGTF_MASK		0x10
-#define	IS_CC_FILTER_TOF_MASK		0x8
-#define	IS_CC_LATENCY_FREQ_SHIFT	22
-
-
-	program_sampler_data_t	sdata;
-	int			i = 0;
-
-	(void) strcpy(sdata.name, "program_instr_sampler");
-	/*
-	 * If (((Reported Value ^ MATCH) & MASK) == 0) then sample is taken;
-	 */
-	sdata.asi_config[i].va = ASI_PERF_IS_PC_MASK;
-	sdata.asi_config[i].value = 0;
-	i++;
-
-	sdata.asi_config[i].va = ASI_PERF_IS_PC_MATCH;
-	sdata.asi_config[i].value = 0;
-	i++;
-
-	/*
-	 * Set CLAT_MASK to 0xFFF, meaning, drop instruction samples
-	 * whose latency is zero, means, sample all of them, because
-	 * all instructions has at least a latency of 1 cycle.
-	 */
-	sdata.asi_config[i].va = ASI_PERF_IS_CONTEXT_FILTER;
-	sdata.asi_config[i].value = (uint64_t)(IS_CC_FILTER_TGTF_MASK |
-	    IS_CC_FILTER_TOF_MASK | pic->sampler.flags);
-	i++;
-
-	/*
-	 * Even though frequency is set when started, it has to be
-	 * specified here, because, if left zero, then a PET is
-	 * immediately generated since the candidate counter is zero.
-	 */
-	sdata.asi_config[i].va = ASI_PERF_IS_CC_LATENCY_MASK;
-	sdata.asi_config[i].value = ((((uint64_t)pic->sampler.frequency) <<
-	    IS_CC_LATENCY_FREQ_SHIFT) | IS_BHR_LATENCY_CLAT_MASK);
-	i++;
-
-	sdata.asi_config[i].va = ASI_PERF_IS_INFO_MASK;
-	sdata.asi_config[i].value = 0;
-	i++;
-
-	sdata.asi_config[i].va = ASI_PERF_IS_INFO_MATCH;
-	sdata.asi_config[i].value = 0;
-
-	sdata.asi_config_num = i + 1;
-
-	sdata.asi_sample[0] = ASI_PERF_IS_INFO;
-	sdata.asi_sample[1] = ASI_PERF_IS_CONTEXT;
-	sdata.asi_sample_num = 2;
-
-	return (program_a_sampler(pic, &sdata));
-}
-
-static int
-sample_instr_sampler(rk_pcbe_config_t *pic, int64_t *diffp)
-{
-#define	I_MODE_SHIFT	34
-#define	I_TYPE_SHIFT	0
-#define	I_EVT_SHIFT	7
-#define	I_MODE_MASK	MAKE_MASK(3, 0)
-#define	I_TYPE_MASK	MAKE_MASK(7, 0)
-#define	I_EVT_MASK	MAKE_MASK(12, 0)
-
-	rk_pcbe_ringbuf_t	*ringbuf = pic->sampler.ring_buffer;
-	uint32_t	size = pic->sampler.sample_size;
-	uint32_t	value, target, shift, mask;
-	uint32_t	sample_count = 0, sample_hit_count = 0;
-	uint64_t	*head, *tail;
-	int		ret;
-
-	switch (GROUP(pic->sampler.syn_counter)) {
-	case I_GROUP_MODE:
-		mask = I_MODE_MASK;
-		shift = I_MODE_SHIFT;
-		break;
-	case I_GROUP_TYPE:
-		mask = I_TYPE_MASK;
-		shift = I_TYPE_SHIFT;
-		break;
-	case I_GROUP_EVT:
-		mask = I_EVT_MASK;
-		shift = I_EVT_SHIFT;
-		break;
-	default:
-		PRINT_PIC(pic, "No I_GROUP found");
-		ASSERT(0);
-		break;
-	}
-
-	head =  RINGBUF_GET_HEAD(ringbuf);
-	tail =  RINGBUF_GET_TAIL(ringbuf);
-
-	if (head == tail) {
-		DBG_PRINT(("CPU-%d: HEAD eq TAIL to start with\n",
-		    CPU->cpu_id));
-	}
-
-	/* Consume samples */
-	while (head != tail) {
-		/*
-		 * Data returned will be in the same order as the asi_list
-		 * passed to hypervisor during hv_rk_perf_sample_start call.
-		 */
-		uint64_t	rawvalue = *head;
-		uint64_t	context = *(head + 1);
-		uint8_t		tl = (uint8_t)((context >> 2) & 7);
-		int		drop_sample = B_FALSE;
-
-		if (rawvalue != 0) {
-			value = (rawvalue >> shift) & mask;
-			target = TYPE(pic->sampler.syn_counter);
-			DBG_PRINT(("CPU-%d: rawvalue=0x%lX, value=0x%X,"
-			    "target=0x%X\n", CPU->cpu_id, rawvalue, value,
-			    target));
-
-			/*
-			 * Several EVT fields are only valid for certain
-			 * instruction types.  Need to check TYP field
-			 * before trusting what's in EVT.
-			 */
-			if (GROUP(pic->sampler.syn_counter) == I_GROUP_EVT) {
-				uint64_t type = rawvalue >> I_TYPE_SHIFT;
-
-				switch (target) {
-				case EVT_DC_MISS:
-				case EVT_PRIOR_MISS:
-				case EVT_LDB_FULL:
-				case EVT_BYPASS_RAW:
-				case EVT_NONBYPASS_RAW:
-					if ((type & TYPE_LD) == 0)
-						drop_sample = B_TRUE;
-					break;
-				case EVT_STB_FULL:
-					if ((type & TYPE_ST) == 0)
-						drop_sample = B_TRUE;
-					break;
-				case EVT_DTLB_MISS:
-					if ((type & (TYPE_LD|TYPE_ST)) == 0)
-						drop_sample = B_TRUE;
-					break;
-				case EVT_CORRECT_BP:
-				case EVT_CTI_TAKEN:
-					if ((type & TYPE_CTI) == 0)
-						drop_sample = B_TRUE;
-					break;
-				}
-				DBG_PRINT(("CPU-%d: rawvalue=%lX, cleaned value"
-				    "=%X, target=%X\n", CPU->cpu_id, rawvalue,
-				    value, target));
-			}
-
-			/*
-			 * If user does not want to count instructions in scout
-			 * mode, and if the instruction sampled was in scout
-			 * mode, drop the sample.
-			 */
-			if (pic->sampler.nohws == B_TRUE) {
-				uint64_t mode = (rawvalue >> I_MODE_SHIFT) &
-				    I_MODE_MASK;
-				if (mode == MODE_HWS)
-					drop_sample = B_TRUE;
-			}
-
-			/*
-			 * If user wants to count instructions at a particular
-			 * trap level (0 or >0), and the samples are in
-			 * different trap level, drop the sample.
-			 */
-			switch (pic->sampler.tl) {
-			case TLZ: /* Sample ONLY instr at TL == 0 */
-				if (tl != 0)
-					drop_sample = B_TRUE;
-				break;
-			case TLNZ: /* Sample ONLY instr at TL > 0 */
-				if (tl == 0)
-					drop_sample = B_TRUE;
-				break;
-			}
-
-			switch (GROUP(pic->sampler.syn_counter)) {
-			case I_GROUP_MODE:
-				/* Fields that are integers */
-				if (value == target && drop_sample == B_FALSE)
-					sample_hit_count++;
-				break;
-			case I_GROUP_EVT:
-			case I_GROUP_TYPE:
-				/* Fields that are bit vectors */
-				if (value & target && drop_sample == B_FALSE)
-					sample_hit_count++;
-				break;
-			default:
-				ASSERT(0); /* missing case statement */
-			}
-		}
-		sample_count++;
-		RINGBUF_MOVE_HEAD(ringbuf, head, size);
-	}
-	RINGBUF_SET_HEAD(ringbuf, head);
-
-	ret = synthesize_sample_count(pic, sample_count, sample_hit_count,
-	    "sample_instr_sampler", diffp);
-
-	return (ret);
-}
-
-/*
- * mccdesr counters are synthetic counters. Hypervisor maintains
- * a 64 bit memory based counter. Therefore we can assume that
- * this counter never overflows.
- */
-static	int
-sample_mccdesr(rk_pcbe_config_t *pic, int64_t *diffp)
-{
-	uint64_t	rc = 0;
-	uint64_t	counter_value;
-	rc = hv_rk_perf_count_get((uint64_t)(pic->counter |
-	    pic->src_type), &counter_value);
-	if (rc == H_EOK) {
-		counter_value &= COUNTER_MASK(pic);
-		*diffp = counter_value - pic->pcbe_pic;
-		pic->pcbe_pic = counter_value;
-		if (*diffp < 0) {
-			cmn_err(CE_WARN, "CPU-%d: Pic-%d, counter: %X overflow",
-			    CPU->cpu_id, pic->pcbe_picno, pic->counter);
-		}
-	} else {
-		cmn_err(CE_WARN, "CPU-%d: Failed to sample pic-%d, counter-%X",
-		    CPU->cpu_id, pic->pcbe_picno, pic->counter);
-	}
-	return ((int)rc);
-}
-
-static int
-program_a_sampler(rk_pcbe_config_t *pic, program_sampler_data_t *sdata)
-{
-	uint64_t	ringbuf_pa, asi_list_pa, counter, rc;
-	int		hv_call_cnt = 1, ret = 0, need_init = 0, i;
-	uint64_t	temp_pcbe_pic = 0;
-
-	counter = (uint64_t)(pic->counter | pic->src_type);
-
-	if (pic->sampler.ring_buffer == NULL) {
-		pic->sampler.sample_size = sdata->asi_sample_num *
-		    sizeof (uint64_t);
-		rc = alloc_ringbuffer(pic, pic->sampler.sample_size,
-		    num_ringbuf_entries);
-		if (rc != 0)
-			return ((int)rc);
-		need_init = 1;
-		PRINT_PIC(pic, "After Configuration (S)");
-	}
-
-	if (need_init || pic->state == STATE_RELEASED) {
-		ringbuf_pa = va_to_pa(pic->sampler.ring_buffer);
-		rc = hv_rk_perf_sample_init(counter, ringbuf_pa);
-		print_hv_error(rc, &hv_call_cnt, sdata->name, pic);
-		if (rc != H_EOK)
-			return ((int)rc);
-	}
-
-	/*
-	 * If (((Reported Value ^ MATCH) & MASK) == 0) then sample is taken;
-	 */
-	for (i = 0; i < sdata->asi_config_num; i++) {
-		rc = hv_rk_perf_sample_config(counter, sdata->asi_config[i].va,
-		    sdata->asi_config[i].value);
-		ret |= (int)rc;
-		print_hv_error(rc, &hv_call_cnt, sdata->name, pic);
-	}
-
-	/*
-	 * pic->pcbe_pic is used to hold preset value in case of synthetic
-	 * counters
-	 */
-	if (pic->pcbe_pic > 0) {
-		temp_pcbe_pic = pic->pcbe_pic;
-		pic->pcbe_pic = 0;
-	}
-	ret |= rk_pcbe_program_normal(pic); /* Reset to zero & start counting */
-	pic->pcbe_pic = temp_pcbe_pic;
-
-	/*
-	 * Start sampling
-	 *
-	 * Data returned in the ringbuffer by the hypervisor will be in the
-	 * same order as it is programmed
-	 */
-	asi_list_pa = va_to_pa(sdata->asi_sample);
-	rc = hv_rk_perf_sample_start(counter, pic->sampler.frequency,
-	    sdata->asi_sample_num * sizeof (uint64_t), asi_list_pa);
-	ret |= (int)rc;
-	print_hv_error(rc, &hv_call_cnt, sdata->name, pic);
-	return (ret);
-}
-
-static int
-synthesize_sample_count(rk_pcbe_config_t *pic, uint64_t sample_count,
-	uint64_t sample_hit_count, char *name, int64_t *diffp)
-{
-
-	uint64_t	total_count, rc, ovf_count, hit_count = 0;
-	int		hv_call_cnt = 1, ret = 0;
-	/*
-	 * Since ring buffer is consumed, clear pending sample count.
-	 * Sample count is discarded, therefore reusing a variable.
-	 */
-	rc = hv_rk_perf_sample_pending((uint64_t)(pic->counter |
-	    pic->src_type), &total_count);
-	ret |= (int)rc;
-	print_hv_error(rc, &hv_call_cnt, name, pic);
-
-	/* Check if the counter overflowed */
-	rc = hv_rk_perf_count_overflow((uint64_t)(pic->counter |
-	    pic->src_type), &ovf_count);
-	ret |= (int)rc;
-	print_hv_error(rc, &hv_call_cnt, name, pic);
-
-	if (rc != H_EOK)
-		ovf_count = 0;
-
-	rc = hv_rk_perf_count_get((uint64_t)(pic->counter |
-	    pic->src_type), &total_count);
-	ret |= (int)rc;
-	print_hv_error(rc, &hv_call_cnt, name, pic);
-
-	if (rc != H_EOK)
-		total_count = 0;
-
-	total_count &= COUNTER_MASK(pic);
-
-	/*
-	 * Reset it to zero so that we need not maintain old value
-	 */
-	rc = hv_rk_perf_count_set((uint64_t)(pic->counter | pic->src_type), 0);
-	ret |= (int)rc;
-	print_hv_error(rc, &hv_call_cnt, name, pic);
-
-	/*
-	 * ovf_count > 0 means, counter has hit max, ovf_count times
-	 * before counting total_count of instructions. Therefore
-	 * add total_count to ovf_count times max count value.
-	 */
-	if (ovf_count)
-		total_count += (ovf_count * (0x1ULL << pic->counter_bits));
-
-	if (sample_count > 0)
-		hit_count = (sample_hit_count * total_count) / sample_count;
-
-	*diffp = (int64_t)hit_count;
-	DBG_PRINT(("CPU-%d: sample_instr_load. hit_count: %lu, *diffp: %ld\n",
-	    CPU->cpu_id, hit_count, *diffp));
-	if (*diffp < 0) {
-		cmn_err(CE_WARN, "CPU-%d Negative instr count. hit_count: %lu, "
-		    "*diffp: %ld\n", CPU->cpu_id, hit_count, *diffp);
-	}
-
-	if (pic->pcbe_pic) {
-		*diffp += pic->pcbe_pic;	/* Add the preset value */
-	/*
-	 * pic->pcbe_pic is used to hold preset value in case of synthetic
-	 * counters
-	 */
-		pic->pcbe_pic = 0;
-	}
-	return (ret);
-}
-
-static int
-alloc_ringbuffer(rk_pcbe_config_t *pic, uint32_t size,
-						uint32_t num_samples)
-{
-	uint32_t	ringbuf_size;
-	uint32_t	asize = 2;
-	rk_pcbe_ringbuf_t	*ringbuf;
-	ASSERT(!(num_samples & 1)); /* Assert number of samples is even */
-
-	ringbuf_size = sizeof (rk_pcbe_ringbuf_t) + (size * num_samples);
-
-	/* Size should be a power of 2 */
-	while ((ringbuf_size & (asize - 1)) != ringbuf_size)
-		asize <<= 1;
-
-	ringbuf = contig_mem_alloc_align_sleep(asize, 0);
-	if (ringbuf == NULL) {
-		cmn_err(CE_WARN, "CPU-%d: Ringbuffer memory allocation failed!",
-		    CPU->cpu_id);
-		return (-1);
-	}
-	pic->sampler.ring_buffer = ringbuf;
-	ringbuf->head = NULL;
-	ringbuf->tail = NULL;
-	ringbuf->size = size * num_samples;
-	ringbuf->hwm = ringbuf->size >> 1;
-	return (0);
-}
-
-static void
-free_ringbuffer(rk_pcbe_config_t *pic)
-{
-	rk_pcbe_ringbuf_t	*ringbuf = pic->sampler.ring_buffer;
-	/*
-	 * When multiple pics are used and one of the pics was not configurable
-	 * (eg: Bad attribute), then cpc calls rk_pcbe_free for the pics that
-	 * were already configured. This results in calling this routine with
-	 * NULL ringbuf, since ringbuf is allocated when the first sample is
-	 * taken. To protect against this condition, we need do the following
-	 * check before calling contig_mem_free since it uses ringbuf->size.
-	 */
-	if (ringbuf) {
-		uint32_t	ringbuf_size;
-		uint32_t	asize = 2;
-		DBG_PRINT(("CPU-%d: free_ringbuffer freeing %d bytes\n",
-		    CPU->cpu_id,
-		    (int)(sizeof (rk_pcbe_ringbuf_t) + ringbuf->size)));
-		ringbuf_size = sizeof (rk_pcbe_ringbuf_t) + ringbuf->size;
-		while ((ringbuf_size & (asize - 1)) != ringbuf_size)
-			asize <<= 1;
-		contig_mem_free(ringbuf, asize);
-	}
-}
-
-static void
-print_hv_error(uint64_t rc, int *cntp, char *funcname, rk_pcbe_config_t *pic)
-{
-	ASSERT(cntp && pic);
-	if (rc != H_EOK) {
-		cmn_err(CE_WARN, "{%d} pgm-hw call-%d in %s returned 0x%lX for "
-		    "pic %d cntr %X", CPU->cpu_id, *cntp, funcname, rc,
-		    pic->pcbe_picno, pic->counter);
-	}
-	(*cntp)++;
-}
-
-static	void
-set_string_constants(void)
-{
-	if (strncmp(cpu_module_name, "SUNW,", 5) == 0)
-		rock_name = &cpu_module_name[5];
-	else
-		rock_name = cpu_module_name;
-	(void) strcpy(rock_cpuref, "See the \"");
-	(void) strcat(rock_cpuref, rock_name);
-	(void) strcat(rock_cpuref, " User's Manual\" for descriptions of "
-	    "these events. "CPU_REF_URL);
-	(void) strcat(pcbe_module_name, cpu_module_name);
-}
-
-static	uint64_t
-bitmask(uint8_t bits)
-{
-	if (bits < 64)
-		return ((1ULL << bits) - 1);
-	return (-1);
-}
-
-#ifdef RKPCBE_DBG
-static	void
-set_pic_name(rk_pcbe_config_t *pic)
-{
-	uint32_t	bits;
-	const struct nametable	*n;
-
-	/*
-	 * For normal instruction counter, the 'bits' value is not saved.
-	 */
-	if (pic->counter_type == NORMAL_COUNTER) {
-		if (pic->counter == RK_PERF_INSTR) {
-			(void) strcpy(pic->name, "Instr_All");
-			return;
-		}
-		bits = pic->flags;
-	}
-	else
-		bits = pic->sampler.syn_counter;
-
-	for (n = events[pic->pcbe_picno]; n->bits != NT_END; n++) {
-		if (n->bits == bits) {
-			(void) strcpy(pic->name, n->name);
-			break;
-		}
-	}
-}
-
-static void
-print_pic(rk_pcbe_config_t *pic, char *heading)
-{
-	ASSERT(pic);
-	/*
-	 * On multi strand system, the print gets clobberd. Therefore
-	 * grab a lock so that the output is legible.
-	 */
-	mutex_enter(&print_pic_lock);
-	printf("{CPU-%d} %s:\n", CPU->cpu_id, heading);
-	printf("pic addr     : %p\n", (void *)pic);
-	printf("name         : %s\n", pic->name);
-	printf("pcbe_picno   : %d\n", pic->pcbe_picno);
-	printf("counter_bits : 0x%X\n", pic->counter_bits);
-	printf("counter_type : 0x%X\n", pic->counter_type);
-	printf("toe          : %d\n", pic->toe);
-	printf("counter      : 0x%X\n", pic->counter);
-	printf("src_type     : 0x%X\n", pic->src_type);
-	printf("flags        : 0x%X\n", pic->flags);
-	printf("pcbe_pic     : %ld\n", pic->pcbe_pic);
-	printf("inuse        : %d\n", pic->inuse);
-	printf("state        : 0x%X\n", pic->state);
-	printf("cpu          : %d\n", pic->cpu);
-	if (pic->counter_type == SYNTHETIC_COUNTER) {
-		printf("Synthetic counter:\n");
-		printf("\tsyn_pic: 0x%X\n", (int)pic->sampler.synthetic_pic);
-		printf("\tfreq   : %d\n", pic->sampler.frequency);
-		printf("\tsyn_cnt: 0x%X\n", pic->sampler.syn_counter);
-		printf("\tsize   : %d bytes\n", pic->sampler.sample_size);
-		printf("\tflags  : 0x%X\n", pic->sampler.flags);
-		printf("\ttl     : 0x%X\n", pic->sampler.tl);
-		printf("\tnohws  : 0x%X\n", pic->sampler.nohws);
-		printf("\trbuf   : 0x%p\n", (void *)pic->sampler.ring_buffer);
-		if (pic->sampler.ring_buffer) {
-			rk_pcbe_ringbuf_t *rb = pic->sampler.ring_buffer;
-			printf("\tRingbuffer:\n");
-			printf("\t\tHead: 0x%X\n", rb->head);
-			printf("\t\tTail: 0x%X\n", rb->tail);
-			printf("\t\tSize: 0x%X\n", rb->size);
-			printf("\t\tHwm : 0x%X\n", rb->hwm);
-		}
-	}
-	printf("-----------------\n");
-	mutex_exit(&print_pic_lock);
-}
-#endif
--- a/usr/src/uts/sun4v/rock/Makefile	Wed Aug 05 18:08:09 2009 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,113 +0,0 @@
-#
-# CDDL HEADER START
-#
-# The contents of this file are subject to the terms of the
-# Common Development and Distribution License (the "License").
-# You may not use this file except in compliance with the License.
-#
-# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
-# or http://www.opensolaris.org/os/licensing.
-# See the License for the specific language governing permissions
-# and limitations under the License.
-#
-# When distributing Covered Code, include this CDDL HEADER in each
-# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
-# If applicable, add the following below this CDDL HEADER, with the
-# fields enclosed by brackets "[]" replaced with your own identifying
-# information: Portions Copyright [yyyy] [name of copyright owner]
-#
-# CDDL HEADER END
-#
-
-#
-# Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
-# Use is subject to license terms.
-#
-#	This makefile drives the production of the UltraSPARC-AT10 cpu module.
-#
-#	sun4v implementation architecture dependent
-#
-
-#
-#	Path to the base of the uts directory tree (usually /usr/src/uts).
-#
-UTSBASE	= ../..
-
-#
-#	Define the module and object file sets.
-#
-MODULE		= SUNW,UltraSPARC-AT10
-OBJECTS		= $(ROCKCPU_OBJS:%=$(OBJS_DIR)/%)
-LINTS		= $(ROCKCPU_OBJS:%.o=$(LINTS_DIR)/%.ln)
-ROOTMODULE	= $(ROOT_PSM_CPU_DIR)/$(MODULE)
-
-CPU_DIR		= .
-HERE		= ../rock
-
-#
-#	Include common rules.
-#
-include $(UTSBASE)/sun4v/Makefile.sun4v
-
-#
-#	Override defaults
-#
-CLEANFILES	+= $(CPULIB) $(SYM_MOD)
-
-#
-#	Define targets
-#
-ALL_TARGET	= $(SYM_MOD)
-LINT_TARGET	= $(MODULE).lint
-INSTALL_TARGET	= def $(BINARY) $(ROOTMODULE)
-
-#
-# The ATOMIC_BO_ENABLE_SHIFT enables backoff in atomic routines.
-# ATOMIC_SIMPLE_BO_ENABLE enables simple backoff required for rock
-#
-ATOMIC_BO_FLAG = -DATOMIC_BO_ENABLE_SHIFT=14 -DATOMIC_SIMPLE_BO_ENABLE
-
-#
-# lint pass one enforcement
-#
-CFLAGS += $(CCVERBOSE) $(ATOMIC_BO_FLAG)
-
-#
-# cpu-module-specific flags
-#
-CPPFLAGS +=    -DCPU_MODULE $(ATOMIC_BO_FLAG)
-AS_CPPFLAGS += -DCPU_MODULE -DCUSTOM_FPZERO $(ATOMIC_BO_FLAG)
-LINTFLAGS   += -DCUSTOM_FPZERO
-
-#
-#	Default build targets.
-#
-.KEEP_STATE:
-
-def:		$(DEF_DEPS)
-
-all:		$(ALL_DEPS)
-
-clean:		$(CLEAN_DEPS)
-
-clobber:	$(CLOBBER_DEPS)
-
-lint:		$(LINT_DEPS)
-
-modlintlib:	$(MODLINTLIB_DEPS)
-
-clean.lint:	$(CLEAN_LINT_DEPS)
-
-install:	$(INSTALL_DEPS)
-
-$(CPULIB):	$(BINARY)
-	$(LD) -o $(CPULIB) -G $(BINARY)
-
-$(SYM_MOD):	$(UNIX_O) $(CPULIB)
-	@echo "resolving symbols against unix.o"
-	@(cd $(UNIX_DIR); pwd; \
-	    CPU_DIR=$(HERE) SYM_MOD=$(HERE)/$(SYM_MOD) $(MAKE) symcheck)
-
-#	Include common targets.
-#
-include $(UTSBASE)/$(PLATFORM)/Makefile.targ
--- a/usr/src/uts/sun4v/rock_pcbe/Makefile	Wed Aug 05 18:08:09 2009 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,77 +0,0 @@
-#
-# CDDL HEADER START
-#
-# The contents of this file are subject to the terms of the
-# Common Development and Distribution License (the "License").
-# You may not use this file except in compliance with the License.
-#
-# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
-# or http://www.opensolaris.org/os/licensing.
-# See the License for the specific language governing permissions
-# and limitations under the License.
-#
-# When distributing Covered Code, include this CDDL HEADER in each
-# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
-# If applicable, add the following below this CDDL HEADER, with the
-# fields enclosed by brackets "[]" replaced with your own identifying
-# information: Portions Copyright [yyyy] [name of copyright owner]
-#
-# CDDL HEADER END
-#
-
-#
-# Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
-# Use is subject to license terms.
-#
-# This Makefile builds the Rock Performance Counter BackEnd (PCBE).
-#
-
-UTSBASE = ../..
-
-#
-#	Define module and object file sets.
-#
-MODULE		= pcbe.SUNW,UltraSPARC-AT10
-OBJECTS		= $(RK_PCBE_OBJS:%=$(OBJS_DIR)/%)
-LINTS		= $(RK_PCBE_OBJS:%.o=$(LINTS_DIR)/%.ln)
-ROOTMODULE	= $(ROOT_PSM_PCBE_DIR)/$(MODULE)
-
-#
-#	Include common rules.
-#
-include $(UTSBASE)/sun4v/Makefile.sun4v
-
-#
-#	Define targets.
-#
-ALL_TARGET	= $(BINARY)
-LINT_MODULE	= rock_pcbe
-LINT_TARGET	= $(LINT_MODULE).lint
-INSTALL_TARGET	= $(BINARY) $(ROOTMODULE)
-EXTRA_OPTIONS	+= -URKPCBE_DBG
-
-#
-#	Default build targets.
-#
-.KEEP_STATE:
-
-def:		$(DEF_DEPS)
-
-all:		$(ALL_DEPS)
-
-clean:		$(CLEAN_DEPS)
-
-clobber:	$(CLOBBER_DEPS)
-
-lint:		$(LINT_DEPS)
-
-modlintlib:	$(MODLINTLIB_DEPS)
-
-clean.lint:	$(CLEAN_LINT_DEPS)
-
-install:	$(INSTALL_DEPS)
-
-#
-#	Include common targets.
-#
-include $(UTSBASE)/sun4v/Makefile.targ
--- a/usr/src/uts/sun4v/sys/error.h	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/uts/sun4v/sys/error.h	Mon Aug 10 10:43:48 2009 -0400
@@ -19,7 +19,7 @@
  * CDDL HEADER END
  */
 /*
- * Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
+ * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
  * Use is subject to license terms.
  */
 
@@ -118,7 +118,7 @@
 	uint64_t	stick;		/* Value of the %STICK register */
 	uint32_t	desc;		/* Error Descriptor */
 	uint32_t	attr;		/* error attributes bit field */
-	uint64_t	addr;		/* va for ERRH_ATTR_ASI, otherwise ra */
+	uint64_t	ra;		/* Real address */
 	uint32_t	sz;		/* Size of affected mem region */
 	uint16_t	cpuid;		/* Virtual ID of the affected CPU */
 	uint16_t	secs;		/* Seconds */
--- a/usr/src/uts/sun4v/sys/hsvc.h	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/uts/sun4v/sys/hsvc.h	Mon Aug 10 10:43:48 2009 -0400
@@ -42,7 +42,6 @@
 #define	HSVC_GROUP_CORE			0x0001
 #define	HSVC_GROUP_INTR			0x0002
 #define	HSVC_GROUP_SOFT_STATE		0x0003
-#define	HSVC_GROUP_MEM_IFLUSH		0x0010
 #define	HSVC_GROUP_TM			0x0080
 #define	HSVC_GROUP_VPCI			0x0100
 #define	HSVC_GROUP_LDC			0x0101
@@ -54,9 +53,6 @@
 #define	HSVC_GROUP_NIAGARA2_CPU		0x0202
 #define	HSVC_GROUP_NIU			0x0204
 #define	HSVC_GROUP_VFALLS_CPU		0x0205
-#define	HSVC_GROUP_RKPERF		0x0206
-#define	HSVC_GROUP_RKMMU_EXT		0x0207
-#define	HSVC_GROUP_RKCPU		0x0208
 #define	HSVC_GROUP_DIAG			0x0300
 
 #ifndef _ASM
@@ -82,8 +78,6 @@
  */
 #define	HSVC_REV_1		1
 
-extern	int	hsvc_kdi_mem_iflush_negotiated;
-
 /*
  * External interface
  */
--- a/usr/src/uts/sun4v/sys/hypervisor_api.h	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/uts/sun4v/sys/hypervisor_api.h	Mon Aug 10 10:43:48 2009 -0400
@@ -110,8 +110,6 @@
 
 #define	HV_MEM_SCRUB		0x31
 #define	HV_MEM_SYNC		0x32
-#define	HV_MEM_IFLUSH		0x33
-#define	HV_MEM_IFLUSH_ALL	0x34
 
 #define	HV_INTR_SEND		0x42
 
@@ -199,12 +197,6 @@
 #define	MAP_DTLB		0x1
 #define	MAP_ITLB		0x2
 
-/*
- * Definitions for TLB Search Order functions
- */
-#define	TLB_SO_DATA		0x1
-#define	TLB_SO_INS 		0x2
-#define	TLB_SO_ID 		TLB_SO_DATA | TLB_SO_INS
 
 /*
  * Interrupt state manipulation definitions.
@@ -325,7 +317,6 @@
  */
 #define	HVIO_DMA_SYNC_DIR_TO_DEV		0x01
 #define	HVIO_DMA_SYNC_DIR_FROM_DEV		0x02
-#define	HVIO_DMA_SYNC_DIR_NO_ICACHE_FLUSH	0x04
 
 /*
  * LDC Channel States
@@ -360,9 +351,6 @@
     uint64_t *scrubbed_len);
 extern uint64_t hv_mem_sync(uint64_t real_addr, uint64_t length,
     uint64_t *flushed_len);
-extern uint64_t hv_mem_iflush(uint64_t real_addr, uint64_t length,
-    uint64_t *flushed_len);
-extern uint64_t hv_mem_iflush_all(void);
 extern uint64_t hv_tm_enable(uint64_t enable);
 
 extern uint64_t hv_service_recv(uint64_t s_id, uint64_t buf_pa,
--- a/usr/src/uts/sun4v/sys/machcpuvar.h	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/uts/sun4v/sys/machcpuvar.h	Mon Aug 10 10:43:48 2009 -0400
@@ -19,7 +19,7 @@
  * CDDL HEADER END
  */
 /*
- * Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
+ * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
  * Use is subject to license terms.
  */
 
@@ -181,7 +181,6 @@
 	id_t		cpu_core;		/* cpu core id */
 	id_t		cpu_chip;		/* cpu chip id */
 	kthread_t	*startup_thread;
-	uint64_t	cpu_nre_error;		/* nonresumable error */
 };
 
 typedef	struct machcpu	machcpu_t;
--- a/usr/src/uts/sun4v/sys/machsystm.h	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/uts/sun4v/sys/machsystm.h	Mon Aug 10 10:43:48 2009 -0400
@@ -249,7 +249,6 @@
 extern void *contig_mem_alloc(size_t);
 extern void *contig_mem_alloc_align(size_t, size_t);
 extern void contig_mem_free(void *, size_t);
-extern void *contig_mem_alloc_align_sleep(size_t, size_t);
 
 /*
  * Caches
--- a/usr/src/uts/sun4v/sys/mmu.h	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/uts/sun4v/sys/mmu.h	Mon Aug 10 10:43:48 2009 -0400
@@ -156,18 +156,6 @@
 #define	MIN_NSHCONTEXTS			1
 #define	MIN_NTSBS			4
 
-/*
- * The number of shared contexts supported in search list entries for the
- * pagesize register.
- */
-#define	NSEARCH_SHCONTEXTS		1
-
-/*
- * The maximum number of entries allowed in a search list for the pagesize
- * register.
- */
-#define	MAX_PGSZ_SEARCH_ORDER		8
-
 #ifdef	__cplusplus
 }
 #endif
--- a/usr/src/uts/sun4v/sys/pte.h	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/uts/sun4v/sys/pte.h	Mon Aug 10 10:43:48 2009 -0400
@@ -19,7 +19,7 @@
  * CDDL HEADER END
  */
 /*
- * Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
+ * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
  * Use is subject to license terms.
  */
 
@@ -61,7 +61,7 @@
 		unsigned int	w:1;		/* <6> write perm */
 		unsigned int	ref:1;		/* <5> sw - ref */
 		unsigned int	wr_perm:1;	/* <4> sw - write perm */
-		unsigned int	xsoft:1;	/* <3> sw - soft execute */
+		unsigned int	rsvd:1;		/* <3> reserved */
 		unsigned int	sz:3;		/* <2:0> pagesize */
 	} tte_bit;
 	struct {
@@ -83,7 +83,6 @@
 #define	tte_no_sync	tte_bit.no_sync
 #define	tte_suspend	tte_bit.susp
 #define	tte_exec_perm	tte_bit.x
-#define	tte_soft_exec	tte_bit.xsoft
 #define	tte_lock	tte_bit.lock
 #define	tte_cp		tte_bit.cp
 #define	tte_cv		tte_bit.cv
@@ -163,7 +162,6 @@
 #define	TTE_HWWR_INT			0x00000040
 #define	TTE_REF_INT			0x00000020
 #define	TTE_WRPRM_INT			0x00000010
-#define	TTE_SOFTEXEC_INT		0x00000008
 
 #define	TTE_PROT_INT			(TTE_WRPRM_INT | TTE_PRIV_INT)
 
@@ -245,7 +243,6 @@
 #define	TTE_IS_8K(ttep)		(TTE_CSZ(ttep) == TTE8K)
 #define	TTE_IS_WRITABLE(ttep)	((ttep)->tte_wr_perm)
 #define	TTE_IS_EXECUTABLE(ttep)	((ttep)->tte_exec_perm)
-#define	TTE_IS_SOFTEXEC(ttep)	((ttep)->tte_soft_exec)
 #define	TTE_IS_PRIVILEGED(ttep)	((ttep)->tte_priv)
 #define	TTE_IS_NOSYNC(ttep)	((ttep)->tte_no_sync)
 #define	TTE_IS_LOCKED(ttep)	((ttep)->tte_lock)
@@ -275,8 +272,6 @@
 #define	TTE_CLR_WRT(ttep)	((ttep)->tte_wr_perm = 0)
 #define	TTE_SET_EXEC(ttep)	((ttep)->tte_exec_perm = 1)
 #define	TTE_CLR_EXEC(ttep)	((ttep)->tte_exec_perm = 0)
-#define	TTE_SET_SOFTEXEC(ttep)	((ttep)->tte_soft_exec = 1)
-#define	TTE_CLR_SOFTEXEC(ttep)	((ttep)->tte_soft_exec = 0)
 #define	TTE_SET_PRIV(ttep)	((ttep)->tte_priv = 1)
 #define	TTE_CLR_PRIV(ttep)	((ttep)->tte_priv = 0)
 
--- a/usr/src/uts/sun4v/sys/rock_hypervisor_api.h	Wed Aug 05 18:08:09 2009 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,100 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License (the "License").
- * You may not use this file except in compliance with the License.
- *
- * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
- * or http://www.opensolaris.org/os/licensing.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information: Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- */
-
-/*
- * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
- * Use is subject to license terms.
- */
-
-#ifndef _SYS_ROCK_HYPERVISOR_API_H
-#define	_SYS_ROCK_HYPERVISOR_API_H
-
-/*
- * sun4v rock Hypervisor API
- *
- */
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*
- * Function numbers for managing the Rock TLB page size register.
- */
-#define	MMU_GET_NONPRIV_SEARCH		0x13b
-#define	MMU_SET_NONPRIV_SEARCH		0x13c
-#define	MMU_GET_PRIV_SEARCH		0x13d
-#define	MMU_SET_PRIV_SEARCH		0x13e
-
-/*
- * Function numbers for performance counters
- */
-#define	HV_RK_PERF_COUNT_INIT		0x108
-#define	HV_RK_PERF_COUNT_RELEASE	0x109
-#define	HV_RK_PERF_COUNT_SET		0x10A
-#define	HV_RK_PERF_COUNT_GET		0x10B
-#define	HV_RK_PERF_COUNT_START		0x10C
-#define	HV_RK_PERF_COUNT_OVERFLOW	0x10D
-#define	HV_RK_PERF_COUNT_STOP		0x10E
-
-#define	HV_RK_PERF_SAMPLE_INIT		0x135
-#define	HV_RK_PERF_SAMPLE_RELEASE	0x136
-#define	HV_RK_PERF_SAMPLE_CONFIG	0x137
-#define	HV_RK_PERF_SAMPLE_START		0x138
-#define	HV_RK_PERF_SAMPLE_PENDING	0x139
-#define	HV_RK_PERF_SAMPLE_STOP		0x13A
-
-#define	HV_RK_PERF_SRC_STRAND		0x1	/* Local Strand */
-#define	HV_RK_PERF_SRC_STRAND_M		0x2	/* Multiple Strands */
-#define	HV_RK_PERF_SRC_SIU		0x4	/* L2 txn source */
-#define	HV_RK_PERF_SRC_MMU		0x8	/* L2 txn source */
-#define	HV_RK_PERF_SRC_MASK		0xF
-
-#define	ROCK_HSVC_MAJOR		1
-#define	ROCK_HSVC_MINOR		0
-
-#ifndef	_ASM
-
-/* Performance Counter API */
-extern uint64_t hv_rk_perf_count_init(uint64_t counter);
-extern uint64_t hv_rk_perf_count_release(uint64_t counter);
-extern uint64_t hv_rk_perf_count_set(uint64_t counter, uint64_t value);
-extern uint64_t hv_rk_perf_count_get(uint64_t counter, uint64_t *value);
-extern uint64_t hv_rk_perf_count_start(uint64_t counter, uint64_t value);
-extern uint64_t hv_rk_perf_count_overflow(uint64_t counter, uint64_t *ovf_cnt);
-extern uint64_t hv_rk_perf_count_stop(uint64_t counter);
-
-/* Performance Sampler API */
-extern uint64_t hv_rk_perf_sample_init(uint64_t sampler, uint64_t ringbuf_pa);
-extern uint64_t hv_rk_perf_sample_release(uint64_t sampler);
-extern uint64_t hv_rk_perf_sample_config(uint64_t sampler, uint64_t reg_va,
-							uint64_t reg_value);
-extern uint64_t hv_rk_perf_sample_start(uint64_t sampler, uint64_t freq,
-					uint64_t list_size, uint64_t valist_pa);
-extern uint64_t hv_rk_perf_sample_pending(uint64_t sampler, uint64_t *pend_cnt);
-extern uint64_t hv_rk_perf_sample_stop(uint64_t counter);
-#endif	/* _ASM */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _SYS_ROCK_HYPERVISOR_API_H */
--- a/usr/src/uts/sun4v/sys/rockasi.h	Wed Aug 05 18:08:09 2009 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,68 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License (the "License").
- * You may not use this file except in compliance with the License.
- *
- * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
- * or http://www.opensolaris.org/os/licensing.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information: Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- */
-
-/*
- * Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
- * Use is subject to license terms.
- */
-
-#ifndef _SYS_ROCKASI_H
-#define	_SYS_ROCKASI_H
-
-/*
- * alternate address space identifiers
- *
- * 0x00 - 0x2F are privileged
- * 0x30 - 0x7f are hyperprivileged
- * 0x80 - 0xFF can be used by non-privileged, privileged & hyperprivileged
- */
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*
- * ROCK specific ASIs
- */
-#define	ASI_CACHE_SPARING_P	0xF4	/* Cache sparing */
-
-#ifndef	_ASM
-struct	cpsregs {
-	uint64_t	fails;
-	uint64_t	exog;
-	uint64_t	coh;
-	uint64_t	tcc;
-	uint64_t	instr;
-	uint64_t	precise;
-	uint64_t	async;
-	uint64_t	size;
-	uint64_t	ld;
-	uint64_t	st;
-	uint64_t	cti;
-	uint64_t	fp;
-	uint64_t	zeros;
-};
-#endif	/* _ASM */
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _SYS_ROCKASI_H */
--- a/usr/src/uts/sun4v/vm/mach_sfmmu.c	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/uts/sun4v/vm/mach_sfmmu.c	Mon Aug 10 10:43:48 2009 -0400
@@ -45,7 +45,6 @@
 #include <sys/vmsystm.h>
 #include <sys/bitmap.h>
 #include <vm/rm.h>
-#include <vm/vm_dep.h>
 #include <sys/t_lock.h>
 #include <sys/vm_machparam.h>
 #include <sys/promif.h>
@@ -60,7 +59,6 @@
 #include <sys/reboot.h>
 #include <sys/kdi.h>
 #include <sys/hypervisor_api.h>
-#include <sys/hsvc.h>
 
 /*
  * External routines and data structures
@@ -169,7 +167,7 @@
 		prom_panic("can't find kernel text pfn");
 	pfn &= TTE_PFNMASK(TTE4M);
 
-	attr = PROC_TEXT | HAT_NOSYNC | HAT_ATTR_NOSOFTEXEC;
+	attr = PROC_TEXT | HAT_NOSYNC;
 	flags = HAT_LOAD_LOCK | SFMMU_NO_TSBLOAD;
 	sfmmu_memtte(&ktext_tte, pfn, attr, TTE4M);
 	/*
@@ -185,7 +183,7 @@
 		prom_panic("can't find kernel data pfn");
 	pfn &= TTE_PFNMASK(TTE4M);
 
-	attr = PROC_DATA | HAT_NOSYNC | HAT_ATTR_NOSOFTEXEC;
+	attr = PROC_DATA | HAT_NOSYNC;
 	sfmmu_memtte(&kdata_tte, pfn, attr, TTE4M);
 	/*
 	 * We set the lock bit in the tte to lock the translation in
@@ -210,7 +208,7 @@
 		ASSERT(tsbsz >= MMU_PAGESIZE4M);
 		ASSERT(IS_P2ALIGNED(tsbsz, tsbsz));
 		ASSERT(IS_P2ALIGNED(va, tsbsz));
-		attr = PROC_DATA | HAT_NOSYNC | HAT_ATTR_NOSOFTEXEC;
+		attr = PROC_DATA | HAT_NOSYNC;
 		while (tsbsz != 0) {
 			ASSERT(i < MAX_BIGKTSB_TTES);
 			pfn = va_to_pfn(va);
@@ -294,8 +292,7 @@
 	pfn_t pfn = va_to_pfn(va);
 	uint64_t ret;
 
-	sfmmu_memtte(&tte, pfn, PROC_TEXT | HAT_NOSYNC | HAT_ATTR_NOSOFTEXEC,
-	    TTE8K);
+	sfmmu_memtte(&tte, pfn, (PROC_TEXT | HAT_NOSYNC), TTE8K);
 	ret = hv_mmu_map_perm_addr(va, KCONTEXT, *(uint64_t *)&tte,
 	    MAP_ITLB | (do_dtlb ? MAP_DTLB : 0));
 
@@ -481,22 +478,3 @@
 sfmmu_cache_flushall()
 {
 }
-
-/*
- * Initialise the real address field in sfmmu_pgsz_order.
- */
-void
-sfmmu_init_pgsz_hv(sfmmu_t *sfmmup)
-{
-	int i;
-
-	/*
-	 * Initialize mmu counts for pagesize register programming.
-	 */
-	for (i = 0; i < max_mmu_page_sizes; i++) {
-		sfmmup->sfmmu_mmuttecnt[i] = 0;
-	}
-
-	sfmmup->sfmmu_pgsz_order.hv_pgsz_order_pa =
-	    va_to_pa(&sfmmup->sfmmu_pgsz_order.hv_pgsz_order);
-}
--- a/usr/src/uts/sun4v/vm/mach_sfmmu.h	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/uts/sun4v/vm/mach_sfmmu.h	Mon Aug 10 10:43:48 2009 -0400
@@ -36,7 +36,6 @@
 
 #include <sys/x_call.h>
 #include <sys/hypervisor_api.h>
-#include <sys/mmu.h>
 
 #ifdef	__cplusplus
 extern "C" {
@@ -61,29 +60,8 @@
 	hv_tsb_info_t	hv_tsb_info[NHV_TSB_INFO]; /* hypervisor TSB info */
 };
 
-/*
- * Defines for hypervisor pagesize search API.
- */
-
-#define	TLB_PGSZ_ENABLE_SHIFT	15
-#define	TLB_PGSZ_CTX_SHIFT	7
-#define	TLB_PGSZ_ENABLE		(1<<TLB_PGSZ_ENABLE_SHIFT)
-#define	TLB_PGSZ_CONTEXT1	(1<<TLB_PGSZ_CTX_SHIFT)
-#define	TLB_PGSZ_CONTEXT1_ENABLE (TLB_PGSZ_ENABLE|TLB_PGSZ_CONTEXT1)
-
-struct hv_pgsz_order {
-	uint64_t hv_pgsz_order_pa;	/* hypervisor pagesize order PA */
-					/* hypervisor pagesize order */
-	uint16_t hv_pgsz_order[MAX_PGSZ_SEARCH_ORDER];
-};
-
-#define	sfmmu_pgsz_order_hv sfmmu_pgsz_order.hv_pgsz_order
-
 #endif /* _ASM */
 
-/* value for sfmmu_pgsz_map if all shared pagesizes are allowed */
-#define	TLB_ALL_SHARED_PGSZ	0xff
-
 #ifdef _ASM
 
 /*
@@ -333,47 +311,6 @@
 label/**/1:
 
 /*
- * Support for non-coherent I$.
- *
- * In sun4v we use tte bit 3 as a software flag indicating whether
- * execute permission is given. IMMU miss traps cause the real execute
- * permission to be set. sfmmu_ttesync() will see if execute permission
- * has been set, and then set P_EXEC in page_t. This causes I-cache
- * flush when the page is freed.
- *
- * However, the hypervisor reserves bit 3 as part of a 4-bit page size.
- * We allow this flag to be set in hme TTE, but never in TSB or TLB.
- */
-#define	TTE_CLR_SOFTEXEC_ML(tte)	bclr TTE_SOFTEXEC_INT, tte
-#define	TTE_CHK_SOFTEXEC_ML(tte)	andcc tte, TTE_SOFTEXEC_INT, %g0
-
-/*
- * TTE_SET_EXEC_ML is a macro that updates the exec bit if it is
- * not already set. Will also set reference bit at the same time.
- *
- * Caller must check EXECPRM. Do not call if it is already set in the tte.
- *
- * Parameters:
- * tte      = reg containing tte
- * ttepa    = physical pointer to tte
- * tmp1     = tmp reg
- * label    = temporary label
- */
-
-#define	TTE_SET_EXEC_ML(tte, ttepa, tmp1, label)			\
-	/* BEGIN CSTYLED */						\
-	/* update execprm bit */					\
-label/**/1:								\
-	or	tte, (TTE_EXECPRM_INT | TTE_REF_INT), tmp1;		\
-	casxa	[ttepa]ASI_MEM, tte, tmp1; 	/* update bits */	\
-	cmp	tte, tmp1;						\
-	bne,a,pn %xcc, label/**/1;					\
-	  mov	tmp1, tte;						\
-	or	tte, (TTE_EXECPRM_INT | TTE_REF_INT), tte;		\
-	/* END CSTYLED */
-
-
-/*
  * TTE_SET_REF_ML is a macro that updates the reference bit if it is
  * not already set.
  *
@@ -597,27 +534,6 @@
 label:
 	/* END CSTYLED */
 
-/*
- * For shared context mappings, check against the page size bitmap in the
- * tsbmiss area to decide if we should use private mappings instead to reduce
- * the number of shared page size searches on Rock based platforms.
- * In:
- *   tsbarea (not clobbered)
- *   tte (not clobbered)
- *   tmp (clobbered)
- * Out:
- *   use_shctx - changed to 0 if page size bit is not set in mask.
- */
-#define	CHECK_SHARED_PGSZ(tsbarea, tte, tmp, use_shctx, label)  \
-	/* BEGIN CSTYLED */					     \
-	brz     use_shctx, label/**/1				    ;\
-	 and    tte, TTE_SZ_BITS, tmp			    	    ;\
-	ldub    [tsbarea + TSBMISS_PGSZ_BITMAP], use_shctx	    ;\
-	srlx    use_shctx, tmp, use_shctx			    ;\
-	and     use_shctx, 0x1, use_shctx			    ;\
-label/**/1:
-	/* END CSTYLED */
-
 #endif /* _ASM */
 
 #ifdef	__cplusplus
--- a/usr/src/uts/sun4v/vm/mach_sfmmu_asm.s	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/uts/sun4v/vm/mach_sfmmu_asm.s	Mon Aug 10 10:43:48 2009 -0400
@@ -41,7 +41,6 @@
 #include <sys/pte.h>
 #include <sys/mmu.h>
 #include <vm/hat_sfmmu.h>
-#include <vm/mach_sfmmu.h>
 #include <vm/seg_spt.h>
 #include <sys/machparam.h>
 #include <sys/privregs.h>
@@ -50,7 +49,6 @@
 #include <sys/machthread.h>
 #include <sys/clock.h>
 #include <sys/trapstat.h>
-#include <sys/rock_hypervisor_api.h>
 
 /*
  * sfmmu related subroutines
@@ -79,7 +77,8 @@
 /* ARGSUSED */
 void
 sfmmu_load_mmustate(sfmmu_t *sfmmup)
-{}
+{
+}
 
 #else	/* lint */
 
@@ -282,7 +281,7 @@
 	sethi	%hi(ksfmmup), %o3
 	ldx	[%o3 + %lo(ksfmmup)], %o3
 	cmp	%o3, %o0
-	be,pn	%xcc, 8f			! if kernel as, do nothing
+	be,pn	%xcc, 7f			! if kernel as, do nothing
 	  nop
 	
 	set     MMU_SCONTEXT, %o3
@@ -340,7 +339,7 @@
 
 	ldx	[%g2 + SCD_SFMMUP], %g3		! %g3 = scdp->scd_sfmmup
 	ldx	[%g3 + SFMMU_TSB], %o1		! %o1 = first scd tsbinfo
-	brz,pn %o1, 1f
+	brz,pn %o1, 9f
 	  nop					! panic if no third TSB
 
 	/* make 3rd UTSBREG */
@@ -383,26 +382,9 @@
 	mov	MMU_TSB_CTXNON0, %o5
 	ta	FAST_TRAP			! set TSB info for user process
 	brnz,a,pn %o0, panic_bad_hcall
-	  mov	MMU_TSB_CTXNON0, %o1
-	mov	%o3, %o0			! restore saved sfmmup to %o0
+	mov	MMU_TSB_CTXNON0, %o1
+	mov	%o3, %o0			! restore %o0
 6:
-	/*
-	 * If the TLB pagesize register is supported and pgsz_search_on is set
-	 * then we patch out the following branch instruction.
-	 */
-	.global sfmmu_pgsz_load_mmustate_patch
-sfmmu_pgsz_load_mmustate_patch:
-	ba,a	7f				! branch around pgsz search hcall
-	mov	%o0, %o3			! preserve sfmmup in %o3
-	ldx	[%o3 + SFMMU_PGSZ_ORDER + HV_PGSZ_ORDER_PA], %o0
-	mov	TLB_SO_ID, %o1			! flags apply to I and D
-	mov	MMU_SET_NONPRIV_SEARCH, %o5
-	ta	FAST_TRAP			! set page size search order
-	brnz,a,pn %o0, panic_bad_hcall
-	  mov	MMU_SET_NONPRIV_SEARCH, %o1
-	mov	%o3, %o0			! restore saved sfmmup to %o0
-7:	
-	mov	%o1, %o5			! preserve pgsz_search_on
 	ldx	[%o0 + SFMMU_ISMBLKPA], %o1	! copy members of sfmmu
 	CPU_TSBMISS_AREA(%o2, %o3)		! %o2 = tsbmiss area
 	stx	%o1, [%o2 + TSBMISS_ISMBLKPA]	! sfmmu_tsb_miss into the
@@ -413,7 +395,7 @@
 	stub	%o3, [%o2 + TSBMISS_UTTEFLAGS]
 	stub	%o4,  [%o2 + TSBMISS_URTTEFLAGS]
 	stx	%o1, [%o2 +  TSBMISS_SHARED_UHATID]
-	brz,pn	%o1, 8f				! check for sfmmu_srdp
+	brz,pn	%o1, 7f				! check for sfmmu_srdp
 	  add	%o0, SFMMU_HMERMAP, %o1
 	add	%o2, TSBMISS_SHMERMAP, %o2
 	mov	SFMMU_HMERGNMAP_WORDS, %o3
@@ -423,38 +405,31 @@
 	ldx	[%o0 + SFMMU_SCDP], %o4		! %o4 = sfmmu_scd
 	CPU_TSBMISS_AREA(%o2, %o3)		! %o2 = tsbmiss area
 	mov	SFMMU_HMERGNMAP_WORDS, %o3
-	brnz,pt	%o4, 9f				! check for sfmmu_scdp else
-	  nop
-	add	%o2, TSBMISS_SCDSHMERMAP, %o2	! zero tsbmiss scd_shmermap
+	brnz,pt	%o4, 8f				! check for sfmmu_scdp else
+	  add	%o2, TSBMISS_SCDSHMERMAP, %o2	! zero tsbmiss scd_shmermap
 	ZERO_REGION_MAP(%o2, %o3, zero_scd_mmustate)
-8:
+7:
 	retl
 	nop
-9:						
-	brz,a	%o5, 0f				! test pgsz_search_on
-	  or	%g0, TLB_ALL_SHARED_PGSZ, %o1	! enable all page sizes
-	ldub	[%o0 + SFMMU_PGSZ_MAP], %o1
-0:
-	stub	%o1, [%o2 + TSBMISS_PGSZ_BITMAP] ! set tsbmiss pgsz bitmap
-	add	%o2, TSBMISS_SCDSHMERMAP, %o2	! set tsbmiss scd_shmermap
-	add	%o4, SCD_HMERMAP, %o1	
+8:						! set tsbmiss scd_shmermap
+	add	%o4, SCD_HMERMAP, %o1
 	SET_REGION_MAP(%o1, %o2, %o3, %o4, load_scd_mmustate)
-	
 	retl
 	  nop
-1:
+9:
 	sethi   %hi(panicstr), %g1		! panic if no 3rd TSB  
         ldx     [%g1 + %lo(panicstr)], %g1                             
         tst     %g1
 	                                                   
-        bnz,pn  %xcc, 8b                                            
+        bnz,pn  %xcc, 7b                                            
           nop                                                            
                                                                         
         sethi   %hi(sfmmu_panic10), %o0                                 
         call    panic                                                 
           or      %o0, %lo(sfmmu_panic10), %o0                         
+
 	SET_SIZE(sfmmu_load_mmustate)
-
+	
 #endif /* lint */
 
 #if defined(lint)
--- a/usr/src/uts/sun4v/vm/mach_vm_dep.c	Wed Aug 05 18:08:09 2009 -0400
+++ b/usr/src/uts/sun4v/vm/mach_vm_dep.c	Mon Aug 10 10:43:48 2009 -0400
@@ -52,7 +52,6 @@
 #include <sys/stack.h>
 #include <sys/atomic.h>
 #include <sys/promif.h>
-#include <sys/hsvc.h>
 
 uint_t page_colors = 0;
 uint_t page_colors_mask = 0;
@@ -150,7 +149,6 @@
 static	vmem_t		*contig_mem_arena;
 static	vmem_t		*contig_mem_reloc_arena;
 static	kmutex_t	contig_mem_lock;
-static	kmutex_t	contig_mem_sleep_lock;
 #define	CONTIG_MEM_ARENA_QUANTUM	64
 #define	CONTIG_MEM_SLAB_ARENA_QUANTUM	MMU_PAGESIZE64K
 
@@ -617,15 +615,14 @@
 }
 
 /*
- * contig_mem_alloc_align_flag allocates real contiguous memory with the
+ * contig_mem_alloc_align allocates real contiguous memory with the
  * specified alignment up to contig_mem_import_size_max. The alignment must
  * be a power of 2 and no greater than contig_mem_import_size_max. We assert
  * the aligment is a power of 2. For non-debug, vmem_xalloc will panic
  * for non power of 2 alignments.
  */
-static	void *
-contig_mem_alloc_align_flag(size_t size, size_t align, int flag,
-    kmutex_t *lockp)
+void *
+contig_mem_alloc_align(size_t size, size_t align)
 {
 	void *buf;
 
@@ -644,48 +641,27 @@
 	 * allocations also prevents us from trying to allocate
 	 * more spans than necessary.
 	 */
-	mutex_enter(lockp);
+	mutex_enter(&contig_mem_lock);
 
 	buf = vmem_xalloc(contig_mem_arena, size, align, 0, 0,
-	    NULL, NULL, flag | VM_NORELOC);
+	    NULL, NULL, VM_NOSLEEP | VM_NORELOC);
 
 	if ((buf == NULL) && (size <= MMU_PAGESIZE)) {
-		mutex_exit(lockp);
+		mutex_exit(&contig_mem_lock);
 		return (vmem_xalloc(static_alloc_arena, size, align, 0, 0,
-		    NULL, NULL, flag));
+		    NULL, NULL, VM_NOSLEEP));
 	}
 
 	if (buf == NULL) {
 		buf = vmem_xalloc(contig_mem_reloc_arena, size, align, 0, 0,
-		    NULL, NULL, flag);
+		    NULL, NULL, VM_NOSLEEP);
 	}
 
-	mutex_exit(lockp);
+	mutex_exit(&contig_mem_lock);
 
 	return (buf);
 }
 
-void *
-contig_mem_alloc_align(size_t size, size_t align)
-{
-	return (contig_mem_alloc_align_flag
-	    (size, align, VM_NOSLEEP, &contig_mem_lock));
-}
-
-/*
- * This function is provided for callers that need physically contiguous
- * allocations but can sleep. We use the contig_mem_sleep_lock so that we
- * don't interfere with contig_mem_alloc_align calls that should never sleep.
- * Similarly to contig_mem_alloc_align, we use a lock to prevent allocating
- * unnecessary spans when called in parallel.
- */
-void *
-contig_mem_alloc_align_sleep(size_t size, size_t align)
-{
-	return (contig_mem_alloc_align_flag
-	    (size, align, VM_SLEEP, &contig_mem_sleep_lock));
-}
-
 void
 contig_mem_free(void *vaddr, size_t size)
 {
@@ -709,7 +685,6 @@
 contig_mem_init(void)
 {
 	mutex_init(&contig_mem_lock, NULL, MUTEX_DEFAULT, NULL);
-	mutex_init(&contig_mem_sleep_lock, NULL, MUTEX_DEFAULT, NULL);
 
 	contig_mem_slab_arena = vmem_xcreate("contig_mem_slab_arena", NULL, 0,
 	    CONTIG_MEM_SLAB_ARENA_QUANTUM, contig_vmem_xalloc_aligned_wrapper,
@@ -811,96 +786,3 @@
 	uint_t spcolor = atomic_inc_32_nv(&sp_current_color);
 	return ((size_t)((spcolor & sp_color_mask) * SA(sp_color_stride)));
 }
-
-/*
- * This flag may be set via /etc/system to force the synchronization
- * of I-cache with memory after every bcopy.  The default is 0, meaning
- * that there is no need for an I-cache flush after each bcopy.  This
- * flag is relevant only on platforms that have non-coherent I-caches.
- */
-uint_t	force_sync_icache_after_bcopy = 0;
-
-/*
- * This flag may be set via /etc/system to force the synchronization
- * of I-cache to memory after every DMA. The default is 0, meaning
- * that there is no need for an I-cache flush after each dma write to
- * memory. This flag is relevant only on platforms that have
- * non-coherent I-caches.
- */
-uint_t	force_sync_icache_after_dma = 0;
-
-/*
- * This internal flag enables mach_sync_icache_pa, which is always
- * called from common code if it is defined. However, not all
- * platforms support the hv_mem_iflush firmware call.
- */
-static uint_t	do_mach_sync_icache_pa = 0;
-
-int	hsvc_kdi_mem_iflush_negotiated = B_FALSE;
-
-#define	MEM_IFLUSH_MAJOR	1
-#define	MEM_IFLUSH_MINOR	0
-static hsvc_info_t kdi_mem_iflush_hsvc = {
-	HSVC_REV_1,		/* HSVC rev num */
-	NULL,			/* Private */
-	HSVC_GROUP_MEM_IFLUSH,	/* Requested API Group */
-	MEM_IFLUSH_MAJOR,	/* Requested Major */
-	MEM_IFLUSH_MINOR,	/* Requested Minor */
-	"kdi"			/* Module name */
-};
-
-/*
- * Setup soft exec mode.
- * Since /etc/system is read later on init, it
- * may be used to override these flags.
- */
-void
-mach_setup_icache(uint_t coherency)
-{
-	int		status;
-	uint64_t	sup_minor;
-
-	if (coherency == 0 && icache_is_coherent) {
-		extern void kdi_flush_caches(void);
-		status = hsvc_register(&kdi_mem_iflush_hsvc, &sup_minor);
-		if (status != 0)
-			cmn_err(CE_PANIC, "I$ flush not implemented on "
-			    "I$ incoherent system");
-		hsvc_kdi_mem_iflush_negotiated = B_TRUE;
-		kdi_flush_caches();
-		icache_is_coherent = 0;
-		do_mach_sync_icache_pa = 1;
-	}
-}
-
-/*
- * Flush specified physical address range from I$ via hv_mem_iflush interface
- */
-/*ARGSUSED*/
-void
-mach_sync_icache_pa(caddr_t paddr, size_t size)
-{
-	if (do_mach_sync_icache_pa) {
-		uint64_t pa = (uint64_t)paddr;
-		uint64_t sz = (uint64_t)size;
-		uint64_t i, flushed;
-
-		for (i = 0; i < sz; i += flushed) {
-			if (hv_mem_iflush(pa + i, sz - i, &flushed) != H_EOK) {
-				cmn_err(CE_PANIC, "Flushing the Icache failed");
-				break;
-			}
-		}
-	}
-}
-
-/*
- * Flush the page if it has been marked as executed
- */
-/*ARGSUSED*/
-void
-mach_sync_icache_pp(page_t *pp)
-{
-	if (PP_ISEXEC(pp))
-		mach_sync_icache_pa((caddr_t)ptob(pp->p_pagenum), PAGESIZE);
-}