ackermann <- function(x,y){
	if(y==0) 0
	else if(x==0) 2*y
	else if(y==1) 2
	else ackermann(x-1,ackermann(x,y-1))
}
"all.names"<-
function(expr)
{
	if(mode(expr) == "name") return(as.character(expr))
	if(!is.recursive(expr)) return(character(0))
	z <- character(0)
	for(els in expr) z <- c(z, all.names(els))
	z
}
"all.words"<-
function(n)
{
	dial <- list("0", "1", c("a", "b", "c"), c("d", "e", "f"), c("g", "h",
		"i"), c("j", "k", "l"), c("m", "n", "o"), c("p", "r", "s"),
		c("t", "u", "v"), c("w", "x", "y"))
	d <- digits(n) + 1
	a <- dial[[d[1]]]
	for(letter in dial[d[-1]]) a <- outer(a, letter, paste, sep = "")
	as.vector(a)
}
"annoy"<-
function(n, i = 1, times = 10)
{
	string <- rep("\007", times)
	for(j in 1:n) {
		cat(string, sep = "")
		sleep(i)
	}
}
"backdrop"<-
function(x, names = NULL, col = 1, shadow = 2, ...)
{
	colors <- c(rbind(shadow, col, x)[-3,  ])	
	# replicate shadow and col values to match length of x
	x <- rep(x, rep(2, length(x)))
	if(missing(names))
		barplot(x, space = c(1, -1.1), col = colors, ...)
	else barplot(x, space = c(1, -1.1), col = colors, names = c(rbind(
			names, "")), ...)
}
"balance.of.trade"<-
function(income, outgo, color = 1)
{
	income <- income + 0 * outgo
	outgo <- outgo + 0 * income
	plot(income, type = "n", ylim = range(income, outgo))
	lines(income)
	lines(outgo)
	polygon(c(time(income), rev(time(outgo))), c(income, rev(outgo)), col
		 = color)
}
"bartable"<-
function(category)
{
	tbl <- table(category)
	barplot(tbl, names = dimnames(tbl)[[1]])
}
"bivariate.barplot"<-
function(x, k = 3)
{
	n <- nrow(x)
	p <- ncol(x)
	rbind(0, cbind(0, x[rep(1:n, rep(k, n)), rep(1:p, rep(k, p))], 0),
		0)
}
"check.write"<-
function(n)
if(n == 0) "zero" else paste(cw(n),collapse=" ")
"cw"<-
function(n)
{
	if(n == 0)
		character()
	else if(n < 20)
		numbers[n]
	else if(n < 100)
		c(tens[n %/% 10], cw(n %% 10))
	else if(n < 1000)
		c(numbers[n %/% 100], "hundred", cw(n %% 100))
	else if(n < 1000000)
		c(cw(n %/% 1000), "thousand", cw(n %% 1000))
	else if(n < 1000000000)
		c(cw(n %/% 1000000), "million", cw(n %% 1000000))
}
"numbers"<-
c("one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten",
	"eleven", "twelve", "thirteen", "fourteen", "fifteen", "sixteen", 
	"seventeen", "eighteen", "nineteen")
"tens"<-
c("ten", "twenty", "thirty", "fourty", "fifty", "sixty", "seventy", "eighty",
	"ninety")
"cis"<-
function(theta)
exp(0+1i * theta)
"col.labels"<-
function(x)
{
	x <- as.matrix(x)
	ll <- dimnames(x)[[2]]
	if(is.null(ll))
		ll <- character(dim(x)[2])
	ll
}
"col.labels<-"<-
function(x, labels)
{
	x <- as.matrix(x)
	dn <- dimnames(x)
	ncol <- dim(x)[2]
	if(is.null(dn))
		dn <- list(character(ncol), NULL)
	else if(is.null(dn[[2]]))
		dn[[2]] <- character(ncol)
	dn[[2]][] <- labels
	dimnames(x) <- dn
	x
}
"collection"<-
function(dir)
{
	active <- exists("cur.collection") && length(cur.collection) > 0
	result <- if(active)
		cur.collection
	else character(0)
	if(missing(dir)) {
		if(active) {
			detach(1)
			options(prompt = "> ")	# restore prompt
			assign("cur.collection", character(0), frame = 0)
		}
	}
	else {
		realdir <- paste(".Data/.", dir, sep = "")
		if(!is.dir(realdir)) {
			cat(dir, "does not exist.  Create it? ")
			ans <- readline()
			if(!is.na(match(ans, c("n", "no", "N", "NO"))))
				return()
			if(unix(paste("mkdir", realdir), output = F))
				stop()
		}
		if(active)
			detach(1)
		attach(realdir, pos = 1)
		assign("cur.collection", dir, frame = 0)
		options(prompt = paste(dir, "> "))
	}
	result
}
"contour.xyz"<-
function(x, y, z)
{
	i <- interp(x, y, z)
	contour(i$x, i$y, i$z, labex = 0)
	text(x, y, signif(z, 2))
}
"day.of.week"<-
function(month, day, year)
{
	ix <- year + trunc((month - 14)/12)
	jx <- trunc((13 * (month + 10 - (month + 10) %/% 13 * 12) - 1)/5) +
		day + 77 + (5 * (ix - (ix %/% 100) * 100)) %/% 4 + ix %/% 400 -
		(ix %/% 100) * 2
	jx %% 7
}
"density.plot"<-
function(x)
{
	plot(density(x), type = "l")
	points(x, x * 0)	# 1-dim scatter plot below
}
deriv <- function(expr,name){
	if(missing(expr)) stop("must supply expression")
	expr <- substitute(expr)
	if(missing(name)) stop("must supply name")
	name <- substitute(name)
	if(!is.name(name)) stop("must supply only a name")
	D(expr,name)
}

D <- function(expr, name)
switch(mode(expr),
	logical = ,
	numeric = ,
	complex = 0,
	name = if(expr == name) 1 else 0,
	expression = D(expr[[1]], name),
	"(" = D(expr[[2]], name),
	call = switch(as.character(expr[[1]]),
		"+" = simplify("+", D(expr[[2]], name), D(expr[[3]], name)),
		"-" = simplify("-", D(expr[[2]], name), D(expr[[3]], name)),
		.Uminus = simplify(".Uminus", D(expr[[2]], name)),
		"*" = simplify("+", simplify("*", D(expr[[2]], name), expr[[3]]),
			simplify("*", expr[[2]], D(expr[[3]], name))),
		"/" = simplify("-", simplify("/", D(expr[[2]], name), expr[[3]]),
			simplify("/", simplify("*", expr[[2]], D(expr[[3]],
			name)), simplify("^", expr[[3]], 2))),
		"^" = ,
		"**" = switch(mode(expr[[3]]),
			logical = ,
			numeric = simplify("*", expr[[3]], simplify("*", D(expr[[
				2]], name), simplify("^", expr[[2]], expr[[3]] -
				1))),
			simplify("+", simplify("*", simplify("^", expr[[2]],
				simplify("-", expr[[3]], 1)), simplify("*",
				expr[[3]], D(expr[[2]], name))), simplify("*",
				simplify("^", expr[[2]], expr[[3]]), simplify(
				"*", simplify("log", expr[[2]]), D(expr[[3]],
				name))))),
		exp = simplify("*", expr, D(expr[[2]], name)),
		log = simplify("/", D(expr[[2]], name), expr[[2]]),
		cos = simplify("*", simplify("sin", expr[[2]]), D(expr[[2]],
			name)),
		sin = simplify("*", simplify("cos", expr[[2]]), simplify(
			".Uminus", D(expr[[2]], name)))
		)
	)

simplify <- function(fname, arg1, arg2)
switch(fname,
	"+" = if(is.zero(arg1)) arg2
		else if(is.zero(arg2)) arg1
		else call("+", arg1, arg2),
	"-" = if(is.zero(arg2)) arg1
		else if(is.zero(arg1)) call(".Uminus", arg2)
		else call("-", arg1, arg2),
	.Uminus = if(is.zero(arg1)) 0
		else call(".Uminus", arg1),
	"*" = if(is.zero(arg1)) 0
		else if(is.zero(arg2)) 0
		else if(is.one(arg1)) arg2
		else if(is.one(arg2)) arg1
		else call("*", arg1, arg2),
	"/" = if(is.zero(arg1)) 0
		else if(is.zero(arg2)) NA
		else if(is.one(arg2)) arg1
		else call("/", arg1, arg2),
	"^" = if(is.zero(arg2)) 1
		else if(is.zero(arg1)) 0
		else if(is.one(arg1)) 1
		else if(is.one(arg2)) arg1
		else call("^", arg1, arg2),
	log = if(is.one(arg1)) 0
		else call("log", arg1),
	exp = if(is.zero(arg1)) 1
		else call("exp", arg1),
	sin = if(is.zero(arg1)) 0
		else call("sin", arg1),
	cos = if(is.zero(arg1)) 1
		else call("cos", arg1),
)

is.zero <- function(x)
	is.numeric(x) && x==0

is.one <- function(x)
	is.numeric(x) && x==1

cache.D <- function(expr, name){
	which <- paste(deparse(expr),"::",deparse(name))
	if(exists(which,frame=1)){
		cat("Using cached value of",which,"\n")
		get(which,frame=1)
		}
	else{
		answer <- old.D(expr,name)
		cat("cached",which,"\n")
		assign(which,answer,frame=1)
		answer
		}
}

deriv2 <- function(expr,name){
	expr <- substitute(expr)
	name <- substitute(name)
	assign("answers",NULL,frame=1)
	assign("old.D",D,frame=1)
	assign("D",cache.D,frame=1)
	D(expr,name)
}
"diag<-"<-
function(x, val) {
	x <- as.matrix(x)
	d <- dim(x)
	x[seq(1, min(d) * d[1], d[1] + 1)] <- val
	x
}
"digits"<-
function(n)
{
	if(n == 0) return(0)
	n <- abs(n) + 0.5
	powers <- round(10^((ceiling(log10(n)):1) - 1))
	(n %/% powers) %% 10
}
draw.gamma <- function(shape){
	x <- qgamma(seq(.001,.999,length=100) ,shape)
	plot(x, dgamma(x,shape), type="l", xlab="", ylab="")
}
"exports"<-
c(0.1326530612244898, 0.126530612244898, 0.1224489795918367, 0.1163265306122449,
	0.1081632653061224, 0.1040816326530612, 0.1020408163265306, 
	0.09795918367346939, 0.09591836734693878, 0.09591836734693878, 
	0.09183673469387755, 0.08979591836734694, 0.08163265306122449, 
	0.07755102040816327, 0.08163265306122449, 0.08571428571428572, 
	0.08979591836734694, 0.09387755102040816, 0.09795918367346939, 
	0.1020408163265306, 0.1163265306122449, 0.1224489795918367, 
	0.1326530612244898, 0.1408163265306122, 0.1428571428571429, 
	0.1428571428571429, 0.1448979591836735, 0.1428571428571429, 
	0.1326530612244898, 0.1224489795918367, 0.1224489795918367, 
	0.1224489795918367, 0.1326530612244898, 0.1428571428571429, 
	0.163265306122449, 0.2040816326530612, 0.2387755102040816, 
	0.2653061224489796, 0.3020408163265306, 0.336734693877551, 
	0.3571428571428571, 0.3877551020408163, 0.4183673469387755, 
	0.4489795918367347, 0.4693877551020408, 0.4897959183673469, 
	0.5102040816326531, 0.5408163265306122, 0.5816326530612245, 
	0.6224489795918367, 0.673469387755102, 0.7081632653061224, 
	0.7346938775510204, 0.7653061224489796, 0.7857142857142857, 
	0.7959183673469388, 0.7959183673469388, 0.8061224489795918, 
	0.8163265306122449, 0.8469387755102041, 0.8673469387755102, 
	0.8979591836734694, 0.9285714285714286, 1, 1.081632653061224, 
	1.26530612244898, 1.36734693877551, 1.387755102040816, 
	1.387755102040816, 1.36734693877551, 1.340816326530612, 
	1.306122448979592, 1.26530612244898, 1.204081632653061, 
	1.122448979591837, 0.9591836734693878, 0.9183673469387755, 
	0.8775510204081633, 0.8673469387755102, 0.8571428571428571, 
	0.8469387755102041)
"fields"<-
function(...){
	file <- tempfile("fld")
	value <- unix(paste("awk '{for(i=1;i<=NF;i++)print $i}' <",file))
	unlink(file)
	value
}
"find.D"<-
function(f, eps = 1e-07)
{
	D <- 1
	repeat {
		N <- f * D
		if(all(abs(N - round(N)) < eps))
			break
		D <- D * 10
	}
	D
}
"function.diff"<-
function(f1, f2)
{
	file1 <- tempfile("diff1")
	file2 <- tempfile("diff2")
	on.exit(unlink(c(file1, file2)))
	cat(f1, sep = "\n", file = file1)
	cat(f2, sep = "\n", file = file2)
	if(!unix(paste("diff", file1, file2), output = F))
		cat("Identical\n")
}
"gcd" <-
function(a, b)
{
	a <- a + 0 * b	# equalize lengths of a and b
	b <- b + 0 * a
	gcd2(a, b)
}
"gcd2" <-
function(a, b)
{
	recurse <- b!=0
	if(any(recurse)) {
		tmp <- b[recurse]
		a[recurse] <- gcd(tmp, a[recurse] %% tmp)
	}
	a
}
"get.or.null"<-
function(expr)
{
	symb <- substitute(expr)
	if(mode(symb) == "name") return(if(exists(expr)) expr
	else NULL)
	if(!is.language(symb)) stop(
		"get.or.null expects a name or a subset expression")
	arg <- get.or.null(symb[[1]])
	if(is.null(arg)) return(NULL)
	else return(expr)
}
"golf"<-
function()
{
	state <- generate.game()
	display.game(state)
	while(!finished(state)) state <- next.move(state)
	n <- score(state)
	Golf.score <<- if(exists("Golf.score", w = 1))
		c(Golf.score, n)
	else n
	n
}
"generate.game"<-
function()
{
	deck <- sample(1:52, 52)
	list(board = matrix(deck[1:35], 5, 7), turnup = deck[36], hand = deck[
		37:52])
}
"display.game"<-
function(state)
{
	frame()
	par(usr = c(0, 8, -2, 6))
	board <- state$board
	text(col(board), row(board), deck.symbols[board])
	segments(0.5:7.5, 0.5, 0.5:7.5, 5.5, lty = 3)
	segments(0.5, 0.5:5.5, 7.5, 0.5:5.5, lty = 3)
	lines(c(3.5,4.5,4.5,3.5,3.5),c(-1.5,-1.5,-.5,-.5,-1.5),lty=3)
	text(4, -1, deck.symbols[state$turnup])
	text(0.5, -1, paste(length(state$hand), "left"), adj = 0)
}
"next.card"<-
function()
{
	repeat{
		pos <- locator(1)
		if(length(pos)>0)break
		cat("Point at a card on the board, with graphic input\n")
	}
	if(pos$y < 0)
		0
	else min(7, max(round(pos$x), 1))
}
"next.move"<-
function(state)
{
	repeat {
		which <- next.card()
		if(legal.move(state, which))
			break
	}
	update.game(state, which)
}
"legal.move"<-
function(state, which)
{
	if(which == 0)
		return(TRUE)	# next from hand
	row <- first.non.zero(state$board[, which])
	if(is.na(row)) {
		cat("No cards left in column",which,"; try again\n")
		return(FALSE)
	}
	spot <- deck.spots(state$board[row, which])
	turnup.spot <- deck.spots(state$turnup)
	if(turnup.spot == 13) {
		cat("Can't play anything on a king; try again\n")
		return(FALSE)
	}
	else legal <- if(turnup.spot == 1)
		spot == 2
	else abs(spot - turnup.spot) == 1
	if(!legal)cat("Can't play",spot.symbols[spot],"on",
		spot.symbols[turnup.spot],"; try again\n")
	legal
}
"first.non.zero"<-
function(x)
seq(along=x)[x!=0][[1]]
"deck.spots"<-
function(cards)
((cards - 1) %% 13) + 1
"update.game"<-
function(state, which)
{
	text(4, -1, deck.symbols[state$turnup], col = 0)
	if(which > 0)
		update.board(state, which)
	else update.hand(state)
}
"update.board"<-
function(state, which)
{
	row <- first.non.zero(state$board[, which])
	new <- state$board[row, which]
	text(which, row, deck.symbols[new], col = 0)
	text(4, -1, deck.symbols[new])
	state$board[row, which] <- 0
	state$turnup <- new
	state
}
"update.hand"<-
function(state)
{
	if(length(state$hand) > 0) {
		text(0.5, -1, length(state$hand), adj = 0, col = 0)
		state$turnup <- new <- state$hand[1]
		text(4, -1, deck.symbols[new])
		state$hand <- state$hand[-1]
		text(0.5, -1, length(state$hand), adj = 0)
	}
	else state$hand <- NULL
	state
}
"finished"<-
function(state)
is.null(state$hand) || all(state$board == 0)
"score"<-
function(state)
sum(state$board > 0)
"deck.symbols"<-
array(c("A C", "2 C", "3 C", "4 C", "5 C", "6 C", "7 C", "8 C",
	"9 C", "10 C", "J C", "Q C", "K C", "A D", "2 D", "3 D", "4 D", "5 D",
	"6 D", "7 D", "8 D", "9 D", "10 D", "J D", "Q D", "K D", "A H", "2 H",
	"3 H", "4 H", "5 H", "6 H", "7 H", "8 H", "9 H", "10 H", "J H", "Q H",
	"K H", "A S", "2 S", "3 S", "4 S", "5 S", "6 S", "7 S", "8 S", "9 S",
	"10 S", "J S", "Q S", "K S"), dim = c(13, 4))
spot.symbols <- c("Ace", 2:10, "Jack", "Queen", "King")
"honda"<-
list(days = structure(.Data = c(1, 8, 11, 18, 24, 28, 35, 39, 43, 47, 52, 56,
	61, 65, 68, 72, 79, 80, 83, 89, 93, 98, 103, 107, 110, 116, 120, 123,
	129, 130, 136, 136, 141, 144, 146, 150, 154, 159, 164, 168, 172, 174,
	179, 182, 185, 187, 190, 193, 196, 202, 206, 213, 217, 223, 226, 232,
	238, 245, 250, 256, 258, 262, 267, 270, 272, 274, 276, 279, 281, 285,
	287, 290, 292, 294, 296, 301, 304, 308, 311, 314, 318, 320, 323, 326,
	329, 332, 336, 340, 347, 349, 353, 371, 377, 382, 385, 388, 391, 396,
	401, 405, 411, 415, 419, 424, 428, 433, 438, 443, 447, 450, 455, 460,
	466, 469, 471, 472, 472, 475, 479, 480, 480, 484, 489, 501, 505, 509,
	514, 519, 524, 529, 533, 536, 540, 545, 549, 552, 556, 561, 564, 569,
	573, 578, 582, 587, 591, 594, 598, 603, 609, 615, 619, 622, 627, 630,
	635, 637, 638, 640, 641, 643, 648, 656, 661, 666, 670, 673, 676, 680,
	685, 688, 691, 695, 705, 707, 710, 713, 718, 722, 726, 730, 736, 740,
	744, 745, 750, 754, 756, 761, 766, 770, 772, 775, 779, 784, 788, 792,
	793, 796, 799, 800, 805, 807, 810, 814, 814, 816, 819, 823, 833, 844,
	851, 858, 862, 867, 871, 881, 885, 889, 893, 897, 901, 905, 909, 912,
	915, 919, 925, 928, 929, 931, 934, 934, 938, 944, 947, 952, 956, 960,
	965, 972, 975, 980, 985, 989, 993, 998, 1000, 1001, 1003, 1005, 1007,
	1011, 1016, 1020, 1025, 1028, 1032, 1035, 1039, 1042, 1045, 1049, 1053,
	1057, 1062, 1068, 1072, 1078, 1085, 1091, 1093, 1096, 1101, 1107, 1109,
	1110, 1114, 1120, 1124, 1129, 1135, 1138, 1140, 1144, 1145, 1145, 1148,
	1149, 1149, 1152, 1157, 1163, 1167, 1171, 1174, 1188, 1192, 1195, 1201,
	1206, 1210, 1216, 1223, 1234, 1238, 1242, 1245, 1252, 1256, 1261, 1265,
	1269, 1272, 1276, 1278, 1285, 1290, 1296, 1301, 1307, 1310, 1316, 1322,
	1326, 1330, 1334, 1338, 1345, 1348, 1351, 1354, 1358, 1363, 1365, 1366,
	1368, 1369, 1372, 1376, 1380, 1384, 1389, 1392, 1396, 1401, 1406, 1410,
	1414, 1418, 1422, 1425, 1432, 1440, 1445, 1448, 1452, 1457, 1458, 1465,
	1469, 1476, 1481, 1487, 1492, 1495, 1500, 1503, 1506, 1511, 1518, 1525,
	1531, 1535, 1538, 1544, 1560, 1567, 1571, 1577, 1582, 1587, 1588, 1591,
	1593, 1594, 1596, 1600, 1603, 1607, 1612, 1617, 1621, 1626, 1631, 1634,
	1641, 1642, 1643, 1644, 1647, 1647, 1650, 1655, 1661, 1665, 1670, 1674,
	1678, 1682, 1687, 1693, 1697, 1703, 1708, 1713, 1718, 1721, 1725, 1734,
	1739, 1743, 1747, 1751, 1757, 1762, 1767, 1771, 1776, 1780, 1784, 1788,
	1792, 1796, 1800, 1804, 1807, 1810, 1814, 1818, 1821, 1832, 1838, 1843,
	1845, 1847, 1853, 1853, 1859, 1866, 1869, 1881, 1898, 1903, 1916, 1922,
	1929, 1935, 1941, 1949, 1954, 1957, 1961, 1966, 1969, 1972, 1974, 1976,
	1978, 1979, 1984, 1991, 1995, 2000, 2004, 2007, 2010, 2013, 2017, 2022,
	2037, 2040, 2043, 2047, 2050, 2054, 2057, 2062, 2067, 2071, 2077, 2081,
	2084, 2089, 2094, 2097, 2101, 2106, 2110, 2113, 2116, 2120, 2127, 2128,
	2134, 2137, 2138, 2138, 2138, 2142, 2146, 2147, 2147, 2149, 2153, 2157,
	2159, 2162, 2168, 2175, 2180, 2190, 2194, 2197, 2201, 2205, 2209, 2215,
	2224, 2229, 2233, 2237, 2241, 2247, 2256, 2262, 2267, 2272, 2278, 2284,
	2286, 2289, 2295, 2313, 2338, 2341, 2346, 2352, 2356, 2361, 2367, 2370,
	2374, 2381, 2387, 2390, 2394, 2398, 2405), .Dim = c(558, 1)), cdate = 
	c("4/30/81", "5/7/81", "5/10/81", "5/17/81", "5/23/81", "5/27/81",
	"6/3/81", "6/7/81", "6/11/81", "6/15/81", "6/20/81", "6/24/81", 
	"6/29/81", "7/3/81", "7/6/81", "7/10/81", "7/17/81", "7/18/81", 
	"7/21/81", "7/27/81", "7/31/81", "8/5/81", "8/10/81", "8/14/81", 
	"8/17/81", "8/23/81", "8/27/81", "8/30/81", "9/5/81", "9/6/81", 
	"9/12/81", "9/12/81", "9/17/81", "9/20/81", "9/22/81", "9/26/81", 
	"9/30/81", "10/5/81", "10/10/81", "10/14/81", "10/18/81", "10/20/81",
	"10/25/81", "10/28/81", "10/31/81", "11/2/81", "11/5/81", "11/8/81",
	"11/11/81", "11/17/81", "11/21/81", "11/28/81", "12/2/81", "12/8/81",
	"12/11/81", "12/17/81", "12/23/81", "12/30/81", "1/4/82", "1/10/82",
	"1/12/82", "1/16/82", "1/21/82", "1/24/82", "1/26/82", "1/28/82", 
	"1/30/82", "2/2/82", "2/4/82", "2/8/82", "2/10/82", "2/13/82", 
	"2/15/82", "2/17/82", "2/19/82", "2/24/82", "2/27/82", "3/3/82", 
	"3/6/82", "3/9/82", "3/13/82", "3/15/82", "3/18/82", "3/21/82", 
	"3/24/82", "3/27/82", "3/31/82", "4/4/82", "4/11/82", "4/13/82", 
	"4/17/82", "5/5/82", "5/11/82", "5/16/82", "5/19/82", "5/22/82", 
	"5/25/82", "5/30/82", "6/4/82", "6/8/82", "6/14/82", "6/18/82", 
	"6/22/82", "6/27/82", "7/1/82", "7/6/82", "7/11/82", "7/16/82", 
	"7/20/82", "7/23/82", "7/28/82", "8/2/82", "8/8/82", "8/11/82", 
	"8/13/82", "8/14/82", "8/14/82", "8/17/82", "8/21/82", "8/22/82", 
	"8/22/82", "8/26/82", "8/31/82", "9/12/82", "9/16/82", "9/20/82", 
	"9/25/82", "9/30/82", "10/5/82", "10/10/82", "10/14/82", "10/17/82",
	"10/21/82", "10/26/82", "10/30/82", "11/2/82", "11/6/82", "11/11/82",
	"11/14/82", "11/19/82", "11/23/82", "11/28/82", "12/2/82", "12/7/82",
	"12/11/82", "12/14/82", "12/18/82", "12/23/82", "12/29/82", "1/4/83",
	"1/8/83", "1/11/83", "1/16/83", "1/19/83", "1/24/83", "1/26/83", 
	"1/27/83", "1/29/83", "1/30/83", "2/1/83", "2/6/83", "2/14/83", 
	"2/19/83", "2/24/83", "2/28/83", "3/3/83", "3/6/83", "3/10/83", 
	"3/15/83", "3/18/83", "3/21/83", "3/25/83", "4/4/83", "4/6/83", 
	"4/9/83", "4/12/83", "4/17/83", "4/21/83", "4/25/83", "4/29/83", 
	"5/5/83", "5/9/83", "5/13/83", "5/14/83", "5/19/83", "5/23/83", 
	"5/25/83", "5/30/83", "6/4/83", "6/8/83", "6/10/83", "6/13/83", 
	"6/17/83", "6/22/83", "6/26/83", "6/30/83", "7/1/83", "7/4/83", 
	"7/7/83", "7/8/83", "7/13/83", "7/15/83", "7/18/83", "7/22/83", 
	"7/22/83", "7/24/83", "7/27/83", "7/31/83", "8/10/83", "8/21/83", 
	"8/28/83", "9/4/83", "9/8/83", "9/13/83", "9/17/83", "9/27/83", 
	"10/1/83", "10/5/83", "10/9/83", "10/13/83", "10/17/83", "10/21/83",
	"10/25/83", "10/28/83", "10/31/83", "11/4/83", "11/10/83", "11/13/83",
	"11/14/83", "11/16/83", "11/19/83", "11/19/83", "11/23/83", "11/29/83",
	"12/2/83", "12/7/83", "12/11/83", "12/15/83", "12/20/83", "12/27/83",
	"12/30/83", "1/4/84", "1/9/84", "1/13/84", "1/17/84", "1/22/84", 
	"1/24/84", "1/25/84", "1/27/84", "1/29/84", "1/31/84", "2/4/84", 
	"2/9/84", "2/13/84", "2/18/84", "2/21/84", "2/25/84", "2/28/84", 
	"3/3/84", "3/6/84", "3/9/84", "3/13/84", "3/17/84", "3/21/84", 
	"3/26/84", "4/1/84", "4/5/84", "4/11/84", "4/18/84", "4/24/84", 
	"4/26/84", "4/29/84", "5/4/84", "5/10/84", "5/12/84", "5/13/84", 
	"5/17/84", "5/23/84", "5/27/84", "6/1/84", "6/7/84", "6/10/84", 
	"6/12/84", "6/16/84", "6/17/84", "6/17/84", "6/20/84", "6/21/84", 
	"6/21/84", "6/24/84", "6/29/84", "7/5/84", "7/9/84", "7/13/84", 
	"7/16/84", "7/30/84", "8/3/84", "8/6/84", "8/12/84", "8/17/84", 
	"8/21/84", "8/27/84", "9/3/84", "9/14/84", "9/18/84", "9/22/84", 
	"9/25/84", "10/2/84", "10/6/84", "10/11/84", "10/15/84", "10/19/84",
	"10/22/84", "10/26/84", "10/28/84", "11/4/84", "11/9/84", "11/15/84",
	"11/20/84", "11/26/84", "11/29/84", "12/5/84", "12/11/84", "12/15/84",
	"12/19/84", "12/23/84", "12/27/84", "1/3/85", "1/6/85", "1/9/85", 
	"1/12/85", "1/16/85", "1/21/85", "1/23/85", "1/24/85", "1/26/85", 
	"1/27/85", "1/30/85", "2/3/85", "2/7/85", "2/11/85", "2/16/85", 
	"2/19/85", "2/23/85", "2/28/85", "3/5/85", "3/9/85", "3/13/85", 
	"3/17/85", "3/21/85", "3/24/85", "3/31/85", "4/8/85", "4/13/85", 
	"4/16/85", "4/20/85", "4/25/85", "4/26/85", "5/3/85", "5/7/85", 
	"5/14/85", "5/19/85", "5/25/85", "5/30/85", "6/2/85", "6/7/85", 
	"6/10/85", "6/13/85", "6/18/85", "6/25/85", "7/2/85", "7/8/85", 
	"7/12/85", "7/15/85", "7/21/85", "8/6/85", "8/13/85", "8/17/85", 
	"8/23/85", "8/28/85", "9/2/85", "9/3/85", "9/6/85", "9/8/85", "9/9/85",
	"9/11/85", "9/15/85", "9/18/85", "9/22/85", "9/27/85", "10/2/85", 
	"10/6/85", "10/11/85", "10/16/85", "10/19/85", "10/26/85", "10/27/85",
	"10/28/85", "10/29/85", "11/1/85", "11/1/85", "11/4/85", "11/9/85",
	"11/15/85", "11/19/85", "11/24/85", "11/28/85", "12/2/85", "12/6/85",
	"12/11/85", "12/17/85", "12/21/85", "12/27/85", "1/1/86", "1/6/86",
	"1/11/86", "1/14/86", "1/18/86", "1/27/86", "2/1/86", "2/5/86", 
	"2/9/86", "2/13/86", "2/19/86", "2/24/86", "3/1/86", "3/5/86", 
	"3/10/86", "3/14/86", "3/18/86", "3/22/86", "3/26/86", "3/30/86", 
	"4/3/86", "4/7/86", "4/10/86", "4/13/86", "4/17/86", "4/21/86", 
	"4/24/86", "5/5/86", "5/11/86", "5/16/86", "5/18/86", "5/20/86", 
	"5/26/86", "5/26/86", "6/1/86", "6/8/86", "6/11/86", "6/23/86", 
	"7/10/86", "7/15/86", "7/28/86", "8/3/86", "8/10/86", "8/16/86", 
	"8/22/86", "8/30/86", "9/4/86", "9/7/86", "9/11/86", "9/16/86", 
	"9/19/86", "9/22/86", "9/24/86", "9/26/86", "9/28/86", "9/29/86", 
	"10/4/86", "10/11/86", "10/15/86", "10/20/86", "10/24/86", "10/27/86",
	"10/30/86", "11/2/86", "11/6/86", "11/11/86", "11/26/86", "11/29/86",
	"12/2/86", "12/6/86", "12/9/86", "12/13/86", "12/16/86", "12/21/86",
	"12/26/86", "12/30/86", "1/5/87", "1/9/87", "1/12/87", "1/17/87", 
	"1/22/87", "1/25/87", "1/29/87", "2/3/87", "2/7/87", "2/10/87", 
	"2/13/87", "2/17/87", "2/24/87", "2/25/87", "3/3/87", "3/6/87", 
	"3/7/87", "3/7/87", "3/7/87", "3/11/87", "3/15/87", "3/16/87", 
	"3/16/87", "3/18/87", "3/22/87", "3/26/87", "3/28/87", "3/31/87", 
	"4/6/87", "4/13/87", "4/18/87", "4/28/87", "5/2/87", "5/5/87", "5/9/87",
	"5/13/87", "5/17/87", "5/23/87", "6/1/87", "6/6/87", "6/10/87", 
	"6/14/87", "6/18/87", "6/24/87", "7/3/87", "7/9/87", "7/14/87", 
	"7/19/87", "7/25/87", "7/31/87", "8/2/87", "8/5/87", "8/11/87", 
	"8/29/87", "9/23/87", "9/26/87", "10/1/87", "10/7/87", "10/11/87",
	"10/16/87", "10/22/87", "10/25/87", "10/29/87", "11/5/87", "11/11/87",
	"11/14/87", "11/18/87", "11/22/87", "11/29/87"), odometer = c(60, 281,
	519.4, 732.7, 945.8, 1185, 1405.9, 1624, 1879.7, 2108.1, 2344.7, 2593.7,
	2829.9, 3029, 3251.6, 3484.8, 3718, 3752.8, 3987.4, 4218.3, 4454, 4657,
	4899.2, 5080.3, 5312.5, 5552.2, 5814.6, 6056.8, 6210.6, 6435, 6610,
	6840.9, 7078.8, 7252.1, 7481.4, 7701.4, 7913, 8123.6, 8346.5, 8568.9,
	8791.8, 9009.6, 9224.9, 9453, 9656.5, 9875.3, 10126.5, 10345.7, 10559.2,
	10809.4, 11049.2, 11278.3, 11483.9, 11723.9, 11971.5, 12196.2, 12434.7,
	12676.1, 12881.7, 13124.1, 13343.8, 13556.2, 13803, 14037.1, 14274.7,
	14498.1, 14723.3, 14966, 15200.2, 15439.6, 15640.4, 15882.1, 16052.9,
	16295.8, 16371.3, 16599.1, 16805.1, 16997.8, 17193, 17367, 17591.7,
	17739.7, 17983, 18220.1, 18454.1, 18622.5, 18847, 19104.7, 19266.2,
	19510.2, 19725.3, 19971.5, 20239.4, 20515.7, 20650, 20932.7, 21080.5,
	21334.9, 21558, 21809.9, 22061.9, 22316, 22538, 22798, 23024.6, 23256.6,
	23516.8, 23761.5, 23968.3, 24188.7, 24422.4, 24691.4, 24902.6, 25138,
	25236.1, 25401.3, 25692.8, 25947.1, 26121.6, 26359.9, 26567, 26817.4,
	27057.7, 27296.2, 27546.1, 27787.7, 28055.5, 28289.8, 28542.9, 28822.5,
	29082.4, 29330.4, 29605.6, 29828.2, 30089.5, 30333.8, 30610.9, 30840.7,
	31051, 31301.99, 31519.5, 31786.5, 32042.9, 32265.4, 32492, 32745.4,
	33002.1, 33246.2, 33503.3, 33727.4, 33960, 34182.3, 34406.9, 34636.9,
	34886.8, 35074.1, 35264.8, 35430.4, 35601.4, 35841.2, 36103.2, 36287.2,
	36534.3, 36779.5, 37007.4, 37253.4, 37479.7, 37733.1, 37998.5, 38201,
	38403.7, 38674.3, 38918.9, 39200.6, 39456.4, 39671.9, 39922.6, 40168.3,
	40417.9, 40646.7, 40885, 41134.8, 41411.78, 41674.5, 41909.6, 42177.6,
	42425, 42693.8, 42939, 43189.7, 43362.5, 43603.2, 43833.5, 44095.7,
	44303, 44556, 44761.4, 45013.1, 45237.5, 45455.1, 45698.2, 45935.9,
	46171.1, 46414.1, 46676.6, 46897.9, 47168.1, 47393.8, 47598.8, 47822.8,
	48069.3, 48318.6, 48561.9, 48802.5, 49057, 49293.4, 49537.5, 49806.8,
	50034.5, 50289.8, 50516, 50775.4, 51000.4, 51259.8, 51481.8, 51739.1,
	51955.3, 52206.7, 52402.7, 52563.7, 52694.5, 52962.2, 53209.8, 53402.3,
	53609.8, 53851.2, 54090.1, 54338.6, 54533.2, 54774.1, 55025.6, 55261.8,
	55469.6, 55731.7, 55947.6, 56143.9, 56351.5, 56624.7, 56801.9, 56951.6,
	57221.3, 57456, 57700.7, 57936.7, 58195, 58425.4, 58640, 58859.3, 
	59061.9, 59306.7, 59536.5, 59752.6, 59960, 60183.6, 60439.2, 60683.8,
	60898, 61109.6, 61330.3, 61560.2, 61811, 62053.3, 62315.4, 62541.3,
	62695.6, 62914.8, 63146.6, 63379.8, 63605.4, 63837.3, 64068.3, 64290.3,
	64494.1, 64698.1, 64931.5, 65195.1, 65406.7, 65582.1, 65865, 66104.7,
	66304.4, 66544.1, 66764.2, 66960.2, 67173.8, 67386, 67597.4, 67820.6,
	68034.5, 68275.1, 68479.7, 68661.9, 68885.4, 69081.6, 69294, 69535,
	69750.1, 69949.3, 70185.5, 70437, 70659.6, 70873.3, 71096.7, 71329.2,
	71516.2, 71770.2, 72030.8, 72277.1, 72527.1, 72772.7, 73036.7, 73257.1,
	73497.3, 73746, 73997.7, 74205.8, 74460.9, 74691.4, 74912.6, 75150.2,
	75393.1, 75635.3, 75813.6, 75959.4, 76194.9, 76380.1, 76614.5, 76848.3,
	77074.7, 77291.6, 77486.2, 77712, 77954.6, 78212.8, 78485.8, 78719.7,
	78971.4, 79198.4, 79444.2, 79679.4, 79891.5, 80157.2, 80390.6, 80600.2,
	80850.5, 81110.1, 81326.4, 81575.6, 81805, 82070.9, 82314.6, 82540.8,
	82778.3, 83015.1, 83263.1, 83516.1, 83756.2, 84024.1, 84271, 84524.4,
	84782.2, 85050, 85286.1, 85528, 85765.5, 86024.3, 86237.7, 86498.5,
	86763.7, 87012.3, 87258.8, 87479.6, 87713, 87849, 88098.8, 88388, 
	88612.6, 88848.4, 89079.7, 89307.2, 89534.7, 89777.8, 90025.7, 90268.4,
	90518, 90790.5, 90921.1, 91174.8, 91430.4, 91636.2, 91882.5, 92100.4,
	92357.3, 92602.4, 92811.8, 93086.2, 93274.8, 93519.1, 93767.8, 94029.2,
	94279, 94518.4, 94783.1, 95011.5, 95250.2, 95506, 95762.7, 96012.3,
	96249.7, 96473.8, 96698.5, 96938.6, 97183.5, 97391.8, 97646.5, 97907.5,
	98162.9, 98410.1, 98647.7, 98861.9, 99107.1, 99316.1, 99600, 99857.2,
	100089.7, 100307.8, 100530.8, 100772, 101033.8, 101281.6, 101511.4,
	101723.8, 101978.8, 102244.4, 102518.2, 102736.5, 102868.7, 103116.4,
	103360.1, 103616.1, 103816.4, 104099.8, 104320.3, 104553.6, 104803.9,
	105066.7, 105322.1, 105594.3, 105850.9, 106096.1, 106355.1, 106601.4,
	106865.2, 107100.8, 107280.7, 107531.6, 107816, 108057.4, 108312.9,
	108570.8, 108835.5, 109121.4, 109383.5, 109631.1, 109885.4, 110119.6,
	110363.7, 110586.3, 110835.5, 111025.7, 111276.9, 111520.5, 111771.4,
	112021.8, 112284.8, 112534.4, 112787.3, 113029, 113252.6, 113500.2,
	113719.7, 113976, 114238.1, 114434.8, 114640.8, 114845.7, 115086.4,
	115303.9, 115477.2, 115679.4, 115885.4, 116095, 116305, 116495.4, 
	116691.3, 116859.8, 117014.6, 117219.9, 117412.6, 117613.7, 117870.2,
	118064.9, 118286.5, 118536.3, 118785.4, 118984.5, 119207.9, 119633.7,
	119876.8, 120109, 120363, 120610.1, 120823, 121089, 121348.1, 121607.8,
	121822.8, 122030.8, 122260.7, 122503.8, 122742.1, 122996.1, 123227.6,
	123451.9, 123694.5, 123931.7, 124167.8, 124391.7, 124640.2, 124882.6,
	125114, 125359.4, 125614.7, 125808.2, 126060, 126318.8, 126562.4, 
	126815.7, 127038.1, 127281.1, 127515.1, 127734.7, 127959.9, 128136.5,
	128413, 128654.7, 128896.7, 129137.7), gallons = c(8, 9.4, 9, 9.2,
	8.5, 9.4, 9.5, 8.3, 10.2, 9.8, 10.2, 10, 9.8, 7.8, 9.6, 9.1, 3.6, 8.2,
	9.5, 9.3, 9.6, 9, 9.9, 7.6, 9.25, 9.9, 11.1, 10.1, 6.815642162936115,
	8.61201296557044, 7.132648775165702, 9.5, 9.6, 6.8, 8.6, 8.4, 9.3,
	8.9, 9.2, 9.061105666229021, 9.2, 8.4, 9.2, 9.3, 8.3, 9, 9.8, 8.8,
	8.7, 11, 9.4, 9.8, 9.2, 10, 10.4, 10.3, 10.6, 10.6, 8.5, 10.8, 10,
	10.3, 10.4, 10, 10, 9.5, 9.5, 10.2, 9.6, 9.7, 8.5, 10.2, 6.9, 9.8,
	3.4, 9.8, 8.8, 9.2, 7.9, 7.7, 9.3, 6.3, 10.2, 9.6, 9.6, 7.6, 9.4, 10.5,
	7.1, 9.7, 8.8, 9.7, 10.2, 7.758736834319136, 8.2, 10.9, 6, 9.7, 9.2,
	9.6, 10.3, 9.5, 8.707114949239316, 10.4, 8.7, 9.9, 10.56688707431956,
	10, 8, 9.8, 9.68, 10.7, 9.3, 9.8, 4, 6.2, 10.3, 10, 7.1, 10.2, 7, 9.25,
	9.9, 9.9, 9.7, 9.4, 10.7, 9.6, 9.7, 11.3, 10, 9.6, 10.2, 9.1, 10.3,
	9.6, 10.7, 9.3, 8.8, 10.2, 8.6, 11.4, 10.1, 8.9, 9.5, 11.1, 10.6, 10.4,
	10.1, 9.5, 9.7, 9, 9.2, 9.7, 11, 7.8, 7.9, 7.1854832105373, 
	7.000562686736708, 9.6, 11.1, 8.4, 10.5, 10.5, 9.2, 10.1, 9.1, 10.1,
	10.7, 8.3, 8.3, 11.2, 10.6, 11, 10.4, 9.2, 10.4, 10.2, 10.2, 9.7, 10.2,
	10, 11, 10, 9.7, 10.3, 9.985708285231983, 10.7, 9.7, 10, 6.6, 9.4,
	9.5, 10.9, 8.3, 10.5, 8.1, 9.1, 9.6, 8.5, 9.7, 9.8, 9.5, 9.6, 10, 8.4,
	10.5, 9.2, 10.2, 10.9, 11, 10.7, 10.4, 10.4, 10.7, 10.5, 10.6, 10.7,
	9.9, 10.5, 9.6, 10.9, 9.8, 10.9, 9.3, 10.9, 9.1, 10.3, 8.7, 7.3, 6.6,
	10.7, 9.3, 9.4, 8.7, 10.2, 10.1, 10.7, 9.3, 11.3, 11.1, 10.8, 9.4,
	11.4, 10.1, 9.4, 9.3, 12, 7.4, 7.5, 10.6, 10.2, 11.9, 10.1, 10.7, 9.73,
	8.8, 9.5, 9.3, 10.2, 10.3, 9.7, 9.3, 9.7, 11.2, 11.4, 9.4, 9.6, 10,
	10.7, 10.1, 10.1, 11.1, 10, 5.4, 9.1, 10.2, 9.7, 10.3, 10.5, 10.4,
	10.1, 9.4, 8.7, 9.9, 11.7, 10.2, 8.4, 11.1, 10.2, 9.2, 11.4, 9.5, 9,
	9.3, 9.4, 9.7, 10.5, 10, 10, 9.8, 8.7, 10.6, 9.2, 9.9, 10.8, 9.8, 9.5,
	10.4, 10.7, 9.8, 9.3, 9.1, 10.5, 8.8, 11.3, 10.7, 10, 10.2, 9.3, 10.2,
	9.1, 10.3, 10.3, 9.85, 8.6, 11.1, 9.5, 9.3, 10.1, 10.6, 10.5, 8.6,
	6.2, 9.1, 8.4, 9.2, 9.5, 10, 9.5, 8.47, 9.3, 10.2, 10, 11.4, 9.8, 10.1,
	9.4, 9.9, 9.4, 8.5, 11.1, 10.3, 9.1, 9.8, 11.3, 9.3, 9.2, 9.8, 10.4,
	9.8, 9.25, 9.6, 9.6, 10.2, 9.6, 10.2, 10.8, 9.6, 10.8, 10.7, 11.1,
	9.7, 10.3, 10.7, 10.9, 9.3, 11.2, 10.7, 10.4, 10.3, 9.1, 9.8, 
	5.600450149389366, 10.5, 10.5, 8.7, 9.4, 9.4, 9.3, 9.5, 10.3, 9.4,
	9.8, 9.8, 10.8, 5, 9.7, 9.695118890688195, 8.3, 9.2, 8.3, 10.1, 9.8,
	8.9, 10.6, 7.8, 9.9, 10.7, 10.5, 11, 10.4, 11, 9.7, 10, 10.7, 10.3,
	10.4, 9.8, 9.8, 8.8, 10.1, 10, 8.6, 10.3, 10.7, 10.1, 10.1, 9.5, 8,
	9.9, 8, 10.9, 10.1, 9.6, 8.3, 8.6, 10, 10.1, 10.2, 9.3, 9.1, 9.5, 10.3,
	10, 4, 8.6, 10.5, 9.9, 8.5, 9.3, 11, 9.3, 9.1, 10.3, 10.5, 10.5, 10.7,
	10.4, 9.6, 9.5, 10.2, 10.7, 9.8, 7.4, 9.3, 10.5, 9.2, 9.4, 10.2, 11.1,
	11.2, 10.5, 9.7, 9.7, 9.3, 9.9, 9.1, 10.2, 7, 10.2, 9.7, 10.6, 11.1,
	11.5, 10.9, 10.9, 10.8, 9.6, 11.4, 9.6, 10.7, 11.1, 9.5, 9.7, 9.6,
	7.5, 9.8, 7.2, 8.8, 8.9, 9.8, 8.9, 8.8, 8.6, 6.6, 5.7, 8, 8.1, 8.7,
	10.2, 7, 9, 9.9, 10.7, 8.3, 9.3, 9.6, 10.5, 10.1, 11.2, 9.6, 8.9, 10.5,
	10.5, 10.2, 9.5, 9.6, 9.5, 9.8, 10, 10.3, 10, 9.7, 9.5, 10.6, 10.2,
	9.7, 10.6, 9.6, 9.4, 10.6, 10.7, 8.7, 10, 10.2, 10.2, 10, 9.8, 10.2,
	9.2, 9.2, 9.3, 7.5, 11.3, 10, 10.6, 10.4), dollars = c(11, 12.9, 13,
	13.35, 11.7, 12.85, 13, 11, 13.5, 13.4, 13.5, 13.75, 13.4, 10.5, 12.75,
	12, 5, 10.95, 12.5, 12.5, 12.9, 12, 13.5, 10, 12, 13, 15, 13.25, 8.85,
	12.5, 10.36, 12.75, 12.8, 8.85, 11.5, 11, 12.5, 11.9, 13.3, 11.5, 12,
	11, 12, 12.25, 11, 11.5, 12.75, 11.5, 11.3, 14.4, 12, 12.75, 12.45,
	13, 13.5, 13, 13.7, 13.45, 11, 14, 12.8, 13, 14, 13, 13, 11.9, 12,
	12.8, 12.75, 12, 11.25, 12.75, 8.5, 12.5, 4.25, 12.25, 10.5, 10.73,
	9.65, 9, 11, 7.3, 11.75, 11.5, 11, 8.7, 10.9, 12, 8, 11, 10, 10.75,
	11.25, 10, 9.8, 12.5, 7.2, 12, 10.8, 12, 12.4, 11.5, 12, 12.9, 10.9,
	12.75, 13.4, 12.75, 10, 12, 11.6, 13.65, 11.85, 12, 5, 8, 15.3, 13,
	9, 13.5, 9.35, 12, 13, 12.2, 11.9, 11.85, 14, 13, 13.6, 14.5, 12.2,
	12, 12.4, 11.25, 12.9, 12, 12.7, 11.4, 11, 12.7, 11.4, 14.2, 11.9,
	10.5, 11.7, 13.5, 12.5, 13, 12.15, 11.4, 11.25, 10.85, 11, 11.8, 13,
	9.7, 10, 9.3, 8.6, 11.25, 12.9, 11.25, 12, 12, 10.3, 11, 10, 10.8,
	12.75, 9, 9.2, 12.3, 12, 12.4, 12, 11, 11.75, 12.15, 12, 11.4, 11.48,
	12.8, 15, 12, 11.4, 11.85, 11.25, 12.5, 11, 11.4, 8.5, 11, 11, 12.5,
	10, 12.7, 10, 11.75, 11.5, 10.3, 11.75, 12, 11.5, 12, 12.25, 10.75,
	12.75, 11, 12.5, 12.5, 13.3, 13, 12.75, 12.7, 12.6, 12.75, 13.5, 13,
	11.4, 12.5, 11.4, 12.8, 13.5, 13.25, 11, 12.91, 10.7, 12.25, 11, 10,
	9.2, 13, 11, 11, 10.5, 11.5, 12, 12.5, 11, 13.5, 13, 13, 10.95, 13.3,
	11, 10.9, 9.75, 13.5, 10, 9.5, 12, 11.5, 12, 11.8, 12.5, 10.5, 10.25,
	10.5, 10.9, 11.9, 11.6, 11, 10.9, 11.4, 13, 13.6, 10.5, 10.7, 11.25,
	12, 11.2, 11.8, 14, 11.25, 7.4, 10.5, 11.9, 10.35, 12, 12.2, 12.2,
	11, 11, 9.85, 13, 15, 12, 10, 13.55, 11, 10.5, 12.9, 10.25, 10.5, 10.5,
	10.75, 11.45, 11.75, 11, 11, 10.8, 9.6, 11.75, 10.5, 11.25, 12, 10.6,
	10.25, 11.22, 12.25, 11.25, 10, 10.5, 12, 10, 12, 11.9, 10.75, 11.25,
	10.5, 11, 10, 11.2, 13, 12, 10, 13.2, 12, 11.5, 11.75, 11.65, 11, 11.5,
	7.25, 12.3, 11.4, 13, 12.5, 12.5, 11, 11, 11, 12.94, 12, 15.25, 11.9,
	12, 11.5, 11.75, 13, 11, 12.54, 13.75, 11.4, 11.5, 14.25, 11.5, 12.6,
	11.5, 13.45, 13.25, 11.1, 11, 13, 12, 11, 11.85, 14.95, 12.1, 12.5,
	14.5, 15, 12.5, 12, 12.75, 13, 12, 12.5, 12, 13.5, 13, 11.75, 12.75,
	6.7, 11.7, 12.25, 11, 11, 10.7, 11.1, 11, 11, 10.5, 11, 11.5, 13, 6,
	12.75, 12, 10.25, 11.75, 9.5, 11.5, 11.8, 10.5, 13.95, 9.35, 12, 12.25,
	12, 13.25, 12, 13.25, 11, 12, 12.4, 13, 12.5, 11.5, 10.8, 10.35, 11,
	10.75, 9.8, 11.6, 11, 10, 10.05, 8.75, 8, 8.9, 7.25, 9, 8.5, 7.9, 6.5,
	6.85, 8, 8, 7.75, 7.85, 7.35, 8.05, 8.75, 10, 4, 6.9, 9, 7.9, 8, 8,
	9.5, 8, 7.3, 8.9, 8.3, 9, 9, 7.75, 7.25, 7.1, 7.5, 8.5, 7.85, 5.5,
	8, 10, 9.25, 7.86, 7.5, 8.2, 8, 8.2, 7.75, 8, 6.5, 9.9, 7, 7.75, 5.7,
	7.7, 7.5, 8, 8.4, 8.7, 8.25, 8, 8, 7, 9, 6.75, 7.75, 8.9, 7.75, 7.5,
	7.25, 8.5, 7.7, 5.9, 10, 7, 8, 7, 7, 6.85, 6.5, 4.87, 7.5, 6.8, 7.5,
	8.83, 6, 7, 8, 9, 7, 8, 8.6, 10.5, 8.4, 9.85, 8, 7.7, 10, 9.25, 8.75,
	8.25, 8.7, 8.6, 8.5, 8.95, 9.25, 9, 9, 9, 10.25, 10, 8.72, 10, 9, 9,
	10.2, 9.5, 8.7, 9, 9.4, 10.25, 9, 8, 9.4, 8, 9, 8, 7.5, 10, 9.5, 9.5,
	9), trip = c(60, 221, 237, 213, 213.1, 239.2, 220, 217, 255, 228, 236.6,
	249, 236, 198, 222.6, 233.1, 233, 35, 234, 231, 236, 202, 242, 181.1,
	232.1, 239.8, 262.1, 242.2, 153.9, 224.4, 175.4, 230.5, 237.9, 173.3,
	229.3, 220, 211, 210, 222, 222.3, 223, 217.8, 215.3, 228.1, 203.6,
	218.8, 251.2, 119.2, 213.5, 250.2, 239.8, 229.2, 205.5, 237.4, 247.7,
	224.7, 238.5, 241.4, 204.5, 242.4, 219.7, 212.4, 246.8, 234.1, 237.7,
	223.4, 225.2, 242.7, 234.3, 239.4, 200.9, 241.7, 170.8, 242.8, 75.5,
	227.9, 206, 192.7, 195.3, 174.1, 224.6, 148.1, 243.3, 236.9, 233.9,
	167.6, 224.5, 257.7, 161.6, 224, 215.2, 246.2, 267.9, 276.4, 134.3,
	282.7, 147.9, 254.4, 223.1, 475, 252.1, 254.1, 222, 260, 226.7, 232,
	260.2, 244.7, 206.8, 220.4, 233.7, 269.1, 211.2, 236.3, 97.2, 165.2,
	291.5, 254.3, 174.5, 238.3, 207.1, 250.4, 240.4, 238.5, 249.9, 241.5,
	267.9, 234.3, 253.1, 279, 259.8, 248.1, 275.2, 222.6, 261.2, 244.4,
	277.1, 229.9, 210.3, 250.8, 217.6, 266.9, 256.5, 222.5, 226.7, 253.4,
	256.7, 244.1, 257.1, 224.1, 232.6, 222.3, 224.5, 230.1, 249.9, 187.3,
	190.6, 165.6, 170.7, 240, 262, 184, 247.2, 245.2, 227.9, 246, 226.4,
	253.4, 265.3, 202.5, 202.8, 473.3, 244.7, 281.7, 255.7, 215.6, 250.6,
	245.7, 249.6, 228.7, 238.4, 249.7, 276.9, 539.7, 235.1, 267.9, 247.4,
	268.9, 245.1, 250.7, 172.8, 240.7, 230.2, 262.2, 207.3, 253, 205.3,
	248, 224.4, 217.6, 243.1, 237.7, 235.2, 243.1, 262.4, 221.3, 270.1,
	225.7, 204.2, 224, 246.5, 249.3, 243.2, 240.7, 254.6, 236.3, 244.1,
	269.3, 227.7, 255.8, 226.2, 259.4, 225, 259.5, 222, 257.4, 216.2, 251.4,
	196, 161, 130.6, 267.7, 247.6, 192.5, 400, 241.4, 238.8, 248, 194.7,
	240.8, 251.6, 236.2, 207.7, 262.2, 215.8, 196.3, 207.7, 273.2, 177.3,
	149.7, 269.6, 234.7, 244.7, 236, 494.3, 230.5, 214.6, 219.3, 200.8,
	244.8, 229.8, 216.1, 207.5, 223.6, 255.6, 244.6, 214.3, 211.5, 216.2,
	230.2, 250.6, 240.7, 262.1, 225.9, 154.3, 219.2, 231.9, 233.1, 225.6,
	232, 231, 222, 203.8, 204, 232.7, 263.7, 211.6, 175.5, 282.9, 239.7,
	199.7, 239.7, 220.1, 196, 213.7, 212.2, 211.5, 223.6, 213.9, 237.9,
	204.6, 182.2, 223.6, 196.2, 212.4, 241, 215, 199.2, 435.5, 252.2, 221.9,
	213.2, 223.4, 232.5, 187, 254, 260.6, 246.3, 250, 245.7, 263.9, 220.5,
	240.2, 250.8, 500.5, 208, 255.2, 230.4, 221.3, 237.5, 243, 242.2, 178.3,
	145.9, 235.5, 185.2, 234.4, 233.7, 226.5, 216.9, 194.6, 225.8, 242.6,
	258.2, 273, 233.9, 251.7, 227.4, 244.9, 235.7, 211.6, 265.7, 233.5,
	209.6, 250.3, 259.7, 216.2, 249.3, 227.7, 265.9, 243.8, 226.1, 237.5,
	233.8, 246.4, 253, 240.1, 267.9, 246.9, 253.4, 257.7, 267.8, 236.1,
	241.9, 237.5, 252.1, 213.4, 260.8, 265.2, 248.5, 246.6, 220.8, 233.4,
	136, 249.8, 289.2, 224.6, 235.8, 228.6, 227.6, 227.4, 243.2, 247.9,
	242.7, 249.6, 272.5, 130.6, 253.8, 255.5, 205.8, 246, 218.1, 256.9,
	245.1, 209.4, 257.5, 188.6, 244.4, 248.7, 259.9, 249.8, 239.5, 264.7,
	228.4, 238.7, 255.7, 256.7, 249.6, 237.4, 224.1, 224.7, 240, 245, 208.3,
	254.5, 261, 255.4, 247.4, 237.7, 210.5, 245.2, 209, 284, 257.2, 232.5,
	218.1, 223, 241.2, 261.8, 247.8, 229.8, 212.4, 253.5, 265.6, 273.8,
	218.3, 131.9, 247.7, 243.7, 256, 200.3, 283.4, 220.6, 233.3, 250.3,
	262.5, 255.8, 272.2, 256.6, 245.2, 258.9, 246.3, 263.9, 235.6, 179.9,
	250.9, 284.4, 241.4, 255.6, 257.8, 264.7, 286, 262.1, 247.4, 254.3,
	234.2, 244.1, 222.6, 249.2, 190.1, 248.5, 243.6, 250.8, 250.4, 263,
	249.6, 242.2, 241.7, 223.5, 247.7, 219.6, 256.2, 262.1, 196.7, 206.1,
	204.8, 240.7, 217.6, 173.2, 202.2, 205.9, 209.6, 210.1, 185.8, 195.9,
	163.5, 154.8, 205.3, 192.7, 201.7, 256.5, 194.7, 221.6, 249.9, 249,
	199.2, 222.4, 425.4, 243.1, 232.2, 253.9, 247.1, 213.9, 265, 259.1,
	259.7, 215, 208, 230, 243.1, 238.3, 253.2, 231.5, 224.3, 242.6, 237.3,
	236.1, 224, 248.5, 242.4, 231.4, 245.4, 255.3, 193.5, 251.8, 258.8,
	243.6, 253.3, 222.4, 243.1, 234, 219.6, 225.1, 176.6, 276.5, 241.7,
	242, 241), miles = c(60, 221, 238.4, 213.3, 213.1, 239.2, 220.9, 218.1,
	255.7, 228.4, 236.6, 249, 236.2, 199.1, 222.6, 233.2, 233.2, 
	34.80000000000001, 234.6, 230.9, 235.7, 203, 242.2, 181.0999999999999,
	232.2, 239.7, 262.4, 242.1999999999999, 153.8000000000001, 224.4, 175,
	230.9, 237.9, 173.3000000000001, 229.3, 220, 211.6, 210.6, 222.9, 
	222.4000000000001, 222.8999999999999, 217.8, 215.3000000000002, 
	228.0999999999999, 203.5, 218.8, 251.2, 219.2, 213.5, 250.2, 239.8,
	229.0999999999999, 205.6000000000001, 240, 247.5999999999999, 224.7,
	238.5, 241.3999999999999, 205.6000000000001, 242.3999999999999, 219.7,
	212.4000000000001, 246.8, 234.0999999999999, 237.6000000000001, 
	223.3999999999999, 225.2, 242.7, 234.2, 239.3999999999999, 
	200.8000000000002, 241.6999999999998, 170.8000000000002, 
	242.8999999999999, 75.5, 227.8, 206, 192.7000000000003, 
	195.1999999999998, 174, 224.6999999999998, 148, 243.3000000000002,
	237.0999999999999, 234, 168.4000000000001, 224.5, 257.6999999999998,
	161.5, 244, 215.1000000000004, 246.1999999999998, 267.9000000000001,
	276.2999999999997, 134.3000000000002, 282.6999999999998, 
	147.8000000000002, 254.4000000000001, 223.0999999999999, 
	251.9000000000001, 252, 254.0999999999999, 222, 260, 226.5999999999999,
	232, 260.2000000000003, 244.6999999999998, 206.8000000000002, 
	220.3999999999996, 233.7000000000003, 269, 211.1999999999998, 
	235.4000000000001, 98.09999999999991, 165.2000000000003, 291.5, 
	254.2999999999997, 174.5, 238.3000000000002, 207.0999999999999, 
	250.4000000000001, 240.2999999999997, 238.5, 249.9000000000001, 
	241.5999999999999, 267.8000000000002, 234.3000000000002, 
	253.0999999999999, 279.5999999999999, 259.9000000000001, 248, 
	275.1999999999998, 222.5999999999999, 261.3000000000002, 
	244.3000000000002, 277.0999999999999, 229.7999999999997, 
	210.3000000000002, 250.9900000000002, 217.5099999999998, 267, 
	256.4000000000001, 222.5, 226.5999999999999, 253.4000000000001, 
	256.7000000000003, 244.0999999999995, 257.1000000000004, 
	224.0999999999995, 232.6000000000004, 222.3000000000002, 
	224.5999999999995, 230, 249.9000000000005, 187.3000000000002, 
	190.6999999999998, 165.5999999999995, 171, 239.8000000000002, 262,
	184, 247.1000000000004, 245.1999999999998, 227.8999999999996, 246,
	226.3000000000002, 253.4000000000005, 265.3999999999996, 202.5, 
	202.6999999999998, 270.6000000000004, 244.5999999999995, 
	281.7000000000007, 255.7999999999993, 215.5, 250.7000000000007, 
	245.6999999999998, 249.5999999999995, 228.8000000000002, 
	238.3000000000002, 249.8000000000002, 276.9799999999996, 
	262.7200000000003, 235.1000000000004, 268, 247.3999999999996, 
	268.8000000000002, 245.1999999999998, 250.6999999999998, 
	172.8000000000002, 240.6999999999998, 230.3000000000002, 
	262.1999999999998, 207.3000000000002, 253, 205.3999999999996, 
	251.7000000000007, 224.3999999999996, 217.6000000000004, 
	243.0999999999995, 237.6999999999998, 235.2000000000007, 243, 262.5,
	221.2999999999993, 270.2000000000007, 225.6999999999998, 205, 224,
	246.5, 249.3000000000002, 243.2999999999993, 240.6000000000004, 254.5,
	236.3999999999996, 244.1000000000004, 269.3000000000002, 
	227.6999999999998, 255.3000000000002, 226.1999999999998, 
	259.3999999999996, 225, 259.4000000000005, 222, 257.3000000000002,
	216.1999999999998, 251.3999999999996, 196, 161, 130.8000000000002,
	267.6999999999998, 247.6000000000004, 192.5, 207.5, 241.3999999999996,
	238.9000000000005, 248.5, 194.5999999999995, 240.9000000000005, 251.5,
	236.1999999999998, 207.8000000000002, 262.0999999999995, 
	215.9000000000005, 196.2999999999993, 207.6000000000004, 
	273.1999999999998, 177.1999999999998, 149.7000000000007, 
	269.6999999999998, 234.6999999999998, 244.6999999999998, 236, 
	258.3000000000002, 230.3999999999996, 214.6000000000004, 
	219.3000000000002, 202.5999999999995, 244.8000000000002, 
	229.8000000000002, 216.1000000000004, 207.3999999999996, 
	223.6000000000004, 255.5999999999995, 244.6000000000004, 
	214.1999999999998, 211.6000000000004, 220.6999999999998, 
	229.8999999999996, 250.8000000000002, 242.3000000000002, 
	262.0999999999995, 225.9000000000005, 154.3000000000002, 
	219.1999999999998, 231.8000000000002, 233.1999999999998, 
	225.5999999999995, 231.9000000000005, 231, 222, 203.8000000000002,
	204, 233.3999999999996, 263.6000000000004, 211.5999999999995, 
	175.4000000000005, 282.8999999999996, 239.7000000000007, 
	199.6999999999989, 239.7000000000007, 220.1000000000004, 196, 
	213.5999999999985, 212.2000000000007, 211.3999999999996, 
	223.2000000000007, 213.8999999999996, 240.6000000000004, 
	204.6000000000004, 182.1999999999989, 223.5, 196.2000000000007, 
	212.3999999999996, 241, 215.1000000000004, 199.1999999999989, 
	236.2000000000007, 251.5, 222.6000000000004, 213.6999999999989, 
	223.4000000000015, 232.5, 187, 254, 260.5999999999985, 
	246.3000000000011, 250, 245.6000000000004, 264, 220.3999999999996,
	240.1999999999989, 248.7000000000007, 251.7000000000007, 
	208.0999999999985, 255.1000000000004, 230.5, 221.2000000000007, 
	237.6000000000004, 242.8999999999996, 242.1999999999989, 
	178.3000000000011, 145.7999999999993, 235.5, 185.2000000000007, 
	234.3999999999996, 233.7999999999993, 226.4000000000015, 
	216.8999999999996, 194.6000000000004, 225.7999999999993, 
	242.6000000000004, 258.1999999999989, 273, 233.9000000000015, 
	251.6999999999989, 227, 245.8000000000011, 235.1999999999989, 
	212.1000000000004, 265.7000000000007, 233.3999999999996, 
	209.6000000000004, 250.2999999999993, 259.6000000000004, 
	216.2999999999993, 249.2000000000007, 229.3999999999996, 
	265.8999999999996, 243.7000000000007, 226.1999999999989, 237.5, 
	236.8000000000011, 248, 253, 240.1000000000004, 267.8999999999996,
	246.8999999999996, 253.3999999999996, 257.8000000000011, 
	267.7999999999993, 236.1000000000004, 241.8999999999996, 237.5, 
	258.7999999999993, 213.4000000000015, 260.7999999999993, 
	265.2000000000007, 248.5999999999985, 246.5, 220.8000000000011, 
	233.3999999999996, 136, 249.7999999999993, 289.2000000000007, 
	224.6000000000004, 235.7999999999993, 231.3000000000011, 227.5, 227.5,
	243.0999999999985, 247.9000000000015, 242.6999999999989, 
	249.6000000000004, 272.5, 130.6000000000004, 253.6999999999989, 
	255.6000000000004, 205.8000000000011, 246.2999999999993, 
	217.8999999999996, 256.8999999999996, 245.1000000000004, 
	209.3999999999996, 274.4000000000015, 188.5999999999985, 
	244.3000000000011, 248.6999999999989, 261.4000000000015, 
	249.7999999999993, 239.3999999999996, 264.7000000000007, 
	228.3999999999996, 238.7000000000007, 255.7999999999993, 
	256.7000000000007, 249.5999999999985, 237.4000000000015, 
	224.0999999999985, 224.7000000000007, 240.1000000000004, 
	244.8999999999996, 208.2999999999993, 254.7000000000007, 261, 
	255.3999999999996, 247.2000000000007, 237.6000000000004, 
	214.1999999999989, 245.2000000000007, 209, 283.8999999999996, 
	257.2000000000007, 232.5, 218.0999999999985, 223, 241.2000000000007,
	261.7999999999993, 247.8000000000011, 229.7999999999993, 
	212.3999999999996, 255, 265.6000000000004, 273.8000000000011, 
	218.2999999999993, 132.2000000000007, 247.6999999999989, 
	243.7000000000007, 256, 200.2999999999993, 283.3999999999996, 220.5,
	233.3000000000011, 250.2999999999993, 262.8000000000011, 
	255.3999999999996, 272.1999999999989, 256.6000000000004, 
	245.2000000000007, 259, 246.2999999999993, 263.8000000000011, 
	235.5999999999985, 179.9000000000015, 250.8999999999996, 
	284.3999999999996, 241.3999999999996, 255.5, 257.8999999999996, 
	264.7000000000007, 285.8999999999996, 262.1000000000004, 
	247.6000000000004, 254.2999999999993, 234.2000000000007, 
	244.1000000000004, 222.5999999999985, 249.2000000000007, 
	190.2000000000007, 251.1999999999989, 243.6000000000004, 
	250.8999999999996, 250.3999999999996, 263, 249.6000000000004, 
	252.8999999999996, 241.7000000000007, 223.6000000000004, 
	247.6000000000004, 219.5, 256.2999999999993, 262.1000000000004, 
	196.6999999999989, 206, 204.9000000000015, 240.6999999999989, 217.5,
	173.3000000000011, 202.1999999999989, 206, 209.6000000000004, 210,
	190.3999999999996, 195.8999999999996, 168.5, 154.8000000000011, 
	205.2999999999993, 192.7000000000007, 201.1000000000004, 256.5, 
	194.6999999999989, 221.6000000000004, 249.7999999999993, 
	249.1000000000004, 199.1000000000004, 223.3999999999996, 
	425.8000000000011, 243.0999999999985, 232.2000000000007, 254, 
	247.1000000000004, 212.8999999999996, 266, 259.1000000000004, 
	259.6999999999989, 215, 208, 229.9000000000015, 243.0999999999985,
	238.3000000000011, 254, 231.5, 224.2999999999993, 242.6000000000004,
	237.2000000000007, 236.0999999999985, 223.9000000000015, 248.5, 
	242.3999999999996, 231.3999999999996, 245.3999999999996, 
	255.3000000000011, 193.5, 251.7999999999993, 258.7999999999993, 
	243.6000000000004, 253.3000000000011, 222.3999999999996, 243, 234,
	219.6000000000004, 225.1999999999989, 176.6000000000004, 276.5, 
	241.7000000000007, 242, 241))
"ichar"<-
function(x)
{
	x <- as.vector(x, mode = "character")
	.C("ichar",
		as.character(x),
		length(x),
		codes = integer(sum(nchar(x))))$codes
}
"imports"<-
c(0.4285714285714286, 0.4346938775510204, 0.4448979591836735, 
	0.4591836734693878, 0.4693877551020408, 0.4897959183673469, 
	0.5204081632653061, 0.5408163265306122, 0.5510204081632653, 
	0.5714285714285714, 0.5918367346938776, 0.6122448979591837, 
	0.6530612244897959, 0.673469387755102, 0.6938775510204082, 
	0.7244897959183673, 0.7551020408163265, 0.7857142857142857, 
	0.8163265306122449, 0.8469387755102041, 0.8673469387755102, 
	0.8979591836734694, 0.9183673469387755, 0.9387755102040816, 
	0.9591836734693878, 0.9693877551020408, 0.9693877551020408, 
	0.9693877551020408, 0.9693877551020408, 0.9693877551020408, 
	0.9693877551020408, 0.9693877551020408, 0.9693877551020408, 
	0.9693877551020408, 0.9693877551020408, 0.9693877551020408, 
	0.9714285714285714, 0.973469387755102, 0.9755102040816327, 
	0.9775510204081633, 0.9795918367346939, 0.9795918367346939, 
	0.9795918367346939, 0.9795918367346939, 0.9795918367346939, 
	0.9795918367346939, 0.9795918367346939, 0.9693877551020408, 
	0.9591836734693878, 0.9693877551020408, 0.9591836734693878, 
	0.9387755102040816, 0.9081632653061224, 0.8775510204081633, 
	0.8510204081632653, 0.826530612244898, 0.8306122448979592, 
	0.8469387755102041, 0.8877551020408163, 0.9285714285714286, 1, 
	1.102040816326531, 1.326530612244898, 1.395918367346939, 
	1.446938775510204, 1.479591836734694, 1.5, 1.520408163265306, 
	1.526530612244898, 1.53469387755102, 1.540816326530612, 
	1.540816326530612, 1.540816326530612, 1.540816326530612, 
	1.540816326530612, 1.540816326530612, 1.544897959183673, 
	1.548979591836735, 1.553061224489796, 1.557142857142857, 
	1.561224489795918)
"income.statement"<-
function(sales, cost.of.goods.sold, other.costs, other.lab)
{
	par(mar = c(6, 10, 4, 2))
	margin <- sales - cost.of.goods.sold
	income <- margin - sum(other.costs)
	m <- matrix(c(0, 	# (invisible) bottoms of bars
	margin, 0, income + rev(cumsum(c(0, rev(other.costs[-1])))), 0, sales,
		# tops of bars
	cost.of.goods.sold, margin, other.costs, income), byrow = T, nrow = 2)
	bar.label <- c("Sales", "Costs of Goods Sold", "Gross Margin", 
		other.lab, "Net Income Before Tax")
	o <- rev(1:ncol(m))
	barplot(m[, o], horiz = T, col = 0:1, space = 0.9, names = bar.label[
		o])
	title("Statement of Income")
}
"input"<-
function(prompt = "Input: "){
	cmd <- paste("while true; do echo -e \"", prompt, 
		"\\c\" 1>&2; read line; if test -z \"$line\"; then exit; fi; echo $line;done",
		sep = "")
	return(unix(cmd, output = T))
}
"is.dir"<-
function(dir)
unix(paste("test -d", dir), output = F) == 0
"jdate"<-
function()
{
	months <- c("Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug",
		"Sep", "Oct", "Nov", "Dec")
	now <- mdy()
	m <- match(now[1], months)
	d <- as.numeric(now[2])
	y <- as.numeric(now[3])
	julian(m, d, y)
}
jitter <- function(x,amount=NULL){
	if(is.null(amount)){
		diffs <- diff(sort(x))
		amount <- min(diffs[diffs>0])/2
	}
	x+runif(length(x),-amount,amount)
}
"julian"<-
function(m, d, y)
{
	y <- y + ifelse(m > 2, 0, -1)
	m <- m + ifelse(m > 2, -3, 9)
	c <- y %/% 100
	ya <- y - 100 * c
	(146097 * c) %/% 4 + (1461 * ya) %/% 4 + (153 * m + 2) %/% 5 + d + 
		1721119
}
"larger"<-
function(x, y)
{
	nx <- length(x)
	ny <- length(y)
	if(nx > ny) y <- rep(y, length = nx)
	else if(nx < ny) x <- rep(x, length = ny)
	which <- y > x
	x[which] <- y[which]
	x
}
"lock.axis"<-
function(which, umin, umax, tmin, tmax, tnint)
{
	usr <- par("usr")
	switch(which,
		x = par(usr = c(umin, umax, usr[3:4]), xaxs = "d", xaxp = c(
			tmin, tmax, tnint)),
		y = par(usr = c(usr[1:2], umin, umax), yaxs = "d", yaxp = c(
			tmin, tmax, tnint)),
		stop("Either x or y axis must be specified"))
	invisible()
}
"lscollection"<-
function()
unix("ls -aF .Data | grep '^\\..*/' | sed -e '1,2d' -e '/.Help/d' -e 's/^.//' -e 's/.$//'")
"make"<-
function(x)
{
	object.file <- paste(substitute(x), ".o", sep = "")
	if(unix(paste("make", object.file), output = F))
		stop()
	dyn.load(object.file)
}
"mdy"<-
function()
unix("date|sed 's/  */\\n/g'")[c(2,3,6)]
"mixplot"<-
function(x, y, z, xlab = "", ylab = "", zlab = "", largest = 1)
{
	frame()
	par(pty = "s", usr = c(0, 1, 0, 1))
	lines(c(0, 1, 0.5, 0), c(0, 0, 0.866, 0))
	size <- x + y + z
	xx <- (y + 0.5 * z)/size
	yy <- (0.866 * z)/size
	size <- sqrt(size/max(size))
	symbols(xx, yy, circles = size, inch = largest, add = T, err = -1,
		xlab = "", ylab = "")
	mtext(xlab, side = 1, line = 1, adj = 0)
	mtext(ylab, side = 3, line = 1, adj = 0.5)
	mtext(zlab, side = 4, line = 1, adj = 0)
}
"month.day.year"<-
function(julian)
{
	j <- julian - 1721119
	y <- (4 * j - 1) %/% 146097
	j <- 4 * j - 1 - 146097 * y
	d <- j %/% 4
	j <- (4 * d + 3) %/% 1461
	d <- 4 * d + 3 - 1461 * j
	d <- (d + 4) %/% 4
	m <- (5 * d - 3) %/% 153
	d <- 5 * d - 3 - 153 * m
	d <- (d + 5) %/% 5
	y <- 100 * y + j
	y <- y + ifelse(m < 10, 0, 1)
	m <- m + ifelse(m < 10, 3, -9)
	list(month = m, day = d, year = y)
}
month.length <- c(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31)
months <- c("January", "February",
"March", "April",
"May", "June",
"July", "August",
"September", "October",
"November", "December")
"multi.match"<-
function(patterns, text)
{
	cat(text, file = "...in", sep = "\n")
	on.exit({
		unlink("...in")
		unlink("...pgm")
	}
	)
	pgm <- cat("{", paste("if( $0 ~ /", patterns, "/) print 1; else print \"\"",
		sep = ""), "}", sep = "\n", file = "...pgm")
	output <- as.logical(unix("awk -f ...pgm ...in"))
	d <- c(length(patterns), length(text))
	if(min(d) > 1) {
		dim(output) <- d
		dimnames(output) <- list(Patterns = patterns, Text = text)
	}
	output
}


"myplot"<-
function(x, y, xlim = NULL, ylim = NULL, xlab = as.character(substitute(x)),
	ylab = as.character(substitute(y)))
{
	frame()
	if(missing(xlim))
		xlim <- range(x)
	if(missing(ylim))
		ylim <- range(y)
	xticks <- pretty(xlim)
	yticks <- pretty(ylim)
	par(usr = c(range(xticks), range(yticks)))
	points(x, y)
	axis(side = 1, at = xticks)
	axis(side = 2, at = yticks)
	mtext(side = 1, line = 3, xlab)
	mtext(side = 2, line = 3, ylab)
	box()
}
"nchar"<-
function(s)
as.numeric(unix("awk '{print length}'", input = s))
"numbar"<-
function(x, ...)
{
	xmid <- barplot(x, ..., col = 1)
	r <- diff(range(c(0, x))) * ifelse(x < 0, -1, 1)
	text(xmid, x + 0.03 * r, signif(x, 3))
}
"persp.xyz"<-
function(x, y, z, bottom = 0)
{
	i <- interp(x, y, z)$z
	r <- range(i)	# scale to 0,1
	i <- ((i - r[1])/(r[2] - r[1]))
	i[is.na(i)] <- bottom
	i
}
"phone.number"<-
function(text)
{
	file <- tempfile("grep")
	on.exit(unlink(file))
	cat(text, file = file, sep = "\n")
	unix(paste("tr 'abcdefghijklmnoprstuvwxy' '222333444555666777888999' <",
		file))
}
"quantile.plot"<-
function(x)
plot(ppoints(x), sort(x), xlab = "fraction of data", ylab = 
	"sorted values of data")
"quantum"<-
function(f, outliers = 0)
{
	library.dynam("examples", "quantum.o")
	f <- unique(abs(f[!is.na(f)]))
	if(outliers > length(f)/2)
		stop("unusually large number of outliers")
	D <- find.D(f)
	N <- f * D
	.C("quantum",
		as.integer(round(N)),
		as.integer(length(f)),
		as.integer(D),
		as.integer(outliers),
		d = integer(1 + outliers))$d
}
"quantum.out"<-
function(f, d)
{
	D <- find.D(f)
	seq(along = f)[abs(round(d * f)/d - f) > 1/(2 * D)]
}
"quantum.prob"<-
function(f, d)
{
	D <- find.D(f)
 - (length(f) - seq(0, length = length(d))) * log10(d/D)
}
"quick.print"<-
function(...)
{
	on.exit(options(old))
	old <- options(digits = 2)
	z <- list(...)
	nn <- names(z)
	if(is.null(nn))
		nn <- rep("", length(z))
	index <- seq(z)
	nn[nchar(nn) == 0] <- index[nchar(nn) == 0]
	for(i in index) {
		cat(nn[i], ":\n", sep = "")
		print(z[[i]])
		cat("\n")
	}
	invisible()
}
"quiz"<-
function(questions, answers)
{
	if(length(questions) < 1)
		return()
	right <- logical(length(questions))
	for(i in sample(1:length(questions))) {
		cat(questions[i], "? ")
		right[i] <- readline() == answers[i]
		if(right[i])
			cat("Right!\n")
		else cat("No, the answer is:", answers[i], "\n")
	}
	quiz(questions[!right], answers[!right])
}
"randu"<-
function(n, seed = 12345)
{
	library.dynam("examples", "randu.o")
	.C("randu",
		as.integer(seed),
		as.integer(n),
		result = single(n))$result
}
"row.labels"<-
function(x)
{
	x <- as.matrix(x)
	ll <- dimnames(x)[[1]]
	if(is.null(ll))
		ll <- character(dim(x)[1])
	ll
}
"row.labels<-"<-
function(x, labels)
{
	x <- as.matrix(x)
	dn <- dimnames(x)
	nrow <- dim(x)[1]
	if(is.null(dn))
		dn <- list(character(nrow), NULL)
	else if(is.null(dn[[1]]))
		dn[[1]] <- character(nrow)
	dn[[1]][] <- labels
	dimnames(x) <- dn
	x
}
"shaded.ts"<-
function(x, color = 1)
{
	plot(x, ylab = "", type = "n", bty = "l")
	polygon(c(time(x), tsp(x)[2:1]), c(x, par("usr")[c(3,3)]), col = 
		color)
}
"sign"<-
function(y)
(y > 0) - (y < 0)
"signum"<-
function(z)if(z == 0) 0 else z/Mod(z)
"sleep"<-
function(n)
unix(paste("sleep", n))
"string.match"<-
function(pattern, text)
{
	command <- paste("fgrep -n -e '", pattern, "'|sed 's/:.*//'", sep = "")
		
	as.numeric(unix(command, text))
}
"substring"<-
function(text, first, last)
{
	library.dynam("examples", "substrs.o")
	storage.mode(text) <- "character"
	first <- rep(first, length(text))
	last <- rep(last, length(text))
	if(any(first > last))
		stop("must have first <= last")
	.C("substrs",
		text = text,
		length(text),
		as.integer(first),
		as.integer(last))$text
}
"tbl"<-
function(x, file = "tbl.out")
{
	d <- dim(x)
	if(length(d)!=2)
		stop("argument x must be a matrix")
	nfield <- d[2]
	table <- character(d[1])
	for(i in 1:d[1]) table[i] <- paste(x[i,  ], collapse = "\t")
	format <- rep(if(is.numeric(x))
		"n"
	else "l", nfield)
	seps <- c(rep("|", nfield - 1), ".")
	format <- paste(format, seps, collapse = " ")
	options <- "center, box;"
	cat(file = file, ".TS", options, format, table, ".TE", sep = "\n")
}
"theoretical.plot"<-
function(x, quantile.function, ..., xlab = paste(substitute(quantile.function),
	"distribution"), ylab = "Sorted Data")
plot(quantile.function(ppoints(x), ...), sort(x), xlab = xlab, ylab = ylab)
"unlock.axis"<-
function(which)
switch(which,
	x = par(xaxs = "r"),
	y = par(yaxs = "r"),
	stop("Either x or y axis must be specified"))
"zero"<-
function(f, guesses, tol = 1e-07)
{
	library.dynam("examples", "zero_find.o")
	f.check <- function(x)
	{
		x <- U(x)
		if(!is.numeric(x))
			stop("Need a numeric result")
		as.double(x)
	}
	assign("U", f, frame = 1)
	z <- .C("zero_find",
		list(f.check),
		ans = as.double(guesses),
		as.double(tol))
	z$ans[1]
}
