diff --git a/compiler/GHC/Driver/Pipeline/Execute.hs b/compiler/GHC/Driver/Pipeline/Execute.hs
index aeacd9e9a019cfe937a65e8de5a126e99733aab9..bd2f453ec46aa3c6d816e5d7d8aeacb29fc11d34 100644
--- a/compiler/GHC/Driver/Pipeline/Execute.hs
+++ b/compiler/GHC/Driver/Pipeline/Execute.hs
@@ -602,7 +602,7 @@ runUnlitPhase hsc_env input_fn output_fn = do
        -- GHC.HsToCore.Ticks.isGoodTickSrcSpan where we check that the filename in
        -- a SrcLoc is the same as the source filename, the two will
        -- look bogusly different. See test:
-       -- libraries/hpc/tests/function/subdir/tough2.hs
+       -- testsuite/tests/hpc/function/subdir/tough2.hs
        escape ('\\':cs) = '\\':'\\': escape cs
        escape ('\"':cs) = '\\':'\"': escape cs
        escape ('\'':cs) = '\\':'\'': escape cs
diff --git a/libraries/hpc b/libraries/hpc
index 0ad03de570771bb04f383a04886bc58071b50b7b..60424b55b6c44254eab3887bb76bf7997aefa8ba 160000
--- a/libraries/hpc
+++ b/libraries/hpc
@@ -1 +1 @@
-Subproject commit 0ad03de570771bb04f383a04886bc58071b50b7b
+Subproject commit 60424b55b6c44254eab3887bb76bf7997aefa8ba
diff --git a/testsuite/tests/hpc/.gitignore b/testsuite/tests/hpc/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..9846ea3d6130f9acb7180e5a1876e48980fc14f5
--- /dev/null
+++ b/testsuite/tests/hpc/.gitignore
@@ -0,0 +1,20 @@
+.hpc*/
+*.o
+*.hi
+*.comp.std*
+*.run.std*
+*.eventlog
+*.genscript
+*.exe
+*.hs.html
+hpc_index*.html
+
+# all *.tix except hpc_sample.tix
+*.tix
+!hpc_sample.tix
+
+# specific files
+/fork/hpc_fork
+/function/tough
+/function2/tough2
+/simple/hpc001
diff --git a/testsuite/tests/hpc/fork/Makefile b/testsuite/tests/hpc/fork/Makefile
new file mode 100644
index 0000000000000000000000000000000000000000..4a268530f13bc7f70d03965dacf45d8a0b4a720e
--- /dev/null
+++ b/testsuite/tests/hpc/fork/Makefile
@@ -0,0 +1,4 @@
+TOP=../../..
+include $(TOP)/mk/boilerplate.mk
+include $(TOP)/mk/test.mk
+
diff --git a/testsuite/tests/hpc/fork/hpc_fork.hs b/testsuite/tests/hpc/fork/hpc_fork.hs
new file mode 100644
index 0000000000000000000000000000000000000000..ac912a83f21b812e897cc5e4464771c5c75a14f4
--- /dev/null
+++ b/testsuite/tests/hpc/fork/hpc_fork.hs
@@ -0,0 +1,10 @@
+module Main where
+
+import System.Posix.Process
+import Control.Concurrent
+
+main = do
+  pid1 <- forkProcess $ do threadDelay 100000
+  pid2 <- forkProcess $ do threadDelay 100000
+  print ()
+
diff --git a/testsuite/tests/hpc/fork/hpc_fork.stdout b/testsuite/tests/hpc/fork/hpc_fork.stdout
new file mode 100644
index 0000000000000000000000000000000000000000..52f1f1b6e02fb5f967dc36e598a266c9983e3bed
--- /dev/null
+++ b/testsuite/tests/hpc/fork/hpc_fork.stdout
@@ -0,0 +1,124 @@
+()
+
+
+ 53% expressions used (7/13)
+100% boolean coverage (0/0)
+     100% guards (0/0)
+     100% 'if' conditions (0/0)
+     100% qualifiers (0/0)
+100% alternatives used (0/0)
+100% local declarations used (0/0)
+100% top-level declarations used (1/1)
+
+
+-----<module Main>-----
+ 53% expressions used (7/13)
+100% boolean coverage (0/0)
+     100% guards (0/0)
+     100% 'if' conditions (0/0)
+     100% qualifiers (0/0)
+100% alternatives used (0/0)
+100% local declarations used (0/0)
+100% top-level declarations used (1/1)
+
+
+Writing: Main.hs.html
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<style type="text/css">
+span.lineno { color: white; background: #aaaaaa; border-right: solid white 12px }
+span.nottickedoff { background: yellow}
+span.istickedoff { background: white }
+span.tickonlyfalse { margin: -1px; border: 1px solid #f20913; background: #f20913 }
+span.tickonlytrue  { margin: -1px; border: 1px solid #60de51; background: #60de51 }
+span.funcount { font-size: small; color: orange; z-index: 2; position: absolute; right: 20 }
+span.decl { font-weight: bold }
+span.spaces    { background: white }
+</style>
+</head>
+<body>
+<pre>
+<span class="decl"><span class="nottickedoff">never executed</span> <span class="tickonlytrue">always true</span> <span class="tickonlyfalse">always false</span></span>
+</pre>
+<pre>
+<span class="lineno">    1 </span>module Main where
+<span class="lineno">    2 </span>
+<span class="lineno">    3 </span>import System.Posix.Process
+<span class="lineno">    4 </span>import Control.Concurrent
+<span class="lineno">    5 </span>
+<span class="lineno">    6 </span><span class="decl"><span class="istickedoff">main = do</span>
+<span class="lineno">    7 </span><span class="spaces">  </span><span class="istickedoff">pid1 &lt;- forkProcess $ <span class="nottickedoff">do threadDelay 100000</span></span>
+<span class="lineno">    8 </span><span class="spaces">  </span><span class="istickedoff">pid2 &lt;- forkProcess $ <span class="nottickedoff">do threadDelay 100000</span></span>
+<span class="lineno">    9 </span><span class="spaces">  </span><span class="istickedoff">print ()</span></span>
+<span class="lineno">   10 </span>
+
+</pre>
+</body>
+</html>
+Writing: hpc_index.html
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><style type="text/css">table.bar { background-color: #f25913; }
+td.bar { background-color: #60de51;  }
+td.invbar { background-color: #f25913;  }
+table.dashboard { border-collapse: collapse  ; border: solid 1px black }
+.dashboard td { border: solid 1px black }
+.dashboard th { border: solid 1px black }
+</style>
+</head><body><table class="dashboard" width="100%" border=1>
+<tr><th rowspan=2><a href="hpc_index.html">module</a></th><th colspan=3><a href="hpc_index_fun.html">Top Level Definitions</a></th><th colspan=3><a href="hpc_index_alt.html">Alternatives</a></th><th colspan=3><a href="hpc_index_exp.html">Expressions</a></th></tr><tr><th>%</th><th colspan=2>covered / total</th><th>%</th><th colspan=2>covered / total</th><th>%</th><th colspan=2>covered / total</th></tr><tr>
+<td>&nbsp;&nbsp;<tt>module <a href="Main.hs.html">Main</a></tt></td>
+<td align="right">100%</td><td>1/1</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="100%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">-&nbsp;</td><td>0/0</td><td width=100>&nbsp;</td><td align="right">53%</td><td>7/13</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="53%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
+<tr></tr><tr style="background: #e0e0e0">
+<th align=left>&nbsp;&nbsp;Program Coverage Total</tt></th>
+<td align="right">100%</td><td>1/1</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="100%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">-&nbsp;</td><td>0/0</td><td width=100>&nbsp;</td><td align="right">53%</td><td>7/13</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="53%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
+</table></body></html>
+Writing: hpc_index_fun.html
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><style type="text/css">table.bar { background-color: #f25913; }
+td.bar { background-color: #60de51;  }
+td.invbar { background-color: #f25913;  }
+table.dashboard { border-collapse: collapse  ; border: solid 1px black }
+.dashboard td { border: solid 1px black }
+.dashboard th { border: solid 1px black }
+</style>
+</head><body><table class="dashboard" width="100%" border=1>
+<tr><th rowspan=2><a href="hpc_index.html">module</a></th><th colspan=3><a href="hpc_index_fun.html">Top Level Definitions</a></th><th colspan=3><a href="hpc_index_alt.html">Alternatives</a></th><th colspan=3><a href="hpc_index_exp.html">Expressions</a></th></tr><tr><th>%</th><th colspan=2>covered / total</th><th>%</th><th colspan=2>covered / total</th><th>%</th><th colspan=2>covered / total</th></tr><tr>
+<td>&nbsp;&nbsp;<tt>module <a href="Main.hs.html">Main</a></tt></td>
+<td align="right">100%</td><td>1/1</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="100%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">-&nbsp;</td><td>0/0</td><td width=100>&nbsp;</td><td align="right">53%</td><td>7/13</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="53%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
+<tr></tr><tr style="background: #e0e0e0">
+<th align=left>&nbsp;&nbsp;Program Coverage Total</tt></th>
+<td align="right">100%</td><td>1/1</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="100%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">-&nbsp;</td><td>0/0</td><td width=100>&nbsp;</td><td align="right">53%</td><td>7/13</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="53%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
+</table></body></html>
+Writing: hpc_index_alt.html
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><style type="text/css">table.bar { background-color: #f25913; }
+td.bar { background-color: #60de51;  }
+td.invbar { background-color: #f25913;  }
+table.dashboard { border-collapse: collapse  ; border: solid 1px black }
+.dashboard td { border: solid 1px black }
+.dashboard th { border: solid 1px black }
+</style>
+</head><body><table class="dashboard" width="100%" border=1>
+<tr><th rowspan=2><a href="hpc_index.html">module</a></th><th colspan=3><a href="hpc_index_fun.html">Top Level Definitions</a></th><th colspan=3><a href="hpc_index_alt.html">Alternatives</a></th><th colspan=3><a href="hpc_index_exp.html">Expressions</a></th></tr><tr><th>%</th><th colspan=2>covered / total</th><th>%</th><th colspan=2>covered / total</th><th>%</th><th colspan=2>covered / total</th></tr><tr>
+<td>&nbsp;&nbsp;<tt>module <a href="Main.hs.html">Main</a></tt></td>
+<td align="right">100%</td><td>1/1</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="100%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">-&nbsp;</td><td>0/0</td><td width=100>&nbsp;</td><td align="right">53%</td><td>7/13</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="53%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
+<tr></tr><tr style="background: #e0e0e0">
+<th align=left>&nbsp;&nbsp;Program Coverage Total</tt></th>
+<td align="right">100%</td><td>1/1</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="100%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">-&nbsp;</td><td>0/0</td><td width=100>&nbsp;</td><td align="right">53%</td><td>7/13</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="53%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
+</table></body></html>
+Writing: hpc_index_exp.html
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><style type="text/css">table.bar { background-color: #f25913; }
+td.bar { background-color: #60de51;  }
+td.invbar { background-color: #f25913;  }
+table.dashboard { border-collapse: collapse  ; border: solid 1px black }
+.dashboard td { border: solid 1px black }
+.dashboard th { border: solid 1px black }
+</style>
+</head><body><table class="dashboard" width="100%" border=1>
+<tr><th rowspan=2><a href="hpc_index.html">module</a></th><th colspan=3><a href="hpc_index_fun.html">Top Level Definitions</a></th><th colspan=3><a href="hpc_index_alt.html">Alternatives</a></th><th colspan=3><a href="hpc_index_exp.html">Expressions</a></th></tr><tr><th>%</th><th colspan=2>covered / total</th><th>%</th><th colspan=2>covered / total</th><th>%</th><th colspan=2>covered / total</th></tr><tr>
+<td>&nbsp;&nbsp;<tt>module <a href="Main.hs.html">Main</a></tt></td>
+<td align="right">100%</td><td>1/1</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="100%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">-&nbsp;</td><td>0/0</td><td width=100>&nbsp;</td><td align="right">53%</td><td>7/13</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="53%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
+<tr></tr><tr style="background: #e0e0e0">
+<th align=left>&nbsp;&nbsp;Program Coverage Total</tt></th>
+<td align="right">100%</td><td>1/1</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="100%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">-&nbsp;</td><td>0/0</td><td width=100>&nbsp;</td><td align="right">53%</td><td>7/13</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="53%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
+</table></body></html>
+
+
diff --git a/testsuite/tests/hpc/fork/test.T b/testsuite/tests/hpc/fork/test.T
new file mode 100644
index 0000000000000000000000000000000000000000..3ff54d2d6989c5d238385bcd743f97124837f990
--- /dev/null
+++ b/testsuite/tests/hpc/fork/test.T
@@ -0,0 +1,13 @@
+setTestOpts([omit_ways(ghci_ways + ['threaded2']), when(fast(), skip), js_skip])
+
+hpc_prefix = "perl hpcrun.pl --clear --exeext={exeext} --hpc={hpc}"
+
+test('hpc_fork',
+     [extra_files(['../hpcrun.pl']),
+      when(opsys('mingw32'), skip), # no forkProcess on Windows
+      # profiling and forkProcess don't go well together. See #16907, #11645,
+      # and #8862.
+      req_process,
+      omit_ways(prof_ways),
+      cmd_prefix(hpc_prefix)],
+     compile_and_run, ['-fhpc'])
diff --git a/testsuite/tests/hpc/function/Makefile b/testsuite/tests/hpc/function/Makefile
new file mode 100644
index 0000000000000000000000000000000000000000..4a268530f13bc7f70d03965dacf45d8a0b4a720e
--- /dev/null
+++ b/testsuite/tests/hpc/function/Makefile
@@ -0,0 +1,4 @@
+TOP=../../..
+include $(TOP)/mk/boilerplate.mk
+include $(TOP)/mk/test.mk
+
diff --git a/testsuite/tests/hpc/function/test.T b/testsuite/tests/hpc/function/test.T
new file mode 100644
index 0000000000000000000000000000000000000000..24dfa70f83b8fce5a43b6fde27fe8185e20b1578
--- /dev/null
+++ b/testsuite/tests/hpc/function/test.T
@@ -0,0 +1,9 @@
+setTestOpts([omit_ghci, when(fast(), skip), js_skip])
+
+hpc_prefix = "perl hpcrun.pl --clear --exeext={exeext} --hpc={hpc}"
+
+test('tough',
+     [extra_files(['../hpcrun.pl']),
+      cmd_prefix(hpc_prefix),
+      when(arch('wasm32'), fragile(23243))],
+     compile_and_run, ['-fhpc'])
diff --git a/testsuite/tests/hpc/function/tough.hs b/testsuite/tests/hpc/function/tough.hs
new file mode 100644
index 0000000000000000000000000000000000000000..ed3f3a01fb2ac4383eddc0c43594b5b94df43e74
--- /dev/null
+++ b/testsuite/tests/hpc/function/tough.hs
@@ -0,0 +1,47 @@
+import Control.Exception as E
+
+-- This test shows what hpc can really do.
+
+main = do
+  print ("Hello")
+  foo "Hello"
+  E.catch (print (badCase 22 44))
+          (\ e -> print (e :: E.ErrorCall))
+  E.catch (print (badCase 22 (error "Foo")))
+          (\ e -> print (e :: E.ErrorCall))
+  E.catch (print "Bark")
+          (\ e -> print (e :: E.ErrorCall))
+  (_,_) <- return $ ("Hello","World")
+  return ()
+  () <- return ()
+  t <- case () of
+    _ | otherwoz -> return "Hello"
+    _             -> error "Bad Thing Happened"
+  t <- case () of
+    _ | otherwise -> return "Hello"
+    _              -> error "Bad Thing Happened"
+  t <- case () of
+    _ | otherwise 
+      , False      -> error "Bad Thing Happened"
+    _              -> return "Hello"
+  print t
+  print foo2
+
+foo x = do
+  print x
+  return ()
+
+unused_ a = a
+
+badCase :: Int -> Int -> Int
+badCase a b = 
+        if a > 100 
+        then error "badCase" 
+        else if a > 1000 
+             then 1 
+             else badCase (a + 1) (b - 1)
+
+
+foo2 = (1,2, if True then 3 else 4)
+
+otherwoz = True
diff --git a/testsuite/tests/hpc/function/tough.stdout b/testsuite/tests/hpc/function/tough.stdout
new file mode 100644
index 0000000000000000000000000000000000000000..01e286b125e9a60b3c83ec5fda4b9577ee42efa3
--- /dev/null
+++ b/testsuite/tests/hpc/function/tough.stdout
@@ -0,0 +1,171 @@
+"Hello"
+"Hello"
+badCase
+CallStack (from HasCallStack):
+  error, called at tough.hs:39:14 in main:Main
+badCase
+CallStack (from HasCallStack):
+  error, called at tough.hs:39:14 in main:Main
+"Bark"
+"Hello"
+(1,2,3)
+
+
+ 71% expressions used (68/95)
+ 14% boolean coverage (1/7)
+       0% guards (0/4), 3 always True, 1 always False
+      33% 'if' conditions (1/3), 1 always True, 1 always False
+     100% qualifiers (0/0)
+ 58% alternatives used (7/12)
+100% local declarations used (0/0)
+ 83% top-level declarations used (5/6)
+
+
+-----<module Main>-----
+ 71% expressions used (68/95)
+ 14% boolean coverage (1/7)
+       0% guards (0/4), 3 always True, 1 always False
+      33% 'if' conditions (1/3), 1 always True, 1 always False
+     100% qualifiers (0/0)
+ 58% alternatives used (7/12)
+100% local declarations used (0/0)
+ 83% top-level declarations used (5/6)
+
+
+Writing: Main.hs.html
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<style type="text/css">
+span.lineno { color: white; background: #aaaaaa; border-right: solid white 12px }
+span.nottickedoff { background: yellow}
+span.istickedoff { background: white }
+span.tickonlyfalse { margin: -1px; border: 1px solid #f20913; background: #f20913 }
+span.tickonlytrue  { margin: -1px; border: 1px solid #60de51; background: #60de51 }
+span.funcount { font-size: small; color: orange; z-index: 2; position: absolute; right: 20 }
+span.decl { font-weight: bold }
+span.spaces    { background: white }
+</style>
+</head>
+<body>
+<pre>
+<span class="decl"><span class="nottickedoff">never executed</span> <span class="tickonlytrue">always true</span> <span class="tickonlyfalse">always false</span></span>
+</pre>
+<pre>
+<span class="lineno">    1 </span>import Control.Exception as E
+<span class="lineno">    2 </span>
+<span class="lineno">    3 </span>-- This test shows what hpc can really do.
+<span class="lineno">    4 </span>
+<span class="lineno">    5 </span><span class="decl"><span class="istickedoff">main = do</span>
+<span class="lineno">    6 </span><span class="spaces">  </span><span class="istickedoff">print (&quot;Hello&quot;)</span>
+<span class="lineno">    7 </span><span class="spaces">  </span><span class="istickedoff">foo &quot;Hello&quot;</span>
+<span class="lineno">    8 </span><span class="spaces">  </span><span class="istickedoff">E.catch (print (badCase 22 <span class="nottickedoff">44</span>))</span>
+<span class="lineno">    9 </span><span class="spaces">          </span><span class="istickedoff">(\ e -&gt; print (e :: E.ErrorCall))</span>
+<span class="lineno">   10 </span><span class="spaces">  </span><span class="istickedoff">E.catch (print (badCase 22 <span class="nottickedoff">(error &quot;Foo&quot;)</span>))</span>
+<span class="lineno">   11 </span><span class="spaces">          </span><span class="istickedoff">(\ e -&gt; print (e :: E.ErrorCall))</span>
+<span class="lineno">   12 </span><span class="spaces">  </span><span class="istickedoff">E.catch (print &quot;Bark&quot;)</span>
+<span class="lineno">   13 </span><span class="spaces">          </span><span class="istickedoff"><span class="nottickedoff">(\ e -&gt; print (e :: E.ErrorCall))</span></span>
+<span class="lineno">   14 </span><span class="spaces">  </span><span class="istickedoff">(_,_) &lt;- return $ (<span class="nottickedoff">&quot;Hello&quot;</span>,<span class="nottickedoff">&quot;World&quot;</span>)</span>
+<span class="lineno">   15 </span><span class="spaces">  </span><span class="istickedoff">return <span class="nottickedoff">()</span></span>
+<span class="lineno">   16 </span><span class="spaces">  </span><span class="istickedoff">() &lt;- return ()</span>
+<span class="lineno">   17 </span><span class="spaces">  </span><span class="istickedoff">t &lt;- case <span class="nottickedoff">()</span> of</span>
+<span class="lineno">   18 </span><span class="spaces">    </span><span class="istickedoff">_ | <span class="tickonlytrue">otherwoz</span> -&gt; return <span class="nottickedoff">&quot;Hello&quot;</span></span>
+<span class="lineno">   19 </span><span class="spaces">    </span><span class="istickedoff">_             -&gt; <span class="nottickedoff">error &quot;Bad Thing Happened&quot;</span></span>
+<span class="lineno">   20 </span><span class="spaces">  </span><span class="istickedoff">t &lt;- case <span class="nottickedoff">()</span> of</span>
+<span class="lineno">   21 </span><span class="spaces">    </span><span class="istickedoff">_ | <span class="tickonlytrue">otherwise</span> -&gt; return <span class="nottickedoff">&quot;Hello&quot;</span></span>
+<span class="lineno">   22 </span><span class="spaces">    </span><span class="istickedoff">_              -&gt; <span class="nottickedoff">error &quot;Bad Thing Happened&quot;</span></span>
+<span class="lineno">   23 </span><span class="spaces">  </span><span class="istickedoff">t &lt;- case <span class="nottickedoff">()</span> of</span>
+<span class="lineno">   24 </span><span class="spaces">    </span><span class="istickedoff">_ | <span class="tickonlytrue">otherwise</span> </span>
+<span class="lineno">   25 </span><span class="spaces">      </span><span class="istickedoff">, <span class="tickonlyfalse">False</span>      -&gt; <span class="nottickedoff">error &quot;Bad Thing Happened&quot;</span></span>
+<span class="lineno">   26 </span><span class="spaces">    </span><span class="istickedoff">_              -&gt; return &quot;Hello&quot;</span>
+<span class="lineno">   27 </span><span class="spaces">  </span><span class="istickedoff">print t</span>
+<span class="lineno">   28 </span><span class="spaces">  </span><span class="istickedoff">print foo2</span></span>
+<span class="lineno">   29 </span>
+<span class="lineno">   30 </span><span class="decl"><span class="istickedoff">foo x = do</span>
+<span class="lineno">   31 </span><span class="spaces">  </span><span class="istickedoff">print x</span>
+<span class="lineno">   32 </span><span class="spaces">  </span><span class="istickedoff">return <span class="nottickedoff">()</span></span></span>
+<span class="lineno">   33 </span>
+<span class="lineno">   34 </span><span class="decl"><span class="nottickedoff">unused_ a = a</span></span>
+<span class="lineno">   35 </span>
+<span class="lineno">   36 </span>badCase :: Int -&gt; Int -&gt; Int
+<span class="lineno">   37 </span><span class="decl"><span class="istickedoff">badCase a b = </span>
+<span class="lineno">   38 </span><span class="spaces">        </span><span class="istickedoff">if a &gt; 100 </span>
+<span class="lineno">   39 </span><span class="spaces">        </span><span class="istickedoff">then error &quot;badCase&quot; </span>
+<span class="lineno">   40 </span><span class="spaces">        </span><span class="istickedoff">else if <span class="tickonlyfalse">a &gt; 1000</span> </span>
+<span class="lineno">   41 </span><span class="spaces">             </span><span class="istickedoff">then <span class="nottickedoff">1</span> </span>
+<span class="lineno">   42 </span><span class="spaces">             </span><span class="istickedoff">else badCase (a + 1) <span class="nottickedoff">(b - 1)</span></span></span>
+<span class="lineno">   43 </span>
+<span class="lineno">   44 </span>
+<span class="lineno">   45 </span><span class="decl"><span class="istickedoff">foo2 = (1,2, if <span class="tickonlytrue">True</span> then 3 else <span class="nottickedoff">4</span>)</span></span>
+<span class="lineno">   46 </span>
+<span class="lineno">   47 </span><span class="decl"><span class="istickedoff">otherwoz = True</span></span>
+
+</pre>
+</body>
+</html>
+Writing: hpc_index.html
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><style type="text/css">table.bar { background-color: #f25913; }
+td.bar { background-color: #60de51;  }
+td.invbar { background-color: #f25913;  }
+table.dashboard { border-collapse: collapse  ; border: solid 1px black }
+.dashboard td { border: solid 1px black }
+.dashboard th { border: solid 1px black }
+</style>
+</head><body><table class="dashboard" width="100%" border=1>
+<tr><th rowspan=2><a href="hpc_index.html">module</a></th><th colspan=3><a href="hpc_index_fun.html">Top Level Definitions</a></th><th colspan=3><a href="hpc_index_alt.html">Alternatives</a></th><th colspan=3><a href="hpc_index_exp.html">Expressions</a></th></tr><tr><th>%</th><th colspan=2>covered / total</th><th>%</th><th colspan=2>covered / total</th><th>%</th><th colspan=2>covered / total</th></tr><tr>
+<td>&nbsp;&nbsp;<tt>module <a href="Main.hs.html">Main</a></tt></td>
+<td align="right">83%</td><td>5/6</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="83%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">58%</td><td>7/12</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="58%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">71%</td><td>68/95</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="71%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
+<tr></tr><tr style="background: #e0e0e0">
+<th align=left>&nbsp;&nbsp;Program Coverage Total</tt></th>
+<td align="right">83%</td><td>5/6</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="83%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">58%</td><td>7/12</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="58%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">71%</td><td>68/95</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="71%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
+</table></body></html>
+Writing: hpc_index_fun.html
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><style type="text/css">table.bar { background-color: #f25913; }
+td.bar { background-color: #60de51;  }
+td.invbar { background-color: #f25913;  }
+table.dashboard { border-collapse: collapse  ; border: solid 1px black }
+.dashboard td { border: solid 1px black }
+.dashboard th { border: solid 1px black }
+</style>
+</head><body><table class="dashboard" width="100%" border=1>
+<tr><th rowspan=2><a href="hpc_index.html">module</a></th><th colspan=3><a href="hpc_index_fun.html">Top Level Definitions</a></th><th colspan=3><a href="hpc_index_alt.html">Alternatives</a></th><th colspan=3><a href="hpc_index_exp.html">Expressions</a></th></tr><tr><th>%</th><th colspan=2>covered / total</th><th>%</th><th colspan=2>covered / total</th><th>%</th><th colspan=2>covered / total</th></tr><tr>
+<td>&nbsp;&nbsp;<tt>module <a href="Main.hs.html">Main</a></tt></td>
+<td align="right">83%</td><td>5/6</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="83%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">58%</td><td>7/12</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="58%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">71%</td><td>68/95</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="71%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
+<tr></tr><tr style="background: #e0e0e0">
+<th align=left>&nbsp;&nbsp;Program Coverage Total</tt></th>
+<td align="right">83%</td><td>5/6</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="83%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">58%</td><td>7/12</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="58%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">71%</td><td>68/95</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="71%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
+</table></body></html>
+Writing: hpc_index_alt.html
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><style type="text/css">table.bar { background-color: #f25913; }
+td.bar { background-color: #60de51;  }
+td.invbar { background-color: #f25913;  }
+table.dashboard { border-collapse: collapse  ; border: solid 1px black }
+.dashboard td { border: solid 1px black }
+.dashboard th { border: solid 1px black }
+</style>
+</head><body><table class="dashboard" width="100%" border=1>
+<tr><th rowspan=2><a href="hpc_index.html">module</a></th><th colspan=3><a href="hpc_index_fun.html">Top Level Definitions</a></th><th colspan=3><a href="hpc_index_alt.html">Alternatives</a></th><th colspan=3><a href="hpc_index_exp.html">Expressions</a></th></tr><tr><th>%</th><th colspan=2>covered / total</th><th>%</th><th colspan=2>covered / total</th><th>%</th><th colspan=2>covered / total</th></tr><tr>
+<td>&nbsp;&nbsp;<tt>module <a href="Main.hs.html">Main</a></tt></td>
+<td align="right">83%</td><td>5/6</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="83%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">58%</td><td>7/12</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="58%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">71%</td><td>68/95</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="71%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
+<tr></tr><tr style="background: #e0e0e0">
+<th align=left>&nbsp;&nbsp;Program Coverage Total</tt></th>
+<td align="right">83%</td><td>5/6</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="83%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">58%</td><td>7/12</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="58%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">71%</td><td>68/95</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="71%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
+</table></body></html>
+Writing: hpc_index_exp.html
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><style type="text/css">table.bar { background-color: #f25913; }
+td.bar { background-color: #60de51;  }
+td.invbar { background-color: #f25913;  }
+table.dashboard { border-collapse: collapse  ; border: solid 1px black }
+.dashboard td { border: solid 1px black }
+.dashboard th { border: solid 1px black }
+</style>
+</head><body><table class="dashboard" width="100%" border=1>
+<tr><th rowspan=2><a href="hpc_index.html">module</a></th><th colspan=3><a href="hpc_index_fun.html">Top Level Definitions</a></th><th colspan=3><a href="hpc_index_alt.html">Alternatives</a></th><th colspan=3><a href="hpc_index_exp.html">Expressions</a></th></tr><tr><th>%</th><th colspan=2>covered / total</th><th>%</th><th colspan=2>covered / total</th><th>%</th><th colspan=2>covered / total</th></tr><tr>
+<td>&nbsp;&nbsp;<tt>module <a href="Main.hs.html">Main</a></tt></td>
+<td align="right">83%</td><td>5/6</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="83%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">58%</td><td>7/12</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="58%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">71%</td><td>68/95</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="71%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
+<tr></tr><tr style="background: #e0e0e0">
+<th align=left>&nbsp;&nbsp;Program Coverage Total</tt></th>
+<td align="right">83%</td><td>5/6</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="83%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">58%</td><td>7/12</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="58%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">71%</td><td>68/95</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="71%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
+</table></body></html>
+
+
diff --git a/testsuite/tests/hpc/function2/Makefile b/testsuite/tests/hpc/function2/Makefile
new file mode 100644
index 0000000000000000000000000000000000000000..4a268530f13bc7f70d03965dacf45d8a0b4a720e
--- /dev/null
+++ b/testsuite/tests/hpc/function2/Makefile
@@ -0,0 +1,4 @@
+TOP=../../..
+include $(TOP)/mk/boilerplate.mk
+include $(TOP)/mk/test.mk
+
diff --git a/testsuite/tests/hpc/function2/subdir/tough2.lhs b/testsuite/tests/hpc/function2/subdir/tough2.lhs
new file mode 100644
index 0000000000000000000000000000000000000000..248bfe946d859ec1da895e1a34edd1c185d0975b
--- /dev/null
+++ b/testsuite/tests/hpc/function2/subdir/tough2.lhs
@@ -0,0 +1,49 @@
+\begin{code}
+import Control.Exception as E
+
+-- This test shows what hpc can really do.
+
+main = do
+  print ("Hello")
+  foo "Hello"
+  E.catch (print (badCase 22 44))
+          (\ e -> print (e :: E.ErrorCall))
+  E.catch (print (badCase 22 (error "Foo")))
+          (\ e -> print (e :: E.ErrorCall))
+  E.catch (print "Bark")
+          (\ e -> print (e :: E.ErrorCall))
+  (_,_) <- return $ ("Hello","World")
+  return ()
+  () <- return ()
+  t <- case () of
+    _ | otherwoz -> return "Hello"
+    _             -> error "Bad Thing Happened"
+  t <- case () of
+    _ | otherwise -> return "Hello"
+    _              -> error "Bad Thing Happened"
+  t <- case () of
+    _ | otherwise 
+      , False      -> error "Bad Thing Happened"
+    _              -> return "Hello"
+  print t
+  print foo2
+
+foo x = do
+  print x
+  return ()
+
+unused_ a = a
+
+badCase :: Int -> Int -> Int
+badCase a b = 
+        if a > 100 
+        then error "badCase" 
+        else if a > 1000 
+             then 1 
+             else badCase (a + 1) (b - 1)
+
+
+foo2 = (1,2, if True then 3 else 4)
+
+otherwoz = True
+\end{code}
diff --git a/testsuite/tests/hpc/function2/test.T b/testsuite/tests/hpc/function2/test.T
new file mode 100644
index 0000000000000000000000000000000000000000..3740e0e7b0757c8cb44dcb07bdde91ebc68b7758
--- /dev/null
+++ b/testsuite/tests/hpc/function2/test.T
@@ -0,0 +1,15 @@
+setTestOpts([when(fast(), skip), js_skip])
+
+hpc_prefix = "perl hpcrun.pl --clear --exeext={exeext} --hpc={hpc}"
+
+# Test that -fhpc still works when (a) the source file is in a
+# subdirectory and (b) it is a literate file.  We had a bug in this
+# area caused by the handling of line pragmas in the preprocessed
+# source file.
+test('tough2',
+     [extra_files(['../hpcrun.pl', 'subdir/']),
+       literate,
+       cmd_prefix(hpc_prefix),
+       omit_ways(ghci_ways + prof_ways), # profile goes in the wrong place
+       when(arch('wasm32'), fragile(23243)) ],
+     multimod_compile_and_run, ['subdir/tough2.lhs', '-fhpc'])
diff --git a/testsuite/tests/hpc/function2/tough2.stdout b/testsuite/tests/hpc/function2/tough2.stdout
new file mode 100644
index 0000000000000000000000000000000000000000..2aadd7f853c03473419589a4585ea9366a1e908a
--- /dev/null
+++ b/testsuite/tests/hpc/function2/tough2.stdout
@@ -0,0 +1,173 @@
+"Hello"
+"Hello"
+badCase
+CallStack (from HasCallStack):
+  error, called at subdir/tough2.lhs:40:14 in main:Main
+badCase
+CallStack (from HasCallStack):
+  error, called at subdir/tough2.lhs:40:14 in main:Main
+"Bark"
+"Hello"
+(1,2,3)
+
+
+ 71% expressions used (68/95)
+ 14% boolean coverage (1/7)
+       0% guards (0/4), 3 always True, 1 always False
+      33% 'if' conditions (1/3), 1 always True, 1 always False
+     100% qualifiers (0/0)
+ 58% alternatives used (7/12)
+100% local declarations used (0/0)
+ 83% top-level declarations used (5/6)
+
+
+-----<module Main>-----
+ 71% expressions used (68/95)
+ 14% boolean coverage (1/7)
+       0% guards (0/4), 3 always True, 1 always False
+      33% 'if' conditions (1/3), 1 always True, 1 always False
+     100% qualifiers (0/0)
+ 58% alternatives used (7/12)
+100% local declarations used (0/0)
+ 83% top-level declarations used (5/6)
+
+
+Writing: Main.hs.html
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<style type="text/css">
+span.lineno { color: white; background: #aaaaaa; border-right: solid white 12px }
+span.nottickedoff { background: yellow}
+span.istickedoff { background: white }
+span.tickonlyfalse { margin: -1px; border: 1px solid #f20913; background: #f20913 }
+span.tickonlytrue  { margin: -1px; border: 1px solid #60de51; background: #60de51 }
+span.funcount { font-size: small; color: orange; z-index: 2; position: absolute; right: 20 }
+span.decl { font-weight: bold }
+span.spaces    { background: white }
+</style>
+</head>
+<body>
+<pre>
+<span class="decl"><span class="nottickedoff">never executed</span> <span class="tickonlytrue">always true</span> <span class="tickonlyfalse">always false</span></span>
+</pre>
+<pre>
+<span class="lineno">    1 </span>\begin{code}
+<span class="lineno">    2 </span>import Control.Exception as E
+<span class="lineno">    3 </span>
+<span class="lineno">    4 </span>-- This test shows what hpc can really do.
+<span class="lineno">    5 </span>
+<span class="lineno">    6 </span><span class="decl"><span class="istickedoff">main = do</span>
+<span class="lineno">    7 </span><span class="spaces">  </span><span class="istickedoff">print (&quot;Hello&quot;)</span>
+<span class="lineno">    8 </span><span class="spaces">  </span><span class="istickedoff">foo &quot;Hello&quot;</span>
+<span class="lineno">    9 </span><span class="spaces">  </span><span class="istickedoff">E.catch (print (badCase 22 <span class="nottickedoff">44</span>))</span>
+<span class="lineno">   10 </span><span class="spaces">          </span><span class="istickedoff">(\ e -&gt; print (e :: E.ErrorCall))</span>
+<span class="lineno">   11 </span><span class="spaces">  </span><span class="istickedoff">E.catch (print (badCase 22 <span class="nottickedoff">(error &quot;Foo&quot;)</span>))</span>
+<span class="lineno">   12 </span><span class="spaces">          </span><span class="istickedoff">(\ e -&gt; print (e :: E.ErrorCall))</span>
+<span class="lineno">   13 </span><span class="spaces">  </span><span class="istickedoff">E.catch (print &quot;Bark&quot;)</span>
+<span class="lineno">   14 </span><span class="spaces">          </span><span class="istickedoff"><span class="nottickedoff">(\ e -&gt; print (e :: E.ErrorCall))</span></span>
+<span class="lineno">   15 </span><span class="spaces">  </span><span class="istickedoff">(_,_) &lt;- return $ (<span class="nottickedoff">&quot;Hello&quot;</span>,<span class="nottickedoff">&quot;World&quot;</span>)</span>
+<span class="lineno">   16 </span><span class="spaces">  </span><span class="istickedoff">return <span class="nottickedoff">()</span></span>
+<span class="lineno">   17 </span><span class="spaces">  </span><span class="istickedoff">() &lt;- return ()</span>
+<span class="lineno">   18 </span><span class="spaces">  </span><span class="istickedoff">t &lt;- case <span class="nottickedoff">()</span> of</span>
+<span class="lineno">   19 </span><span class="spaces">    </span><span class="istickedoff">_ | <span class="tickonlytrue">otherwoz</span> -&gt; return <span class="nottickedoff">&quot;Hello&quot;</span></span>
+<span class="lineno">   20 </span><span class="spaces">    </span><span class="istickedoff">_             -&gt; <span class="nottickedoff">error &quot;Bad Thing Happened&quot;</span></span>
+<span class="lineno">   21 </span><span class="spaces">  </span><span class="istickedoff">t &lt;- case <span class="nottickedoff">()</span> of</span>
+<span class="lineno">   22 </span><span class="spaces">    </span><span class="istickedoff">_ | <span class="tickonlytrue">otherwise</span> -&gt; return <span class="nottickedoff">&quot;Hello&quot;</span></span>
+<span class="lineno">   23 </span><span class="spaces">    </span><span class="istickedoff">_              -&gt; <span class="nottickedoff">error &quot;Bad Thing Happened&quot;</span></span>
+<span class="lineno">   24 </span><span class="spaces">  </span><span class="istickedoff">t &lt;- case <span class="nottickedoff">()</span> of</span>
+<span class="lineno">   25 </span><span class="spaces">    </span><span class="istickedoff">_ | <span class="tickonlytrue">otherwise</span> </span>
+<span class="lineno">   26 </span><span class="spaces">      </span><span class="istickedoff">, <span class="tickonlyfalse">False</span>      -&gt; <span class="nottickedoff">error &quot;Bad Thing Happened&quot;</span></span>
+<span class="lineno">   27 </span><span class="spaces">    </span><span class="istickedoff">_              -&gt; return &quot;Hello&quot;</span>
+<span class="lineno">   28 </span><span class="spaces">  </span><span class="istickedoff">print t</span>
+<span class="lineno">   29 </span><span class="spaces">  </span><span class="istickedoff">print foo2</span></span>
+<span class="lineno">   30 </span>
+<span class="lineno">   31 </span><span class="decl"><span class="istickedoff">foo x = do</span>
+<span class="lineno">   32 </span><span class="spaces">  </span><span class="istickedoff">print x</span>
+<span class="lineno">   33 </span><span class="spaces">  </span><span class="istickedoff">return <span class="nottickedoff">()</span></span></span>
+<span class="lineno">   34 </span>
+<span class="lineno">   35 </span><span class="decl"><span class="nottickedoff">unused_ a = a</span></span>
+<span class="lineno">   36 </span>
+<span class="lineno">   37 </span>badCase :: Int -&gt; Int -&gt; Int
+<span class="lineno">   38 </span><span class="decl"><span class="istickedoff">badCase a b = </span>
+<span class="lineno">   39 </span><span class="spaces">        </span><span class="istickedoff">if a &gt; 100 </span>
+<span class="lineno">   40 </span><span class="spaces">        </span><span class="istickedoff">then error &quot;badCase&quot; </span>
+<span class="lineno">   41 </span><span class="spaces">        </span><span class="istickedoff">else if <span class="tickonlyfalse">a &gt; 1000</span> </span>
+<span class="lineno">   42 </span><span class="spaces">             </span><span class="istickedoff">then <span class="nottickedoff">1</span> </span>
+<span class="lineno">   43 </span><span class="spaces">             </span><span class="istickedoff">else badCase (a + 1) <span class="nottickedoff">(b - 1)</span></span></span>
+<span class="lineno">   44 </span>
+<span class="lineno">   45 </span>
+<span class="lineno">   46 </span><span class="decl"><span class="istickedoff">foo2 = (1,2, if <span class="tickonlytrue">True</span> then 3 else <span class="nottickedoff">4</span>)</span></span>
+<span class="lineno">   47 </span>
+<span class="lineno">   48 </span><span class="decl"><span class="istickedoff">otherwoz = True</span></span>
+<span class="lineno">   49 </span>\end{code}
+
+</pre>
+</body>
+</html>
+Writing: hpc_index.html
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><style type="text/css">table.bar { background-color: #f25913; }
+td.bar { background-color: #60de51;  }
+td.invbar { background-color: #f25913;  }
+table.dashboard { border-collapse: collapse  ; border: solid 1px black }
+.dashboard td { border: solid 1px black }
+.dashboard th { border: solid 1px black }
+</style>
+</head><body><table class="dashboard" width="100%" border=1>
+<tr><th rowspan=2><a href="hpc_index.html">module</a></th><th colspan=3><a href="hpc_index_fun.html">Top Level Definitions</a></th><th colspan=3><a href="hpc_index_alt.html">Alternatives</a></th><th colspan=3><a href="hpc_index_exp.html">Expressions</a></th></tr><tr><th>%</th><th colspan=2>covered / total</th><th>%</th><th colspan=2>covered / total</th><th>%</th><th colspan=2>covered / total</th></tr><tr>
+<td>&nbsp;&nbsp;<tt>module <a href="Main.hs.html">Main</a></tt></td>
+<td align="right">83%</td><td>5/6</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="83%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">58%</td><td>7/12</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="58%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">71%</td><td>68/95</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="71%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
+<tr></tr><tr style="background: #e0e0e0">
+<th align=left>&nbsp;&nbsp;Program Coverage Total</tt></th>
+<td align="right">83%</td><td>5/6</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="83%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">58%</td><td>7/12</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="58%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">71%</td><td>68/95</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="71%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
+</table></body></html>
+Writing: hpc_index_fun.html
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><style type="text/css">table.bar { background-color: #f25913; }
+td.bar { background-color: #60de51;  }
+td.invbar { background-color: #f25913;  }
+table.dashboard { border-collapse: collapse  ; border: solid 1px black }
+.dashboard td { border: solid 1px black }
+.dashboard th { border: solid 1px black }
+</style>
+</head><body><table class="dashboard" width="100%" border=1>
+<tr><th rowspan=2><a href="hpc_index.html">module</a></th><th colspan=3><a href="hpc_index_fun.html">Top Level Definitions</a></th><th colspan=3><a href="hpc_index_alt.html">Alternatives</a></th><th colspan=3><a href="hpc_index_exp.html">Expressions</a></th></tr><tr><th>%</th><th colspan=2>covered / total</th><th>%</th><th colspan=2>covered / total</th><th>%</th><th colspan=2>covered / total</th></tr><tr>
+<td>&nbsp;&nbsp;<tt>module <a href="Main.hs.html">Main</a></tt></td>
+<td align="right">83%</td><td>5/6</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="83%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">58%</td><td>7/12</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="58%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">71%</td><td>68/95</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="71%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
+<tr></tr><tr style="background: #e0e0e0">
+<th align=left>&nbsp;&nbsp;Program Coverage Total</tt></th>
+<td align="right">83%</td><td>5/6</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="83%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">58%</td><td>7/12</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="58%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">71%</td><td>68/95</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="71%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
+</table></body></html>
+Writing: hpc_index_alt.html
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><style type="text/css">table.bar { background-color: #f25913; }
+td.bar { background-color: #60de51;  }
+td.invbar { background-color: #f25913;  }
+table.dashboard { border-collapse: collapse  ; border: solid 1px black }
+.dashboard td { border: solid 1px black }
+.dashboard th { border: solid 1px black }
+</style>
+</head><body><table class="dashboard" width="100%" border=1>
+<tr><th rowspan=2><a href="hpc_index.html">module</a></th><th colspan=3><a href="hpc_index_fun.html">Top Level Definitions</a></th><th colspan=3><a href="hpc_index_alt.html">Alternatives</a></th><th colspan=3><a href="hpc_index_exp.html">Expressions</a></th></tr><tr><th>%</th><th colspan=2>covered / total</th><th>%</th><th colspan=2>covered / total</th><th>%</th><th colspan=2>covered / total</th></tr><tr>
+<td>&nbsp;&nbsp;<tt>module <a href="Main.hs.html">Main</a></tt></td>
+<td align="right">83%</td><td>5/6</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="83%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">58%</td><td>7/12</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="58%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">71%</td><td>68/95</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="71%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
+<tr></tr><tr style="background: #e0e0e0">
+<th align=left>&nbsp;&nbsp;Program Coverage Total</tt></th>
+<td align="right">83%</td><td>5/6</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="83%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">58%</td><td>7/12</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="58%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">71%</td><td>68/95</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="71%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
+</table></body></html>
+Writing: hpc_index_exp.html
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><style type="text/css">table.bar { background-color: #f25913; }
+td.bar { background-color: #60de51;  }
+td.invbar { background-color: #f25913;  }
+table.dashboard { border-collapse: collapse  ; border: solid 1px black }
+.dashboard td { border: solid 1px black }
+.dashboard th { border: solid 1px black }
+</style>
+</head><body><table class="dashboard" width="100%" border=1>
+<tr><th rowspan=2><a href="hpc_index.html">module</a></th><th colspan=3><a href="hpc_index_fun.html">Top Level Definitions</a></th><th colspan=3><a href="hpc_index_alt.html">Alternatives</a></th><th colspan=3><a href="hpc_index_exp.html">Expressions</a></th></tr><tr><th>%</th><th colspan=2>covered / total</th><th>%</th><th colspan=2>covered / total</th><th>%</th><th colspan=2>covered / total</th></tr><tr>
+<td>&nbsp;&nbsp;<tt>module <a href="Main.hs.html">Main</a></tt></td>
+<td align="right">83%</td><td>5/6</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="83%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">58%</td><td>7/12</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="58%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">71%</td><td>68/95</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="71%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
+<tr></tr><tr style="background: #e0e0e0">
+<th align=left>&nbsp;&nbsp;Program Coverage Total</tt></th>
+<td align="right">83%</td><td>5/6</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="83%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">58%</td><td>7/12</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="58%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">71%</td><td>68/95</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="71%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
+</table></body></html>
+
+
diff --git a/testsuite/tests/hpc/ghc_ghci/A.hs b/testsuite/tests/hpc/ghc_ghci/A.hs
new file mode 100644
index 0000000000000000000000000000000000000000..f12fdadda7eda89dd79a691a8247f69354e2b34f
--- /dev/null
+++ b/testsuite/tests/hpc/ghc_ghci/A.hs
@@ -0,0 +1,5 @@
+
+module A (a) where
+
+a :: Char
+a = 'z'
diff --git a/testsuite/tests/hpc/ghc_ghci/B.hs b/testsuite/tests/hpc/ghc_ghci/B.hs
new file mode 100644
index 0000000000000000000000000000000000000000..0bf4401f54fde10ccc5d90c9b86e4a896918d0b2
--- /dev/null
+++ b/testsuite/tests/hpc/ghc_ghci/B.hs
@@ -0,0 +1,7 @@
+
+module B (b) where
+
+import A
+
+b :: Char
+b = a
diff --git a/testsuite/tests/hpc/ghc_ghci/Makefile b/testsuite/tests/hpc/ghc_ghci/Makefile
new file mode 100644
index 0000000000000000000000000000000000000000..fba4ca7c3e4a9f6441360030a9013a2f94dc5153
--- /dev/null
+++ b/testsuite/tests/hpc/ghc_ghci/Makefile
@@ -0,0 +1,9 @@
+TOP=../../..
+include $(TOP)/mk/boilerplate.mk
+include $(TOP)/mk/test.mk
+
+hpc_ghc_ghci:
+	rm -f A.o A.hi
+	'$(TEST_HC)' $(TEST_HC_OPTS) -fhpc -c A.hs
+	echo b | '$(TEST_HC)' $(TEST_HC_OPTS_INTERACTIVE) B.hs
+
diff --git a/testsuite/tests/hpc/ghc_ghci/hpc_ghc_ghci.stdout b/testsuite/tests/hpc/ghc_ghci/hpc_ghc_ghci.stdout
new file mode 100644
index 0000000000000000000000000000000000000000..6ad22b40ef89c10907a1134458597f146dd5211d
--- /dev/null
+++ b/testsuite/tests/hpc/ghc_ghci/hpc_ghc_ghci.stdout
@@ -0,0 +1 @@
+'z'
diff --git a/testsuite/tests/hpc/ghc_ghci/test.T b/testsuite/tests/hpc/ghc_ghci/test.T
new file mode 100644
index 0000000000000000000000000000000000000000..0a2807ef42f71b1f6a3973d0a2555135804c7aee
--- /dev/null
+++ b/testsuite/tests/hpc/ghc_ghci/test.T
@@ -0,0 +1,5 @@
+
+test('hpc_ghc_ghci',
+     [extra_files(['A.hs', 'B.hs']),
+      only_ways(['normal']), when(compiler_profiled(), skip), req_interp],
+     run_command, ['$MAKE -s --no-print-directory hpc_ghc_ghci'])
diff --git a/testsuite/tests/hpc/hpc.ovr b/testsuite/tests/hpc/hpc.ovr
new file mode 100644
index 0000000000000000000000000000000000000000..1c1f064b51d9f6019430c50ba6ca3191f8912327
--- /dev/null
+++ b/testsuite/tests/hpc/hpc.ovr
@@ -0,0 +1,13 @@
+tick "()";
+module "HpcCombine" {}
+module "HpcDraft" {}
+module "HpcFlags" {}
+module "HpcLexer" {}
+module "HpcMap" {}
+module "HpcMarkup" {}
+module "HpcOverlay" {}
+module "HpcReport" {}
+module "HpcSet" {}
+module "HpcShowTix" {}
+module "HpcUtils" {}
+module "Main" {}
diff --git a/testsuite/tests/hpc/hpcrun.pl b/testsuite/tests/hpc/hpcrun.pl
new file mode 100644
index 0000000000000000000000000000000000000000..88fef33daf301163ee1a6777e807bb864f9bb40a
--- /dev/null
+++ b/testsuite/tests/hpc/hpcrun.pl
@@ -0,0 +1,44 @@
+#
+# This command wraps round a command execution, adding some hpc tests.
+#
+
+while($ARGV[0] =~ /^--/) {
+  $arg = shift @ARGV;
+  if ($arg =~ /--hpc=(.*)/) {
+    $HPC = $1;
+  } 
+  elsif ($arg =~ /--clear/) {
+    $CLEAR = 1;       
+  }
+  elsif ($arg =~ /--exeext=(.*)/) {
+    $exeext = $1;
+  }
+  else {
+    die "Bad arg: $arg"
+  }
+}
+
+die "no option --hpc=* provided\n" if (!defined($HPC));
+        
+$binary = $ARGV[0] . $exeext;
+
+# get the basename: needed for the test function/subdir/tough2
+$binary =~ s/^.*\/([^\/]*)$/$1/;
+
+unlink "$binary.tix" if (defined($CLEAR));
+
+system @ARGV;
+print "\n\n";
+system ($HPC, "report", "$binary.tix");
+print "\n\n";
+system ($HPC, "report", "$binary.tix", "--per-module");
+print "\n\n";
+open(MARKUP, "-|", $HPC, "markup", "$binary.tix");
+while(<MARKUP>) {
+  my $line = $_;
+  print $line;
+  if (/Writing: (\S+.html)/) {
+     system("cat $1");        
+  }
+}
+print "\n\n";
diff --git a/testsuite/tests/hpc/raytrace/CSG.hs b/testsuite/tests/hpc/raytrace/CSG.hs
new file mode 100644
index 0000000000000000000000000000000000000000..ba37a17b25e76d0e63d65dffd858d70228fa730c
--- /dev/null
+++ b/testsuite/tests/hpc/raytrace/CSG.hs
@@ -0,0 +1,16 @@
+-- Copyright (c) 2000 Galois Connections, Inc.
+-- All rights reserved.  This software is distributed as
+-- free software under the license in the file "LICENSE",
+-- which is included in the distribution.
+
+module CSG(module Construct,
+	   module Geometry,
+	   module Intersections,
+	   module Interval,
+	   module Misc) where
+
+import Construct
+import Geometry
+import Intersections
+import Interval
+import Misc
diff --git a/testsuite/tests/hpc/raytrace/Construct.hs b/testsuite/tests/hpc/raytrace/Construct.hs
new file mode 100644
index 0000000000000000000000000000000000000000..90dbc60f9e5128f8ce06814f18eb9ff091af2803
--- /dev/null
+++ b/testsuite/tests/hpc/raytrace/Construct.hs
@@ -0,0 +1,265 @@
+-- Copyright (c) 2000 Galois Connections, Inc.
+-- All rights reserved.  This software is distributed as
+-- free software under the license in the file "LICENSE",
+-- which is included in the distribution.
+
+module Construct
+    ( Surface (..)
+    , Face (..)
+    , CSG (..)
+    , Texture
+    , Transform
+    , union, intersect, difference
+    , plane, sphere, cube, cylinder, cone
+    , transform
+    , translate, translateX, translateY, translateZ
+    , scale, scaleX, scaleY, scaleZ, uscale
+    , rotateX, rotateY, rotateZ
+    , eye, translateEye
+    , rotateEyeX, rotateEyeY, rotateEyeZ
+    ) where
+
+import Geometry
+
+-- In each case, we model the surface by a point and a pair of tangent vectors.
+-- This gives us enough information to determine the surface
+-- normal at that point, which is all that is required by the current
+-- illumination model.  We can't just save the surface normal because
+-- that isn't preserved by transformations.
+
+data Surface
+  = Planar Point Vector Vector
+  | Spherical Point Vector Vector
+  | Cylindrical Point Vector Vector
+  | Conic Point Vector Vector
+  deriving Show
+
+data Face
+  = PlaneFace
+  | SphereFace
+  | CubeFront
+  | CubeBack
+  | CubeLeft
+  | CubeRight
+  | CubeTop
+  | CubeBottom
+  | CylinderSide
+  | CylinderTop
+  | CylinderBottom
+  | ConeSide
+  | ConeBase
+  deriving Show
+
+data CSG a
+  = Plane a
+  | Sphere a
+  | Cylinder a
+  | Cube a
+  | Cone a
+  | Transform Matrix Matrix (CSG a)
+  | Union (CSG a) (CSG a)
+  | Intersect (CSG a) (CSG a)
+  | Difference (CSG a) (CSG a)
+  | Box Box (CSG a)
+  deriving (Show)
+
+-- the data returned for determining surface texture
+-- the Face tells which face of a primitive this is
+-- the Point is the point of intersection in object coordinates
+-- the a is application-specific texture information
+type Texture a = (Face, Point, a)
+
+union, intersect, difference		:: CSG a -> CSG a -> CSG a
+
+union p@(Box b1 _) q@(Box b2 _) = Box (mergeBox b1 b2) (Union p q)
+union p q = Union p q
+
+-- rather pessimistic
+intersect p@(Box b1 _) q@(Box b2 _) = Box (mergeBox b1 b2) (Intersect p q)
+intersect p q = Intersect p q
+
+difference (Box b1 p) q = Box b1 (Difference p q)
+-- no need to box again inside
+-- difference p@(Box b1 _) q = Box b1 (Difference p q)
+difference p q = Difference p q
+
+mkBox b p = Box b p
+
+plane, sphere, cube, cylinder, cone	:: a -> CSG a
+
+plane = Plane
+sphere s =
+    mkBox (B (-1 - epsilon) (1 + epsilon)
+	     (-1 - epsilon) (1 + epsilon)
+	     (-1 - epsilon) (1 + epsilon)) (Sphere s)
+cone s =
+    mkBox (B (-1 - epsilon) (1 + epsilon)
+	     (   - epsilon) (1 + epsilon)
+	     (-1 - epsilon) (1 + epsilon)) (Cone s)
+cube s =
+    mkBox (B (- epsilon) (1 + epsilon)
+	     (- epsilon) (1 + epsilon)
+	     (- epsilon) (1 + epsilon)) (Cube s)
+cylinder s =
+    mkBox (B (-1 - epsilon) (1 + epsilon)
+	     (   - epsilon) (1 + epsilon)
+	     (-1 - epsilon) (1 + epsilon)) (Cylinder s)
+
+----------------------------
+-- Object transformations
+----------------------------
+
+type Transform = (Matrix, Matrix)
+
+transform :: Transform -> CSG a -> CSG a
+
+transform (m, m')   (Transform mp mp' p) = Transform  (multMM m mp)       (multMM mp' m') p
+transform mm'       (Union p q)          = Union      (transform mm' p)   (transform mm' q)
+transform mm'       (Intersect p q)      = Intersect  (transform mm' p)   (transform mm' q)
+transform mm'       (Difference p q)     = Difference (transform mm' p)   (transform mm' q)
+transform mm'@(m,_) (Box box p)          = Box        (transformBox m box) (transform mm' p)
+transform (m, m')   prim                 = Transform  m m' prim
+
+translate				:: Coords -> CSG a -> CSG a
+translateX, translateY, translateZ	:: Double -> CSG a -> CSG a
+
+translate xyz = transform $ transM xyz
+translateX x = translate (x, 0, 0)
+translateY y = translate (0, y, 0)
+translateZ z = translate (0, 0, z)
+
+scale      				:: Coords -> CSG a -> CSG a
+scaleX, scaleY, scaleZ, uscale		:: Double -> CSG a -> CSG a
+
+scale xyz = transform $ scaleM xyz
+scaleX x = scale (x, 1, 1)
+scaleY y = scale (1, y, 1)
+scaleZ z = scale (1, 1, z)
+uscale u = scale (u,u,u)
+
+rotateX, rotateY, rotateZ		:: Radian -> CSG a -> CSG a
+
+rotateX a = transform $ rotxM a
+rotateY a = transform $ rotyM a
+rotateZ a = transform $ rotzM a
+
+unit = matrix
+      ( ( 1.0, 0.0, 0.0, 0.0 ),
+	( 0.0, 1.0, 0.0, 0.0 ),
+	( 0.0, 0.0, 1.0, 0.0 ),
+	( 0.0, 0.0, 0.0, 1.0 ) )
+
+transM (x, y, z)
+  = ( matrix
+      ( ( 1, 0, 0, x ),
+	( 0, 1, 0, y ),
+	( 0, 0, 1, z ),
+	( 0, 0, 0, 1 ) ),
+      matrix
+      ( ( 1, 0, 0, -x ),
+	( 0, 1, 0, -y ),
+	( 0, 0, 1, -z ),
+	( 0, 0, 0,  1 ) ) )
+
+scaleM (x, y, z)
+  = ( matrix
+      ( (   x',    0,    0, 0 ),
+	(    0,   y',    0, 0 ),
+	(    0,    0,   z', 0 ),
+	(    0,    0,    0, 1 ) ),
+      matrix
+      ( ( 1/x',    0,    0, 0 ),
+	(    0, 1/y',    0, 0 ),
+	(    0,    0, 1/z', 0 ),
+	(    0,    0,    0, 1 ) ) )
+  where x' = nonZero x
+	y' = nonZero y
+	z' = nonZero z
+
+rotxM t
+  = ( matrix
+      ( (      1,      0,      0, 0 ),
+	(      0,  cos t, -sin t, 0 ),
+	(      0,  sin t,  cos t, 0 ),
+	(      0,      0,      0, 1 ) ),
+      matrix
+      ( (      1,      0,      0, 0 ),
+	(      0,  cos t,  sin t, 0 ),
+	(      0, -sin t,  cos t, 0 ),
+	(      0,      0,      0, 1 ) ) )
+
+rotyM t
+  = ( matrix
+      ( (  cos t,      0,  sin t, 0 ),
+	(      0,      1,      0, 0 ),
+	( -sin t,      0,  cos t, 0 ),
+	(      0,      0,      0, 1 ) ),
+      matrix
+      ( (  cos t,      0, -sin t, 0 ),
+	(      0,      1,      0, 0 ),
+	(  sin t,      0,  cos t, 0 ),
+	(      0,      0,      0, 1 ) ) )
+
+rotzM t
+  = ( matrix
+      ( (  cos t, -sin t,      0, 0 ),
+	(  sin t,  cos t,      0, 0 ),
+	(      0,      0,      1, 0 ),
+	(      0,      0,      0, 1 ) ),
+      matrix
+      ( (  cos t,  sin t,      0, 0 ),
+	( -sin t,  cos t,      0, 0 ),
+	(      0,      0,      1, 0 ),
+	(      0,      0,      0, 1 ) ) )
+
+-------------------
+-- Eye transformations
+
+-- These are used to specify placement of the eye.
+-- `eye' starts out at (0, 0, -1).
+-- These are implemented as inverse transforms of the model.
+-------------------
+
+eye				 	:: Transform
+translateEye				:: Coords -> Transform -> Transform
+rotateEyeX, rotateEyeY, rotateEyeZ	:: Radian -> Transform -> Transform
+
+eye = (unit, unit)
+translateEye xyz (eye1, eye2)
+  = (multMM m1 eye1, multMM eye2 m2)
+  where (m1, m2) = transM xyz
+rotateEyeX t (eye1, eye2)
+  = (multMM m1 eye1, multMM eye2 m2)
+  where (m1, m2) = rotxM t
+rotateEyeY t (eye1, eye2)
+  = (multMM m1 eye1, multMM eye2 m2)
+  where (m1, m2) = rotyM t
+rotateEyeZ t (eye1, eye2)
+  = (multMM m1 eye1, multMM eye2 m2)
+  where (m1, m2) = rotzM t
+
+-------------------
+-- Bounding boxes
+-------------------
+
+mergeBox (B x11  x12  y11  y12  z11  z12) (B x21  x22  y21  y22  z21  z22) =
+    B (x11 `min` x21) (x12 `max` x22)
+      (y11 `min` y21) (y12 `max` y22)
+      (z11 `min` z21) (z12 `max` z22)
+
+transformBox t (B x1  x2  y1  y2  z1  z2)
+  = (B (foldr1 min (map xCoord pts'))
+       (foldr1 max (map xCoord pts'))
+       (foldr1 min (map yCoord pts'))
+       (foldr1 max (map yCoord pts'))
+       (foldr1 min (map zCoord pts'))
+       (foldr1 max (map zCoord pts')))
+  where pts' = map (multMP t) pts
+	pts =  [point x1 y1 z1,
+		point x1 y1 z2,
+		point x1 y2 z1,
+		point x1 y2 z2,
+		point x2 y1 z1,
+		point x2 y1 z2,
+		point x2 y2 z1,
+		point x2 y2 z2]
diff --git a/testsuite/tests/hpc/raytrace/Data.hs b/testsuite/tests/hpc/raytrace/Data.hs
new file mode 100644
index 0000000000000000000000000000000000000000..d103766a573be8caa58ba14aa4aa79b0f29e4c92
--- /dev/null
+++ b/testsuite/tests/hpc/raytrace/Data.hs
@@ -0,0 +1,408 @@
+-- Copyright (c) 2000 Galois Connections, Inc.
+-- All rights reserved.  This software is distributed as
+-- free software under the license in the file "LICENSE",
+-- which is included in the distribution.
+
+module Data where
+
+import Data.Array
+
+import CSG
+import Geometry
+import Illumination
+import Primitives
+import Surface
+
+import Debug.Trace
+
+-- Now the parsed (expresssion) language
+
+type Name = String
+
+type Code = [GMLToken]
+
+data GMLToken
+    -- All these can occur in parsed code
+	= TOp     GMLOp
+	| TId     Name
+	| TBind   Name
+	| TBool   Bool
+	| TInt    Int
+	| TReal   Double
+	| TString String
+	| TBody   Code
+	| TArray  Code
+	| TApply
+	| TIf
+	 -- These can occur in optimized/transformed code
+	 -- NONE (yet!)
+
+
+instance Show GMLToken where
+   showsPrec p (TOp op)     = shows op
+   showsPrec p (TId id)     = showString id
+   showsPrec p (TBind id)   = showString ('/' : id)
+   showsPrec p (TBool bool) = shows bool
+   showsPrec p (TInt i)     = shows i
+   showsPrec p (TReal d)    = shows d
+   showsPrec p (TString s)  = shows s
+   showsPrec p (TBody code) = shows code
+   showsPrec p (TArray code) = showString "[ "
+                            . foldr (\ a b -> a . showChar ' ' . b) id (map shows code)
+                            . showString "]"
+   showsPrec p (TApply)     = showString "apply"
+   showsPrec p (TIf)        = showString "if"
+
+   showList  code = showString "{ "
+                  . foldr (\ a b -> a . showChar ' ' . b) id (map shows code)
+                  . showString "}"
+
+
+-- Now the value language, used inside the interpreter
+
+type Stack = [GMLValue]
+
+data GMLValue
+	= VBool    !Bool
+	| VInt     !Int
+	| VReal    !Double
+	| VString  String
+	| VClosure Env Code
+	| VArray   (Array Int GMLValue)		-- FIXME: Haskell array
+        -- uses the interpreter version of point
+	| VPoint   { xPoint :: !Double
+                   , yPoint :: !Double
+                   , zPoint :: !Double
+                   }
+        -- these are abstract to the interpreter
+	| VObject  Object
+	| VLight   Light
+	-- This is an abstract object, used by the abstract interpreter
+	| VAbsObj  AbsObj
+
+
+-- There are only *3* basic abstract values,
+-- and the combinators also.
+
+data AbsObj
+    = AbsFACE
+    | AbsU
+    | AbsV
+      deriving (Show)
+
+instance Show GMLValue where
+   showsPrec p value = showString (showStkEle value)
+
+showStkEle :: GMLValue -> String
+showStkEle (VBool b)      = show b ++ " :: Bool"
+showStkEle (VInt i)       = show i ++ " :: Int"
+showStkEle (VReal r)      = show r ++ " :: Real"
+showStkEle (VString s)    = show s ++ " :: String"
+showStkEle (VClosure {})  = "<closure> :: Closure"
+showStkEle (VArray arr)
+     = "<array (" ++  show (succ (snd (bounds arr))) ++ " elements)> :: Array"
+showStkEle (VPoint x y z) = "(" ++ show x
+                         ++ "," ++ show y
+                         ++ "," ++ show z
+                         ++ ") :: Point"
+showStkEle (VObject {})   = "<Object> :: Object"
+showStkEle (VLight {})    = "<Light> :: Object"
+showStkEle (VAbsObj vobs) = "{{ " ++ show vobs ++ "}} :: AbsObj"
+
+-- An abstract environment
+
+newtype Env = Env [(Name, GMLValue)] deriving Show
+
+emptyEnv :: Env
+emptyEnv = Env []
+
+extendEnv :: Env -> Name -> GMLValue -> Env
+extendEnv (Env e) n v = Env ((n, v):e)
+
+lookupEnv :: Env -> Name -> Maybe GMLValue
+lookupEnv (Env e) n = lookup n e
+
+-- All primitive operators
+--
+-- There is no Op_apply, Op_false, Op_true and Op_if
+-- (because they appear explcitly in the rules).
+
+data GMLOp
+   = Op_acos
+   | Op_addi
+   | Op_addf
+   | Op_asin
+   | Op_clampf
+   | Op_cone
+   | Op_cos
+   | Op_cube
+   | Op_cylinder
+   | Op_difference
+   | Op_divi
+   | Op_divf
+   | Op_eqi
+   | Op_eqf
+   | Op_floor
+   | Op_frac
+   | Op_get
+   | Op_getx
+   | Op_gety
+   | Op_getz
+   | Op_intersect
+   | Op_length
+   | Op_lessi
+   | Op_lessf
+   | Op_light
+   | Op_modi
+   | Op_muli
+   | Op_mulf
+   | Op_negi
+   | Op_negf
+   | Op_plane
+   | Op_point
+   | Op_pointlight
+   | Op_real
+   | Op_render
+   | Op_rotatex
+   | Op_rotatey
+   | Op_rotatez
+   | Op_scale
+   | Op_sin
+   | Op_sphere
+   | Op_spotlight
+   | Op_sqrt
+   | Op_subi
+   | Op_subf
+   | Op_trace       -- non standard, for debugging GML programs
+   | Op_translate
+   | Op_union
+   | Op_uscale
+    deriving (Eq,Ord,Ix,Bounded)
+
+instance Show GMLOp where
+   showsPrec _ op = showString (opNameTable ! op)
+
+
+------------------------------------------------------------------------------
+
+-- And how we use the op codes (there names, there interface)
+
+-- These keywords include, "apply", "if", "true" and "false",
+-- they are not parsed as operators, but are
+-- captured by the parser as a special case.
+
+keyWords :: [String]
+keyWords = [ kwd | (kwd,_,_) <- opcodes ]
+
+-- Lookup has to look from the start (or else...)
+opTable :: [(Name,GMLToken)]
+opTable = [ (kwd,op) | (kwd,op,_) <- opcodes ]
+
+opNameTable :: Array GMLOp Name
+opNameTable = array (minBound,maxBound)
+	          [ (op,name) | (name,TOp op,_) <- opcodes ]
+
+undef = error "undefined function"
+image = error "undefined function: talk to image group"
+
+-- typically, its best to have *one* opcode table,
+-- so that mis-alignments do not happen.
+
+opcodes :: [(String,GMLToken,PrimOp)]
+opcodes =
+ [ ("apply",	  TApply,	 	error "incorrect use of apply")
+ , ("if",	  TIf, 			error "incorrect use of if")
+ , ("false",	  TBool False, 		error "incorrect use of false")
+ , ("true",	  TBool True, 		error "incorrect use of true")
+ ] ++ map (\ (a,b,c) -> (a,TOp b,c))
+   -- These are just invocation, any coersions need to occur between here
+   -- and before arriving at the application code (like deg -> rad).
+ [ ("acos",	  Op_acos, 	 Real_Real (rad2deg . acos))
+ , ("addi",	  Op_addi, 	 Int_Int_Int (+))
+ , ("addf",	  Op_addf, 	 Real_Real_Real (+))
+ , ("asin",	  Op_asin, 	 Real_Real (rad2deg . asin))
+ , ("clampf",	  Op_clampf, 	 Real_Real clampf)
+ , ("cone",	  Op_cone, 	 Surface_Obj cone)
+ , ("cos",	  Op_cos, 	 Real_Real (cos . deg2rad))
+ , ("cube",	  Op_cube, 	 Surface_Obj cube)
+ , ("cylinder",	  Op_cylinder, 	 Surface_Obj cylinder)
+ , ("difference", Op_difference, Obj_Obj_Obj difference)
+ , ("divi",	  Op_divi, 	 Int_Int_Int (ourQuot))
+ , ("divf",	  Op_divf, 	 Real_Real_Real (/))
+ , ("eqi",	  Op_eqi, 	 Int_Int_Bool (==))
+ , ("eqf",	  Op_eqf, 	 Real_Real_Bool (==))
+ , ("floor",	  Op_floor, 	 Real_Int floor)
+ , ("frac",	  Op_frac, 	 Real_Real (snd . properFraction))
+ , ("get",	  Op_get, 	 Arr_Int_Value ixGet)
+ , ("getx",	  Op_getx, 	 Point_Real (\ x y z -> x))
+ , ("gety",	  Op_gety, 	 Point_Real (\ x y z -> y))
+ , ("getz",	  Op_getz, 	 Point_Real (\ x y z -> z))
+ , ("intersect",  Op_intersect,  Obj_Obj_Obj intersect)
+ , ("length",	  Op_length, 	 Arr_Int (succ . snd . bounds))
+ , ("lessi",	  Op_lessi, 	 Int_Int_Bool (<))
+ , ("lessf",	  Op_lessf, 	 Real_Real_Bool (<))
+ , ("light",	  Op_light, 	 Point_Color_Light light)
+ , ("modi",	  Op_modi, 	 Int_Int_Int (ourRem))
+ , ("muli",	  Op_muli, 	 Int_Int_Int (*))
+ , ("mulf",	  Op_mulf, 	 Real_Real_Real (*))
+ , ("negi",	  Op_negi, 	 Int_Int negate)
+ , ("negf",	  Op_negf, 	 Real_Real negate)
+ , ("plane",	  Op_plane, 	 Surface_Obj plane)
+ , ("point",	  Op_point, 	 Real_Real_Real_Point VPoint)
+ , ("pointlight", Op_pointlight, Point_Color_Light pointlight)
+ , ("real",	  Op_real, 	 Int_Real fromIntegral)
+ , ("render",	  Op_render, 	 Render $ render eye)
+ , ("rotatex",	  Op_rotatex, 	 Obj_Real_Obj (\ o d -> rotateX (deg2rad d) o))
+ , ("rotatey",	  Op_rotatey, 	 Obj_Real_Obj (\ o d -> rotateY (deg2rad d) o))
+ , ("rotatez",	  Op_rotatez, 	 Obj_Real_Obj (\ o d -> rotateZ (deg2rad d) o))
+ , ("scale",	  Op_scale, 	 Obj_Real_Real_Real_Obj (\ o x y z -> scale (x,y,z) o))
+ , ("sin",	  Op_sin, 	 Real_Real (sin . deg2rad))
+ , ("sphere",	  Op_sphere, 	 Surface_Obj sphere') -- see comment at end of file
+ , ("spotlight",  Op_spotlight,  Point_Point_Color_Real_Real_Light mySpotlight)
+ , ("sqrt",	  Op_sqrt, 	 Real_Real ourSqrt)
+ , ("subi",	  Op_subi, 	 Int_Int_Int (-))
+ , ("subf",	  Op_subf, 	 Real_Real_Real (-))
+ , ("trace",      Op_trace,      Value_String_Value mytrace)
+ , ("translate",  Op_translate,  Obj_Real_Real_Real_Obj (\ o x y z -> translate (x,y,z) o))
+ , ("union",	  Op_union, 	 Obj_Obj_Obj union)
+ , ("uscale",	  Op_uscale, 	 Obj_Real_Obj (\ o r -> uscale r o))
+ ]
+
+-- This enumerate all possible ways of calling the fixed primitives
+
+-- The datatype captures the type at the *interp* level,
+-- the type of the functional is mirrored on this (using Haskell types).
+
+data PrimOp
+
+    -- 1 argument
+    = Int_Int         (Int -> Int)
+    | Real_Real       (Double -> Double)
+    | Point_Real      (Double -> Double -> Double -> Double)
+    | Surface_Obj     (SurfaceFn Color Double -> Object)
+    | Real_Int        (Double -> Int)
+    | Int_Real        (Int -> Double)
+    | Arr_Int         (Array Int GMLValue -> Int)
+
+    -- 2 arguments
+    | Int_Int_Int     (Int -> Int -> Int)
+    | Int_Int_Bool    (Int -> Int -> Bool)
+    | Real_Real_Real  (Double -> Double -> Double)
+    | Real_Real_Bool  (Double -> Double -> Bool)
+    | Arr_Int_Value   (Array Int GMLValue -> Int -> GMLValue)
+
+    -- Many arguments, typically image mangling
+
+    | Obj_Obj_Obj            (Object -> Object -> Object)
+    | Point_Color_Light      (Coords -> Color -> Light)
+    | Real_Real_Real_Point   (Double -> Double -> Double -> GMLValue)
+    | Obj_Real_Obj           (Object -> Double -> Object)
+    | Obj_Real_Real_Real_Obj (Object -> Double -> Double -> Double -> Object)
+    | Value_String_Value     (GMLValue -> String -> GMLValue)
+
+    | Point_Point_Color_Real_Real_Light
+                             (Coords -> Coords -> Color -> Radian -> Radian -> Light)
+    -- And finally render
+    | Render                 (Color -> [Light] -> Object -> Int -> Double -> Int -> Int -> String -> IO ())
+
+data Type
+    = TyBool
+    | TyInt
+    | TyReal
+    | TyString
+    | TyCode
+    | TyArray
+    | TyPoint
+    | TyObject
+    | TyLight
+    | TyAlpha
+    | TyAbsObj
+      deriving (Eq,Ord,Ix,Bounded)
+
+typeTable =
+  [ ( TyBool,   "Bool")
+  , ( TyInt,    "Int")
+  , ( TyReal,   "Real")
+  , ( TyString, "String")
+  , ( TyCode,   "Code")
+  , ( TyArray,  "Array")
+  , ( TyPoint,  "Point")
+  , ( TyObject, "Object")
+  , ( TyLight,  "Light")
+  , ( TyAlpha,  "<anything>")
+  , ( TyAbsObj, "<abs>")
+  ]
+
+typeNames = array (minBound,maxBound) typeTable
+
+instance Show Type where
+   showsPrec _ op = showString (typeNames ! op)
+
+getPrimOpType :: PrimOp -> [Type]
+getPrimOpType (Int_Int         _) = [TyInt]
+getPrimOpType (Real_Real       _) = [TyReal]
+getPrimOpType (Point_Real      _) = [TyPoint]
+getPrimOpType (Surface_Obj     _) = [TyCode]
+getPrimOpType (Real_Int        _) = [TyReal]
+getPrimOpType (Int_Real        _) = [TyInt]
+getPrimOpType (Arr_Int         _) = [TyArray]
+getPrimOpType (Int_Int_Int     _) = [TyInt,TyInt]
+getPrimOpType (Int_Int_Bool    _) = [TyInt,TyInt]
+getPrimOpType (Real_Real_Real  _) = [TyReal,TyReal]
+getPrimOpType (Real_Real_Bool  _) = [TyReal,TyReal]
+getPrimOpType (Arr_Int_Value   _) = [TyArray,TyInt]
+getPrimOpType (Obj_Obj_Obj            _) = [TyObject,TyObject]
+getPrimOpType (Point_Color_Light      _) = [TyPoint,TyPoint]
+getPrimOpType (Real_Real_Real_Point   _) = [TyReal,TyReal,TyReal]
+getPrimOpType (Obj_Real_Obj           _) = [TyObject,TyReal]
+getPrimOpType (Obj_Real_Real_Real_Obj _) = [TyObject,TyReal,TyReal,TyReal]
+getPrimOpType (Value_String_Value     _) = [TyAlpha,TyString]
+getPrimOpType (Point_Point_Color_Real_Real_Light _)
+                                         = [TyPoint,TyPoint,TyPoint,TyReal,TyReal]
+getPrimOpType (Render                 _) = [TyPoint,
+                                            TyLight,
+                                            TyObject,
+                                            TyInt,
+                                            TyReal,
+                                            TyReal,
+                                            TyReal,
+                                            TyString]
+
+
+-- Some primitives with better error message
+
+mytrace v s = trace (s ++" : "++ show v ++ "\n") v
+
+
+ixGet :: Array Int GMLValue -> Int -> GMLValue
+ixGet arr i
+   | inRange (bounds arr) i = arr ! i
+   | otherwise = error ("failed access with index value "
+                     ++ show i
+                     ++ " (should be between 0 and "
+                     ++ show (snd (bounds arr)) ++ ")")
+
+ourQuot :: Int -> Int -> Int
+ourQuot _ 0 = error "attempt to use divi to divide by 0"
+ourQuot a b = a `quot` b
+
+ourRem :: Int -> Int -> Int
+ourRem _ 0 = error "attempt to use remi to divide by 0"
+ourRem a b = a `rem` b
+
+ourSqrt :: Double -> Double
+ourSqrt n | n < 0     = error "attempt to use sqrt on a negative number"
+          | otherwise = sqrt n
+
+
+mySpotlight p1 p2 col cutoff exp = spotlight p1 p2 col (deg2rad cutoff) exp
+
+-- The problem specification gets the mapping for spheres backwards
+-- (it maps the image from right to left).
+-- We've fixed that in the raytracing library so that it goes from left
+-- to right, but to keep the GML front compatible with the problem
+-- statement, we reverse it here.
+
+sphere' :: SurfaceFn Color Double -> CSG (SurfaceFn Color Double)
+sphere' (SFun f) = sphere (SFun (\i u v -> f i (1 - u) v))
+sphere' s = sphere s
diff --git a/testsuite/tests/hpc/raytrace/Eval.hs b/testsuite/tests/hpc/raytrace/Eval.hs
new file mode 100644
index 0000000000000000000000000000000000000000..7d451e975364ddb451cb85ab3ee2b418cf247183
--- /dev/null
+++ b/testsuite/tests/hpc/raytrace/Eval.hs
@@ -0,0 +1,371 @@
+-- Copyright (c) 2000 Galois Connections, Inc.
+-- All rights reserved.  This software is distributed as
+-- free software under the license in the file "LICENSE",
+-- which is included in the distribution.
+
+module Eval where
+
+import Control.Monad
+import Data.Array
+
+import Geometry
+import CSG
+import Surface
+import Data
+import Parse (rayParse, rayParseF)
+
+class Monad m => MonadEval m where
+  doOp :: PrimOp -> GMLOp -> Stack -> m Stack
+  tick :: m ()
+  err  :: String -> m a
+
+  tick = return ()
+
+newtype Pure a = Pure a deriving Show
+
+instance Functor Pure where
+    fmap = liftM
+
+instance Applicative Pure where
+    pure = Pure
+    (<*>) = ap
+
+instance Monad Pure where
+    Pure x >>= k = k x
+    return       = pure
+
+instance MonadEval Pure where
+  doOp   = doPureOp
+  err  s = error s
+
+instance MonadEval IO where
+  doOp prim op stk = do { -- putStrLn ("Calling " ++ show op
+                          --           ++ " << " ++ show stk ++ " >>")
+                          doAllOp  prim op stk
+                        }
+  err  s = error s
+
+data State
+	= State { env   :: Env
+	        , stack :: Stack
+	        , code  :: Code
+	        } deriving Show
+
+callback :: Env -> Code -> Stack -> Stack
+callback env code stk
+      = case eval (State { env = env, stack = stk, code = code}) of
+             Pure stk -> stk
+
+{-# SPECIALIZE eval ::  State -> Pure Stack #-}
+{-# SPECIALIZE eval ::  State -> IO Stack #-}
+
+eval :: MonadEval m => State -> m Stack
+eval st =
+  do { () <- return () -- $ unsafePerformIO (print st)   -- Functional debugger
+     ; if moreCode st then
+       do { tick             -- tick first, so as to catch loops on new eval.
+            ; st' <- step st
+            ; eval st'
+            }
+        else return (stack st)
+     }
+
+moreCode :: State -> Bool
+moreCode (State {code = []}) = False
+moreCode _                   = True
+
+-- Step has a precondition that there *is* code to run
+{-# SPECIALIZE step ::  State -> Pure State #-}
+{-# SPECIALIZE step ::  State -> IO State #-}
+step :: MonadEval m => State -> m State
+
+-- Rule 1: Pushing BaseValues
+step st@(State{ stack = stack, code = (TBool b):cs })
+    = return (st { stack = (VBool b):stack,    code = cs })
+step st@(State{ stack = stack, code = (TInt i):cs })
+    = return (st { stack = (VInt i):stack,     code = cs })
+step st@(State{ stack = stack, code = (TReal r):cs })
+    = return (st { stack = (VReal r):stack,    code = cs })
+step st@(State{ stack = stack, code = (TString s):cs })
+    = return (st { stack = (VString s):stack,  code = cs })
+
+-- Rule 2: Name binding
+step st@(State{ env = env, stack = (v:stack), code = (TBind id):cs }) =
+  return (State { env = extendEnv env id v, stack = stack,  code = cs })
+step st@(State{ env = env, stack = [], code = (TBind id):cs }) =
+  err "Attempt to bind the top of an empty stack"
+
+-- Rule 3: Name lookup
+step st@(State{ env = env, stack = stack, code = (TId id):cs }) =
+  case (lookupEnv env id) of
+  Just v -> return (st { stack = v:stack,  code = cs })
+  Nothing -> err ("Cannot find value for identifier: " ++ id)
+
+-- Rule 4: Closure creation
+step st@(State{ env = env, stack = stack, code = (TBody body):cs }) =
+  return (st { stack = (VClosure env body):stack, code = cs })
+
+-- Rule 5: Application
+step st@(State{ env = env, stack = (VClosure env' code'):stack, code = TApply:cs }) =
+  do { stk <- eval (State {env = env', stack = stack, code = code'})
+     ; return (st { stack = stk, code = cs })
+     }
+step st@(State{ env = env, stack = [], code = TApply:cs }) =
+  err "Application with an empty stack"
+step st@(State{ env = env, stack = _:_, code = TApply:cs }) =
+  err "Application of a non-closure"
+
+-- Rule 6: Arrays
+step st@(State{ env = env, stack = stack, code = TArray code':cs }) =
+  do { stk <- eval (State {env = env, stack = [], code = code'})
+     ; let last = length stk-1
+     ; let arr = array (0,last) (zip [last,last-1..] stk)
+     ; return (st { stack = (VArray arr):stack, code = cs })
+     }
+
+-- Rule 7 & 8: If statement
+step st@(State{ env = env, stack = (VClosure e2 c2):(VClosure e1 c1):(VBool True):stack, code = TIf:cs }) =
+  do { stk <- eval (State {env = e1, stack = stack, code = c1})
+     ; return (st { stack = stk, code = cs })
+     }
+step st@(State{ env = env, stack = (VClosure e2 c2):(VClosure e1 c1):(VBool False):stack, code = TIf:cs }) =
+  do { stk <- eval (State {env = e2, stack = stack, code = c2})
+     ; return (st { stack = stk, code = cs })
+     }
+step st@(State{ env = env, stack = _, code = TIf:cs }) =
+  err "Incorrect use of if (bad and/or inappropriate values on the stack)"
+
+-- Rule 9: Operators
+step st@(State{ env = env, stack = stack, code = (TOp op):cs }) =
+  do { stk <- doOp (opFnTable ! op) op stack
+     ; return (st { stack = stk, code = cs })
+     }
+
+-- Rule Opps
+step _ = err "Tripped on sidewalk while stepping."
+
+
+--------------------------------------------------------------------------
+-- Operator code
+
+opFnTable :: Array GMLOp PrimOp
+opFnTable = array (minBound,maxBound)
+	          [ (op,prim) | (_,TOp op,prim) <- opcodes ]
+
+
+
+
+doPureOp :: (MonadEval m) => PrimOp -> GMLOp -> Stack -> m Stack
+doPureOp _ Op_render _ =
+    err ("\nAttempting to call render from inside a purely functional callback.")
+doPureOp primOp op stk = doPrimOp primOp op stk -- call the purely functional operators
+
+{-# SPECIALIZE doPrimOp :: PrimOp -> GMLOp -> Stack -> Pure Stack #-}
+{-# SPECIALIZE doPrimOp :: PrimOp -> GMLOp -> Stack -> IO Stack #-}
+{-# SPECIALIZE doPrimOp :: PrimOp -> GMLOp -> Stack -> Abs Stack #-}
+
+doPrimOp ::  (MonadEval m) => PrimOp -> GMLOp -> Stack -> m Stack
+
+-- 1 argument.
+
+doPrimOp (Int_Int fn) _ (VInt i1:stk)
+  = return ((VInt (fn i1)) : stk)
+doPrimOp (Real_Real fn) _ (VReal r1:stk)
+  = return ((VReal (fn r1)) : stk)
+doPrimOp (Point_Real fn) _ (VPoint x y z:stk)
+  = return ((VReal (fn x y z)) : stk)
+
+-- This is where the callbacks happen from...
+doPrimOp (Surface_Obj fn) _ (VClosure env code:stk)
+  = case absapply env code [VAbsObj AbsFACE,VAbsObj AbsU,VAbsObj AbsV] of
+      Just [VReal r3,VReal r2,VReal r1,VPoint c1 c2 c3] ->
+           let
+	       res = prop (color c1 c2 c3) r1 r2 r3
+           in
+               return ((VObject (fn (SConst res))) : stk)
+      _ -> return ((VObject (fn (SFun call))) : stk)
+  where
+        -- The most general case
+        call i r1 r2 =
+          case callback env code [VReal r2,VReal r1,VInt i] of
+             [VReal r3,VReal r2,VReal r1,VPoint c1 c2 c3]
+		 -> prop (color c1 c2 c3) r1 r2 r3
+             stk -> error ("callback failed: incorrectly typed return arguments"
+                         ++ show stk)
+
+doPrimOp (Real_Int fn) _ (VReal r1:stk)
+  = return ((VInt (fn r1)) : stk)
+doPrimOp (Int_Real fn) _ (VInt r1:stk)
+  = return ((VReal (fn r1)) : stk)
+doPrimOp (Arr_Int fn) _ (VArray arr:stk)
+  = return ((VInt (fn arr)) : stk)
+
+-- 2 arguments.
+
+doPrimOp (Int_Int_Int fn) _ (VInt i2:VInt i1:stk)
+  = return ((VInt (fn i1 i2)) : stk)
+doPrimOp (Int_Int_Bool fn) _ (VInt i2:VInt i1:stk)
+  = return ((VBool (fn i1 i2)) : stk)
+doPrimOp (Real_Real_Real fn) _ (VReal r2:VReal r1:stk)
+  = return ((VReal (fn r1 r2)) : stk)
+doPrimOp (Real_Real_Bool fn) _ (VReal r2:VReal r1:stk)
+  = return ((VBool (fn r1 r2)) : stk)
+doPrimOp (Arr_Int_Value fn) _ (VInt i:VArray arr:stk)
+  = return ((fn arr i) : stk)
+
+
+    -- Many arguments, typically image mangling
+
+doPrimOp (Obj_Obj_Obj fn) _ (VObject o2:VObject o1:stk)
+  = return ((VObject (fn o1 o2)) : stk)
+doPrimOp (Point_Color_Light fn) _ (VPoint r g b:VPoint x y z : stk)
+  = return (VLight (fn (x,y,z) (color r g b)) : stk)
+doPrimOp (Point_Point_Color_Real_Real_Light fn) _
+         (VReal r2:VReal r1:VPoint r g b:VPoint x2 y2 z2:VPoint x1 y1 z1 : stk)
+  = return (VLight (fn (x1,y1,z1) (x2,y2,z2) (color r g b) r1 r2) : stk)
+doPrimOp (Real_Real_Real_Point fn) _ (VReal r3:VReal r2:VReal r1:stk)
+  = return ((fn r1 r2 r3) : stk)
+doPrimOp (Obj_Real_Obj fn) _ (VReal r:VObject o:stk)
+  = return (VObject (fn o r) : stk)
+doPrimOp (Obj_Real_Real_Real_Obj fn) _ (VReal r3:VReal r2:VReal r1:VObject o:stk)
+  = return (VObject (fn o r1 r2 r3) : stk)
+
+-- This one is our testing harness
+doPrimOp (Value_String_Value fn) _ (VString s:o:stk)
+  = res `seq` return (res : stk)
+  where
+     res = fn o s
+
+doPrimOp primOp op args
+  = err ("\n\ntype error when attempting to execute builtin primitive \"" ++
+          show op ++ "\"\n\n| " ++
+          show op ++ " takes " ++ show (length types) ++ " argument" ++ s
+	           ++ " with" ++ the ++ " type" ++ s ++ "\n|\n|" ++
+          "      " ++ unwords [ show ty | ty <- types ]  ++ "\n|\n|" ++
+          " currently, the relevent argument" ++ s ++ " on the stack " ++
+	          are ++ "\n|\n| " ++
+          unwords [ "(" ++ show arg ++ ")"
+                  | arg <-  reverse (take (length types) args) ]  ++ "\n|\n| "
+          ++ "    (top of stack is on the right hand side)\n\n")
+  where
+      len   = length types
+      s =  (if len /= 1 then "s" else "")
+      are =  (if len /= 1 then "are" else "is")
+      the =  (if len /= 1 then "" else " the")
+      types = getPrimOpType primOp
+
+
+-- Render is somewhat funny, because it can only get called at top level.
+-- All other operations are purely functional.
+
+doAllOp :: PrimOp -> GMLOp -> Stack -> IO Stack
+doAllOp (Render render) Op_render
+			   (VString str:VInt ht:VInt wid:VReal fov
+                           :VInt dep:VObject obj:VArray arr
+                           :VPoint r g b : stk)
+  = do { render (color r g b) lights obj dep (fov * (pi / 180.0)) wid ht str
+       ; return stk
+       }
+  where
+      lights = [ light | (VLight light) <- elems arr ]
+
+doAllOp primOp op stk = doPrimOp primOp op stk -- call the purely functional operators
+
+------------------------------------------------------------------------------
+{-
+ - Abstract evaluation.
+ -
+ - The idea is you check for constant code that
+ - (1) does not look at its arguments
+ - (2) gives a fixed result
+ -
+ - We run for 100 steps.
+ -
+ -}
+
+absapply :: Env -> Code -> Stack -> Maybe Stack
+absapply env code stk =
+     case runAbs (eval (State env stk code)) 100 of
+       AbsState stk _ -> Just stk
+       AbsFail m      -> Nothing
+
+newtype Abs a   = Abs { runAbs :: Int -> AbsState a }
+data AbsState a = AbsState a !Int
+                | AbsFail String
+
+instance Functor Abs where
+    fmap = liftM
+
+instance Applicative Abs where
+    pure x = Abs (\ n -> AbsState x n)
+    (<*>) = ap
+
+instance Monad Abs where
+    (Abs fn) >>= k = Abs (\ s -> case fn s of
+			           AbsState r s' -> runAbs (k r) s'
+                                   AbsFail m     -> AbsFail m)
+    return       = pure
+
+instance MonadFail Abs where
+    fail s = Abs (\ n -> AbsFail s)
+
+instance MonadEval Abs where
+  doOp = doAbsOp
+  err  = fail
+  tick = Abs (\ n -> if n <= 0
+                     then AbsFail "run out of time"
+                     else AbsState () (n-1))
+
+doAbsOp :: PrimOp -> GMLOp -> Stack -> Abs Stack
+doAbsOp _ Op_point (VReal r3:VReal r2:VReal r1:stk)
+               = return ((VPoint r1 r2 r3) : stk)
+ -- here, you could have an (AbsPoint :: AbsObj) which you put on the
+ -- stack, with any object in the three fields.
+doAbsOp _ op _ = err ("operator not understood (" ++ show op ++ ")")
+
+------------------------------------------------------------------------------
+-- Driver
+
+mainEval :: Code -> IO ()
+mainEval prog = do { stk <- eval (State emptyEnv [] prog)
+                   ; return ()
+                   }
+{-
+  * Oops, one of the example actually has something
+  * on the stack at the end.
+  * Oh well...
+		   ; if null stk
+                     then return ()
+		     else do { putStrLn done
+                             ; print stk
+                             }
+-}
+
+done = "Items still on stack at (successful) termination of program"
+
+------------------------------------------------------------------------------
+-- testing
+
+test :: String -> Pure Stack
+test is = eval (State emptyEnv [] (rayParse is))
+
+testF :: String -> IO Stack
+testF is = do prog <- rayParseF is
+              eval (State emptyEnv [] prog)
+
+testA :: String -> Either String (Stack,Int)
+testA is = case runAbs (eval (State emptyEnv
+                                    [VAbsObj AbsFACE,VAbsObj AbsU,VAbsObj AbsV]
+                                    (rayParse is))) 100 of
+             AbsState a n -> Right (a,n)
+             AbsFail m -> Left m
+
+abstest1 = "1.0 0.0 0.0 point /red { /v /u /face red 1.0 0.0 1.0 } apply"
+
+-- should be [3:: Int]
+et1 = test "1 /x { x } /f 2 /x f apply x addi"
+
+
+
+
+
diff --git a/testsuite/tests/hpc/raytrace/Geometry.hs b/testsuite/tests/hpc/raytrace/Geometry.hs
new file mode 100644
index 0000000000000000000000000000000000000000..39592bcf1b6e859da8fe9055ded366777a4669f6
--- /dev/null
+++ b/testsuite/tests/hpc/raytrace/Geometry.hs
@@ -0,0 +1,313 @@
+-- Copyright (c) 2000 Galois Connections, Inc.
+-- All rights reserved.  This software is distributed as
+-- free software under the license in the file "LICENSE",
+-- which is included in the distribution.
+
+module Geometry
+    ( Coords
+    , Ray
+    , Point  -- abstract
+    , Vector -- abstract
+    , Matrix -- abstract
+    , Color  -- abstract
+    , Box(..)
+    , Radian
+    , matrix
+    , coord
+    , color
+    , uncolor
+    , xCoord , yCoord , zCoord
+    , xComponent , yComponent , zComponent
+    , point
+    , vector
+    , nearV
+    , point_to_vector
+    , vector_to_point
+    , dot
+    , cross
+    , tangents
+    , addVV
+    , addPV
+    , subVV
+    , negV
+    , subPP
+    , norm
+    , normalize
+    , dist2
+    , sq
+    , distFrom0Sq
+    , distFrom0
+    , multSV
+    , multMM
+    , transposeM
+    , multMV
+    , multMP
+    , multMQ
+    , multMR
+    , white
+    , black
+    , addCC
+    , subCC
+    , sumCC
+    , multCC
+    , multSC
+    , nearC
+    , offsetToPoint
+    , epsilon
+    , inf
+    , nonZero
+    , eqEps
+    , near
+    , clampf
+    ) where
+
+
+type Coords = (Double,Double,Double)
+
+type Ray = (Point,Vector)    -- origin of ray, and unit vector giving direction
+
+data Point  = P !Double !Double !Double -- implicit extra arg of 1
+    deriving (Show)
+data Vector = V !Double !Double !Double -- implicit extra arg of 0
+    deriving (Show, Eq)
+data Matrix = M !Quad   !Quad   !Quad   !Quad
+    deriving (Show)
+
+data Color  = C !Double !Double !Double
+    deriving (Show, Eq)
+
+data Box = B !Double !Double !Double !Double !Double !Double
+    deriving (Show)
+
+data Quad   = Q !Double !Double !Double !Double
+    deriving (Show)
+
+type Radian = Double
+
+type Tup4 a = (a,a,a,a)
+
+--{-# INLINE matrix #-}
+matrix :: Tup4 (Tup4 Double) -> Matrix
+matrix ((m11, m12, m13, m14),
+          (m21, m22, m23, m24),
+          (m31, m32, m33, m34),
+          (m41, m42, m43, m44))
+  = M (Q m11 m12 m13 m14)
+      (Q m21 m22 m23 m24)
+      (Q m31 m32 m33 m34)
+      (Q m41 m42 m43 m44)
+
+coord x y z = (x, y, z)
+
+color r g b = C r g b
+
+uncolor (C r g b) = (r,g,b)
+
+{-# INLINE xCoord #-}
+xCoord (P x y z) = x
+{-# INLINE yCoord #-}
+yCoord (P x y z) = y
+{-# INLINE zCoord #-}
+zCoord (P x y z) = z
+
+{-# INLINE xComponent #-}
+xComponent (V x y z) = x
+{-# INLINE yComponent #-}
+yComponent (V x y z) = y
+{-# INLINE zComponent #-}
+zComponent (V x y z) = z
+
+point :: Double -> Double -> Double -> Point
+point x y z = P x y z
+
+vector :: Double -> Double -> Double -> Vector
+vector x y z = V x y z
+
+nearV :: Vector -> Vector -> Bool
+nearV (V a b c) (V d e f) = a `near` d && b `near` e && c `near` f
+
+point_to_vector :: Point -> Vector
+point_to_vector (P x y z) = V x y z
+
+vector_to_point :: Vector -> Point
+vector_to_point (V x y z)  = P x y z
+
+{-# INLINE vector_to_quad #-}
+vector_to_quad :: Vector -> Quad
+vector_to_quad (V x y z) = Q x y z 0
+
+{-# INLINE point_to_quad #-}
+point_to_quad :: Point -> Quad
+point_to_quad (P x y z) = Q x y z 1
+
+{-# INLINE quad_to_point #-}
+quad_to_point :: Quad -> Point
+quad_to_point (Q x y z _) = P x y z
+
+{-# INLINE quad_to_vector #-}
+quad_to_vector :: Quad -> Vector
+quad_to_vector (Q x y z _) = V x y z
+
+--{-# INLINE dot #-}
+dot :: Vector -> Vector -> Double
+dot (V x1 y1 z1) (V x2 y2 z2) = x1 * x2 + y1 * y2 + z1 * z2
+
+cross :: Vector -> Vector -> Vector
+cross (V x1 y1 z1) (V x2 y2 z2)
+  = V (y1 * z2 - z1 * y2) (z1 * x2 - x1 * z2) (x1 * y2 - y1 * x2)
+
+-- assumption: the input vector is a normal
+tangents :: Vector -> (Vector, Vector)
+tangents v@(V x y z)
+  = (v1, v `cross` v1)
+  where v1 | x == 0    = normalize (vector 0 z (-y))
+	   | otherwise = normalize (vector (-y) x 0)
+
+{-# INLINE dot4 #-}
+dot4 :: Quad -> Quad -> Double
+dot4 (Q x1 y1 z1 w1) (Q x2 y2 z2 w2) = x1 * x2 + y1 * y2 + z1 * z2 + w1 * w2
+
+addVV :: Vector -> Vector -> Vector
+addVV (V x1 y1 z1) (V x2 y2 z2)
+    = V (x1 + x2) (y1 + y2) (z1 + z2)
+
+addPV :: Point -> Vector -> Point
+addPV (P x1 y1 z1) (V x2 y2 z2)
+    = P (x1 + x2) (y1 + y2) (z1 + z2)
+
+subVV :: Vector -> Vector -> Vector
+subVV (V x1 y1 z1) (V x2 y2 z2)
+    = V (x1 - x2) (y1 - y2) (z1 - z2)
+
+negV :: Vector -> Vector
+negV (V x1 y1 z1)
+    = V (-x1) (-y1) (-z1)
+
+subPP :: Point -> Point -> Vector
+subPP (P x1 y1 z1) (P x2 y2 z2)
+    = V (x1 - x2) (y1 - y2) (z1 - z2)
+
+--{-# INLINE norm #-}
+norm :: Vector -> Double
+norm (V x y z) = sqrt (sq x + sq y + sq z)
+
+--{-# INLINE normalize #-}
+-- normalize a vector to a unit vector
+normalize :: Vector -> Vector
+normalize v@(V x y z)
+             | norm /= 0 = multSV (1/norm) v
+	     | otherwise = error "normalize empty!"
+    where norm = sqrt (sq x + sq y + sq z)
+
+-- This does computes the distance *squared*
+dist2 :: Point -> Point -> Double
+dist2 us vs = sq x + sq y + sq z
+    where
+       (V x y z) = subPP us vs
+
+{-# INLINE sq #-}
+sq :: Double -> Double
+sq d = d * d
+
+{-# INLINE distFrom0Sq #-}
+distFrom0Sq :: Point -> Double  -- Distance of point from origin.
+distFrom0Sq (P x y z) = sq x + sq y + sq z
+
+{-# INLINE distFrom0 #-}
+distFrom0 :: Point -> Double  -- Distance of point from origin.
+distFrom0 p = sqrt (distFrom0Sq p)
+
+--{-# INLINE multSV #-}
+multSV :: Double -> Vector -> Vector
+multSV k (V x y z) = V (k*x) (k*y) (k*z)
+
+--{-# INLINE multMM #-}
+multMM :: Matrix -> Matrix -> Matrix
+multMM m1@(M q1 q2 q3 q4) m2
+     = M (multMQ m2' q1)
+         (multMQ m2' q2)
+         (multMQ m2' q3)
+         (multMQ m2' q4)
+  where
+     m2' = transposeM m2
+
+{-# INLINE transposeM #-}
+transposeM :: Matrix -> Matrix
+transposeM (M (Q e11  e12  e13  e14)
+              (Q e21  e22  e23  e24)
+              (Q e31  e32  e33  e34)
+              (Q e41  e42  e43  e44)) = (M (Q e11  e21  e31  e41)
+                                           (Q e12  e22  e32  e42)
+                                           (Q e13  e23  e33  e43)
+                                           (Q e14  e24  e34  e44))
+
+
+--multMM m1 m2 = [map (dot4 row) (transpose m2) | row <- m1]
+
+--{-# INLINE multMV #-}
+multMV :: Matrix -> Vector -> Vector
+multMV m v = quad_to_vector (multMQ m (vector_to_quad v))
+
+--{-# INLINE multMP #-}
+multMP :: Matrix -> Point -> Point
+multMP m p = quad_to_point (multMQ m (point_to_quad p))
+
+-- mat vec = map (dot4 vec) mat
+
+{-# INLINE multMQ #-}
+multMQ :: Matrix -> Quad -> Quad
+multMQ (M q1 q2 q3 q4) q
+       = Q (dot4 q q1)
+           (dot4 q q2)
+           (dot4 q q3)
+           (dot4 q q4)
+
+{-# INLINE multMR #-}
+multMR :: Matrix -> Ray -> Ray
+multMR m (r, v) = (multMP m r, multMV m v)
+
+white :: Color
+white = C 1 1 1
+black :: Color
+black = C 0 0 0
+
+addCC :: Color -> Color -> Color
+addCC (C a b c) (C d e f) = C (a+d) (b+e) (c+f)
+
+subCC :: Color -> Color -> Color
+subCC (C a b c) (C d e f) = C (a-d) (b-e) (c-f)
+
+sumCC :: [Color] -> Color
+sumCC = foldr addCC black
+
+multCC :: Color -> Color -> Color
+multCC (C a b c) (C d e f) = C (a*d) (b*e) (c*f)
+
+multSC :: Double -> Color -> Color
+multSC k       (C a b c) = C (a*k) (b*k) (c*k)
+
+nearC :: Color -> Color -> Bool
+nearC (C a b c) (C d e f) = a `near` d && b `near` e && c `near` f
+
+offsetToPoint :: Ray -> Double -> Point
+offsetToPoint (r,v) i = r `addPV` (i `multSV` v)
+
+--
+
+epsilon, inf :: Double      -- aproximate zero and infinity
+epsilon = 1.0e-10
+inf = 1.0e20
+
+nonZero :: Double -> Double         -- Use before a division. It makes definitions
+nonZero x | x > epsilon  = x        -- more complete and I bet the errors that get
+          | x < -epsilon = x        -- introduced will be undetectable if epsilon
+          | otherwise    = epsilon  -- is small enough
+
+
+eqEps x y = abs (x-y) < epsilon
+near = eqEps
+
+clampf :: Double -> Double
+clampf p | p < 0 = 0
+         | p > 1 = 1
+         | True  = p
diff --git a/testsuite/tests/hpc/raytrace/Illumination.hs b/testsuite/tests/hpc/raytrace/Illumination.hs
new file mode 100644
index 0000000000000000000000000000000000000000..34365b9e3cae79076d4378f775b923ca7d96d473
--- /dev/null
+++ b/testsuite/tests/hpc/raytrace/Illumination.hs
@@ -0,0 +1,231 @@
+-- Copyright (c) 2000 Galois Connections, Inc.
+-- All rights reserved.  This software is distributed as
+-- free software under the license in the file "LICENSE",
+-- which is included in the distribution.
+
+-- Modified to use stdout (for testing)
+
+module Illumination
+    ( Object
+    , Light (..)
+    , light, pointlight, spotlight
+    , render
+    ) where
+
+import Data.Array
+import Data.Char(chr)
+import Data.Maybe
+
+import Geometry
+import CSG
+import Surface
+import Misc
+
+type Object = CSG (SurfaceFn Color Double)
+
+data Cxt = Cxt {ambient::Color, lights::[Light], object::Object, depth::Int}
+        deriving Show
+
+render :: (Matrix,Matrix) -> Color -> [Light] -> Object -> Int ->
+          Radian -> Int -> Int -> String -> IO ()
+render (m,m') amb ls obj dep fov wid ht file
+  = do { debugging
+       ; txt <- readFile "galois.sample"
+       ; let vals = read txt
+       ; let rt_vals = showBitmap' wid ht pixels
+       ; if length vals /= length rt_vals
+           then print ("BAD LENGTH",length vals,length rt_vals)
+           else do {
+                   ; let cmp = sum(zipWith (\ a b -> abs (a - b) * abs (a - b)) vals rt_vals)
+                   ; print $ if cmp <= (length vals * 16) then ("GOOD MATCH") else ("BAD MATCH:" ++ show cmp)
+                   }}
+
+  where
+    debugging = return ()
+{-
+                do { putStrLn (show cxt)
+                   ; putStrLn (show (width, delta, aspect, left, top))
+                   }
+-}
+    obj' = transform (m',m) obj
+    ls'  = [ transformLight m' l | l <- ls ]
+    pixelA = listArray ((1,1), (ht,wid))
+                       [ illumination cxt (start,pixel i j)
+                       | j <- take ht  [0.5..]
+                       , i <- take wid [0.5..] ]
+    antiA  = pixelA //
+             [ (ix, superSample ix (pixelA ! ix))
+             | j <- [2 .. ht - 1], i <- [2 .. wid - 1]
+             , let ix = (j, i)
+             , contrast ix pixelA ]
+    pixels = [ [ illumination cxt (start,pixel i j) | i<- take wid [0.5..] ]
+             | j <- take ht [0.5..]
+             ]
+    cxt    = Cxt {ambient=amb, lights=ls',  object=obj', depth=dep}
+    start  = point  0 0 (-1)
+    width  = 2 * tan (fov/2)
+    delta  = width / fromIntegral wid
+    aspect = fromIntegral ht / fromIntegral wid
+    left   = - width / 2
+    top    = - left * aspect
+    pixel i j = vector (left + i*delta) (top - j*delta) 1
+
+    superSample (y, x) col = avg $ col:
+      [ illumination cxt (start, pixel (fromIntegral x - 0.5 + xd) (fromIntegral y - 0.5 + yd))
+      | (xd, yd) <- [(-0.333, 0.0), (0.333, 0.0), (0.0, -0.333), (0.0, 0.333)]
+      ]
+
+avg cs = divN (fromIntegral (length cs)) (uncolor (sumCC cs))
+  where divN n (r,g,b) = color (r / n) (g / n) (b / n)
+
+contrast :: (Int, Int) -> Array (Int, Int) Color -> Bool
+contrast (x, y) arr = any diffMax [ subCC cur (arr ! (x + xd, y + yd))
+                                  | xd <- [-1, 1], yd <- [-1, 1]
+                                  ]
+  where cur = arr ! (x, y)
+        diffMax col = (abs r) > 0.25 || (abs g) >  0.2 || (abs b) > 0.4
+           where
+                 (r,g,b) = uncolor col
+
+
+illumination :: Cxt -> Ray -> Color
+illumination cxt (r,v)
+  | depth cxt <= 0 = black
+  | otherwise     = case castRay (r,v) (object cxt) of
+                      Nothing -> black
+                      Just info -> illum (cxt{depth=(depth cxt)-1}) info v
+
+illum :: Cxt -> (Point,Vector,Properties Color Double) -> Vector -> Color
+illum cxt (pos,normV,(col,kd,ks,n)) v
+  = ambTerm `addCC` difTerm `addCC` spcTerm `addCC` recTerm
+  where
+    visibleLights = unobscured pos (object cxt) (lights cxt) normV
+    d = depth cxt
+    amb = ambient cxt
+    newV = subVV v (multSV (2 * dot normV v) normV)
+
+    ambTerm = multSC kd (multCC amb col)
+    difTerm = multSC kd (sumCC [multSC (dot normV lj) (multCC intensity col)
+	       |(loc,intensity) <- visibleLights,
+	       let lj = normalize ({- pos `subVV` -} loc)])
+    -- ZZ might want to avoid the phong, when you can...
+    spcTerm = multSC ks (sumCC [multSC ((dot normV hj) ** n ) (multCC intensity col)
+	       |(loc,intensity) <- visibleLights,
+	       -- ZZ note this is specific to the light at infinity
+	       let lj = {- pos `subVV` -} normalize loc,
+	       let hj = normalize (lj `subVV` normalize v)])
+    recTerm  = if recCoeff `nearC` black then black else multCC recCoeff recRay
+    recCoeff = multSC ks col
+    recRay   = illumination cxt (pos,newV)
+
+showBitmapA :: Int -> Int -> Array (Int, Int) Color -> String
+showBitmapA wid ht arr
+  = header ++ concatMap scaleColor (elems arr)
+  where
+    scaleColor col = [scalePixel r, scalePixel g, scalePixel b]
+           where (r,g,b) = uncolor col
+    header = "P6\n#Galois\n" ++ show wid ++ " " ++ show ht ++ "\n255\n"
+
+showBitmap :: Int -> Int ->[[Color]] -> String
+showBitmap wid ht pss
+-- type of assert  | length pss == ht && all (\ ps -> length ps == wid) pss
+  = header ++ concat [[scalePixel r,scalePixel g,scalePixel b]
+                      | ps <- pss, (r,g,b) <- map uncolor ps]
+  where
+    header = "P6\n#Galois\n" ++ show wid ++ " " ++ show ht ++ "\n255\n"
+showBitmap _ _ _ = error "incorrect length of bitmap string"
+
+scalePixel :: Double -> Char
+scalePixel p = chr (floor (clampf p * 255))
+
+showBitmap' :: Int -> Int ->[[Color]] -> [Int]
+showBitmap' wid ht pss
+-- type of assert  | length pss == ht && all (\ ps -> length ps == wid) pss
+  = concat [ concat [  [scalePixel' r,scalePixel' g,scalePixel' b]
+                    | (r,g,b) <- map uncolor ps]
+           | ps <- pss ]
+  where
+    header = "P3\n#Galois\n" ++ show wid ++ " " ++ show ht ++ "\n255\n"
+showBitmap' _ _ _ = error "incorrect length of bitmap string"
+
+scalePixel' :: Double -> Int
+scalePixel' p = floor (clampf p * 255)
+
+-- Lights
+
+data Light = Light Vector Color
+           | PointLight Point Color
+           | SpotLight Point Point Color Radian Double
+   deriving Show
+
+light :: Coords -> Color -> Light
+light (x,y,z) color =
+  Light (normalize (vector (-x) (-y) (-z))) color
+pointlight (x,y,z) color =
+  PointLight (point x y z) color
+spotlight (x,y,z) (p,q,r) col cutoff exp =
+  SpotLight (point x y z) (point p q r) col cutoff exp
+
+transformLight m (Light v c) = Light (multMV m v) c
+transformLight m (PointLight p c) = PointLight (multMP m p) c
+transformLight m (SpotLight p q c r d) = SpotLight (multMP m p) (multMP m q) c r d
+
+unobscured :: Point -> Object -> [Light] ->  Vector -> [(Vector,Color)]
+unobscured pos obj lights normV = catMaybes (map (unobscure pos obj normV) lights)
+
+unobscure :: Point -> Object -> Vector ->  Light -> Maybe (Vector,Color)
+unobscure pos obj normV (Light vec color)
+  -- ZZ probably want to make this faster
+  | vec `dot` normV < 0 = Nothing
+  | intersects (pos `addPV` (0.0001 `multSV` vec),vec) obj = Nothing
+  | otherwise               = Just (vec,color)
+unobscure pos obj normV (PointLight pp color)
+  | vec `dot` normV < 0     = Nothing
+  | intersectWithin (pos `addPV` (0.0001 `multSV` (normalize vec)), vec) obj = Nothing
+  | otherwise               = Just (vec,is)
+      where vec = pp `subPP` pos
+            is  = attenuate vec color
+unobscure org obj normV (SpotLight pos at color cutoff exp)
+  | vec `dot` normV < 0                                                 = Nothing
+  | intersectWithin (org `addPV` (0.0001 `multSV` (normalize vec)), vec) obj = Nothing
+  | angle > cutoff                                                      = Nothing
+  | otherwise                                                           = Just (vec, is)
+      where vec   = pos `subPP` org
+            vec'  = pos `subPP` at
+            angle = acos (normalize vec `dot` (normalize vec'))
+
+            asp   = normalize (at `subPP` pos)
+            qsp   = normalize (org `subPP` pos)
+            is    = attenuate vec (((asp `dot` qsp) ** exp) `multSC` color)
+
+attenuate :: Vector -> Color -> Color
+attenuate vec color = (100 / (99 + sq (norm vec))) `multSC` color
+
+--
+
+castRay ray p
+  = case intersectRayWithObject ray p of
+    (True, _, _)                     -> Nothing -- eye is inside
+    (False, [], _)                   -> Nothing -- eye is inside
+    (False, (0, b, _) : _, _)        -> Nothing -- eye is inside
+    (False, (i, False, _) : _, _)    -> Nothing -- eye is inside
+    (False, (t, b, (s, p0)) : _, _)     ->
+	let (v, prop) = surface s p0 in
+	    Just (offsetToPoint ray t, v, prop)
+
+intersects ray p
+  = case intersectRayWithObject ray p of
+    (True, _, _)                  -> False
+    (False, [], _)                -> False
+    (False, (0, b, _) : _, _)     -> False
+    (False, (i, False, _) : _, _) -> False
+    (False, (i, b, _) : _, _)     -> True
+
+intersectWithin :: Ray -> Object -> Bool
+intersectWithin ray p
+  = case intersectRayWithObject ray p of
+    (True, _, _)                  -> False -- eye is inside
+    (False, [], _)                -> False -- eye is inside
+    (False, (0, b, _) : _, _)     -> False -- eye is inside
+    (False, (i, False, _) : _, _) -> False -- eye is inside
+    (False, (t, b, _) : _, _)     -> t < 1.0
diff --git a/testsuite/tests/hpc/raytrace/Intersections.hs b/testsuite/tests/hpc/raytrace/Intersections.hs
new file mode 100644
index 0000000000000000000000000000000000000000..58210c30f95dc70d5222f1897f1290916f58d860
--- /dev/null
+++ b/testsuite/tests/hpc/raytrace/Intersections.hs
@@ -0,0 +1,404 @@
+-- Copyright (c) 2000 Galois Connections, Inc.
+-- All rights reserved.  This software is distributed as
+-- free software under the license in the file "LICENSE",
+-- which is included in the distribution.
+
+module Intersections
+    ( intersectRayWithObject,
+      quadratic
+    ) where
+
+import Data.Maybe(isJust)
+
+import Construct
+import Geometry
+import Interval
+import Misc
+
+-- This is factored into two bits.  The main function `intersections'
+-- intersects a line with an object.
+-- The wrapper call `intersectRayWithObject' coerces this to an intersection
+-- with a ray by clamping the result to start at 0.
+
+intersectRayWithObject ray p
+  = clampIntervals is
+  where is = intersections ray p
+
+clampIntervals (True, [], True) = (False, [(0, True, undefined)], True)
+clampIntervals empty@(False, [], False) = empty
+clampIntervals (True, is@((i, False, p) : is'), isOpen)
+  | i `near` 0 || i < 0
+  = clampIntervals (False, is', isOpen)
+  | otherwise
+  = (False, (0, True, undefined) : is, isOpen)
+clampIntervals ivals@(False, is@((i, True, p) : is'), isOpen)
+  | i `near` 0 || i < 0
+  -- can unify this with first case...
+  = clampIntervals (True, is', isOpen)
+  | otherwise
+  = ivals
+
+intersections ray (Union p q)
+  = unionIntervals is js
+  where is = intersections ray p
+	js = intersections ray q
+
+intersections ray (Intersect p q)
+  = intersectIntervals is js
+  where is = intersections ray p
+	js = intersections ray q
+
+intersections ray (Difference p q)
+  = differenceIntervals is (negateSurfaces js)
+  where is = intersections ray p
+	js = intersections ray q
+
+intersections ray (Transform m m' p)
+  = mapI (xform m) is
+  where is = intersections (m' `multMR` ray) p
+	xform m (i, b, (s, p0)) = (i, b, (transformSurface m s, p0))
+
+intersections ray (Box box p)
+  | intersectWithBox ray box = intersections ray p
+  | otherwise = emptyIList
+
+intersections ray p@(Plane s)
+  = intersectPlane ray s
+
+intersections ray p@(Sphere s)
+  = intersectSphere ray s
+
+intersections ray p@(Cube s)
+  = intersectCube ray s
+
+intersections ray p@(Cylinder s)
+  = intersectCylinder ray s
+
+intersections ray p@(Cone s)
+  = intersectCone ray s
+
+negateSurfaces :: IList (Surface, Texture a) -> IList (Surface, Texture a)
+negateSurfaces = mapI negSurf
+  where negSurf (i, b, (s,t)) = (i, b, (negateSurface s, t))
+
+negateSurface (Planar p0 v0 v1)
+  = Planar p0 v1 v0
+negateSurface (Spherical p0 v0 v1)
+  = Spherical p0 v1 v0
+negateSurface (Cylindrical p0 v0 v1)
+  = Cylindrical p0 v1 v0
+negateSurface (Conic p0 v0 v1)
+  = Conic p0 v1 v0
+
+transformSurface m (Planar p0 v0 v1)
+  = Planar p0' v0' v1'
+  where p0' = multMP m p0
+	v0' = multMV m v0
+	v1' = multMV m v1
+
+transformSurface m (Spherical p0 v0 v1)
+  = Spherical p0' v0' v1'
+  where p0' = multMP m p0
+	v0' = multMV m v0
+	v1' = multMV m v1
+
+-- ditto as above
+transformSurface m (Cylindrical p0 v0 v1)
+  = Cylindrical p0' v0' v1'
+  where p0' = multMP m p0
+	v0' = multMV m v0
+	v1' = multMV m v1
+
+transformSurface m (Conic p0 v0 v1)
+  = Conic p0' v0' v1'
+  where p0' = multMP m p0
+	v0' = multMV m v0
+	v1' = multMV m v1
+
+--------------------------------
+-- Plane
+--------------------------------
+
+intersectPlane :: Ray -> a -> IList (Surface, Texture a)
+intersectPlane ray texture = intersectXZPlane PlaneFace ray 0.0 texture
+
+intersectXZPlane :: Face -> Ray -> Double -> a -> IList (Surface, Texture a)
+intersectXZPlane n (r,v) yoffset texture
+  | b `near` 0
+  = -- the ray is parallel to the plane - it's either all in, or all out
+    if y `near` yoffset || y < yoffset then openIList else emptyIList
+
+    -- The line intersects the plane. Find t such that
+    -- (x + at, y + bt, z + ct) intersects the X-Z plane.
+    -- t may be negative (the ray starts within the halfspace),
+    -- but we'll catch that later when we clamp the intervals
+
+  | b < 0	-- the ray is pointing downwards
+  = (False, [mkEntry (t0, (Planar p0 v0 v1, (n, p0, texture)))], True)
+
+  | otherwise	-- the ray is pointing upwards
+  = (True,  [mkExit (t0, (Planar p0 v0 v1, (n, p0, texture)))],  False)
+
+  where t0 = (yoffset-y) / b
+	x0 = x + a * t0
+	z0 = z + c * t0
+	p0 = point x0 0 z0
+	v0 = vector 0 0 1
+	v1 = vector 1 0 0
+
+	x = xCoord r
+	y = yCoord r
+	z = zCoord r
+	a = xComponent v
+	b = yComponent v
+	c = zComponent v
+
+
+--------------------------------
+-- Sphere
+--------------------------------
+
+intersectSphere :: Ray -> a -> IList (Surface, Texture a)
+intersectSphere ray@(r, v) texture
+  = -- Find t such that (x + ta, y + tb, z + tc) intersects the
+    -- unit sphere, that is, such that:
+    --   (x + ta)^2 + (y + tb)^2 + (z + tc)^2 = 1
+    -- This is a quadratic equation in t:
+    --   t^2(a^2 + b^2 + c^2) + 2t(xa + yb + zc) + (x^2 + y^2 + z^2 - 1) = 0
+    let c1 = sq a + sq b + sq c
+	c2 = 2 * (x * a + y * b + z * c)
+	c3 = sq x + sq y + sq z - 1
+    in
+	case quadratic c1 c2 c3 of
+        Nothing -> emptyIList
+        Just (t1, t2) -> entryexit (g t1) (g t2)
+    where x = xCoord r
+	  y = yCoord r
+	  z = zCoord r
+	  a = xComponent v
+	  b = yComponent v
+	  c = zComponent v
+	  g t = (t, (Spherical origin v1 v2, (SphereFace, p0, texture)))
+	      where origin = point 0 0 0
+		    x0 = x + t * a
+		    y0 = y + t * b
+		    z0 = z + t * c
+		    p0 = point  x0 y0 z0
+		    v0 = vector x0 y0 z0
+		    (v1, v2) = tangents v0
+
+
+--------------------------------
+-- Cube
+--------------------------------
+
+intersectCube :: Ray -> a -> IList (Surface, Texture a)
+intersectCube ray@(r, v) texture
+  = -- The set of t such that (x + at, y + bt, z + ct) lies within
+    -- the unit cube satisfies:
+    --    0 <= x + at <= 1,  0 <= y + bt <= 1,  0 <= z + ct <= 1
+    -- The minimum and maximum such values of t give us the two
+    -- intersection points.
+    case intersectSlabIval (intersectCubeSlab face2 face3 x a)
+	(intersectSlabIval (intersectCubeSlab face5 face4 y b)
+			   (intersectCubeSlab face0 face1 z c)) of
+    Nothing -> emptyIList
+    Just (t1, t2) -> entryexit (g t1) (g t2)
+  where g ((n, v0, v1), t)
+	  = (t, (Planar p0 v0 v1, (n, p0, texture)))
+	  where p0 = offsetToPoint ray t
+	face0 = (CubeFront,  vectorY, vectorX)
+	face1 = (CubeBack,   vectorX, vectorY)
+	face2 = (CubeLeft,   vectorZ, vectorY)
+	face3 = (CubeRight,  vectorY, vectorZ)
+	face4 = (CubeTop,    vectorZ, vectorX)
+	face5 = (CubeBottom, vectorX, vectorZ)
+	vectorX = vector 1 0 0
+	vectorY = vector 0 1 0
+	vectorZ = vector 0 0 1
+	x = xCoord r
+	y = yCoord r
+	z = zCoord r
+	a = xComponent v
+	b = yComponent v
+	c = zComponent v
+
+intersectCubeSlab n m w d
+  | d `near` 0 = if (0 <= w) && (w <= 1)
+		 then Just ((n, -inf), (m, inf)) else Nothing
+  | d > 0      = Just ((n,  (-w)/d), (m, (1-w)/d))
+  | otherwise  = Just ((m, (1-w)/d), (n,  (-w)/d))
+
+intersectSlabIval Nothing Nothing  = Nothing
+intersectSlabIval Nothing (Just i) = Nothing
+intersectSlabIval (Just i) Nothing = Nothing
+intersectSlabIval (Just (nu1@(n1, u1), mv1@(m1, v1)))
+		  (Just (nu2@(n2, u2), mv2@(m2, v2)))
+  = checkInterval (nu, mv)
+  where nu = if u1 < u2 then nu2 else nu1
+	mv = if v1 < v2 then mv1 else mv2
+	checkInterval numv@(nu@(_, u), (m, v))
+	  -- rounding error may force us to push v out a bit
+	  | u `near` v = Just (nu, (m, u + epsilon))
+	  | u    <   v = Just numv
+	  | otherwise  = Nothing
+
+
+--------------------------------
+-- Cylinder
+--------------------------------
+
+intersectCylinder :: Ray -> a -> IList (Surface, Texture a)
+intersectCylinder ray texture
+  = isectSide `intersectIntervals` isectTop `intersectIntervals` isectBottom
+  where isectSide   = intersectCylSide ray texture
+	isectTop    = intersectXZPlane CylinderTop ray 1.0 texture
+	isectBottom = complementIntervals $ negateSurfaces $
+		      intersectXZPlane CylinderBottom ray 0.0 texture
+
+intersectCylSide (r, v) texture
+  = -- The ray (x + ta, y + tb, z + tc) intersects the sides of the
+    -- cylinder if:
+    --    (x + ta)^2 + (z + tc)^2 = 1  and 0 <= y + tb <= 1.
+    if (sq a + sq c) `near` 0
+    then -- The ray is parallel to the Y-axis, and does not intersect
+	 -- the cylinder sides.  It's either all in, or all out
+	if (sqxy `near` 1.0 || sqxy < 1.0) then openIList else emptyIList
+   else -- Find values of t that solve the quadratic equation
+	--   (a^2 + c^2)t^2 + 2(ax + cz)t + x^2 + z^2 - 1 = 0
+        let c1 = sq a + sq c
+            c2 = 2 * (x * a + z * c)
+            c3 = sq x + sq z - 1
+	in
+	case quadratic c1 c2 c3 of
+        Nothing -> emptyIList
+        Just (t1, t2) -> entryexit (g t1) (g t2)
+
+  where sqxy = sq x + sq y
+	g t = (t, (Cylindrical origin v1 v2, (CylinderSide, p0, texture)))
+	    where origin = point 0 0 0
+		  x0 = x + t * a
+		  y0 = y + t * b
+		  z0 = z + t * c
+		  p0 = point  x0 y0 z0
+		  v0 = vector x0 0 z0
+		  (v1, v2) = tangents v0
+
+	x = xCoord r
+	y = yCoord r
+	z = zCoord r
+	a = xComponent v
+	b = yComponent v
+	c = zComponent v
+
+
+-------------------
+-- Cone
+-------------------
+
+intersectCone :: Ray -> a -> IList (Surface, Texture a)
+intersectCone ray texture
+  = isectSide `intersectIntervals` isectTop `intersectIntervals` isectBottom
+  where isectSide   = intersectConeSide ray texture
+	isectTop    = intersectXZPlane ConeBase ray 1.0 texture
+	isectBottom = complementIntervals $ negateSurfaces $
+		      intersectXZPlane ConeBase ray 0.0 texture
+
+intersectConeSide (r, v) texture
+  = -- Find the points where the ray intersects the cond side.  At any points of
+    -- intersection, we must have:
+    --    (x + ta)^2 + (z + tc)^2 = (y + tb)^2
+    -- which is the following quadratic equation:
+    --    t^2(a^2-b^2+c^2) + 2t(xa-yb+cz) + (x^2-y^2+z^2) = 0
+    let c1 = sq a - sq b + sq c
+	c2 = 2 * (x * a - y * b + c * z)
+	c3 = sq x - sq y + sq z
+    in  case quadratic c1 c2 c3 of
+	Nothing -> emptyIList
+	Just (t1, t2) ->
+	    -- If either intersection strikes the middle, then the other
+	    -- can only be off by rounding error, so we make a tangent
+	    -- strike using the "good" value.
+	    -- If the intersections straddle the origin, then it's
+	    -- an exit/entry pair, otherwise it's an entry/exit pair.
+	    let y1 = y + t1 * b
+		y2 = y + t2 * b
+	    in  if y1 `near` 0                  then entryexit (g t1) (g t1)
+	        else if y2 `near` 0             then entryexit (g t2) (g t2)
+		else if (y1 < 0) `xor` (y2 < 0) then exitentry (g t1) (g t2)
+		else                                 entryexit (g t1) (g t2)
+
+  where g t = (t, (Conic origin v1 v2, (ConeSide, p0, texture)))
+	    where origin = point 0 0 0
+		  x0 = x + t * a
+		  y0 = y + t * b
+		  z0 = z + t * c
+		  p0 = point  x0 y0 z0
+		  v0 = normalize $ vector x0 (-y0) z0
+		  (v1, v2) = tangents v0
+
+	x = xCoord r
+	y = yCoord r
+	z = zCoord r
+	a = xComponent v
+	b = yComponent v
+	c = zComponent v
+
+	-- beyond me why this isn't defined in the prelude...
+	xor False b = b
+	xor True  b = not b
+
+
+-------------------
+-- Solving quadratics
+-------------------
+
+quadratic :: Double -> Double -> Double -> Maybe (Double, Double)
+quadratic a b c =
+  -- Solve the equation ax^2 + bx + c = 0 by using the quadratic formula.
+  let d = sq b - 4 * a * c
+      d' = if d `near` 0 then 0 else d
+  in if d' < 0
+     then Nothing -- There are no real roots.
+     else
+	if a > 0 then Just (((-b) - sqrt d') / (2 * a),
+			    ((-b) + sqrt d') / (2 * a))
+		 else Just (((-b) + sqrt d') / (2 * a),
+			    ((-b) - sqrt d') / (2 * a))
+
+-------------------
+-- Bounding boxes
+-------------------
+
+data MaybeInterval = Interval !Double !Double
+		   | NoInterval
+
+isInterval (Interval _ _) = True
+isInterval _              = False
+
+intersectWithBox :: Ray -> Box -> Bool
+intersectWithBox (r, v) (B x1 x2 y1 y2 z1 z2)
+  = isInterval interval
+  where x_interval = intersectRayWithSlab (xCoord r) (xComponent v) (x1, x2)
+	y_interval = intersectRayWithSlab (yCoord r) (yComponent v) (y1, y2)
+	z_interval = intersectRayWithSlab (zCoord r) (zComponent v) (z1, z2)
+	interval = intersectInterval x_interval
+		   (intersectInterval y_interval z_interval)
+
+intersectInterval :: MaybeInterval -> MaybeInterval -> MaybeInterval
+intersectInterval NoInterval _ = NoInterval
+intersectInterval _ NoInterval = NoInterval
+intersectInterval (Interval a b) (Interval c d)
+  | b < c || d < a = NoInterval
+  | otherwise = Interval (a `max` c) (b `min` d)
+
+{-# INLINE intersectRayWithSlab #-}
+intersectRayWithSlab :: Double -> Double -> (Double,Double) -> MaybeInterval
+intersectRayWithSlab xCoord alpha (x1, x2)
+  | alpha == 0 = if xCoord < x1 || xCoord > x2 then NoInterval else infInterval
+  | alpha >  0 = Interval a b
+  | otherwise  = Interval b a
+  where a = (x1 - xCoord) / alpha
+	b = (x2 - xCoord) / alpha
+
+infInterval = Interval (-inf) inf
diff --git a/testsuite/tests/hpc/raytrace/Interval.hs b/testsuite/tests/hpc/raytrace/Interval.hs
new file mode 100644
index 0000000000000000000000000000000000000000..a4d313f66e7bc72d441eae651dd32b27476a3d92
--- /dev/null
+++ b/testsuite/tests/hpc/raytrace/Interval.hs
@@ -0,0 +1,121 @@
+-- Copyright (c) 2000 Galois Connections, Inc.
+-- All rights reserved.  This software is distributed as
+-- free software under the license in the file "LICENSE",
+-- which is included in the distribution.
+
+module Interval
+    ( IList
+    , Intersection
+    , emptyIList, openIList
+    , mkEntry, mkExit
+    , entryexit, exitentry
+    , mapI
+    , unionIntervals, intersectIntervals, differenceIntervals
+    , complementIntervals
+    ) where
+
+import Geometry
+
+-- The result of a ray trace is represented as a list of surface
+-- intersections.  Each intersection is a point along the ray with
+-- a flag indicating whether this intersection is an entry or an
+-- exit from the solid.  Each intersection also carries unspecified
+-- surface data for use by the illumination model.
+
+-- Just the list of intersections isn't enough, however.  An empty
+-- list can denote either a trace that is always within the solid
+-- or never in the solid.  To dissambiguate, an extra flag is kept
+-- that indicates whether we are starting inside or outside of the
+-- solid.  As a convenience, we also keep an additional flag that
+-- indicates whether the last intersection ends inside or outside.
+
+type IList a		= (Bool, [Intersection a], Bool)
+type Intersection a	= (Double, Bool, a)
+
+emptyIList = (False, [], False)
+openIList = (True, [], True)
+
+mapI f (b1, is, b2) = (b1, map f is, b2)
+
+isEntry (_, entry, _) = entry
+isExit  (_, entry, _) = not entry
+
+mkEntry (t, a) = (t, True,  a)
+mkExit  (t, a) = (t, False, a)
+
+entryexit w1 w2 = (False, [mkEntry w1, mkExit w2], False)
+exitentry w1 w2 = (True, [mkExit w1, mkEntry w2], True)
+arrange   w1@(t1, _) w2@(t2, _) | t1 < t2   = entryexit w1 w2
+				| otherwise = entryexit w2 w1
+
+
+cmpI :: Intersection a -> Intersection a -> Ordering
+cmpI (i, _, _) (j, _, _)
+  | i `near` j = EQ
+  | i   <    j = LT
+  | otherwise  = GT
+
+bad (b1, [], b2) = b1 /= b2
+bad (b1, is, b2) = bad' b1 is || b2 /= b3
+  where (_, b3, _) = last is
+
+bad' b [] = False
+bad' b ((_, c, _) : is) = b == c || bad' c is
+
+unionIntervals :: IList a -> IList a -> IList a
+unionIntervals (isStartOpen, is, isEndOpen) (jsStartOpen, js, jsEndOpen)
+  = (isStartOpen || jsStartOpen, uniIntervals is js, isEndOpen || jsEndOpen)
+  where uniIntervals is [] | jsEndOpen = []
+			   | otherwise = is
+	uniIntervals [] js | isEndOpen = []
+			   | otherwise = js
+	uniIntervals is@(i : is') js@(j : js')
+	  = case cmpI i j of
+	    EQ -> if isEntry i == isEntry j then i : uniIntervals is' js'
+					    else uniIntervals is' js'
+	    LT -> if isEntry j then i : uniIntervals is' js
+			       else     uniIntervals is' js
+	    GT -> if isEntry i then j : uniIntervals is js'
+			       else     uniIntervals is js'
+
+intersectIntervals :: IList a -> IList a -> IList a
+intersectIntervals is js
+  = complementIntervals (unionIntervals is' js')
+  where is' = complementIntervals is
+	js' = complementIntervals js
+
+differenceIntervals :: IList a -> IList a -> IList a
+differenceIntervals is js
+  = complementIntervals (unionIntervals is' js)
+  where is' = complementIntervals is
+
+complementIntervals :: IList a -> IList a
+complementIntervals (o1, is, o2)
+  = (not o1, [ (i, not isentry, a) | (i, isentry, a) <- is ], not o2)
+
+-- tests...
+
+{-
+mkIn, mkOut :: Double -> Intersection a
+mkIn x = (x, True, undefined)
+mkOut x = (x, False, undefined)
+
+i1 =  (False, [ mkIn 2, mkOut 7 ], False)
+i1' = (True, [ mkOut 2, mkIn 7 ], True)
+i2 =  (False, [ mkIn 1, mkOut 3, mkIn 4, mkOut 5, mkIn 6, mkOut 8 ], False)
+
+t1 = unionIntervals i1 i2
+t2 = intersectIntervals i1 i2
+t3 = intersectIntervals i2 i1
+t4 = complementIntervals i1
+t5 = intersectIntervals i2 i1'
+t6 = differenceIntervals i2 i1
+t7 = differenceIntervals i2 i2
+
+sh (o1,is,o2) =
+    do  if o1 then putStr "..." else return ()
+	putStr $ foldr1 (++) (map si is)
+	if o2 then putStr "..." else return ()
+si (i, True, _, _) = "<" ++ show i
+si (i, False, _, _) = " " ++ show i ++ ">"
+-}
diff --git a/testsuite/tests/hpc/raytrace/Main.hs b/testsuite/tests/hpc/raytrace/Main.hs
new file mode 100644
index 0000000000000000000000000000000000000000..e8c88ad090698b195307e82cb80555cb76a83b47
--- /dev/null
+++ b/testsuite/tests/hpc/raytrace/Main.hs
@@ -0,0 +1,15 @@
+-- Copyright (c) 2000 Galois Connections, Inc.
+-- All rights reserved.  This software is distributed as
+-- free software under the license in the file "LICENSE",
+-- which is included in the distribution.
+
+-- Modified to read sample input directly from a file.
+
+module Main where
+
+import Parse
+import Eval
+
+main = do { str <- readFile "galois.gml"
+          ; mainEval (rayParse str)
+          }
diff --git a/testsuite/tests/hpc/raytrace/Makefile b/testsuite/tests/hpc/raytrace/Makefile
new file mode 100644
index 0000000000000000000000000000000000000000..4a268530f13bc7f70d03965dacf45d8a0b4a720e
--- /dev/null
+++ b/testsuite/tests/hpc/raytrace/Makefile
@@ -0,0 +1,4 @@
+TOP=../../..
+include $(TOP)/mk/boilerplate.mk
+include $(TOP)/mk/test.mk
+
diff --git a/testsuite/tests/hpc/raytrace/Misc.hs b/testsuite/tests/hpc/raytrace/Misc.hs
new file mode 100644
index 0000000000000000000000000000000000000000..104bd06af1467d611820f83f1e2768bbca60a386
--- /dev/null
+++ b/testsuite/tests/hpc/raytrace/Misc.hs
@@ -0,0 +1,11 @@
+-- Copyright (c) 2000 Galois Connections, Inc.
+-- All rights reserved.  This software is distributed as
+-- free software under the license in the file "LICENSE",
+-- which is included in the distribution.
+
+module Misc where
+
+import Debug.Trace
+
+debug s v = trace (s ++" : "++ show v ++ "\n") v
+-- debug s v = v
diff --git a/testsuite/tests/hpc/raytrace/Parse.hs b/testsuite/tests/hpc/raytrace/Parse.hs
new file mode 100644
index 0000000000000000000000000000000000000000..26aeb05427cecbf4f7d6dd6d74c7409c892e26b3
--- /dev/null
+++ b/testsuite/tests/hpc/raytrace/Parse.hs
@@ -0,0 +1,137 @@
+-- Copyright (c) 2000 Galois Connections, Inc.
+-- All rights reserved.  This software is distributed as
+-- free software under the license in the file "LICENSE",
+-- which is included in the distribution.
+
+module Parse where
+
+import Data.Char
+import Text.ParserCombinators.Parsec hiding (token)
+
+import Data
+
+
+program :: Parser Code
+program =
+  do { whiteSpace
+     ; ts <- tokenList
+     ; eof
+     ; return ts
+     }
+
+tokenList :: Parser Code
+tokenList = many token <?> "list of tokens"
+
+token :: Parser GMLToken
+token =
+       do { ts <- braces   tokenList          ; return (TBody ts) }
+  <|>  do { ts <- brackets tokenList          ; return (TArray ts) }
+  <|> (do { s  <- gmlString                   ; return (TString s) } <?> "string")
+  <|> (do { t <- pident False                 ; return t }           <?> "identifier")
+  <|> (do { char '/'   -- No whitespace after slash
+          ; t <- pident True                  ; return t } <?> "binding identifier")
+  <|> (do { n <- number                       ; return n } <?> "number")
+
+pident :: Bool -> Parser GMLToken
+pident rebind =
+  do { id <- ident
+     ; case (lookup id opTable) of
+       Nothing -> if rebind then return (TBind id) else return (TId id)
+       Just t  -> if rebind then error ("Attempted rebinding of identifier " ++ id) else return t
+     }
+
+ident :: Parser String
+ident = lexeme $
+  do { l <- letter
+     ; ls <- many (satisfy (\x -> isAlphaNum x || x == '-' || x == '_'))
+     ; return (l:ls)
+     }
+
+gmlString :: Parser String
+gmlString = lexeme $ between (char '"') (char '"') (many (satisfy (\x -> isPrint x && x /= '"')))
+
+-- Tests for numbers
+-- Hugs breaks on big exponents (> ~40)
+test_number = "1234 -1234 1 -0 0" ++
+              " 1234.5678 -1234.5678 1234.5678e12 1234.5678e-12 -1234.5678e-12" ++
+              " -1234.5678e12 -1234.5678E-12 -1234.5678E12" ++
+              " 1234e11 1234E33 -1234e33 1234e-33" ++
+              " 123e 123.4e 123ee 123.4ee 123E 123.4E 123EE 123.4EE"
+
+
+-- Always int or real
+number :: Parser GMLToken
+number = lexeme $
+  do { s <- optSign
+     ; n <- decimal
+     ;     do { string "."
+              ; m <- decimal
+              ; e <- option "" exponent'
+              ; return (TReal (read (s ++ n ++ "." ++ m ++ e)))  -- FIXME: Handle error conditions
+              }
+       <|> do { e <- exponent'
+              ; return (TReal (read (s ++ n ++ ".0" ++ e)))
+              }
+       <|> do { return (TInt (read (s ++ n))) }
+     }
+
+exponent' :: Parser String
+exponent' = try $
+  do { e <- oneOf "eE"
+     ; s <- optSign
+     ; n <- decimal
+     ; return (e:s ++ n)
+     }
+
+decimal = many1 digit
+
+optSign :: Parser String
+optSign = option "" (string "-")
+
+
+------------------------------------------------------
+-- Library for tokenizing.
+
+braces   p = between (symbol "{") (symbol "}") p
+brackets p = between (symbol "[") (symbol "]") p
+
+symbol name = lexeme (string name)
+
+lexeme p = do{ x <- p; whiteSpace; return x  }
+
+whiteSpace  = skipMany (simpleSpace <|> oneLineComment <?> "")
+  where simpleSpace = skipMany1 (oneOf " \t\n\r\v")
+        oneLineComment =
+            do{ string "%"
+              ; skipMany (noneOf "\n\r\v")
+              ; return ()
+              }
+
+
+------------------------------------------------------------------------------
+
+rayParse :: String -> Code
+rayParse is = case (parse program "<stdin>" is) of
+              Left err -> error (show err)
+              Right x  -> x
+
+rayParseF :: String -> IO Code
+rayParseF file =
+  do { r <- parseFromFile program file
+     ; case r of
+       Left err -> error (show err)
+       Right x  -> return x
+     }
+
+run :: String -> IO ()
+run is = case (parse program "" is) of
+         Left err -> print err
+         Right x  -> print x
+
+runF :: IO ()
+runF =
+  do { r <- parseFromFile program "simple.gml"
+     ; case r of
+       Left err -> print err
+       Right x  -> print x
+     }
diff --git a/testsuite/tests/hpc/raytrace/Pixmap.hs b/testsuite/tests/hpc/raytrace/Pixmap.hs
new file mode 100644
index 0000000000000000000000000000000000000000..edb75af4fa15aadb570af5b090f0c1b10c27f9bb
--- /dev/null
+++ b/testsuite/tests/hpc/raytrace/Pixmap.hs
@@ -0,0 +1,64 @@
+-- Copyright (c) 2000 Galois Connections, Inc.
+-- All rights reserved.  This software is distributed as
+-- free software under the license in the file "LICENSE",
+-- which is included in the distribution.
+
+module Pixmap where
+
+import Data.Char
+import System.IO hiding (try)
+import Text.ParserCombinators.Parsec
+
+readPPM f
+  = do  h <- openFile f ReadMode
+	s <- hGetContents h
+	case (parse parsePPM f s) of
+	  Left err -> error (show err)
+	  Right x  -> return x
+
+writePPM f ppm
+  = do  h <- openFile f WriteMode
+	let s = showPPM (length (head ppm)) (length ppm) ppm
+	hPutStr h s
+
+-- parsing
+
+parsePPM
+  = do  string "P6"
+	whiteSpace
+	width <- number
+	whiteSpace
+	height <- number
+	whiteSpace
+	colormax <- number
+	whiteSpace
+	cs <- getInput
+	return (chop width (chopColors cs))
+
+chopColors [] = []
+chopColors (a:b:c:ds) = (ord a, ord b, ord c) : chopColors ds
+
+chop n [] = []
+chop n xs = h : chop n t
+    where (h, t) = splitAt n xs
+
+number
+  = do  ds <- many1 digit
+	return (read ds :: Int)
+
+whiteSpace
+  = skipMany (simpleSpace <|> oneLineComment <?> "")
+    where simpleSpace = skipMany1 (oneOf " \t\n\r\v")
+	  oneLineComment =
+	      do  char '#'
+		  skipMany (noneOf "\n\r\v")
+		  return ()
+
+-- printing
+
+showPPM :: Int -> Int -> [[(Int,Int,Int)]] -> String
+showPPM wid ht pss
+  = header ++ concat [[chr r, chr g, chr b] | ps <- pss, (r, g, b) <-ps]
+  where
+    header = "P6\n#Galois\n" ++ show wid ++ " " ++ show ht ++ "\n255\n"
+showPPM _ _ _ = error "incorrect length of bitmap string"
diff --git a/testsuite/tests/hpc/raytrace/Primitives.hs b/testsuite/tests/hpc/raytrace/Primitives.hs
new file mode 100644
index 0000000000000000000000000000000000000000..2f216540550628889b17820a80461f5ab4430da6
--- /dev/null
+++ b/testsuite/tests/hpc/raytrace/Primitives.hs
@@ -0,0 +1,24 @@
+-- Copyright (c) 2000 Galois Connections, Inc.
+-- All rights reserved.  This software is distributed as
+-- free software under the license in the file "LICENSE",
+-- which is included in the distribution.
+
+module Primitives where
+
+rad2deg :: Double -> Double
+rad2deg r = r * 180 / pi
+
+deg2rad :: Double -> Double
+deg2rad d = d * pi / 180
+
+addi :: Int -> Int -> Int
+addi = (+)
+
+addf :: Double -> Double -> Double
+addf = (+)
+
+acosD :: Double -> Double
+acosD x = acos x * 180 / pi
+
+asinD :: Double -> Double
+asinD x = asin x * 180 / pi
diff --git a/testsuite/tests/hpc/raytrace/RayTrace.hs b/testsuite/tests/hpc/raytrace/RayTrace.hs
new file mode 100644
index 0000000000000000000000000000000000000000..cb15388e2c70a82c258b6c4721880c3c8907ee95
--- /dev/null
+++ b/testsuite/tests/hpc/raytrace/RayTrace.hs
@@ -0,0 +1,9 @@
+-- Copyright (c) 2000 Galois Connections, Inc.
+-- All rights reserved.  This software is distributed as
+-- free software under the license in the file "LICENSE",
+-- which is included in the distribution.
+
+module RayTrace(module Illumination, module Surface) where
+
+import Illumination
+import Surface
diff --git a/testsuite/tests/hpc/raytrace/Surface.hs b/testsuite/tests/hpc/raytrace/Surface.hs
new file mode 100644
index 0000000000000000000000000000000000000000..832f0fcae27077021e72f2d38f4cf630b3729563
--- /dev/null
+++ b/testsuite/tests/hpc/raytrace/Surface.hs
@@ -0,0 +1,115 @@
+-- Copyright (c) 2000 Galois Connections, Inc.
+-- All rights reserved.  This software is distributed as
+-- free software under the license in the file "LICENSE",
+-- which is included in the distribution.
+
+module Surface
+    ( SurfaceFn (..)
+    , Properties
+    , sfun, sconst
+    , prop
+    , matte, shiny
+    , chgColor
+    , surface
+    ) where
+
+import Geometry
+import CSG
+import Misc
+
+-- the surface gets passed face then u then v.
+data SurfaceFn c v = SFun (Int -> Double -> Double -> Properties c v)
+                   | SConst (Properties c v)
+
+sfun :: (Int -> Double -> Double -> Properties c v) -> SurfaceFn c v
+sfun = SFun
+sconst :: Properties c v -> SurfaceFn c v
+sconst = SConst
+
+type Properties c v = (c, v, v, v)
+
+prop c d s p = (c, d, s, p)
+
+matte = (white, 1.0, 0.0, 1.0)
+shiny = (white, 0.0, 1.0, 1.0)
+
+chgColor :: c -> Properties d v -> Properties c v
+chgColor c (_, d, s, p) = (c, d, s, p)
+
+instance (Show c, Show v) => Show (SurfaceFn c v) where
+  show (SFun _)   = "Surface function"
+  -- show (SConst p) = "Surface constant: " ++ show p
+  show (SConst p) = "Surface constant"
+
+evalSurface :: SurfaceFn Color Double -> Int -> Double -> Double -> Properties Color Double
+evalSurface (SConst p) = \_ _ _ -> p
+evalSurface (SFun f)   = f
+
+-- calculate surface properties, given the type of
+-- surface, and intersection point in object coordinates
+
+-- surface :: Surface SurfaceFn -> (Int, Point) -> (Vector, Properties)
+
+surface (Planar _ v0 v1) (n, p0, fn)
+  = (norm, evalSurface fn n' u v)
+  where norm = normalize $ cross v0 v1
+	(n', u, v) = planarUV n p0
+
+surface (Spherical _ v0 v1) (_, p0, fn)
+  = (norm, evalSurface fn 0 u v)
+  where x = xCoord p0
+	y = yCoord p0
+	z = zCoord p0
+	k = sqrt (1 - sq y)
+	theta = adjustRadian (atan2 (x / k) (z / k))
+	-- correct so that the image grows left-to-right
+	-- instead of right-to-left
+	u = 1.0 - clampf (theta / (2 * pi))
+	v =       clampf ((y + 1) / 2)
+	norm = normalize $ cross v0 v1
+
+-- ZZ ignore the (incorrect) surface model, and estimate the normal
+-- from the intersection in object space
+surface (Cylindrical _ v0 v1) (_, p0, fn)
+  = (norm, evalSurface fn 0 u v)
+  where x = xCoord p0
+	y = yCoord p0
+	z = zCoord p0
+	u = clampf $ adjustRadian (atan2 x z) / (2 * pi)
+	v = y
+	norm = normalize $ cross v0 v1
+
+-- ZZ ignore the (incorrect) surface model, and estimate the normal
+-- from the intersection in object space
+surface (Conic _ v0 v1) (_, p0, fn)
+  = (norm, evalSurface fn 0 u v)
+  where x = xCoord p0
+	y = yCoord p0
+	z = zCoord p0
+	u = clampf $ adjustRadian (atan2 (x / y) (z / y)) / (2 * pi)
+	v = y
+	norm = normalize $ cross v0 v1
+
+planarUV face p0
+  = case face of
+    PlaneFace      -> (0, x, z)
+
+    CubeFront      -> (0, x, y)
+    CubeBack       -> (1, x, y)
+    CubeLeft       -> (2, z, y)
+    CubeRight      -> (3, z, y)
+    CubeTop        -> (4, x, z)
+    CubeBottom     -> (5, x, z)
+
+    CylinderTop    -> (1, (x + 1) / 2, (z + 1) / 2)
+    CylinderBottom -> (2, (x + 1) / 2, (z + 1) / 2)
+
+    ConeBase       -> (1, (x + 1) / 2, (z + 1) / 2)
+  where x = xCoord p0
+	y = yCoord p0
+	z = zCoord p0
+
+-- misc
+
+adjustRadian :: Radian -> Radian
+adjustRadian r = if r > 0 then r else r + 2 * pi
diff --git a/testsuite/tests/hpc/raytrace/galois.gml b/testsuite/tests/hpc/raytrace/galois.gml
new file mode 100644
index 0000000000000000000000000000000000000000..ab26083c1c54a40323f09867a22fc970f1f1324e
--- /dev/null
+++ b/testsuite/tests/hpc/raytrace/galois.gml
@@ -0,0 +1,147 @@
+
+[   [97 95 73 50 89 97 99 99 99 99 99 99 99 99 99 98 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 98 99 99 99 99 99 98 99 99 98 97 99 99 99 99 99 99 99 99 99 99 97 97 96 96 96 96 96 96 99 99 99]
+  [88 96 66 53 52 86 99 99 99 99 99 99 99 99 99 99 99 99 99 98 99 99 99 99 99 99 99 99 99 99 98 96 98 99 99 99 99 99 99 99 99 97 98 99 99 99 99 99 99 99 99 99 96 96 96 98 97 96 96 96 97 97 96]
+  [89 92 79 50 54 45 91 98 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 98 98 99 98 96 98 98 98 98 97 98 99 99 99 99 99 99 99 99 99 99 99 99 99 97 96 96 97 99 99 96 96 98 98 97 97]
+  [88 91 96 81 40 35 39 91 95 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 98 97 97 98 99 98 99 99 96 95 95 95 96 97 99 99 98 97 99 99 97 98 99 99 98 96 96 96 94 96 98 99 96 96 96 97 95 96]
+  [83 92 91 48 54 33 62 64 98 99 99 99 99 99 99 99 97 98 99 99 99 99 99 99 99 98 98 99 99 99 99 99 99 98 97 97 98 99 97 99 99 99 99 99 99 99 99 99 99 99 96 97 98 96 96 97 99 98 96 95 96 96 96]
+  [91 93 64 78 94 75 57 50 81 97 99 99 99 99 99 98 94 96 99 99 99 99 99 99 99 97 98 99 99 99 98 98 99 98 99 98 99 99 98 99 99 99 99 99 99 99 99 99 99 99 97 99 98 96 91 96 97 98 98 96 96 96 99]
+  [95 63 85 94 84 95 72 61 44 84 96 98 99 99 99 99 98 98 98 99 99 99 99 99 99 97 96 98 99 99 97 96 98 99 99 97 98 99 98 97 99 99 99 99 99 99 99 99 99 99 97 99 99 96 93 98 96 97 96 96 96 96 95]
+  [63 80 88 96 96 88 90 52 64 52 95 98 99 99 99 99 99 99 97 98 99 99 99 97 97 99 98 97 97 97 99 96 98 99 99 97 98 99 99 98 98 98 99 99 99 99 99 99 99 99 98 98 99 96 96 96 94 97 98 99 96 92 95]
+  [92 84 90 92 91 88 89 75 50 58 64 96 99 99 99 99 99 99 99 99 99 99 99 98 99 99 98 99 99 98 99 98 99 99 99 99 99 99 99 99 98 98 99 99 99 96 99 98 99 99 99 97 96 97 96 96 92 96 99 98 95 94 95]
+  [91 80 85 85 92 96 93 87 81 49 66 88 99 99 99 99 99 99 99 99 99 99 99 98 99 99 96 98 99 99 99 99 99 98 99 99 99 98 99 99 99 99 99 99 99 98 99 98 99 99 98 97 98 96 96 96 93 96 99 98 96 97 97]
+  [70 90 96 96 95 95 97 93 60 73 64 67 93 97 99 99 99 99 99 99 99 99 99 98 97 97 98 99 99 99 99 99 98 94 97 98 99 98 99 99 99 99 99 99 99 99 98 98 98 97 98 99 99 96 96 96 96 96 99 97 96 96 95]
+  [93 93 97 97 94 88 85 89 90 57 72 43 82 97 99 99 99 99 99 99 99 99 99 99 98 96 97 99 99 99 99 99 99 96 96 96 98 99 99 98 99 97 98 99 99 98 95 81 88 84 98 98 95 96 96 95 96 96 98 95 94 94 92]
+  [87 96 91 94 96 97 98 94 75 66 76 60 67 83 99 99 99 99 99 99 99 99 99 99 99 98 98 99 99 99 99 99 99 97 97 97 95 96 97 95 96 76 70 66 73 83 92 60 88 58 88 95 95 95 96 94 95 96 98 96 97 97 97]
+  [90 96 86 84 89 85 93 92 96 96 94 84 56 85 98 98 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 98 99 97 56 40 57 71 69 66 78 73 84 55 34 39 39 41 44 46 31 61 90 98 97 92 94 98 99 97 98 98 98]
+  [93 91 94 89 66 81 86 94 89 87 97 82 84 65 84 82 87 89 97 96 97 99 99 99 99 99 99 99 99 99 99 97 96 40 4 15 9 9 6 2 7 14 23 9 8 8 10 3 3 8 13 12 17 42 90 93 86 93 96 97 96 96 96]
+  [85 82 82 76 91 90 86 83 84 86 54 37 26 49 31 20 13 43 40 55 80 95 98 98 99 99 99 99 99 98 99 97 66 10 3 4 12 19 4 4 7 18 7 4 11 11 6 11 24 11 12 8 18 9 30 85 93 90 98 99 96 93 96]
+  [77 68 78 66 72 66 79 92 73 57 57 73 69 39 73 68 70 57 22 15 17 21 50 83 93 97 98 99 99 97 94 66 12 0 0 0 3 4 6 21 7 3 5 2 3 14 17 7 4 6 28 39 39 24 20 53 95 80 98 99 98 96 97]
+  [69 75 86 82 89 86 64 51 66 93 93 80 90 92 89 87 92 94 68 34 24 13 17 6 20 55 91 98 98 95 66 10 18 4 3 3 1 3 12 10 9 11 17 3 15 14 17 23 15 26 25 25 21 43 21 10 65 62 97 98 99 98 96]
+  [95 94 94 68 45 48 41 69 84 72 80 94 78 78 94 96 88 93 95 94 83 67 35 13 28 38 15 40 87 80 17 7 4 7 6 9 37 20 19 19 22 9 5 7 11 13 26 14 29 27 41 35 44 19 20 16 43 70 96 96 97 99 99]
+  [93 96 88 54 57 57 75 74 70 79 94 96 94 97 97 88 88 96 83 97 97 72 65 75 46 21 17 9 28 29 19 22 4 9 8 5 24 34 17 19 7 8 25 16 9 5 8 12 15 32 54 43 30 14 18 11 45 62 96 96 96 97 98]
+  [97 91 56 59 44 70 63 78 88 82 73 82 96 97 78 94 94 96 99 99 98 91 54 21 4 4 3 11 14 35 14 17 7 26 36 21 11 35 42 24 3 9 17 13 9 20 9 21 20 45 28 35 42 19 38 14 36 67 98 98 97 97 96]
+  [80 42 56 39 41 71 74 62 54 57 62 68 96 87 92 95 93 97 98 98 67 21 7 4 5 19 22 25 10 8 24 7 6 26 42 43 38 42 32 13 36 60 81 88 67 62 37 63 28 15 26 44 32 30 25 38 62 70 73 78 87 95 97]
+  [33 60 39 44 80 73 40 59 58 55 70 71 90 91 86 97 98 98 92 43 8 9 2 6 42 65 50 45 27 27 24 9 13 37 66 66 88 80 60 72 92 90 96 98 94 84 43 43 18 31 34 35 19 53 28 46 31 23 49 56 40 78 96]
+  [74 32 63 76 67 52 85 93 81 74 85 83 65 80 88 96 98 68 30 4 2 2 2 24 82 56 40 25 44 44 30 52 70 83 87 91 90 73 69 51 86 97 99 99 97 92 44 39 28 26 26 22 49 23 36 67 37 17 23 27 39 54 91]
+  [44 62 77 88 81 94 95 94 55 78 57 42 77 79 90 92 39 7 3 9 1 4 19 68 57 39 49 54 62 53 74 92 88 97 99 99 90 64 82 53 84 99 99 99 97 99 87 76 52 39 48 37 35 26 51 32 8 6 19 6 42 78 84]
+  [61 82 82 81 96 90 94 66 64 77 65 81 96 97 81 20 2 5 9 10 21 23 61 67 55 48 53 61 48 87 97 96 98 98 98 96 69 50 85 60 65 98 99 99 98 97 94 62 45 50 57 54 21 11 16 11 6 11 21 6 26 71 75]
+  [93 77 71 97 90 93 51 85 65 77 94 96 94 77 15 1 0 0 8 9 8 53 73 61 64 59 59 53 87 98 98 98 96 94 98 75 37 34 84 51 37 97 98 99 99 97 57 5 5 4 5 4 7 3 18 4 6 15 9 4 8 64 76]
+  [96 82 93 79 95 82 81 79 85 96 91 74 44 11 12 9 2 0 5 5 24 69 55 63 84 82 75 78 92 98 99 97 95 91 89 33 38 41 70 55 30 94 98 99 98 90 11 8 4 6 3 12 41 2 3 1 6 6 6 6 16 30 58]
+  [89 66 92 84 96 98 97 92 96 75 45 29 9 38 6 10 3 10 1 8 69 67 64 70 85 87 93 94 97 99 99 99 94 94 70 44 23 60 78 55 28 98 99 99 99 78 6 9 16 15 5 2 8 4 7 1 18 13 18 16 4 23 66]
+  [48 79 85 82 90 97 96 95 64 20 25 26 27 12 5 8 6 7 6 42 74 64 49 80 94 96 98 99 99 99 99 98 94 96 71 50 7 55 92 31 49 98 99 99 98 62 7 10 13 8 12 11 9 3 5 4 16 9 11 9 13 44 68]
+  [93 72 87 92 96 98 95 62 38 9 23 64 5 6 12 32 7 9 15 70 69 54 75 97 96 97 99 99 99 99 99 98 98 96 71 79 62 66 69 20 41 98 99 99 98 63 9 29 38 33 28 17 17 40 10 9 18 10 22 10 8 39 74]
+  [93 69 84 88 95 93 72 41 17 31 69 54 35 6 6 26 18 36 39 68 77 82 95 98 98 97 99 98 99 99 99 99 99 97 91 89 92 63 31 11 44 98 99 99 98 77 19 8 13 22 30 28 35 14 18 21 15 7 37 46 23 53 91]
+  [77 85 92 96 88 65 24 23 58 63 44 35 24 17 9 24 18 21 43 54 87 95 97 98 98 97 99 97 96 98 99 99 99 99 97 89 64 47 42 16 68 99 99 99 99 94 31 17 37 25 20 51 13 7 8 7 6 34 40 39 65 63 94]
+  [58 83 97 92 90 42 34 66 76 38 42 35 22 12 10 51 8 33 54 80 98 96 94 90 56 88 94 95 70 68 98 98 98 97 96 94 89 66 30 48 97 99 99 99 98 98 61 13 24 10 20 19 18 6 15 10 11 25 43 27 63 53 92]
+  [87 71 66 73 79 65 69 44 74 47 44 38 18 15 24 29 9 38 67 93 98 96 79 53 46 96 95 88 23 61 87 95 95 95 87 79 56 35 46 89 99 99 99 99 99 98 67 23 13 10 21 49 31 21 26 16 17 36 46 40 46 67 96]
+  [96 80 47 69 60 77 59 22 29 74 61 50 56 41 34 27 12 48 74 96 99 97 56 40 23 95 96 63 39 77 85 82 77 75 69 68 71 77 90 97 99 99 99 99 99 98 66 29 44 17 7 23 23 18 24 27 16 33 67 18 30 87 96]
+  [97 96 92 70 45 52 21 22 30 18 38 74 82 25 24 21 12 35 74 96 99 93 31 57 33 95 94 35 17 53 50 48 77 89 93 96 96 98 95 97 99 99 99 99 99 99 72 7 16 28 22 31 14 10 20 23 16 13 39 25 54 95 92]
+  [90 64 52 70 92 83 73 49 25 8 36 40 44 25 39 28 42 26 72 96 98 96 28 41 43 95 88 18 8 75 92 89 91 95 98 93 75 61 94 97 99 99 99 99 99 98 82 13 12 20 34 25 9 23 73 55 45 19 21 15 93 95 96]
+  [22 38 82 96 93 95 93 81 89 51 45 46 26 36 28 24 36 15 31 94 98 95 55 44 30 80 93 34 19 87 88 89 83 94 94 79 30 16 33 90 97 99 99 99 98 98 74 26 9 32 38 21 14 54 74 41 46 46 18 29 91 92 96]
+  [79 92 98 98 98 95 86 82 85 91 94 81 47 28 13 16 47 7 6 69 93 95 92 70 40 75 95 83 44 42 43 83 94 96 81 61 26 26 7 32 85 98 99 99 98 95 62 38 8 13 20 30 23 62 42 31 3 11 11 59 94 97 97]
+  [96 96 97 98 98 85 82 94 93 88 89 96 94 92 59 40 19 12 3 10 37 84 90 94 79 60 93 67 75 65 68 94 97 96 66 40 9 11 48 4 35 93 98 99 97 62 50 36 4 3 15 53 33 63 28 6 2 15 56 72 97 97 95]
+  [98 94 97 95 86 94 91 89 90 95 95 96 95 93 98 88 75 58 34 29 7 21 54 83 84 89 75 79 85 94 94 95 98 82 43 25 6 21 60 24 15 89 97 99 70 66 47 48 2 0 3 22 21 7 4 1 6 55 83 96 98 95 93]
+  [93 96 96 91 60 65 73 87 93 96 95 91 91 88 94 97 97 97 90 76 74 25 2 19 37 59 72 71 83 91 87 90 92 95 67 47 69 37 51 45 3 76 98 98 46 83 71 21 3 4 2 19 13 2 0 7 60 89 97 99 98 92 90]
+  [90 88 92 95 97 95 95 93 87 88 82 86 95 93 92 91 97 96 49 73 58 58 24 6 10 58 77 49 56 84 82 89 87 94 87 46 71 37 47 67 9 54 98 98 56 50 58 13 14 18 0 10 20 4 2 31 96 96 99 99 99 96 95]
+  [78 55 84 95 97 89 73 71 89 92 91 89 90 90 83 82 93 93 68 54 41 27 24 49 85 96 97 89 72 70 48 70 76 91 95 92 43 25 40 87 27 69 97 96 75 33 13 12 10 5 2 14 6 3 15 86 99 97 99 99 97 96 97]
+  [43 61 66 70 93 79 86 94 89 84 80 84 90 96 90 92 94 92 81 37 34 70 94 96 99 98 99 98 96 95 85 77 57 62 63 59 55 50 52 77 33 63 91 71 18 6 4 5 4 4 4 12 4 15 77 98 99 99 99 98 95 95 96]
+  [77 82 75 56 62 67 86 85 84 89 92 90 80 77 52 61 56 59 70 89 98 98 99 99 99 99 99 99 99 98 98 98 92 92 91 69 61 47 28 22 4 9 14 7 4 3 7 11 4 9 4 4 22 79 97 96 97 99 98 96 93 95 96]
+  [97 96 93 97 94 86 69 64 73 59 71 71 71 64 87 94 95 96 99 99 99 99 99 99 99 97 99 99 99 99 99 99 98 96 96 96 96 95 96 93 77 35 11 4 10 2 7 6 2 1 18 59 97 97 99 97 97 99 99 97 95 95 95]
+  [96 97 98 94 97 95 89 75 65 85 89 93 97 98 99 98 98 99 99 99 99 99 99 97 97 99 98 99 99 97 96 96 95 94 95 97 96 96 96 97 98 93 75 45 19 4 2 4 18 49 90 98 99 99 99 95 96 98 96 96 96 95 96]
+  [96 98 99 97 96 95 78 59 78 97 98 98 99 99 99 99 99 99 99 99 99 99 99 98 98 99 97 97 98 96 92 91 92 95 96 98 98 95 96 97 99 98 96 97 93 82 80 87 98 97 98 99 99 98 97 96 96 98 96 96 96 97 96]
+  [95 84 92 97 95 94 50 80 95 98 99 99 99 99 99 97 96 99 98 97 98 99 99 97 97 99 97 97 96 96 90 82 89 92 97 94 94 94 93 96 99 99 98 99 97 99 98 99 99 97 97 97 98 98 96 97 96 96 96 96 96 98 96]
+  [97 90 92 98 92 52 39 93 98 99 99 99 99 99 98 95 95 98 98 96 97 99 99 97 97 99 99 98 98 95 93 89 87 92 94 88 90 90 88 94 96 97 98 98 97 99 99 99 99 97 97 96 95 96 95 96 96 97 98 98 99 98 96]
+  [96 94 90 95 69 43 75 97 99 99 99 99 99 99 97 96 94 94 95 96 99 99 97 94 95 98 99 97 95 95 98 95 87 93 89 89 87 88 93 94 90 94 96 96 98 98 99 98 99 98 96 97 97 95 93 95 96 98 99 99 99 98 99]
+  [97 81 85 68 51 53 96 97 99 99 99 99 99 99 99 97 94 95 95 96 96 98 98 97 95 94 95 95 84 90 96 95 93 95 94 88 79 88 92 97 95 95 95 96 98 99 97 97 99 99 99 98 95 94 96 98 97 99 98 98 98 99 99]
+  [81 86 70 56 71 72 97 99 99 99 99 99 99 99 99 99 97 98 97 96 96 96 98 98 95 94 96 96 92 94 92 94 95 94 93 91 91 93 95 97 92 87 93 95 98 99 95 95 99 98 98 98 94 88 95 95 96 98 96 97 97 96 98]
+  [67 62 30 43 90 73 95 98 98 96 98 98 97 98 95 98 95 95 96 95 98 94 95 96 94 95 96 95 95 96 90 94 96 96 96 92 91 92 94 96 97 91 91 95 94 97 95 93 98 96 96 96 97 95 96 93 95 96 96 96 97 95 96]
+  [53 35 46 37 71 72 94 97 99 99 98 97 98 98 95 94 96 97 96 96 98 87 92 93 96 95 95 92 93 96 95 93 93 89 94 90 87 89 92 90 95 96 97 90 90 96 95 94 97 97 96 96 96 97 97 94 95 96 96 97 96 97 96]
+  [74 88 56 35 91 90 88 94 97 97 95 95 97 98 95 94 96 97 96 96 98 96 95 95 92 88 91 92 92 94 93 94 90 86 88 95 94 93 93 92 97 96 96 94 95 96 96 96 98 99 98 99 98 98 98 97 95 97 98 98 96 94 93]
+  [92 93 63 65 92 97 93 95 99 96 89 98 99 98 96 98 96 93 93 95 97 94 91 94 97 94 95 96 93 88 85 90 92 86 90 97 96 96 96 93 94 97 95 96 94 96 99 96 96 96 96 98 98 96 95 95 94 97 96 93 92 95 93]
+  [82 94 95 81 92 95 92 97 99 98 94 93 92 97 94 97 97 98 94 90 97 95 92 94 94 90 91 96 92 88 94 94 89 83 90 97 96 96 95 96 97 95 94 97 96 96 97 94 93 93 96 98 94 96 96 92 89 90 94 94 94 92 88]
+  [78 85 76 94 97 95 96 97 99 99 98 96 97 97 96 97 97 95 95 96 98 96 96 96 88 86 93 96 94 93 89 88 88 90 90 94 94 97 97 96 96 97 98 98 98 96 92 87 96 96 96 96 96 94 92 93 88 88 93 95 94 90 87]
+  [83 88 91 94 97 97 99 98 98 98 98 99 99 98 99 98 99 97 98 97 98 96 96 95 96 94 96 95 95 91 85 90 90 93 94 94 92 94 95 96 98 97 98 98 97 97 97 96 96 96 95 96 94 95 95 94 93 93 94 95 93 88 91]
+  [95 90 94 94 98 96 98 99 96 98 97 97 98 98 99 99 96 95 97 97 99 95 96 98 93 96 96 96 93 95 89 93 93 95 96 96 97 97 97 97 99 98 97 96 98 99 99 99 98 93 93 96 96 96 95 94 91 92 90 93 94 96 96]
+] /galois
+
+{ /v /u /face                     % bind parameters
+  {                               % toIntCoord : float -> int
+    63.0 mulf floor /i               % i = floor(3.0*i)
+    i 63 eqi { 62 } { i } if          % return max(2, i)
+  } /toIntCoord
+  galois u toIntCoord apply get  % val = texture[u][v]
+    v toIntCoord apply get
+    real 100.0 divf /gal
+  gal gal gal point               % b/w galois
+  1.0                             % kd = 1.0
+  0.0                             % ks = 0.0
+  1.0                             % n = 1.0
+} /galoisface
+
+
+galoisface cube
+-0.5 -0.5 -0.5 translate	% center
+2.5 uscale			% make it bigger
+-25.0 rotatex -25.0 rotatey	% rotate
+0.0 -1.0 7.0 translate		% move to final position
+
+%galoisface cylinder
+%-0.5 -0.5 -0.5 translate	% center
+%1.5 uscale			% make it bigger
+%0.0 rotatex 90.0 rotatey	        % rotate
+%0.0 0.0 5.0 translate		% move to final position
+
+%galoisface sphere
+%-0.5 -0.5 -0.5 translate	% center
+%1.5 uscale			% make it bigger
+%-25.0 rotatex 25.0 rotatey	% rotate
+%-3.0 0.0 5.0 translate		% move to final position
+
+%union union                     % join the 3 together
+
+{ /v /u /face
+  v 5.0 divf /v
+  u 5.0 divf /u
+  v floor 2 modi 0 eqi
+    { 1.0 }
+    { 0.8 }
+  if /r
+  u floor 2 modi 0 eqi
+    { 1.0 }
+    { 0.8 }
+  if /g
+  v frac /v
+  u frac /u
+  v 0.0 lessf { v 1.0 addf } { v } if /v
+  u 0.0 lessf { u 1.0 addf } { u } if /u
+  {                               % toIntCoord : float -> int
+    63.0 mulf floor /i               % i = floor(3.0*i)
+    i 63 eqi { 62 } { i } if          % return max(2, i)
+  } /toIntCoord
+  galois u toIntCoord apply get  % val = texture[u][v]
+    v toIntCoord apply get
+    real 100.0 divf /gal
+  r gal mulf g gal mulf gal point               % b/w galois
+  0.0                             % kd = 1.0
+  1.0                             % ks = 0.0
+  1.0                             % n = 1.0
+} plane /p
+
+p  0.0 -3.0 0.0 translate	  % plane at Y = -3
+
+union
+
+/scene
+				  % directional light
+1.0 -1.0 0.0 point		  % direction
+1.0  1.0 1.0 point light /l	  % directional light
+
+1.0 0.5 0.0 point		  % ambient light
+[ l ]				  % lights
+scene				  % scene to render
+3				  % tracing depth
+90.0				  % field of view
+300 200
+"galois.ppm"		% output file
+render
+
diff --git a/testsuite/tests/hpc/raytrace/galois.sample b/testsuite/tests/hpc/raytrace/galois.sample
new file mode 100644
index 0000000000000000000000000000000000000000..41ad5959022c7813855cb9c56a2aa1ae3b071b2f
--- /dev/null
+++ b/testsuite/tests/hpc/raytrace/galois.sample
@@ -0,0 +1 @@
+[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,253,142,255,248,125,255,253,128,255,248,125,255,248,125,255,248,125,255,245,124,255,248,125,255,243,123,255,250,127,255,248,125,255,240,122,255,253,128,255,255,129,255,250,127,255,245,124,208,139,70,255,217,110,255,196,99,254,170,86,255,175,89,255,235,119,255,243,123,255,248,125,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,150,255,248,125,255,250,127,255,255,129,255,255,129,255,250,127,255,243,123,255,238,120,255,248,125,255,248,125,255,253,128,255,240,122,255,232,118,239,160,81,255,181,91,255,173,87,255,181,91,88,59,30,81,54,27,34,23,11,69,46,23,42,28,14,142,95,48,154,103,52,177,119,60,96,64,32,57,38,19,227,152,77,255,248,125,255,255,129,255,255,129,255,248,125,255,250,127,255,248,125,255,255,129,255,253,128,255,250,127,255,248,125,255,238,120,255,243,123,255,248,125,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,153,255,255,160,255,250,127,255,248,125,255,248,125,255,253,128,255,248,125,255,248,125,255,248,125,255,248,125,255,248,125,255,253,128,162,108,55,92,62,31,166,111,56,54,36,18,146,98,49,108,72,36,139,93,47,61,41,20,69,46,23,27,18,9,19,12,6,69,46,23,30,20,10,61,41,20,88,59,30,212,142,72,119,80,40,23,15,7,27,18,9,255,222,112,255,253,128,255,250,127,255,248,125,255,248,125,255,248,125,255,248,125,255,245,124,255,245,124,255,230,116,255,240,122,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,151,255,255,158,255,255,156,255,255,129,255,255,129,255,253,128,255,255,129,255,255,129,255,255,129,255,255,129,255,250,127,224,150,76,119,80,40,50,33,17,108,72,36,96,64,32,208,139,70,108,72,36,131,87,44,100,67,34,220,147,74,19,12,6,19,12,6,42,28,14,108,72,36,196,131,66,189,126,64,119,80,40,96,64,32,115,77,39,204,137,69,73,49,24,54,36,18,15,10,5,255,250,127,255,255,129,255,253,128,255,250,127,255,243,123,255,250,127,255,253,128,255,243,123,255,245,124,255,248,125,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,148,255,255,158,255,255,160,255,255,158,255,255,129,255,255,129,255,255,129,255,255,129,255,255,129,255,255,129,255,255,129,255,255,129,255,245,124,255,238,120,150,100,51,23,15,7,65,43,22,100,67,34,30,20,10,34,23,11,166,111,56,150,100,51,239,160,81,19,12,6,34,23,11,38,25,13,30,20,10,65,43,22,88,59,30,112,75,38,50,33,17,146,98,49,15,10,5,11,7,3,54,36,18,15,10,5,7,5,2,69,46,23,255,255,129,255,255,129,255,255,129,255,253,128,255,253,128,255,248,125,255,248,125,255,240,122,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,155,255,255,155,255,255,160,255,255,156,255,255,158,255,255,129,255,253,128,255,250,127,255,255,129,255,255,129,255,255,129,255,255,129,255,255,129,255,255,129,254,170,86,34,23,11,15,10,5,7,5,2,27,18,9,61,41,20,255,227,115,255,253,128,255,255,129,255,255,129,255,255,129,255,255,129,255,255,129,255,253,128,255,255,129,255,255,129,255,255,129,255,255,129,255,253,128,255,250,127,177,119,60,216,144,73,69,46,23,15,10,5,73,49,24,255,250,127,255,255,129,255,255,129,255,250,127,255,248,125,255,248,125,255,248,125,255,250,127,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,155,255,255,153,255,255,160,255,255,156,255,255,156,255,255,155,255,255,129,255,255,129,255,255,129,255,255,129,255,250,127,255,253,128,255,255,129,255,255,129,255,253,128,255,245,124,7,5,2,27,18,9,34,23,11,84,56,28,27,18,9,139,93,47,255,238,120,255,217,110,251,168,85,142,95,48,108,72,36,189,126,64,169,113,57,255,175,89,255,255,129,255,255,129,255,255,129,255,250,127,255,240,122,255,230,116,208,139,70,243,162,82,34,23,11,255,240,122,255,253,128,255,250,127,255,245,124,255,225,114,255,248,125,255,250,127,255,245,124,255,250,127,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,153,255,255,158,255,255,156,255,255,161,255,255,161,255,255,158,255,255,129,255,255,129,255,250,127,255,245,124,255,255,129,255,253,128,255,253,128,255,255,129,255,255,129,255,253,128,220,147,74,34,23,11,46,31,15,3,2,1,142,95,48,131,87,44,162,108,55,255,206,104,247,165,83,193,129,65,158,106,53,231,155,78,212,142,72,243,162,82,181,121,61,135,90,45,255,199,101,235,157,80,61,41,20,42,28,14,81,54,27,142,95,48,96,64,32,181,121,61,255,248,125,255,245,124,255,227,115,255,240,122,255,245,124,255,238,120,255,240,122,255,245,124,255,245,124,255,250,127,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,156,255,255,155,255,255,156,255,255,158,255,255,161,255,255,153,255,255,156,255,255,129,255,255,129,255,248,125,255,253,128,255,253,128,255,255,129,255,255,129,255,253,128,255,243,123,255,250,127,255,250,127,154,103,52,0,0,0,15,10,5,27,18,9,100,67,34,100,67,34,142,95,48,255,250,127,255,253,128,255,230,116,255,181,91,255,183,93,255,235,119,255,250,127,255,225,114,255,178,90,255,253,128,255,243,123,254,170,86,166,111,56,255,225,114,255,245,124,255,235,119,255,248,125,255,248,125,255,250,127,255,230,116,255,240,122,255,248,125,255,227,115,255,232,118,255,232,118,255,248,125,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,151,255,255,156,255,255,160,255,255,156,255,255,145,121,84,47,255,194,109,255,255,148,255,255,129,255,253,128,255,253,128,255,255,129,255,253,128,255,255,129,255,255,129,255,255,129,255,255,129,255,255,129,255,255,129,255,255,129,255,243,123,254,170,86,65,43,22,54,36,18,92,62,31,92,62,31,255,191,97,255,250,127,255,255,129,255,255,129,255,253,128,255,255,129,255,255,129,255,245,124,255,212,107,255,230,116,255,230,116,255,243,123,255,245,124,255,230,116,255,181,91,255,253,128,255,255,129,255,235,119,255,212,107,255,245,124,255,245,124,255,243,123,255,240,122,255,232,118,255,227,115,255,232,118,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,151,255,255,160,255,255,160,255,255,158,25,17,9,75,52,29,167,116,65,163,113,63,255,255,129,255,255,129,255,253,128,255,250,127,255,255,129,255,253,128,255,250,127,255,255,129,255,255,129,255,255,129,255,255,129,255,255,129,255,255,129,255,255,129,255,253,128,34,23,11,42,28,14,96,64,32,96,64,32,208,139,70,235,157,80,255,201,102,255,243,123,255,255,129,255,253,128,255,248,125,88,59,30,150,100,51,30,20,10,73,49,24,169,113,57,255,219,111,255,214,108,255,186,94,255,248,125,255,255,129,255,255,129,255,248,125,255,253,128,255,217,110,255,245,124,255,240,122,255,240,122,255,238,120,255,245,124,255,240,122,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,156,255,255,160,255,255,161,62,43,24,4,2,1,79,55,31,179,125,70,33,23,13,255,221,124,255,255,129,255,255,129,255,255,129,255,255,129,255,255,129,255,255,129,255,250,127,255,255,129,255,250,127,255,253,128,255,255,129,255,255,129,255,255,129,255,240,122,77,51,26,177,119,60,15,10,5,19,12,6,216,144,73,150,100,51,185,124,62,255,212,107,255,225,114,255,248,125,255,250,127,255,250,127,255,248,125,255,245,124,255,245,124,255,206,104,255,194,98,255,230,116,227,152,77,255,248,125,255,253,128,255,250,127,255,255,129,255,255,129,255,255,129,255,243,123,255,243,123,255,245,124,255,227,115,255,232,118,255,222,112,255,248,125,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,49,61,61,139,139,174,142,142,178,126,158,158,81,81,102,48,60,60,138,138,173,141,141,176,125,156,156,81,81,101,48,60,60,137,137,171,139,139,174,124,155,155,80,80,100,47,59,59,136,136,170,138,138,173,123,153,153,79,79,99,47,59,59,134,134,168,137,137,171,121,152,152,78,78,98,46,58,58,133,133,167,136,136,170,120,150,150,78,78,97,46,58,58,132,132,165,134,134,168,119,149,149,77,77,96,45,57,57,130,130,163,133,133,166,118,147,147,76,76,95,45,56,56,129,129,161,131,131,164,117,146,146,75,75,94,45,56,56,128,128,160,130,130,163,115,144,144,74,74,93,44,55,55,126,126,158,129,129,161,114,143,143,73,73,92,44,55,55,125,125,156,127,127,159,113,141,141,73,73,91,43,54,54,123,123,154,126,126,157,111,139,139,72,72,90,43,53,53,122,122,153,124,124,155,110,138,138,71,71,89,42,53,53,120,120,151,123,123,153,109,136,136,70,70,88,41,52,52,119,119,149,121,121,152,107,134,134,69,69,87,41,51,51,118,118,147,120,120,150,106,133,133,68,68,86,40,51,51,116,116,145,118,118,148,105,131,131,67,67,84,40,50,50,115,115,143,117,117,146,103,129,129,67,67,83,39,49,49,113,113,142,115,115,144,102,128,128,66,66,82,39,49,49,112,112,140,114,114,142,101,126,126,65,65,81,38,48,48,110,110,138,112,112,140,99,124,124,64,64,80,38,48,48,109,109,136,111,111,139,98,123,123,63,63,79,37,47,47,107,107,134,109,109,137,97,121,121,62,62,78,37,46,46,106,106,133,255,255,156,255,255,161,255,255,161,255,255,160,25,17,9,117,81,45,188,130,73,104,72,40,37,26,14,255,186,104,255,255,148,255,255,129,255,255,129,255,255,129,255,255,129,255,255,129,255,255,129,255,255,129,255,255,129,255,255,129,255,255,129,255,255,129,255,255,129,255,253,128,193,129,65,135,90,45,251,168,85,208,139,70,7,5,2,7,5,2,73,49,24,235,157,80,212,142,72,247,165,83,255,194,98,255,245,124,255,250,127,255,204,103,216,144,73,119,80,40,212,142,72,255,238,120,208,139,70,7,5,2,92,62,31,255,243,123,255,255,129,255,255,129,255,255,129,255,255,129,255,250,127,255,253,128,255,245,124,255,245,124,255,235,119,255,248,125,255,248,125,54,54,68,32,40,40,92,92,115,88,110,110,83,104,104,54,54,67,32,40,40,91,91,114,87,109,109,83,103,103,53,53,67,31,39,39,91,91,113,87,108,108,82,102,102,53,53,66,31,39,39,90,90,112,86,108,108,81,102,102,52,52,65,31,39,39,89,89,111,85,107,107,80,101,101,52,52,65,31,38,38,88,88,111,85,106,106,80,100,100,51,51,64,30,38,38,88,88,110,84,105,105,79,99,99,51,51,64,30,38,38,87,87,109,83,104,104,79,98,98,51,51,64,30,38,38,86,86,108,83,104,104,78,98,98,50,50,63,30,37,37,86,86,107,82,103,103,78,97,97,50,50,63,30,37,37,85,85,107,82,102,102,77,97,97,50,50,62,29,37,37,85,85,106,81,102,102,77,96,96,49,49,62,29,37,37,84,84,106,81,101,101,76,96,96,49,49,62,29,37,37,84,84,105,80,101,101,76,95,95,49,49,61,29,36,36,83,83,104,80,100,100,76,95,95,49,49,61,29,36,36,83,83,104,80,100,100,75,94,94,48,48,61,29,36,36,83,83,104,79,99,99,75,94,94,48,48,60,29,36,36,82,82,103,79,99,99,75,93,93,48,48,60,28,36,36,82,82,103,79,98,98,74,93,93,48,48,60,28,36,36,82,82,102,78,98,98,74,93,93,48,48,60,28,35,35,81,81,102,78,98,98,74,92,92,48,48,60,28,35,35,81,81,102,78,97,97,74,92,92,47,47,59,28,35,35,81,81,101,78,97,97,73,92,92,47,47,59,28,35,35,81,81,101,77,97,97,73,91,91,47,47,59,127,159,159,49,61,61,142,142,178,82,82,102,139,139,174,126,158,158,48,60,60,141,141,177,81,81,101,138,138,172,125,156,156,48,60,60,140,140,175,80,80,100,137,137,171,124,155,155,47,59,59,139,139,174,80,80,100,135,135,169,123,153,153,47,59,59,137,137,172,79,79,99,134,134,168,121,152,152,47,58,58,136,136,170,78,78,98,133,133,166,120,150,150,46,58,58,135,135,169,77,77,97,132,132,165,119,149,149,46,57,57,133,133,167,76,76,96,130,130,163,118,147,147,45,57,57,132,132,165,76,76,95,129,129,161,117,146,146,45,56,56,131,131,163,75,75,94,127,127,159,115,144,144,44,55,55,129,129,162,74,74,93,126,126,158,114,143,143,44,55,55,128,128,160,73,73,92,125,125,156,113,141,141,43,54,54,126,126,158,72,72,91,123,123,154,111,139,139,43,53,53,125,125,156,71,71,89,122,122,152,110,138,138,42,53,53,123,123,154,71,71,88,120,120,150,109,136,136,42,52,52,122,122,152,70,70,87,119,119,149,107,134,134,41,52,52,120,120,151,69,69,86,117,117,147,106,133,133,41,51,51,119,119,149,68,68,85,116,116,145,105,131,131,40,50,50,117,117,147,67,67,84,114,114,143,103,129,129,40,50,50,116,116,145,66,66,83,113,113,141,102,128,128,39,49,49,114,114,143,65,65,82,112,112,140,101,126,126,39,48,48,113,113,141,65,65,81,110,110,138,100,125,125,38,48,48,111,111,139,64,64,80,109,109,136,98,123,123,38,47,47,110,110,138,63,63,79,107,107,134,97,121,121,37,46,46,255,255,158,255,255,155,255,255,160,205,142,80,58,40,22,255,183,102,83,58,32,25,17,9,46,32,17,108,75,42,255,226,127,255,255,129,255,253,128,255,255,129,255,255,129,255,255,129,255,255,129,255,253,128,255,255,129,255,255,129,255,255,129,255,255,129,255,255,129,255,248,125,212,142,72,131,87,44,255,243,123,255,250,127,255,255,129,166,111,56,15,10,5,34,23,11,34,23,11,19,12,6,30,20,10,255,181,91,255,175,89,208,139,70,255,240,122,255,248,125,255,248,125,255,243,123,255,178,90,112,75,38,255,196,99,255,188,95,142,95,48,255,230,116,255,255,129,255,255,129,255,248,125,255,248,125,255,248,125,255,245,124,255,248,125,255,245,124,255,248,125,255,250,127,84,106,106,32,40,40,89,111,111,54,54,68,92,92,116,84,105,105,32,40,40,88,110,110,54,54,67,92,92,115,83,104,104,32,40,40,87,109,109,53,53,67,91,91,114,82,103,103,31,39,39,87,108,108,53,53,66,90,90,113,81,102,102,31,39,39,86,107,107,52,52,66,89,89,112,81,101,101,31,39,39,85,107,107,52,52,65,89,89,111,80,100,100,31,38,38,84,106,106,52,52,65,88,88,110,80,100,100,30,38,38,84,105,105,51,51,64,87,87,109,79,99,99,30,38,38,83,104,104,51,51,64,87,87,108,78,98,98,30,38,38,83,104,104,50,50,63,86,86,108,78,98,98,30,37,37,82,103,103,50,50,63,86,86,107,78,97,97,30,37,37,82,102,102,50,50,62,85,85,107,77,96,96,29,37,37,81,102,102,50,50,62,85,85,106,77,96,96,29,37,37,81,101,101,49,49,62,84,84,105,76,95,95,29,37,37,80,101,101,49,49,61,84,84,105,76,95,95,29,36,36,80,100,100,49,49,61,83,83,104,76,95,95,29,36,36,80,100,100,49,49,61,83,83,104,75,94,94,29,36,36,79,99,99,48,48,61,83,83,103,75,94,94,29,36,36,79,99,99,48,48,60,82,82,103,75,93,93,28,36,36,79,99,99,48,48,60,82,82,103,74,93,93,28,36,36,78,98,98,48,48,60,82,82,102,74,93,93,28,35,35,78,98,98,48,48,60,81,81,102,74,92,92,28,35,35,78,98,98,48,48,60,81,81,102,74,92,92,28,35,35,78,97,97,47,47,59,81,81,101,142,178,178,49,61,61,49,61,61,138,173,173,140,140,175,40,40,50,10,10,12,139,139,174,141,177,177,35,44,44,28,35,35,25,32,32,140,140,176,17,17,21,39,39,49,5,5,7,135,135,169,124,155,155,4,5,5,2,3,3,137,171,171,137,137,171,79,79,99,20,20,26,133,133,167,136,170,170,47,58,58,47,58,58,132,165,165,133,133,167,38,38,48,9,9,12,133,133,166,135,169,169,34,42,42,27,34,34,24,30,30,134,134,168,16,16,20,37,37,47,5,5,6,129,129,161,118,147,147,4,5,5,2,3,3,130,163,163,130,130,163,75,75,94,19,19,24,127,127,158,129,161,161,44,56,56,44,55,55,126,157,157,127,127,158,36,36,45,9,9,11,126,126,157,128,160,160,32,40,40,25,32,32,23,29,29,127,127,159,15,15,19,35,35,44,5,5,6,122,122,153,111,139,139,3,4,4,2,3,3,123,154,154,123,123,154,71,71,89,18,18,23,120,120,150,122,152,152,42,52,52,42,52,52,118,148,148,119,119,149,34,34,43,8,8,10,119,119,148,121,151,151,30,38,38,24,30,30,21,27,27,120,120,150,14,14,18,33,33,42,4,4,6,115,115,144,105,131,131,3,4,4,2,2,2,116,145,145,116,116,145,67,67,84,17,17,22,112,112,141,115,143,143,39,49,49,39,49,49,111,139,139,112,112,140,32,32,40,8,8,10,111,111,139,113,142,142,28,35,35,22,28,28,20,25,25,112,112,140,13,13,17,31,31,39,4,4,5,108,108,135,98,123,123,3,4,4,2,2,2,109,136,136,109,109,136,255,255,158,255,255,147,255,255,160,16,11,6,0,0,0,125,87,49,41,29,16,29,20,11,54,37,21,87,61,34,167,116,65,255,255,161,255,255,129,255,255,129,255,255,129,255,255,129,255,248,125,255,253,128,255,255,129,255,255,129,255,255,129,255,255,129,255,255,129,255,255,129,255,225,114,50,33,17,255,238,120,255,227,115,255,227,115,255,243,123,255,253,128,255,253,128,150,100,51,0,0,0,7,5,2,11,7,3,27,18,9,69,46,23,69,46,23,34,23,11,46,31,15,46,31,15,139,93,47,181,121,61,73,49,24,255,250,127,255,250,127,255,243,123,216,144,73,255,245,124,255,255,129,255,248,125,255,243,123,255,243,123,255,245,124,255,248,125,255,248,125,255,250,127,255,255,129,255,248,125,93,93,117,95,119,119,24,30,30,19,24,24,17,21,21,89,111,111,11,11,14,26,26,33,3,3,4,91,91,114,83,104,104,2,3,3,1,2,2,92,115,115,92,92,115,53,53,67,14,14,17,90,90,112,91,114,114,31,39,39,31,39,39,89,111,111,90,90,112,26,26,32,6,6,8,89,89,112,91,114,114,23,28,28,18,23,23,16,20,20,85,106,106,11,11,13,25,25,32,3,3,4,87,87,109,80,100,100,2,3,3,1,2,2,89,111,111,89,89,111,51,51,64,13,13,16,86,86,108,88,110,110,30,38,38,30,38,38,86,108,108,87,87,109,25,25,31,6,6,7,86,86,108,88,110,110,22,27,27,17,22,22,16,20,20,82,103,103,10,10,13,24,24,31,3,3,4,85,85,106,77,97,97,2,3,3,1,2,2,86,108,108,86,86,107,50,50,62,13,13,16,84,84,105,86,107,107,29,37,37,29,37,37,84,105,105,84,84,106,24,24,30,6,6,7,84,84,105,86,107,107,21,27,27,17,21,21,15,19,19,80,100,100,10,10,13,24,24,30,3,3,4,83,83,103,76,95,95,2,3,3,1,2,2,84,105,105,84,84,105,49,49,61,12,12,16,82,82,103,84,105,105,29,36,36,29,36,36,82,102,102,83,83,103,23,23,29,5,5,7,82,82,103,84,105,105,21,26,26,17,21,21,15,19,19,79,98,98,10,10,12,23,23,29,3,3,4,81,81,101,74,93,93,2,3,3,1,2,2,82,103,103,82,82,103,48,48,60,12,12,15,81,81,101,102,127,127,138,172,172,82,103,103,139,174,174,143,143,179,138,138,173,141,141,176,110,110,138,132,132,165,129,129,161,141,177,177,17,21,21,135,169,169,129,162,162,135,169,169,126,158,158,139,139,173,5,5,7,132,132,166,132,132,165,125,125,156,126,126,158,138,173,173,5,7,7,137,171,171,136,171,171,121,151,151,137,137,172,136,136,170,8,8,10,136,136,171,120,120,150,130,130,163,134,168,168,135,169,169,95,119,119,129,162,162,77,97,97,130,163,163,134,134,168,130,130,162,132,132,165,103,103,129,123,123,154,121,121,151,132,166,166,16,20,20,126,158,158,121,151,151,126,158,158,118,147,147,129,129,162,5,5,6,124,124,155,123,123,154,116,116,146,117,117,147,129,161,161,5,6,6,127,159,159,127,159,159,112,140,140,128,128,160,126,126,158,7,7,9,127,127,158,111,111,139,121,121,151,125,156,156,125,157,157,88,111,111,120,150,150,72,90,90,121,151,151,124,124,155,120,120,150,122,122,153,96,96,120,114,114,143,111,111,139,122,153,153,14,18,18,117,146,146,112,140,140,116,145,145,109,136,136,119,119,149,4,4,6,114,114,142,114,114,142,107,107,134,108,108,135,119,149,149,4,6,6,117,146,146,117,146,146,103,129,129,117,117,147,116,116,145,7,7,8,116,116,146,102,102,128,111,111,139,114,143,143,115,144,144,81,102,102,110,138,138,66,82,82,111,138,138,114,114,142,110,110,138,112,112,140,88,88,110,105,105,131,102,102,128,112,140,140,13,17,17,107,134,134,102,128,128,106,133,133,99,124,124,109,109,137,255,255,160,255,255,158,255,255,158,29,20,11,58,40,22,83,58,32,96,66,37,75,52,29,75,52,29,25,17,9,255,226,127,255,255,161,255,255,156,255,255,129,255,255,129,255,255,129,255,255,129,255,255,129,255,255,129,255,255,129,255,255,129,255,255,129,255,255,129,255,255,129,255,253,128,255,217,110,255,188,95,255,230,116,255,243,123,255,250,127,255,238,120,255,222,112,255,227,115,255,232,118,57,38,19,42,28,14,146,98,49,23,15,7,23,15,7,65,43,22,57,38,19,158,106,53,96,64,32,139,93,47,108,72,36,255,238,120,255,227,115,255,240,122,255,232,118,255,199,101,247,165,83,255,255,129,255,255,129,255,255,129,255,255,129,255,255,129,255,253,128,255,253,128,255,250,127,255,250,127,255,253,128,89,89,111,87,87,109,95,119,119,11,14,14,92,115,115,87,109,109,91,114,114,85,106,106,93,93,117,17,17,21,89,89,112,89,89,112,84,84,105,85,85,106,93,117,117,3,4,4,92,115,115,92,115,115,82,102,102,87,109,109,92,92,115,5,5,7,92,92,115,81,81,101,86,86,108,91,114,114,92,115,115,65,81,81,88,110,110,70,88,88,88,111,111,91,91,114,88,88,110,90,90,112,70,70,88,84,84,105,82,82,103,90,113,113,10,13,13,87,109,109,82,103,103,86,108,108,80,101,101,89,89,111,16,16,20,85,85,106,85,85,106,80,80,100,81,81,101,89,111,111,3,4,4,88,110,110,88,110,110,78,97,97,83,104,104,87,87,109,5,5,6,88,88,110,77,77,97,82,82,103,87,109,109,88,110,110,62,77,77,84,105,105,67,84,84,84,106,106,87,87,109,84,84,106,86,86,108,67,67,84,81,81,101,79,79,98,87,108,108,10,13,13,84,105,105,79,99,99,83,103,103,77,97,97,85,85,107,15,15,19,82,82,102,81,81,102,77,77,96,78,78,97,86,107,107,3,4,4,85,106,106,84,106,106,75,94,94,80,100,100,84,84,105,5,5,6,85,85,106,75,75,93,80,80,100,84,105,105,85,106,106,60,75,75,81,102,102,65,81,81,82,103,103,84,84,106,82,82,102,83,83,104,65,65,82,78,78,98,76,76,96,84,105,105,10,12,12,81,102,102,77,96,96,80,101,101,75,94,94,83,83,104,15,15,19,79,79,99,79,79,99,140,175,175,128,160,160,37,47,47,17,21,21,49,61,61,5,7,7,141,177,177,143,143,178,142,142,178,40,40,50,82,82,102,28,28,35,2,2,3,138,138,173,137,137,171,136,171,171,125,156,156,36,46,46,17,21,21,48,60,60,5,7,7,138,172,172,139,139,174,139,139,174,39,39,49,79,79,99,27,27,34,2,2,3,135,135,168,133,133,166,133,166,166,121,152,152,35,44,44,16,20,20,46,58,58,5,6,6,134,168,168,135,135,169,135,135,169,38,38,47,77,77,97,27,27,33,2,2,3,131,131,164,129,129,162,129,161,161,118,147,147,34,43,43,16,20,20,45,56,56,5,6,6,130,163,163,131,131,164,131,131,164,37,37,46,75,75,94,26,26,32,2,2,3,127,127,158,125,125,156,125,156,156,114,143,143,33,42,42,15,19,19,43,54,54,5,6,6,126,157,157,127,127,159,126,126,158,35,35,44,72,72,90,25,25,31,2,2,3,122,122,153,121,121,151,121,151,151,110,138,138,32,40,40,15,18,18,42,53,53,4,6,6,121,152,152,122,122,153,122,122,153,34,34,43,70,70,87,24,24,30,2,2,3,118,118,148,117,117,146,116,146,146,106,133,133,31,39,39,14,18,18,40,51,51,4,6,6,117,146,146,118,118,148,118,118,147,33,33,41,67,67,84,23,23,29,2,2,2,114,114,142,112,112,141,112,140,140,102,128,128,30,37,37,13,17,17,39,49,49,4,5,5,113,141,141,114,114,142,113,113,142,32,32,40,65,65,81,22,22,28,2,2,2,110,110,137,108,108,135,108,135,135,99,123,123,255,255,158,255,255,148,255,255,160,12,8,4,87,61,34,133,93,52,205,142,80,58,40,22,4,2,1,33,23,13,255,212,119,255,255,158,255,255,151,255,255,129,255,255,129,255,255,129,255,255,129,255,255,129,255,255,129,255,253,128,255,248,125,255,227,115,255,173,87,166,111,56,231,155,78,255,217,110,142,95,48,255,188,95,255,206,104,255,243,123,255,248,125,255,175,89,255,183,93,255,214,108,162,108,55,255,248,125,255,191,97,112,75,38,247,165,83,208,139,70,135,90,45,135,90,45,193,129,65,255,191,97,154,103,52,255,209,106,255,248,125,255,235,119,255,212,107,255,235,119,255,238,120,255,183,93,255,230,116,255,255,129,255,255,129,255,255,129,255,255,129,255,253,128,255,245,124,255,243,123,255,253,128,255,250,127,33,41,41,3,4,4,95,119,119,90,113,113,96,96,120,27,27,33,55,55,68,19,19,24,2,2,3,93,93,116,92,92,115,92,115,115,84,105,105,26,33,33,11,14,14,32,40,40,3,4,4,93,116,116,88,110,110,93,93,117,26,26,33,53,53,67,18,18,23,2,2,3,91,91,113,89,89,112,89,112,112,82,102,102,26,32,32,11,13,13,31,39,39,3,4,4,90,113,113,86,107,107,91,91,114,25,25,32,52,52,65,18,18,23,2,2,3,89,89,111,88,88,110,87,109,109,80,100,100,25,31,31,10,13,13,30,38,38,3,4,4,89,111,111,84,105,105,89,89,112,25,25,31,51,51,64,18,18,22,2,2,3,87,87,109,86,86,107,86,107,107,78,98,98,25,31,31,10,13,13,30,38,38,3,4,4,87,109,109,82,103,103,88,88,110,24,24,31,50,50,63,17,17,22,2,2,3,85,85,107,84,84,106,84,106,106,77,97,97,24,30,30,10,13,13,29,37,37,3,4,4,86,107,107,81,102,102,86,86,108,24,24,30,49,49,62,17,17,21,2,2,3,84,84,105,83,83,104,83,104,104,76,95,95,24,30,30,10,13,13,29,36,36,3,4,4,85,106,106,80,100,100,85,85,107,24,24,30,49,49,61,17,17,21,2,2,3,83,83,104,82,82,103,82,103,103,75,94,94,24,30,30,10,12,12,29,36,36,3,4,4,84,105,105,79,99,99,84,84,106,23,23,29,48,48,60,17,17,21,2,2,3,82,82,103,81,81,102,150,120,150,181,145,181,173,138,173,180,180,180,116,116,116,176,176,176,112,112,112,81,81,81,110,110,110,171,171,171,176,176,176,176,176,176,178,142,178,172,137,172,168,134,168,130,104,130,162,130,162,78,62,78,169,135,169,158,126,158,175,140,175,173,138,173,175,175,175,134,134,134,165,165,165,165,165,165,73,73,73,155,155,155,160,160,160,172,172,172,170,170,170,172,137,172,124,99,124,138,110,138,112,89,112,75,60,75,77,62,77,137,110,137,169,135,169,160,128,160,169,169,169,109,109,109,158,158,158,96,96,96,38,38,38,60,60,60,153,153,153,166,166,166,149,149,149,166,132,166,110,88,110,95,76,95,116,93,116,41,33,41,63,50,63,135,108,135,163,130,163,156,125,156,162,162,162,105,105,105,158,158,158,101,101,101,73,73,73,99,99,99,154,154,154,158,158,158,158,158,158,159,127,159,154,123,154,151,120,151,117,93,117,145,116,145,70,56,70,151,120,151,141,113,141,156,125,156,154,123,154,156,156,156,119,119,119,147,147,147,147,147,147,65,65,65,138,138,138,143,143,143,153,153,153,151,151,151,152,122,152,110,88,110,122,98,122,99,79,99,67,53,67,68,54,68,121,97,121,150,120,150,142,113,142,149,149,149,96,96,96,139,139,139,85,85,85,34,34,34,53,53,53,135,135,135,147,147,147,131,131,131,146,117,146,97,77,97,83,67,83,102,82,102,36,29,36,55,44,55,119,95,119,143,115,143,137,110,137,143,143,143,92,92,92,139,139,139,88,88,88,64,64,64,87,87,87,135,135,135,139,139,139,138,138,138,255,255,158,255,255,156,255,255,160,16,11,6,255,206,116,37,26,14,87,61,34,71,49,27,12,8,4,255,194,109,255,194,109,255,255,160,255,255,156,255,255,150,255,255,129,255,255,129,255,255,129,255,255,129,255,255,129,255,250,127,200,134,68,224,150,76,189,126,64,255,188,95,220,147,74,254,170,86,255,225,114,255,222,112,220,147,74,255,240,122,255,186,94,255,212,107,220,147,74,212,142,72,255,191,97,247,165,83,251,168,85,255,219,111,255,248,125,146,98,49,65,43,22,224,150,76,255,196,99,112,75,38,115,77,39,96,64,32,255,219,111,255,240,122,255,232,118,255,225,114,255,230,116,255,230,116,255,188,95,251,168,85,255,245,124,255,253,128,255,255,129,255,255,129,255,253,128,255,243,123,255,245,124,255,250,127,255,253,128,121,97,121,120,96,120,121,121,121,92,92,92,114,114,114,114,114,114,51,51,51,107,107,107,111,111,111,119,119,119,118,118,118,119,95,119,86,69,86,96,76,96,77,62,77,52,42,52,53,42,53,95,76,95,117,94,117,111,89,111,117,117,117,75,75,75,110,110,110,67,67,67,27,27,27,42,42,42,106,106,106,116,116,116,104,104,104,115,92,115,77,61,77,66,53,66,81,65,81,29,23,29,44,35,44,95,76,95,114,91,114,109,87,109,114,114,114,73,73,73,111,111,111,71,71,71,51,51,51,69,69,69,108,108,108,112,112,112,112,112,112,110,110,110,109,87,109,107,85,107,83,66,83,103,82,103,49,39,49,107,86,107,100,80,100,111,89,111,110,88,110,111,111,111,85,85,85,105,105,105,105,105,105,47,47,47,99,99,99,103,103,103,110,110,110,109,109,109,110,88,110,80,64,80,89,71,89,72,57,72,48,39,48,50,40,50,88,71,88,109,87,109,104,83,104,109,109,109,70,70,70,102,102,102,62,62,62,25,25,25,39,39,39,100,100,100,108,108,108,97,97,97,108,86,108,72,57,72,62,49,62,76,61,76,27,21,27,41,33,41,89,71,89,108,86,108,103,82,103,107,107,107,69,69,69,105,105,105,67,67,67,48,48,48,66,66,66,103,103,103,106,106,106,106,106,106,104,104,104,103,83,103,101,81,101,78,63,78,98,78,98,47,37,47,102,81,102,95,76,95,106,85,106,105,84,105,106,106,106,81,81,81,100,100,100,141,176,176,32,40,40,123,154,154,60,75,75,144,181,181,21,27,27,112,140,140,138,172,172,140,176,176,143,143,179,141,141,177,112,112,141,10,10,12,93,93,117,63,63,79,142,142,177,4,4,5,140,140,175,131,131,164,136,136,171,141,176,176,139,174,174,9,12,12,4,5,5,52,65,65,62,77,77,139,174,174,12,15,15,139,173,173,135,169,169,137,171,171,138,138,172,138,138,172,9,9,12,49,49,62,41,41,51,94,94,117,133,133,167,37,37,46,136,136,170,130,130,163,135,135,169,135,169,169,135,168,168,9,11,11,125,156,156,37,47,47,131,164,164,114,143,143,44,55,55,129,161,161,130,162,162,131,131,164,132,132,165,132,132,165,11,11,14,114,114,142,64,64,81,130,130,163,46,46,57,5,5,6,118,118,147,123,123,154,128,160,160,129,161,161,125,156,156,28,35,35,108,136,136,53,66,66,127,159,159,19,24,24,99,123,123,121,152,152,124,155,155,126,126,158,124,124,156,99,99,123,8,8,11,82,82,102,55,55,69,124,124,155,3,3,4,122,122,153,115,115,143,119,119,149,123,154,154,121,152,152,8,10,10,3,4,4,45,57,57,54,67,67,121,151,151,11,13,13,120,151,151,118,147,147,119,148,148,120,120,150,119,119,149,8,8,10,43,43,54,36,36,45,81,81,101,115,115,144,32,32,40,117,117,147,112,112,140,117,117,146,116,146,146,116,145,145,8,10,10,107,134,134,32,40,40,113,141,141,98,123,123,38,47,47,111,138,138,112,140,140,112,112,141,113,113,142,113,113,141,10,10,12,98,98,122,255,255,156,255,255,155,255,255,161,255,206,116,255,192,107,54,37,21,41,29,16,71,49,27,12,8,4,150,104,58,150,104,58,255,255,158,255,255,158,255,255,153,255,255,155,255,255,129,255,255,129,255,253,128,247,165,83,193,129,65,235,157,80,200,134,68,255,194,98,255,225,114,255,240,122,255,230,116,255,238,120,255,222,112,255,222,112,255,204,103,247,165,83,255,194,98,243,162,82,255,191,97,154,103,52,255,219,111,255,243,123,196,131,66,255,209,106,255,250,127,255,245,124,255,186,94,92,62,31,131,87,44,227,152,77,81,54,27,255,188,95,255,245,124,255,219,111,255,243,123,255,245,124,255,230,116,255,204,103,255,222,112,255,245,124,255,245,124,200,134,68,166,111,56,255,186,94,255,188,95,255,186,94,255,250,127,255,245,124,255,250,127,255,248,125,48,48,60,97,97,121,34,34,42,3,3,4,88,88,110,91,91,114,95,119,119,96,120,120,93,116,116,21,26,26,81,101,101,39,49,49,95,119,119,14,18,18,74,92,92,91,114,114,92,116,116,94,94,118,93,93,117,74,74,93,6,6,8,61,61,77,41,41,52,93,93,117,2,2,3,92,92,115,86,86,108,90,90,113,93,116,116,92,115,115,6,8,8,2,3,3,34,43,43,41,51,51,92,115,115,8,10,10,92,115,115,90,112,112,90,113,113,91,91,114,91,91,114,6,6,8,33,33,41,27,27,34,62,62,78,89,89,111,24,24,30,90,90,113,86,86,108,90,90,113,90,113,113,90,112,112,6,7,7,83,104,104,25,31,31,88,110,110,77,96,96,29,37,37,86,108,108,87,109,109,89,111,111,89,89,111,89,89,111,8,8,10,77,77,96,44,44,55,88,88,111,31,31,39,3,3,4,80,80,100,83,83,104,87,109,109,88,110,110,85,106,106,19,24,24,74,93,93,36,45,45,87,109,109,13,16,16,68,85,85,84,105,105,85,107,107,87,87,109,86,86,108,68,68,85,6,6,7,57,57,71,38,38,48,86,86,108,2,2,3,85,85,107,80,80,100,84,84,105,86,108,108,85,107,107,6,7,7,2,3,3,32,40,40,38,47,47,86,107,107,7,9,9,86,107,107,84,105,105,85,106,106,85,85,107,85,85,107,6,6,7,31,31,38,25,25,32,58,58,73,83,83,104,23,23,29,85,85,106,146,182,182,144,180,180,129,161,161,36,45,45,49,62,62,4,5,5,29,36,36,49,62,62,2,3,3,26,32,32,139,174,174,142,177,177,143,143,179,140,140,175,141,141,176,17,17,21,40,40,50,81,81,102,40,40,50,10,10,12,21,21,26,5,5,7,138,138,172,136,136,170,136,136,170,140,175,175,138,173,173,124,155,155,35,44,44,47,59,59,4,5,5,28,35,35,47,59,59,2,3,3,25,31,31,133,166,166,136,170,170,137,137,171,134,134,167,135,135,169,16,16,20,38,38,48,78,78,97,38,38,47,9,9,11,20,20,25,5,5,6,131,131,164,130,130,162,129,129,162,133,167,167,132,165,165,118,148,148,33,41,41,45,56,56,4,5,5,26,33,33,45,56,56,2,3,3,23,29,29,127,158,158,129,161,161,130,130,163,127,127,159,128,128,160,15,15,19,36,36,45,74,74,92,36,36,45,9,9,11,19,19,24,5,5,6,125,125,156,123,123,154,123,123,153,126,158,158,125,156,156,112,140,140,31,39,39,43,53,53,3,4,4,25,31,31,42,53,53,2,3,3,22,28,28,120,150,150,122,152,152,123,123,154,120,120,150,121,121,151,14,14,18,34,34,43,70,70,87,34,34,42,8,8,10,18,18,22,4,4,6,117,117,147,116,116,145,116,116,145,119,149,149,118,147,147,105,132,132,29,37,37,40,50,50,3,4,4,23,29,29,40,50,50,2,2,2,21,26,26,113,141,141,115,144,144,116,116,145,113,113,141,114,114,143,13,13,17,32,32,40,66,66,82,32,32,40,8,8,10,17,17,21,4,4,5,255,255,158,255,255,151,255,255,158,255,255,148,255,203,114,255,238,134,100,69,39,50,34,19,29,20,11,221,154,86,46,32,17,255,232,130,255,255,161,255,255,156,255,255,150,255,255,161,255,222,112,173,116,59,135,90,45,127,85,43,255,194,98,255,217,110,255,248,125,255,235,119,255,238,120,255,243,123,255,248,125,255,230,116,254,170,86,255,235,119,255,186,94,173,116,59,220,147,74,169,113,57,158,106,53,255,206,104,255,173,87,255,248,125,255,232,118,255,245,124,255,217,110,255,238,120,255,227,115,255,248,125,255,238,120,255,178,90,255,181,91,255,181,91,255,253,128,255,253,128,255,245,124,255,235,119,255,245,124,255,181,91,216,144,73,255,243,123,255,250,127,255,238,120,255,232,118,255,219,111,115,77,39,177,119,60,243,162,82,255,245,124,255,196,99,255,243,123,96,96,120,96,96,121,11,11,14,27,27,34,56,56,70,27,27,34,6,6,8,14,14,18,3,3,4,94,94,118,93,93,116,93,93,116,96,120,120,94,118,118,85,106,106,24,30,30,32,40,40,2,3,3,19,24,24,32,40,40,1,2,2,17,21,21,91,114,114,93,116,116,88,110,110,92,92,115,92,92,116,11,11,14,26,26,33,53,53,67,26,26,33,6,6,8,14,14,17,3,3,4,90,90,113,89,89,112,89,89,112,92,115,115,91,114,114,81,102,102,23,29,29,31,39,39,2,3,3,18,23,23,31,39,39,1,2,2,16,20,20,88,110,110,90,112,112,85,106,106,89,89,111,89,89,112,10,10,13,25,25,32,52,52,65,25,25,31,6,6,7,13,13,17,3,3,4,88,88,110,87,87,108,87,87,108,89,112,112,88,110,110,79,99,99,22,28,28,30,38,38,2,3,3,17,22,22,30,38,38,1,2,2,16,20,20,86,107,107,87,109,109,83,103,103,86,86,108,87,87,109,10,10,13,24,24,31,50,50,63,24,24,31,6,6,7,13,13,16,3,3,4,85,85,107,84,84,106,84,84,106,87,109,109,86,108,108,77,97,97,22,27,27,29,37,37,2,3,3,17,21,21,29,37,37,1,2,2,15,19,19,84,105,105,85,107,107,81,101,101,84,84,106,85,85,107,10,10,13,24,24,30,49,49,62,24,24,30,6,6,7,13,13,16,3,3,4,84,84,105,83,83,104,83,83,104,157,125,157,181,144,181,79,63,79,154,123,154,182,145,182,178,142,178,174,139,174,172,137,172,181,181,181,180,180,180,180,180,180,180,180,180,50,50,50,76,76,76,152,152,152,177,177,177,59,59,59,142,142,142,178,178,178,176,176,176,170,170,170,173,173,173,176,141,176,176,141,176,176,141,176,176,140,176,35,28,35,74,59,74,113,90,113,173,138,173,40,32,40,138,111,138,149,119,149,169,135,169,166,132,166,160,128,160,162,129,162,172,172,172,171,171,171,171,171,171,34,34,34,8,8,8,94,94,94,165,165,165,78,78,78,68,68,68,17,17,17,165,165,165,161,161,161,156,156,156,162,162,162,167,134,167,163,131,163,165,132,165,156,125,156,6,5,6,92,73,92,157,125,157,76,61,76,49,39,49,61,49,61,164,131,164,160,128,160,158,126,158,144,115,144,162,162,162,162,162,162,160,160,160,161,161,161,6,6,6,92,92,92,137,137,137,90,90,90,69,69,69,59,59,59,159,159,159,155,155,155,150,150,150,140,140,140,157,126,157,157,125,157,153,123,153,156,125,156,72,58,72,129,103,129,133,106,133,153,122,153,67,53,67,131,104,131,154,123,154,150,120,150,147,117,147,145,116,145,152,152,152,152,152,152,152,152,152,151,151,151,42,42,42,64,64,64,127,127,127,148,148,148,49,49,49,119,119,119,149,149,149,147,147,147,142,142,142,145,145,145,147,118,147,147,117,147,147,117,147,146,117,146,29,23,29,61,49,61,94,75,94,143,115,143,33,26,33,115,92,115,123,99,123,141,112,141,137,110,137,133,106,133,134,107,134,255,250,140,255,229,129,255,255,156,112,78,44,255,255,161,255,255,161,71,49,27,33,23,13,238,165,93,79,55,31,75,52,29,255,255,155,255,255,160,255,255,158,255,255,156,255,255,156,193,129,65,204,137,69,255,204,103,255,248,125,255,235,119,247,165,83,255,219,111,255,227,115,255,219,111,255,248,125,255,250,127,255,235,119,255,222,112,255,243,123,255,212,107,255,222,112,255,243,123,255,227,115,216,144,73,162,108,55,231,155,78,239,160,81,255,212,107,255,199,101,255,212,107,254,170,86,255,186,94,255,178,90,255,219,111,255,214,108,255,206,104,255,248,125,247,165,83,146,98,49,255,248,125,255,253,128,255,240,122,255,201,102,166,111,56,255,199,101,255,248,125,255,248,125,255,245,124,255,248,125,255,250,127,255,209,106,204,137,69,255,191,97,255,212,107,221,110,0,232,116,0,121,121,121,118,118,118,120,120,120,115,115,115,122,97,122,122,97,122,121,97,121,24,19,24,51,41,51,78,62,78,119,95,119,28,22,28,96,77,96,103,82,103,117,94,117,115,92,115,111,89,111,112,89,112,119,119,119,119,119,119,119,119,119,24,24,24,5,5,5,65,65,65,114,114,114,54,54,54,47,47,47,11,11,11,115,115,115,112,112,112,108,108,108,113,113,113,116,93,116,114,91,114,115,92,115,109,87,109,4,3,4,64,51,64,110,88,110,53,43,53,35,28,35,43,34,43,115,92,115,112,90,112,111,89,111,102,81,102,114,114,114,114,114,114,113,113,113,114,114,114,4,4,4,65,65,65,97,97,97,64,64,64,49,49,49,42,42,42,113,113,113,110,110,110,107,107,107,100,100,100,112,90,112,112,90,112,110,88,110,112,89,112,52,41,52,92,74,92,96,77,96,110,88,110,48,38,48,94,75,94,111,89,111,109,87,109,106,85,106,105,84,105,111,111,111,111,111,111,110,110,110,110,110,110,31,31,31,46,46,46,93,93,93,109,109,109,36,36,36,87,87,87,110,110,110,108,108,108,105,105,105,107,107,107,103,103,103,109,87,109,109,87,109,109,87,109,22,17,22,46,37,46,70,56,70,108,86,108,25,20,25,86,69,86,93,74,93,106,85,106,104,83,104,100,80,100,101,81,101,108,108,108,108,108,108,108,108,108,21,21,21,5,5,5,60,60,60,104,104,104,50,50,50,71,89,89,10,12,12,142,177,177,141,177,177,144,180,180,140,175,175,144,180,180,145,145,181,145,145,181,145,145,181,144,144,181,62,62,78,140,140,175,99,99,123,0,0,0,52,52,65,69,69,86,10,10,12,138,138,173,138,138,173,141,141,176,136,136,170,140,140,175,141,177,177,140,175,175,141,176,176,141,176,176,81,101,101,136,170,170,9,12,12,14,17,17,29,37,37,49,61,61,16,21,21,130,163,163,138,173,173,131,164,164,135,169,169,132,165,165,137,137,172,133,133,166,137,137,171,137,137,171,129,129,162,133,133,167,6,6,8,9,9,12,45,45,56,35,35,44,79,79,98,125,125,156,134,134,168,128,128,161,131,131,164,131,131,163,133,166,166,129,161,161,133,166,166,132,165,165,125,157,157,129,161,161,6,8,8,9,11,11,43,54,54,34,43,43,76,95,95,121,151,151,130,162,162,124,155,155,127,158,158,126,158,158,129,129,161,127,127,159,128,128,160,115,115,144,120,120,150,126,126,158,0,0,0,11,11,14,48,48,60,19,19,23,123,123,154,75,75,93,125,125,157,124,124,155,117,117,146,119,119,149,124,155,155,124,155,155,124,155,155,53,67,67,119,149,149,84,105,105,0,0,0,44,55,55,59,74,74,8,10,10,118,147,147,117,147,147,119,149,149,116,145,145,119,149,149,120,120,150,120,120,150,119,119,149,119,119,149,51,51,64,115,115,144,81,81,101,0,0,0,42,42,53,57,57,71,8,8,10,113,113,142,113,113,141,115,115,144,111,111,139,114,114,143,115,144,144,114,142,142,115,144,144,255,255,155,255,255,147,255,255,145,255,255,156,255,253,142,255,255,151,255,255,161,129,90,50,66,46,26,209,145,81,184,128,71,79,55,31,255,247,138,255,255,155,255,255,161,255,255,161,255,255,156,255,255,156,255,250,127,255,227,115,255,230,116,255,227,115,255,214,108,255,245,124,243,162,82,255,238,120,255,235,119,255,181,91,255,240,122,255,225,114,255,232,118,255,240,122,255,199,101,244,122,0,252,126,0,249,124,0,244,122,0,247,123,0,232,116,0,214,107,0,191,95,0,193,96,0,168,84,0,173,86,0,188,94,0,232,116,0,234,117,0,244,122,0,244,122,0,244,122,0,244,122,0,247,123,0,237,118,0,229,114,0,242,121,0,244,122,0,244,122,0,244,122,0,244,122,0,249,124,0,249,124,0,252,126,0,242,121,0,247,123,0,242,121,0,234,117,0,229,114,0,244,122,0,36,45,45,48,60,60,6,8,8,95,119,119,95,119,119,97,121,121,94,117,117,96,121,121,93,117,117,97,97,122,97,97,121,97,97,121,42,42,52,94,94,117,66,66,83,0,0,0,35,35,43,46,46,58,6,6,8,93,93,116,92,92,116,94,94,118,91,91,114,94,94,118,95,119,119,94,117,117,94,118,118,94,118,118,54,68,68,91,114,114,6,8,8,9,11,11,19,24,24,33,41,41,11,14,14,88,110,110,93,116,116,88,110,110,91,114,114,89,111,111,93,93,116,90,90,112,92,92,116,92,92,115,87,87,109,90,90,113,4,4,5,6,6,8,30,30,38,24,24,30,53,53,67,85,85,106,91,91,114,87,87,109,89,89,112,89,89,111,91,114,114,88,110,110,91,113,113,90,113,113,86,107,107,88,111,111,4,5,5,6,7,7,30,37,37,23,29,29,52,66,66,83,104,104,90,112,112,86,107,107,88,110,110,87,109,109,89,89,112,88,88,110,89,89,111,80,80,100,83,83,104,88,88,110,0,0,0,8,8,10,34,34,42,13,13,16,87,87,108,52,52,66,88,88,110,87,87,109,83,83,103,84,84,106,88,110,110,88,110,110,88,110,110,38,47,47,85,106,106,60,75,75,0,0,0,31,39,39,42,53,53,6,7,7,84,106,106,84,106,106,86,108,108,83,104,104,86,108,108,83,104,104,87,87,108,87,87,108,87,87,108,37,37,47,84,84,105,59,59,74,0,0,0,130,104,130,182,145,182,105,84,105,129,103,129,11,8,11,183,146,183,179,143,179,180,144,180,174,139,174,174,139,174,181,181,181,181,181,181,179,179,179,180,180,180,151,151,151,136,136,136,43,43,43,114,114,114,175,175,175,95,95,95,74,74,74,149,149,149,172,172,172,174,174,174,168,168,168,171,171,171,168,168,168,176,141,176,176,141,176,172,137,172,173,139,173,175,140,175,22,18,22,7,5,7,118,94,118,123,98,123,172,137,172,99,79,99,122,97,122,10,8,10,172,138,172,168,135,168,170,136,170,164,131,164,164,131,164,170,170,170,170,170,170,168,168,168,169,169,169,142,142,142,128,128,128,40,40,40,107,107,107,164,164,164,89,89,89,69,69,69,140,140,140,161,161,161,163,163,163,157,157,157,160,160,160,157,157,157,165,132,165,164,131,164,161,129,161,162,130,162,163,131,163,21,17,21,6,5,6,110,88,110,114,91,114,160,128,160,93,74,93,114,91,114,9,7,9,160,128,160,157,125,157,158,126,158,153,122,153,152,122,152,159,159,159,158,158,158,156,156,156,157,157,157,132,132,132,119,119,119,38,38,38,99,99,99,153,153,153,83,83,83,64,64,64,130,130,130,150,150,150,151,151,151,146,146,146,149,149,149,145,145,145,152,122,152,152,122,152,149,119,149,150,120,150,151,121,151,19,15,19,6,4,6,101,81,101,106,84,106,148,118,148,86,68,86,105,84,105,9,7,9,148,118,148,145,116,145,146,116,146,141,113,141,141,112,141,146,146,146,146,146,146,144,144,144,145,145,145,121,121,121,109,109,109,255,255,155,255,255,153,255,255,151,255,255,156,196,136,76,255,247,138,255,255,161,255,255,160,25,17,9,217,151,84,108,75,42,184,128,71,125,87,49,255,255,153,255,255,156,255,255,156,255,255,158,255,255,158,252,126,0,244,122,0,247,123,0,244,122,0,244,122,0,252,126,0,242,121,0,242,121,0,247,123,0,242,121,0,239,119,0,247,123,0,249,124,0,237,118,0,244,122,0,249,124,0,252,126,0,247,123,0,242,121,0,198,99,0,137,68,0,198,99,0,181,90,0,76,38,0,58,29,0,112,56,0,135,67,0,160,80,0,135,67,0,170,85,0,242,121,0,242,121,0,234,117,0,247,123,0,249,124,0,249,124,0,247,123,0,242,121,0,242,121,0,244,122,0,244,122,0,252,126,0,252,126,0,247,123,0,247,123,0,244,122,0,234,117,0,239,119,0,237,118,0,239,119,0,104,104,104,94,94,94,30,30,30,76,76,76,121,121,121,66,66,66,51,51,51,103,103,103,60,60,60,120,120,120,116,116,116,118,118,118,116,116,116,120,120,120,121,97,121,119,95,119,120,96,120,121,96,121,7,5,7,4,3,4,81,65,81,85,68,85,118,95,118,48,38,48,84,67,84,7,5,7,119,95,119,116,93,116,116,93,116,114,91,114,113,91,113,118,118,118,118,118,118,117,117,117,118,118,118,98,98,98,89,89,89,28,28,28,72,72,72,114,114,114,62,62,62,48,48,48,97,97,97,57,57,57,114,114,114,110,110,110,112,112,112,110,110,110,114,114,114,115,92,115,113,90,113,114,91,114,115,92,115,6,5,6,4,3,4,77,62,77,81,64,81,113,90,113,46,36,46,80,64,80,6,5,6,114,91,114,111,89,111,111,89,111,109,87,109,108,87,108,113,113,113,113,113,113,112,112,112,113,113,113,94,94,94,85,85,85,27,27,27,69,69,69,110,110,110,60,60,60,46,46,46,94,94,94,55,55,55,109,109,109,106,106,106,108,108,108,105,105,105,110,110,110,111,89,111,109,87,109,110,88,110,111,88,111,6,5,6,4,3,4,74,59,74,78,62,78,109,87,109,44,35,44,78,62,78,6,5,6,110,88,110,107,86,107,107,86,107,105,84,105,105,84,105,109,109,109,109,109,109,108,108,108,109,109,109,91,91,91,82,82,82,26,26,26,67,67,67,106,106,106,58,58,58,141,177,177,5,7,7,28,35,35,107,133,133,89,111,111,45,57,57,23,29,29,143,179,179,132,166,166,66,82,82,113,141,141,142,178,178,137,172,172,140,175,175,136,170,170,140,175,175,144,144,180,144,144,180,143,143,179,137,137,172,5,5,7,27,27,34,18,18,23,86,86,108,79,79,98,15,15,19,139,139,174,128,128,161,34,34,42,124,124,155,138,138,172,133,133,167,137,137,172,131,131,164,135,135,169,139,174,174,139,174,174,139,174,174,137,172,172,2,3,3,26,33,33,18,22,22,73,92,92,76,95,95,15,19,19,123,154,154,134,167,167,33,41,41,119,149,149,128,160,160,131,164,164,133,166,166,125,157,157,131,163,163,134,134,168,134,134,168,133,133,166,134,134,167,2,2,3,13,13,16,32,32,40,71,71,89,73,73,92,26,26,33,64,64,80,129,129,161,5,5,6,88,88,111,123,123,154,126,126,158,127,127,159,118,118,148,126,126,157,129,162,162,129,161,161,127,159,159,128,161,161,85,107,107,27,34,34,31,38,38,65,82,82,65,82,82,25,32,32,61,76,76,124,155,155,40,51,51,85,106,106,27,34,34,123,153,153,122,153,153,113,142,142,120,151,151,124,124,155,124,124,155,121,121,151,123,123,154,82,82,102,26,26,32,23,23,29,63,63,78,62,62,78,38,38,47,19,19,24,118,118,148,39,39,48,54,54,68,26,26,33,117,117,147,113,113,142,116,116,145,115,115,144,116,116,145,118,148,148,116,145,145,118,147,147,113,141,141,4,5,5,22,28,28,85,106,106,70,88,88,36,45,45,255,255,155,255,255,156,255,253,142,255,255,156,154,107,60,133,93,52,255,255,161,255,255,161,255,255,147,255,221,124,62,43,24,104,72,40,175,122,68,255,255,156,255,255,150,255,255,158,255,255,156,255,255,158,252,126,0,247,123,0,247,123,0,242,121,0,244,122,0,244,122,0,244,122,0,242,121,0,244,122,0,244,122,0,239,119,0,249,124,0,244,122,0,244,122,0,249,124,0,252,126,0,247,123,0,247,123,0,221,110,0,102,51,0,99,49,0,66,33,0,20,10,0,40,20,0,10,5,0,20,10,0,58,29,0,165,82,0,68,34,0,45,22,0,63,31,0,38,19,0,150,75,0,183,91,0,244,122,0,252,126,0,252,126,0,244,122,0,247,123,0,244,122,0,244,122,0,249,124,0,249,124,0,247,123,0,244,122,0,249,124,0,237,118,0,237,118,0,239,119,0,100,125,125,100,125,125,99,124,124,100,125,125,66,83,83,21,26,26,24,30,30,51,64,64,51,63,63,20,25,25,47,59,59,96,120,120,31,39,39,66,83,83,21,27,27,96,120,120,95,119,119,88,111,111,94,118,118,95,119,119,97,97,121,95,95,118,96,96,121,64,64,80,20,20,25,18,18,23,49,49,62,49,49,61,30,30,37,15,15,19,93,93,117,30,30,38,43,43,54,21,21,26,93,93,116,90,90,112,92,92,115,91,91,114,92,92,115,94,118,118,92,115,115,94,117,117,90,112,112,3,4,4,18,22,22,68,85,85,56,70,70,29,36,36,15,18,18,91,114,114,84,105,105,42,52,52,72,90,90,90,113,113,87,109,109,89,112,112,86,108,108,89,111,111,92,92,115,92,92,115,91,91,114,88,88,110,3,3,4,17,17,21,12,12,15,55,55,69,50,50,63,10,10,12,89,89,111,82,82,103,22,22,27,79,79,99,88,88,111,86,86,107,88,88,110,85,85,106,87,87,109,90,112,112,90,112,112,90,112,112,89,111,111,1,2,2,17,21,21,11,14,14,48,60,60,49,62,62,9,12,12,80,100,100,87,109,109,21,27,27,78,98,98,83,104,104,86,107,107,87,108,108,82,103,103,86,107,107,88,88,110,88,88,110,87,87,109,88,88,110,1,1,2,8,8,11,21,21,26,47,47,59,48,48,61,17,17,22,42,42,53,86,86,107,3,3,4,59,59,74,82,82,103,85,85,106,179,179,179,183,183,183,173,173,173,162,162,162,178,143,178,178,142,178,176,141,176,176,140,176,181,145,181,179,143,179,180,144,180,177,141,177,138,110,138,121,97,121,167,133,167,175,140,175,175,140,175,173,138,173,173,138,173,174,139,174,174,139,174,179,143,179,173,139,173,168,134,168,164,131,164,173,173,173,172,172,172,170,170,170,170,170,170,175,175,175,173,173,173,174,174,174,171,171,171,133,133,133,117,117,117,161,161,161,169,169,169,169,169,169,167,167,167,167,167,167,168,168,168,168,168,168,173,173,173,167,167,167,162,162,162,158,158,158,168,134,168,171,137,171,164,131,164,158,127,158,165,132,165,165,132,165,164,131,164,156,124,156,130,104,130,116,92,116,160,128,160,163,130,163,162,130,162,157,126,157,164,131,164,160,128,160,161,129,161,166,133,166,161,128,161,147,117,147,160,128,160,161,161,161,164,164,164,157,157,157,152,152,152,158,158,158,158,158,158,158,158,158,149,149,149,124,124,124,111,111,111,153,153,153,156,156,156,156,156,156,150,150,150,156,156,156,153,153,153,154,154,154,159,159,159,154,154,154,140,140,140,158,126,158,152,122,152,151,120,151,153,123,153,153,122,153,151,121,151,156,124,156,152,122,152,131,105,131,90,72,90,115,92,115,143,114,143,143,114,143,150,120,150,139,111,139,148,118,148,147,118,147,147,118,147,150,120,150,142,113,142,132,106,132,150,150,150,145,145,145,144,144,144,146,146,146,146,146,146,144,144,144,148,148,148,145,145,145,125,125,125,86,86,86,110,110,110,136,136,136,136,136,136,255,250,140,255,255,155,255,255,145,255,255,150,255,200,112,138,96,53,255,255,161,255,255,161,255,255,160,184,128,71,83,58,32,104,72,40,71,49,27,255,255,156,255,255,156,255,255,158,255,255,156,255,255,156,252,126,0,244,122,0,244,122,0,242,121,0,244,122,0,244,122,0,252,126,0,249,124,0,249,124,0,247,123,0,244,122,0,247,123,0,247,123,0,252,126,0,252,126,0,249,124,0,244,122,0,249,124,0,198,99,0,142,71,0,15,7,0,15,7,0,22,11,0,15,7,0,28,14,0,56,28,0,94,47,0,102,51,0,117,58,0,170,85,0,99,49,0,45,22,0,28,14,0,142,71,0,247,123,0,252,126,0,252,126,0,249,124,0,252,126,0,244,122,0,244,122,0,249,124,0,252,126,0,249,124,0,244,122,0,247,123,0,229,114,0,224,112,0,234,117,0,126,101,126,122,98,122,112,89,112,122,97,122,123,123,123,125,125,125,120,120,120,116,116,116,121,121,121,120,120,120,120,120,120,114,114,114,95,95,95,84,84,84,117,117,117,119,119,119,119,119,119,115,115,115,120,120,120,117,117,117,118,118,118,122,122,122,118,118,118,108,108,108,117,117,117,117,94,117,116,93,116,118,94,118,118,94,118,116,93,116,120,96,120,117,94,117,101,81,101,70,56,70,89,71,89,111,88,111,110,88,110,116,93,116,108,86,108,115,92,115,115,92,115,114,91,114,117,93,117,111,88,111,103,82,103,117,117,117,114,114,114,112,112,112,115,115,115,114,114,114,113,113,113,116,116,116,114,114,114,98,98,98,68,68,68,86,86,86,108,108,108,107,107,107,113,113,113,105,105,105,112,112,112,112,112,112,111,111,111,114,114,114,108,108,108,101,101,101,111,89,111,111,89,111,109,87,109,109,87,109,113,90,113,111,89,111,112,90,112,110,88,110,86,69,86,75,60,75,104,83,104,110,88,110,109,87,109,108,86,108,108,86,108,109,87,109,109,87,109,112,90,112,109,87,109,105,84,105,103,82,103,109,109,109,108,108,108,107,107,107,107,107,107,110,110,110,109,109,109,110,110,110,108,108,108,84,84,84,74,74,74,102,102,102,107,107,107,107,107,107,106,106,106,106,106,106,107,107,107,107,107,107,110,110,110,107,107,107,103,103,103,101,101,101,108,86,108,110,88,110,105,84,105,102,81,102,50,40,50,163,130,163,185,148,185,185,148,185,127,101,127,98,79,98,78,62,78,169,135,169,130,104,130,183,146,183,177,142,177,166,133,166,177,141,177,162,129,162,167,134,167,181,181,181,181,181,181,177,177,177,181,181,181,180,180,180,178,178,178,145,145,145,14,14,14,79,79,79,177,177,177,179,179,179,177,177,177,138,138,138,135,135,135,116,116,116,150,150,150,175,175,175,171,171,171,169,169,169,167,167,167,167,167,167,165,165,165,175,140,175,175,140,175,174,139,174,172,138,172,174,139,174,173,139,173,170,136,170,50,40,50,47,37,47,151,121,151,172,137,172,172,137,172,117,94,117,91,73,91,72,58,72,156,125,156,120,96,120,170,136,170,164,131,164,154,123,154,163,131,163,150,120,150,154,123,154,168,168,168,167,167,167,164,164,164,167,167,167,166,166,166,164,164,164,134,134,134,13,13,13,73,73,73,163,163,163,164,164,164,162,162,162,127,127,127,124,124,124,107,107,107,138,138,138,161,161,161,157,157,157,155,155,155,153,153,153,153,153,153,151,151,151,160,128,160,160,128,160,159,127,159,157,126,157,159,127,159,158,127,158,155,124,155,46,37,46,43,34,43,138,110,138,157,125,157,156,125,156,107,85,107,83,66,83,66,52,66,142,114,142,109,87,109,154,123,154,149,119,149,140,112,140,149,119,149,136,109,136,140,112,140,152,152,152,152,152,152,148,148,148,151,151,151,151,151,151,149,149,149,121,121,121,12,12,12,66,66,66,148,148,148,149,149,149,147,147,147,115,115,115,112,112,112,97,97,97,125,125,125,255,255,143,255,255,155,255,255,147,255,255,150,179,125,70,255,177,99,255,255,145,255,255,160,255,255,161,255,255,150,87,61,34,25,17,9,255,177,99,255,255,161,255,255,156,255,255,156,255,255,156,255,255,156,244,122,0,244,122,0,244,122,0,244,122,0,249,124,0,244,122,0,249,124,0,252,126,0,252,126,0,249,124,0,249,124,0,252,126,0,244,122,0,249,124,0,247,123,0,244,122,0,244,122,0,249,124,0,178,89,0,43,21,0,15,7,0,28,14,0,38,19,0,33,16,0,22,11,0,25,12,0,17,8,0,63,31,0,91,45,0,84,42,0,48,24,0,117,58,0,28,14,0,140,70,0,226,113,0,252,126,0,252,126,0,247,123,0,244,122,0,244,122,0,244,122,0,244,122,0,247,123,0,242,121,0,242,121,0,239,119,0,226,113,0,237,118,0,232,116,0,90,72,90,127,101,127,123,98,123,115,92,115,122,98,122,112,89,112,115,92,115,125,125,125,125,125,125,125,125,125,125,125,125,124,124,124,123,123,123,100,100,100,43,43,43,55,55,55,122,122,122,123,123,123,122,122,122,75,75,75,93,93,93,80,80,80,104,104,104,121,121,121,119,119,119,117,117,117,115,115,115,115,115,115,114,114,114,116,116,116,121,96,121,120,96,120,119,95,119,120,96,120,120,96,120,117,94,117,35,28,35,32,26,32,105,84,105,118,94,118,119,95,119,81,65,81,63,50,63,50,40,50,112,90,112,83,67,83,118,94,118,114,91,114,107,85,107,114,91,114,104,83,104,108,86,108,117,117,117,117,117,117,117,117,117,117,117,117,116,116,116,115,115,115,94,94,94,41,41,41,51,51,51,115,115,115,116,116,116,114,114,114,71,71,71,87,87,87,75,75,75,97,97,97,114,114,114,112,112,112,110,110,110,109,109,109,108,108,108,107,107,107,109,109,109,114,91,114,114,91,114,113,90,113,114,91,114,113,91,113,111,89,111,33,26,33,30,24,30,99,79,99,112,89,112,113,90,113,77,62,77,60,48,60,47,38,47,107,85,107,79,63,79,112,90,112,109,87,109,102,81,102,108,87,108,99,79,99,103,82,103,112,112,112,111,111,111,111,111,111,111,111,111,111,111,111,110,110,110,90,90,90,39,39,39,49,49,49,110,110,110,111,111,111,109,109,109,68,68,68,83,83,83,72,72,72,182,146,182,182,146,182,99,79,99,153,123,153,155,124,155,164,164,164,164,164,164,177,177,177,169,169,169,173,173,173,172,172,172,142,142,142,172,172,172,61,61,61,81,81,81,177,177,177,88,88,88,141,141,141,176,176,176,164,164,164,175,175,175,164,164,164,78,78,78,174,174,174,172,172,172,176,176,176,96,96,96,166,166,166,149,149,149,174,139,174,158,126,158,170,136,170,165,132,165,166,133,166,160,128,160,137,109,137,165,132,165,142,113,142,78,62,78,164,131,164,84,67,84,136,108,136,153,122,153,158,126,158,138,111,138,163,130,163,75,60,75,169,135,169,165,132,165,168,135,168,116,93,116,159,127,159,135,108,135,167,167,167,151,151,151,156,156,156,158,158,158,120,120,120,154,154,154,131,131,131,162,162,162,136,136,136,125,125,125,157,157,157,81,81,81,157,157,157,146,146,146,163,163,163,132,132,132,155,155,155,130,130,130,161,161,161,159,159,159,159,159,159,111,111,111,122,122,122,128,128,128,159,127,159,146,117,146,149,119,149,103,82,103,114,91,114,146,117,146,138,110,138,154,123,154,157,125,157,119,95,119,149,119,149,143,114,143,149,119,149,92,74,92,155,124,155,126,100,126,155,124,155,123,99,123,122,97,122,151,121,151,151,121,151,127,102,127,116,92,116,128,102,128,148,118,148,138,138,138,129,129,129,97,97,97,141,141,141,134,134,134,131,131,131,106,106,106,148,148,148,113,113,113,93,93,93,135,135,135,141,141,141,88,88,88,146,146,146,33,33,33,147,147,147,135,135,135,115,115,115,143,143,143,255,255,153,255,255,156,255,255,156,255,224,125,255,238,134,255,218,122,125,87,49,205,142,80,255,255,160,255,255,153,33,23,13,16,11,6,129,90,50,255,255,161,255,255,156,255,255,156,255,255,161,244,122,0,244,122,0,244,122,0,244,122,0,249,124,0,249,124,0,247,123,0,247,123,0,244,122,0,244,122,0,244,122,0,244,122,0,249,124,0,237,118,0,242,121,0,165,82,0,109,54,0,114,57,0,91,45,0,79,39,0,94,47,0,20,10,0,15,7,0,15,7,0,45,22,0,40,20,0,38,19,0,15,7,0,28,14,0,43,21,0,40,20,0,140,70,0,104,52,0,15,7,0,2,1,0,79,39,0,219,109,0,249,124,0,247,123,0,242,121,0,247,123,0,244,122,0,242,121,0,242,121,0,237,118,0,247,123,0,242,121,0,234,117,0,242,121,0,112,90,112,116,93,116,102,81,102,120,96,120,55,44,55,124,99,124,121,97,121,124,99,124,85,68,85,117,93,117,99,79,99,123,123,123,111,111,111,115,115,115,116,116,116,88,88,88,113,113,113,96,96,96,119,119,119,100,100,100,92,92,92,116,116,116,59,59,59,115,115,115,108,108,108,120,120,120,98,98,98,115,115,115,96,96,96,119,119,119,118,118,118,118,118,118,82,82,82,90,90,90,95,95,95,116,116,116,108,87,108,111,88,111,76,61,76,85,68,85,109,87,109,103,82,103,115,92,115,117,93,117,89,71,89,112,89,112,107,85,107,111,89,111,69,55,69,116,93,116,94,75,94,117,93,117,93,74,93,91,73,91,114,91,114,114,91,114,96,77,96,87,70,87,97,77,97,112,90,112,105,105,105,98,98,98,74,74,74,107,107,107,102,102,102,99,99,99,81,81,81,113,113,113,86,86,86,71,71,71,104,104,104,108,108,108,67,67,67,113,113,113,25,25,25,114,114,114,104,104,104,89,89,89,111,111,111,112,112,112,93,93,93,61,61,61,94,94,94,109,109,109,101,81,101,95,76,95,109,87,109,104,83,104,99,79,99,106,85,106,79,63,79,106,85,106,37,30,37,69,55,69,109,87,109,106,84,106,66,52,66,109,87,109,25,20,25,109,87,109,102,81,102,87,69,87,108,87,108,109,87,109,109,87,109,59,47,59,92,74,92,93,74,93,99,99,99,99,99,99,106,106,106,102,102,102,104,104,104,104,130,130,6,7,7,28,35,35,63,79,79,103,129,129,127,159,159,116,146,146,103,129,129,62,78,78,134,167,167,140,175,175,71,89,89,75,94,94,77,96,96,142,177,177,142,177,177,137,171,171,140,175,175,137,171,171,139,174,174,142,178,178,145,145,181,142,142,177,143,143,179,144,144,180,144,144,180,100,100,125,8,8,10,27,27,34,46,46,57,99,99,124,121,121,151,112,112,140,99,99,124,43,43,53,129,129,161,47,47,59,68,68,85,67,67,83,74,74,92,136,136,170,131,131,164,131,131,164,132,132,166,131,131,164,136,136,170,136,136,170,138,173,173,135,169,169,137,171,171,138,172,172,137,172,172,8,10,10,8,10,10,23,29,29,44,55,55,95,119,119,115,144,144,107,134,134,42,53,53,41,51,51,129,162,162,45,56,56,81,102,102,63,79,79,70,88,88,129,162,162,125,157,157,124,155,155,126,158,158,128,161,161,130,162,162,132,132,165,132,132,165,129,129,161,131,131,164,131,131,164,128,128,160,7,7,9,15,15,19,22,22,27,42,42,52,107,107,134,109,109,137,120,120,150,40,40,50,59,59,74,123,123,153,9,9,11,77,77,96,60,60,75,35,35,44,123,123,153,112,112,140,117,117,146,117,117,146,122,122,152,123,123,153,125,156,156,125,156,156,123,154,154,124,155,155,124,155,155,121,151,151,4,6,6,14,18,18,21,26,26,74,93,93,101,126,126,86,108,108,113,141,141,51,64,64,56,70,70,116,145,145,8,10,10,73,91,91,48,60,60,33,42,42,116,145,145,106,132,132,114,143,143,255,255,148,255,255,155,255,255,158,255,247,138,255,255,158,255,255,151,255,192,107,129,90,50,255,255,160,255,255,160,20,14,8,46,32,17,242,168,94,255,255,160,255,255,161,255,255,156,255,255,160,244,122,0,247,123,0,252,126,0,252,126,0,252,126,0,247,123,0,239,119,0,234,117,0,237,118,0,244,122,0,242,121,0,239,119,0,234,117,0,216,108,0,135,67,0,25,12,0,40,20,0,28,14,0,96,48,0,117,58,0,170,85,0,81,40,0,10,5,0,2,1,0,2,1,0,22,11,0,45,22,0,20,10,0,38,19,0,61,30,0,51,25,0,186,93,0,107,53,0,71,35,0,0,0,0,5,2,0,38,19,0,247,123,0,252,126,0,247,123,0,244,122,0,244,122,0,239,119,0,224,112,0,247,123,0,249,124,0,244,122,0,239,119,0,244,122,0,81,81,101,71,71,89,31,31,39,93,93,116,34,34,42,49,49,62,48,48,60,53,53,67,98,98,123,95,95,119,95,95,119,96,96,120,95,95,118,98,98,123,98,98,123,100,125,125,98,123,123,99,124,124,100,125,125,100,125,125,6,7,7,6,7,7,17,21,21,32,40,40,69,86,86,84,105,105,77,97,97,30,38,38,29,37,37,94,118,118,32,40,40,59,74,74,46,58,58,51,64,64,94,118,118,91,114,114,90,113,113,92,115,115,94,117,117,94,118,118,94,118,118,96,96,120,94,94,118,96,96,120,96,96,120,94,94,117,5,5,7,11,11,14,16,16,20,30,30,38,79,79,98,80,80,101,88,88,110,29,29,37,44,44,55,91,91,113,6,6,8,57,57,71,44,44,56,26,26,33,91,91,114,83,83,104,87,87,109,87,87,109,90,90,113,91,91,114,93,116,116,93,116,116,92,115,115,93,116,116,93,116,116,91,113,113,3,4,4,11,14,14,15,19,19,56,70,70,76,95,95,65,81,81,85,107,107,39,48,48,42,53,53,88,110,110,6,8,8,55,69,69,37,46,46,25,32,32,88,111,111,81,101,101,87,109,109,84,106,106,88,110,110,87,109,109,91,91,113,89,89,111,89,89,112,90,90,113,90,90,113,63,63,78,3,3,4,10,10,13,38,38,47,54,54,68,77,77,96,63,63,79,62,62,78,38,38,47,41,41,52,85,85,106,6,6,7,46,46,57,36,36,45,86,86,108,86,86,108,18,22,22,63,79,79,28,35,35,146,183,183,140,175,175,84,105,105,148,186,186,142,178,178,140,176,176,143,179,179,143,179,179,144,181,181,147,147,184,147,147,184,144,144,180,145,145,181,146,146,183,146,146,183,146,146,182,103,103,129,129,129,162,138,138,172,143,143,179,2,2,3,2,2,3,8,8,10,26,26,32,13,13,16,17,17,21,52,52,65,108,108,135,140,140,175,135,135,169,141,141,176,138,138,172,135,135,169,139,139,174,137,137,172,138,138,173,141,141,176,141,176,176,140,176,176,133,167,167,140,175,175,140,175,175,139,174,174,122,153,153,129,162,162,123,154,154,130,163,163,54,68,68,0,0,0,4,5,5,9,12,12,11,13,13,16,20,20,58,72,72,26,32,32,133,167,167,128,160,160,77,96,96,135,169,169,130,162,162,128,160,160,131,163,163,130,163,163,131,164,164,134,134,167,134,134,167,131,131,163,132,132,165,133,133,166,133,133,166,132,132,165,93,93,117,117,117,146,125,125,156,130,130,162,2,2,3,2,2,3,7,7,9,23,23,29,11,11,14,15,15,19,47,47,58,98,98,122,126,126,158,122,122,153,127,127,159,124,124,155,121,121,152,125,125,156,123,123,154,124,124,155,127,127,158,126,158,158,126,158,158,119,149,149,125,157,157,125,157,157,125,156,156,109,137,137,116,145,145,110,138,138,116,145,145,48,61,61,0,0,0,3,4,4,8,10,10,9,12,12,14,18,18,51,64,64,23,29,29,119,149,149,114,142,142,68,85,85,121,151,151,115,144,144,114,142,142,116,145,145,116,145,145,255,255,158,255,255,158,255,255,160,255,209,117,255,255,153,255,255,145,255,186,104,255,226,127,255,189,106,255,235,132,46,32,17,25,17,9,255,255,143,255,255,161,255,255,161,255,255,153,255,255,156,244,122,0,249,124,0,252,126,0,249,124,0,247,123,0,249,124,0,244,122,0,244,122,0,244,122,0,244,122,0,244,122,0,247,123,0,229,114,0,76,38,0,51,25,0,53,26,0,45,22,0,96,48,0,63,31,0,71,35,0,91,45,0,40,20,0,7,3,0,5,2,0,7,3,0,102,51,0,35,17,0,17,8,0,53,26,0,45,22,0,25,12,0,137,68,0,158,79,0,17,8,0,5,2,0,10,5,0,10,5,0,56,28,0,252,126,0,252,126,0,249,124,0,247,123,0,242,121,0,247,123,0,244,122,0,249,124,0,239,119,0,239,119,0,244,122,0,103,103,128,2,2,2,2,2,2,6,6,7,18,18,23,9,9,11,12,12,15,37,37,46,77,77,97,100,100,125,97,97,121,100,100,126,98,98,123,96,96,120,99,99,124,98,98,122,99,99,123,100,100,126,100,125,125,100,125,125,95,119,119,100,125,125,100,125,125,99,124,124,87,109,109,92,115,115,88,110,110,93,116,116,39,48,48,0,0,0,2,3,3,6,8,8,7,9,9,11,14,14,41,52,52,18,23,23,95,119,119,91,114,114,55,69,69,97,121,121,93,116,116,92,115,115,94,117,117,94,117,117,94,118,118,93,117,117,96,96,120,94,94,118,95,95,119,96,96,120,96,96,120,95,95,119,67,67,84,85,85,106,90,90,113,94,94,118,1,1,2,1,1,2,5,5,7,17,17,21,8,8,10,11,11,14,34,34,42,71,71,89,92,92,115,89,89,111,93,93,116,91,91,113,89,89,111,91,91,114,90,90,113,91,91,114,93,93,116,93,116,116,93,116,116,88,110,110,93,116,116,92,116,116,92,116,116,81,101,101,86,107,107,82,102,102,86,108,108,36,45,45,0,0,0,2,3,3,6,8,8,7,9,9,11,13,13,38,48,48,17,22,22,89,112,112,85,107,107,51,64,64,91,114,114,87,109,109,86,108,108,88,110,110,88,110,110,89,111,111,88,110,110,90,90,113,88,88,111,89,89,112,90,90,113,90,90,113,90,90,112,63,63,79,80,80,100,85,85,107,89,89,111,1,1,2,1,1,2,182,182,182,186,186,186,178,178,178,179,179,179,181,145,181,185,148,185,181,144,181,186,149,186,184,147,184,178,142,178,181,145,181,185,148,185,179,143,179,182,146,182,104,83,104,11,8,11,7,5,7,29,23,29,18,14,18,49,39,49,33,26,33,27,22,27,108,86,108,176,141,176,181,145,181,176,140,176,175,140,175,175,140,175,180,144,180,176,141,176,176,141,176,170,136,170,172,137,172,173,173,173,177,177,177,171,171,171,172,172,172,176,176,176,170,170,170,173,173,173,177,177,177,175,175,175,171,171,171,138,138,138,10,10,10,7,7,7,28,28,28,17,17,17,68,68,68,70,70,70,26,26,26,103,103,103,168,168,168,173,173,173,171,171,171,169,169,169,166,166,166,171,171,171,168,168,168,167,167,167,160,160,160,163,163,163,165,132,165,168,134,168,162,130,162,164,131,164,167,133,167,165,132,165,163,130,163,167,134,167,165,132,165,162,129,162,131,105,131,45,36,45,10,8,10,26,21,26,16,13,16,65,52,65,66,53,66,41,33,41,48,38,48,159,127,159,163,130,163,161,129,161,159,127,159,157,126,157,160,128,160,158,126,158,158,126,158,151,121,151,154,123,154,150,120,150,155,155,155,155,155,155,154,154,154,157,157,157,155,155,155,153,153,153,155,155,155,157,157,157,152,152,152,123,123,123,42,42,42,9,9,9,9,9,9,14,14,14,61,61,61,62,62,62,39,39,39,45,45,45,112,112,112,153,153,153,151,151,151,150,150,150,148,148,148,150,150,150,150,150,150,147,147,147,149,149,149,144,144,144,255,255,156,255,255,156,255,255,158,255,255,161,205,142,80,179,125,70,255,224,125,255,255,148,251,174,98,221,154,86,251,174,98,29,20,11,33,23,13,255,235,132,255,255,161,255,255,158,255,255,156,255,255,158,244,122,0,244,122,0,247,123,0,244,122,0,244,122,0,244,122,0,244,122,0,247,123,0,244,122,0,244,122,0,242,121,0,249,124,0,107,53,0,22,11,0,61,30,0,48,24,0,35,17,0,48,24,0,81,40,0,124,62,0,89,44,0,53,26,0,17,8,0,20,10,0,22,11,0,43,21,0,89,44,0,45,22,0,79,39,0,58,29,0,22,11,0,53,26,0,135,67,0,56,28,0,48,24,0,35,17,0,30,15,0,10,5,0,249,124,0,252,126,0,244,122,0,247,123,0,249,124,0,244,122,0,249,124,0,244,122,0,244,122,0,242,121,0,131,104,131,129,103,129,129,103,129,73,58,73,7,6,7,5,4,5,20,16,20,13,10,13,35,28,35,23,18,23,19,15,19,76,61,76,124,99,124,128,102,128,123,99,123,123,98,123,123,98,123,127,101,127,124,99,124,124,99,124,120,96,120,121,96,121,122,122,122,124,124,124,120,120,120,121,121,121,124,124,124,120,120,120,122,122,122,124,124,124,123,123,123,120,120,120,97,97,97,7,7,7,4,4,4,19,19,19,12,12,12,48,48,48,49,49,49,18,18,18,73,73,73,118,118,118,122,122,122,120,120,120,119,119,119,118,118,118,121,121,121,118,118,118,118,118,118,113,113,113,115,115,115,113,113,113,119,95,119,115,92,115,116,93,116,118,95,118,117,93,117,116,92,116,119,95,119,118,94,118,115,92,115,93,75,93,32,25,32,7,5,7,19,15,19,11,9,11,46,37,46,47,38,47,29,23,29,34,27,34,114,91,114,117,94,117,116,93,116,115,92,115,113,91,113,116,92,116,115,92,115,114,91,114,109,87,109,111,89,111,109,87,109,112,112,112,112,112,112,112,112,112,114,114,114,113,113,113,112,112,112,113,113,113,115,115,115,111,111,111,90,90,90,31,31,31,6,6,6,6,6,6,10,10,10,45,45,45,46,46,46,28,28,28,33,33,33,83,83,83,114,114,114,114,114,114,111,111,111,110,110,110,112,112,112,112,112,112,110,110,110,112,112,112,108,108,108,106,106,106,109,87,109,109,87,109,109,87,109,112,90,112,188,150,188,184,147,184,138,111,138,34,27,34,20,16,20,15,12,15,113,90,113,183,146,183,184,147,184,177,141,177,184,147,184,185,148,185,185,148,185,185,148,185,185,148,185,173,138,173,141,113,141,128,102,128,16,13,16,172,138,172,183,146,183,173,139,173,160,128,160,177,141,177,178,142,178,178,142,178,180,144,180,177,177,177,179,179,179,181,181,181,178,178,178,180,180,180,176,176,176,132,132,132,5,5,5,16,16,16,16,16,16,162,162,162,178,178,178,174,174,174,176,176,176,175,175,175,177,177,177,176,176,176,176,176,176,176,176,176,165,165,165,134,134,134,122,122,122,15,15,15,164,164,164,174,174,174,165,165,165,152,152,152,168,168,168,169,169,169,169,169,169,169,135,169,172,137,172,171,137,171,171,137,171,169,135,169,170,136,170,131,104,131,24,19,24,5,4,5,15,12,15,15,12,15,153,122,153,168,134,168,164,131,164,166,133,166,166,132,166,167,133,167,167,133,167,166,133,166,166,133,166,155,124,155,127,101,127,115,92,115,15,12,15,163,130,163,161,128,161,157,125,157,150,120,150,158,126,158,156,125,156,159,127,159,159,159,159,162,162,162,161,161,161,161,161,161,159,159,159,160,160,160,123,123,123,22,22,22,4,4,4,14,14,14,14,14,14,144,144,144,158,158,158,154,154,154,156,156,156,155,155,155,156,156,156,156,156,156,156,156,156,154,154,154,139,139,139,84,84,84,98,98,98,54,54,54,152,152,152,150,150,150,147,147,147,140,140,140,148,148,148,146,146,146,149,149,149,148,119,148,255,255,161,255,255,156,255,255,161,255,255,161,255,224,125,175,122,68,255,238,134,255,255,158,158,110,62,255,238,134,12,8,4,71,49,27,33,23,13,255,255,155,255,255,160,255,255,161,255,255,156,255,255,158,247,123,0,244,122,0,244,122,0,249,124,0,249,124,0,252,126,0,252,126,0,244,122,0,249,124,0,242,121,0,242,121,0,229,114,0,43,21,0,45,22,0,63,31,0,89,44,0,109,54,0,89,44,0,89,44,0,56,28,0,94,47,0,137,68,0,30,15,0,5,2,0,28,14,0,71,35,0,130,65,0,51,25,0,53,26,0,56,28,0,86,43,0,51,25,0,38,19,0,7,3,0,0,0,0,5,2,0,10,5,0,45,22,0,229,114,0,247,123,0,247,123,0,252,126,0,249,124,0,247,123,0,252,126,0,237,118,0,244,122,0,237,118,0,129,103,129,97,77,97,23,19,23,14,11,14,10,8,10,79,63,79,127,102,127,128,103,128,123,98,123,128,102,128,129,103,129,129,103,129,129,103,129,128,103,128,120,96,120,98,78,98,89,71,89,11,9,11,119,95,119,127,101,127,120,96,120,111,89,111,122,98,122,124,99,124,123,99,123,124,99,124,123,123,123,124,124,124,125,125,125,124,124,124,125,125,125,122,122,122,92,92,92,3,3,3,11,11,11,11,11,11,112,112,112,123,123,123,121,121,121,122,122,122,122,122,122,123,123,123,122,122,122,122,122,122,122,122,122,114,114,114,93,93,93,85,85,85,11,11,11,114,114,114,121,121,121,115,115,115,106,106,106,117,117,117,118,118,118,118,118,118,119,119,119,120,96,120,120,96,120,120,96,120,118,95,118,119,95,119,91,73,91,16,13,16,3,2,3,10,8,10,10,8,10,108,86,108,118,95,118,116,93,116,117,93,117,117,93,117,118,94,118,118,94,118,117,94,117,117,94,117,110,88,110,90,72,90,81,65,81,10,8,10,115,92,115,114,91,114,112,89,112,107,85,107,113,90,113,111,89,111,114,91,114,113,113,113,116,116,116,116,116,116,115,115,115,114,114,114,115,115,115,88,88,88,16,16,16,3,3,3,10,10,10,10,10,10,104,104,104,114,114,114,112,112,112,113,113,113,113,113,113,114,114,114,114,114,114,114,114,114,113,113,113,102,102,102,62,62,62,72,72,72,40,40,40,112,112,112,111,111,111,108,108,108,101,81,101,143,114,143,186,149,186,188,150,188,188,150,188,180,144,180,178,142,178,176,140,176,175,140,175,135,108,135,182,146,182,186,149,186,184,147,184,182,145,182,185,148,185,179,143,179,177,142,177,177,141,177,173,138,173,178,143,178,184,184,184,183,183,183,181,181,181,177,177,177,181,181,181,180,180,180,180,180,180,182,182,182,180,180,180,27,27,27,5,5,5,91,91,91,89,89,89,107,107,107,169,169,169,179,179,179,179,179,179,170,170,170,173,173,173,158,158,158,171,171,171,134,134,134,138,138,138,177,177,177,177,177,177,173,173,173,176,176,176,169,169,169,170,170,170,161,161,161,161,161,161,169,169,169,174,139,174,174,139,174,170,136,170,172,137,172,171,137,171,167,134,167,169,135,169,172,138,172,172,137,172,158,126,158,29,23,29,38,30,38,69,55,69,91,73,91,129,103,129,168,134,168,169,135,169,169,135,169,162,129,162,160,128,160,158,126,158,157,126,157,122,97,122,164,131,164,167,133,167,165,132,165,163,130,163,166,132,166,160,128,160,158,127,158,158,126,158,154,123,154,159,127,159,164,164,164,163,163,163,161,161,161,158,158,158,161,161,161,160,160,160,160,160,160,161,161,161,159,159,159,24,24,24,4,4,4,81,81,81,79,79,79,95,95,95,149,149,149,159,159,159,158,158,158,150,150,150,153,153,153,140,140,140,151,151,151,118,118,118,121,121,121,156,156,156,156,156,156,152,152,152,155,155,155,148,148,148,150,150,150,141,141,141,141,141,141,149,149,149,153,122,153,153,122,153,149,119,149,255,255,160,255,255,156,255,255,156,255,255,161,246,171,96,142,98,55,255,253,142,255,255,160,255,255,145,255,212,119,100,69,39,46,32,17,37,26,14,255,255,160,255,255,161,255,255,161,255,255,161,255,255,161,252,126,0,247,123,0,244,122,0,247,123,0,252,126,0,252,126,0,249,124,0,247,123,0,252,126,0,249,124,0,242,121,0,79,39,0,33,16,0,71,35,0,63,31,0,104,52,0,137,68,0,66,33,0,86,43,0,66,33,0,122,61,0,12,6,0,7,3,0,38,19,0,84,42,0,56,28,0,63,31,0,25,12,0,43,21,0,71,35,0,81,40,0,33,16,0,7,3,0,10,5,0,45,22,0,25,12,0,10,5,0,5,2,0,249,124,0,252,126,0,252,126,0,252,126,0,249,124,0,247,123,0,244,122,0,239,119,0,244,122,0,252,126,0,131,105,131,128,102,128,129,103,129,131,105,131,131,105,131,120,96,120,22,18,22,29,23,29,52,42,52,69,55,69,98,78,98,128,102,128,129,103,129,129,103,129,124,99,124,122,98,122,121,96,121,120,96,120,93,74,93,125,100,125,128,102,128,126,101,126,125,100,125,127,101,127,123,98,123,121,97,121,121,97,121,118,95,118,122,98,122,126,126,126,125,125,125,124,124,124,121,121,121,124,124,124,123,123,123,123,123,123,124,124,124,123,123,123,18,18,18,3,3,3,62,62,62,61,61,61,73,73,73,115,115,115,123,123,123,123,123,123,116,116,116,119,119,119,108,108,108,117,117,117,92,92,92,94,94,94,121,121,121,121,121,121,119,119,119,121,121,121,116,116,116,117,117,117,111,111,111,111,111,111,116,116,116,116,116,116,120,96,120,117,94,117,118,95,118,118,94,118,116,92,116,117,93,117,119,95,119,119,95,119,109,87,109,20,16,20,26,21,26,47,38,47,63,50,63,89,71,89,117,93,117,118,94,118,118,94,118,113,90,113,111,89,111,110,88,110,110,88,110,85,68,85,114,91,114,117,93,117,115,92,115,114,91,114,116,93,116,113,90,113,111,89,111,111,89,111,109,87,109,112,90,112,116,116,116,115,115,115,114,114,114,112,112,112,114,114,114,114,114,114,114,114,114,115,115,115,114,114,114,17,17,17,3,3,3,58,58,58,56,56,56,68,68,68,107,107,107,114,114,114,114,114,114,108,108,108,110,110,110,101,101,101,155,124,155,183,147,183,164,131,164,169,135,169,171,137,171,177,141,177,188,150,188,188,150,188,187,150,187,185,148,185,179,143,179,175,140,175,186,149,186,186,186,186,186,186,186,185,185,185,185,185,185,183,183,183,164,164,164,80,80,80,156,156,156,68,68,68,135,135,135,174,174,174,152,152,152,131,131,131,77,77,77,177,177,177,136,136,136,47,47,47,99,99,99,64,64,64,91,91,91,73,73,73,147,147,147,175,175,175,165,165,165,161,161,161,163,163,163,168,168,168,179,179,179,178,178,178,178,178,178,176,176,176,170,170,170,166,166,166,177,177,177,176,141,176,176,141,176,176,141,176,176,140,176,173,139,173,155,124,155,76,60,76,105,84,105,144,115,144,128,102,128,165,132,165,143,115,143,124,99,124,145,116,145,141,113,141,128,103,128,45,36,45,93,74,93,60,48,60,86,69,86,127,102,127,79,63,79,164,131,164,156,124,156,152,121,152,153,123,153,121,96,121,166,133,166,168,134,168,167,134,167,165,132,165,160,128,160,156,125,156,161,129,161,162,130,162,165,165,165,165,165,165,165,165,165,163,163,163,159,159,159,111,111,111,99,99,99,135,135,135,120,120,120,154,154,154,157,157,157,111,111,111,135,135,135,132,132,132,120,120,120,42,42,42,87,87,87,56,56,56,61,61,61,119,119,119,73,73,73,154,154,154,145,145,145,137,137,137,133,133,133,112,112,112,155,155,155,156,156,156,156,156,156,154,154,154,152,152,152,153,153,153,150,150,150,151,151,151,154,123,154,154,123,154,153,123,153,151,121,151,255,255,158,255,255,160,255,255,160,255,255,160,154,107,60,255,255,151,255,177,99,255,255,160,255,255,153,255,255,147,71,49,27,29,20,11,255,244,137,255,255,161,255,255,161,255,255,161,255,255,161,252,126,0,252,126,0,252,126,0,244,122,0,244,122,0,247,123,0,247,123,0,252,126,0,252,126,0,247,123,0,214,107,0,147,73,0,20,10,0,28,14,0,15,7,0,66,33,0,68,34,0,114,57,0,38,19,0,79,39,0,71,35,0,114,57,0,12,6,0,10,5,0,33,16,0,96,48,0,33,16,0,94,47,0,33,16,0,112,56,0,30,15,0,22,11,0,96,48,0,122,61,0,53,26,0,33,16,0,12,6,0,28,14,0,10,5,0,221,110,0,252,126,0,249,124,0,242,121,0,242,121,0,244,122,0,252,126,0,234,117,0,247,123,0,133,106,133,133,106,133,131,105,131,131,105,131,117,94,117,57,46,57,112,89,112,49,39,49,106,85,106,127,102,127,108,86,108,93,75,93,55,44,55,126,101,126,38,30,38,84,67,84,70,56,70,45,36,45,65,52,65,52,41,52,105,84,105,124,99,124,111,89,111,115,92,115,116,93,116,120,96,120,127,102,127,127,101,127,127,101,127,125,100,125,121,97,121,118,95,118,126,101,126,126,126,126,126,126,126,125,125,125,125,125,125,124,124,124,111,111,111,54,54,54,105,105,105,46,46,46,91,91,91,118,118,118,102,102,102,88,88,88,52,52,52,119,119,119,92,92,92,32,32,32,67,67,67,43,43,43,62,62,62,49,49,49,100,100,100,118,118,118,112,112,112,109,109,109,110,110,110,114,114,114,121,121,121,121,121,121,121,121,121,119,119,119,115,115,115,113,113,113,120,120,120,117,117,117,120,96,120,120,96,120,119,95,119,118,94,118,106,85,106,51,41,51,72,57,72,98,79,98,87,70,87,112,90,112,98,78,98,85,68,85,99,79,99,96,77,96,88,70,88,31,24,31,64,51,64,41,33,41,59,47,59,87,70,87,54,43,54,113,91,113,107,86,107,105,84,105,106,85,106,83,67,83,115,92,115,116,93,116,116,93,116,115,92,115,111,89,111,109,87,109,112,90,112,113,90,113,115,115,115,115,115,115,115,115,115,114,114,114,111,111,111,78,78,78,69,69,69,95,95,95,84,84,84,109,109,109,111,111,111,78,78,78,96,96,96,152,152,190,152,152,190,147,147,184,142,142,178,134,134,168,132,132,166,146,146,183,146,182,182,146,182,182,145,182,182,144,180,180,143,179,179,143,179,179,146,183,183,147,184,184,144,180,180,144,180,180,147,184,184,144,180,180,143,179,179,125,157,157,113,141,141,86,108,108,101,126,126,135,169,169,136,170,170,142,178,178,136,170,170,142,177,177,140,175,175,137,171,171,139,174,174,141,176,176,139,174,174,140,175,175,140,175,175,144,180,180,142,178,178,139,174,174,135,169,169,127,159,159,131,164,164,143,143,179,138,138,173,138,138,173,142,142,178,136,136,170,136,136,170,136,136,170,138,138,173,137,137,171,136,136,171,136,136,170,139,139,174,137,137,171,135,135,169,118,118,148,107,107,134,92,92,116,95,95,119,127,127,159,128,128,161,134,134,167,128,128,160,133,133,167,132,132,165,124,124,156,131,131,164,132,132,165,131,131,163,132,132,165,132,132,165,135,135,169,134,134,167,131,131,164,126,126,158,119,119,149,123,123,154,134,167,167,131,164,164,129,162,162,133,166,166,127,159,159,130,162,162,127,159,159,129,162,162,128,160,160,129,161,161,127,159,159,130,162,162,128,160,160,120,150,150,110,138,138,100,125,125,86,108,108,97,121,121,119,148,148,120,150,150,125,156,156,124,156,156,124,155,155,123,153,153,116,145,145,125,156,156,123,154,154,122,152,152,123,153,153,122,153,153,126,157,157,124,156,156,121,152,152,117,147,147,110,137,137,114,143,143,124,124,155,121,121,152,120,120,150,123,123,154,118,118,148,120,120,151,255,255,156,255,255,155,255,255,161,255,255,160,225,157,88,255,255,155,255,203,114,255,255,161,255,255,156,255,192,107,142,98,55,87,61,34,255,212,119,255,255,161,255,255,161,255,255,161,255,255,161,252,126,0,252,126,0,252,126,0,249,124,0,252,126,0,252,126,0,252,126,0,252,126,0,252,126,0,249,124,0,224,112,0,112,56,0,7,3,0,61,30,0,10,5,0,38,19,0,38,19,0,53,26,0,160,80,0,109,54,0,193,96,0,158,79,0,12,6,0,22,11,0,25,12,0,73,36,0,20,10,0,33,16,0,170,85,0,183,91,0,209,104,0,188,94,0,127,63,0,119,59,0,181,90,0,33,16,0,10,5,0,17,8,0,10,5,0,252,126,0,252,126,0,252,126,0,252,126,0,247,123,0,244,122,0,244,122,0,244,122,0,249,124,0,104,130,130,104,104,130,105,105,131,103,103,129,102,102,128,102,102,127,104,104,130,98,98,123,104,104,131,102,102,128,103,103,129,105,105,131,102,102,127,101,101,127,88,88,111,79,79,99,61,61,76,71,71,89,95,95,119,98,98,123,100,100,125,96,96,120,100,100,125,101,101,126,96,96,121,98,98,123,99,99,124,99,99,124,99,99,124,99,99,123,102,102,127,101,101,127,98,98,123,95,95,119,90,90,112,88,88,111,98,98,122,97,122,122,97,122,122,97,121,121,96,120,120,96,120,120,96,120,120,98,122,122,98,123,123,96,120,120,96,120,120,98,123,123,96,120,120,96,120,120,84,105,105,75,94,94,57,72,72,67,84,84,90,113,113,91,114,114,95,119,119,91,113,113,94,118,118,93,117,117,91,114,114,93,117,117,94,118,118,93,116,116,94,117,117,94,117,117,96,121,121,95,119,119,93,117,117,90,113,113,85,107,107,88,110,110,93,116,116,93,93,116,93,93,116,95,95,119,91,91,114,91,91,114,91,91,114,93,93,116,92,92,115,92,92,115,92,92,115,94,94,117,92,92,116,91,91,114,80,80,100,72,72,90,63,63,78,64,64,81,86,86,108,87,87,109,91,91,114,87,87,109,91,91,113,90,90,112,85,85,106,89,89,112,90,90,113,89,89,112,90,90,113,90,90,113,93,93,116,92,92,115,90,90,112,87,87,109,82,82,103,85,85,106,92,115,115,90,113,113,89,112,112,92,115,115,88,110,110,90,112,112,88,110,110,152,190,190,152,190,190,147,184,184,148,186,186,150,187,187,150,187,187,149,187,187,134,168,168,19,24,24,18,22,22,38,47,47,82,102,102,39,49,49,51,64,64,72,90,90,7,9,9,4,5,5,18,22,22,45,56,56,30,37,37,31,39,39,32,41,41,50,63,63,29,37,37,4,5,5,2,3,3,2,3,3,5,7,7,26,33,33,145,181,181,143,179,179,141,177,177,144,180,180,141,176,176,144,180,180,140,176,176,139,174,174,144,144,181,144,144,180,140,140,175,141,141,176,141,141,176,143,143,179,142,142,177,141,141,177,44,44,55,17,17,21,40,40,50,58,58,73,40,40,50,37,37,46,37,37,46,81,81,101,7,7,8,7,7,8,39,39,49,42,42,53,28,28,35,9,9,12,31,31,38,53,53,66,21,21,26,2,2,3,0,0,0,5,5,6,25,25,31,125,125,156,134,134,168,133,133,166,137,137,171,132,132,165,135,135,169,132,132,165,132,132,165,127,127,159,135,169,169,135,169,169,131,163,163,132,165,165,133,166,166,133,166,166,132,165,165,118,148,148,17,21,21,16,20,20,33,42,42,72,90,90,34,43,43,45,56,56,64,80,80,6,8,8,3,4,4,15,19,19,39,49,49,26,33,33,27,34,34,28,36,36,44,55,55,26,32,32,3,4,4,2,3,3,2,3,3,5,6,6,23,29,29,126,158,158,125,156,156,123,154,154,125,157,157,123,153,153,125,156,156,122,153,153,121,151,151,125,125,157,125,125,157,121,121,151,122,122,153,122,122,152,124,124,155,123,123,153,122,122,153,255,255,160,255,255,161,255,255,161,255,235,132,87,61,34,179,125,70,255,255,153,255,255,161,255,255,156,154,107,60,154,107,60,16,11,6,255,255,156,255,255,161,255,255,161,255,255,158,255,255,161,252,126,0,252,126,0,252,126,0,252,126,0,252,126,0,252,126,0,252,126,0,249,124,0,249,124,0,249,124,0,153,76,0,104,52,0,7,3,0,15,7,0,43,21,0,66,33,0,20,10,0,22,11,0,94,47,0,112,56,0,221,110,0,239,119,0,28,14,0,15,7,0,158,79,0,160,80,0,239,119,0,249,124,0,249,124,0,252,126,0,249,124,0,242,121,0,158,79,0,168,84,0,142,71,0,191,95,0,10,5,0,25,12,0,237,118,0,247,123,0,247,123,0,249,124,0,249,124,0,229,114,0,239,119,0,247,123,0,249,124,0,244,122,0,104,131,131,103,129,129,101,126,126,107,107,134,104,104,130,105,105,131,104,104,131,106,106,133,105,105,131,105,105,131,33,33,41,12,12,16,29,29,37,43,43,54,29,29,37,27,27,34,27,27,34,60,60,75,5,5,6,5,5,6,29,29,36,31,31,39,21,21,26,7,7,9,23,23,28,39,39,49,15,15,19,3,3,3,0,0,0,4,4,5,18,18,23,93,93,116,100,100,125,99,99,123,101,101,127,98,98,123,100,100,125,98,98,123,98,98,122,95,95,118,101,126,126,100,126,126,97,122,122,98,123,123,99,124,124,99,124,124,99,123,123,88,111,111,13,16,16,12,15,15,25,31,31,54,67,67,28,35,35,34,42,42,48,60,60,4,6,6,2,3,3,11,14,14,29,37,37,19,24,24,20,26,26,21,27,27,33,42,42,19,24,24,2,3,3,1,2,2,1,2,2,3,4,4,17,22,22,96,120,120,95,118,118,93,117,117,95,119,119,93,117,117,95,119,119,93,116,116,92,115,115,90,112,112,96,96,120,93,93,116,93,93,117,93,93,117,95,95,119,94,94,118,94,94,118,29,29,37,11,11,14,26,26,33,39,39,49,26,26,33,24,24,31,24,24,31,54,54,68,4,4,5,4,4,5,26,26,33,28,28,35,19,19,23,6,6,8,20,20,26,36,36,45,14,14,17,2,2,3,0,0,0,3,3,4,16,16,21,84,84,105,91,91,114,90,90,112,93,93,116,90,90,112,91,91,114,89,89,112,89,89,112,86,86,108,151,189,189,101,127,127,3,3,3,32,40,40,15,19,19,29,36,36,19,24,24,110,137,137,81,101,101,77,97,97,83,104,104,47,59,59,30,38,38,24,30,30,135,168,168,147,183,183,146,183,183,136,170,170,6,7,7,67,84,84,100,126,126,115,144,144,33,41,41,145,181,181,143,179,179,140,175,175,144,181,181,144,180,180,133,167,167,138,172,172,142,178,178,142,177,177,146,146,183,146,146,182,146,146,182,145,145,182,142,142,178,145,145,181,145,145,181,143,143,179,138,138,173,2,2,3,30,30,38,14,14,18,27,27,34,34,34,43,104,104,130,76,76,95,86,86,108,79,79,99,79,79,98,28,28,35,22,22,28,68,68,85,138,138,173,138,138,172,128,128,160,5,5,7,34,34,42,94,94,118,108,108,136,31,31,38,136,136,170,136,136,170,131,131,164,135,135,169,135,135,169,125,125,157,128,128,160,133,133,166,133,133,166,134,134,168,136,171,171,136,170,170,136,170,170,133,166,166,134,168,168,135,169,169,135,169,169,129,162,162,2,3,3,5,6,6,13,16,16,25,32,32,32,40,40,97,121,121,68,85,85,80,100,100,73,92,92,73,92,92,26,33,33,14,18,18,63,79,79,128,161,161,128,160,160,119,148,148,42,52,52,31,39,39,88,110,110,114,142,142,28,36,36,121,151,151,126,158,158,122,152,152,122,152,152,125,157,157,116,145,145,118,148,148,123,154,154,123,154,154,124,155,155,126,126,158,126,126,158,126,126,157,125,125,157,124,124,155,125,125,156,125,125,156,119,119,149,83,83,103,255,255,161,255,255,161,255,255,161,255,255,151,154,107,60,238,165,93,255,255,158,255,255,158,255,255,158,25,17,9,25,17,9,79,55,31,255,255,155,255,255,161,255,255,161,255,255,161,255,255,161,252,126,0,252,126,0,252,126,0,252,126,0,252,126,0,252,126,0,252,126,0,252,126,0,252,126,0,242,121,0,211,105,0,99,49,0,20,10,0,28,14,0,35,17,0,33,16,0,12,6,0,51,25,0,214,107,0,234,117,0,252,126,0,252,126,0,249,124,0,252,126,0,249,124,0,249,124,0,252,126,0,252,126,0,252,126,0,252,126,0,252,126,0,252,126,0,252,126,0,249,124,0,249,124,0,181,90,0,17,8,0,114,57,0,247,123,0,249,124,0,244,122,0,242,121,0,232,116,0,247,123,0,242,121,0,239,119,0,249,124,0,105,132,132,101,126,126,102,127,127,105,131,131,104,131,131,107,107,134,107,107,134,107,107,134,107,107,134,105,105,131,107,107,133,106,106,133,105,105,131,70,70,88,4,4,5,22,22,28,20,20,25,20,20,25,13,13,17,54,54,67,56,56,70,54,54,67,58,58,72,32,32,40,11,11,14,16,16,21,93,93,116,101,101,127,101,101,127,33,33,41,4,4,5,46,46,58,69,69,87,80,80,100,96,96,120,100,100,125,99,99,124,97,97,121,100,100,125,98,98,123,92,92,115,95,95,119,98,98,122,98,98,122,101,126,126,100,126,126,100,126,126,100,125,125,98,123,123,100,125,125,100,125,125,99,123,123,66,83,83,2,2,2,21,26,26,10,12,12,19,23,23,13,16,16,72,90,90,53,66,66,50,63,63,54,68,68,30,38,38,19,24,24,15,19,19,88,110,110,96,120,120,95,119,119,88,111,111,3,4,4,44,55,55,65,82,82,75,94,94,21,27,27,95,118,118,94,117,117,92,115,115,94,118,118,94,118,118,87,109,109,90,113,113,93,116,116,93,116,116,94,117,117,95,95,119,95,95,119,95,95,119,93,93,117,95,95,119,95,95,119,94,94,117,91,91,114,1,1,2,20,20,25,9,9,11,18,18,22,22,22,28,68,68,86,50,50,63,57,57,71,52,52,65,52,52,65,19,19,23,15,15,19,45,45,56,92,92,115,91,91,114,85,85,106,3,3,4,22,22,28,63,63,79,72,72,90,20,20,25,91,91,114,91,91,114,88,88,110,12,15,15,41,52,52,81,102,102,134,167,167,151,188,188,152,190,190,152,190,190,150,188,188,104,130,130,118,147,147,81,101,101,132,166,166,64,80,80,143,179,179,138,173,173,106,133,133,148,186,186,150,187,187,145,181,181,145,181,181,143,179,179,135,169,169,144,180,180,144,180,180,132,165,165,131,164,164,136,170,170,148,148,185,147,147,184,147,147,184,147,147,184,147,147,183,144,144,180,146,146,183,146,146,183,146,146,182,146,146,182,144,144,180,142,142,178,117,117,146,51,51,64,11,11,14,64,64,80,77,77,96,142,142,178,142,142,178,143,143,179,143,143,179,141,141,177,98,98,122,111,111,138,108,108,135,125,125,156,93,93,116,134,134,168,120,120,150,100,100,125,139,139,174,140,140,176,136,136,170,136,136,170,134,134,168,132,132,166,135,135,169,132,132,165,123,123,154,130,130,163,127,127,159,138,173,173,138,172,172,138,172,172,137,172,172,137,171,171,134,168,168,137,171,171,136,170,170,136,170,170,136,170,170,134,168,168,130,162,162,109,136,136,47,59,59,10,13,13,59,74,74,71,89,89,132,166,166,133,167,167,133,167,167,133,166,166,131,164,164,81,102,102,103,128,128,100,125,125,116,145,145,86,108,108,124,156,156,111,139,139,125,157,157,129,161,161,127,159,159,126,157,157,124,155,155,124,155,155,122,153,153,125,156,156,122,153,153,114,143,143,120,150,150,117,147,147,127,127,159,127,127,159,127,127,159,127,127,158,126,126,158,125,125,156,126,126,157,126,126,157,125,125,157,125,125,156,124,124,155,255,255,155,255,255,161,255,255,160,255,255,151,41,29,16,255,255,158,255,255,160,255,255,153,221,154,86,29,20,11,16,11,6,37,26,14,255,255,161,255,255,161,255,255,161,255,255,161,255,255,161,252,126,0,252,126,0,247,123,0,252,126,0,252,126,0,252,126,0,252,126,0,252,126,0,252,126,0,252,126,0,186,93,0,86,43,0,28,14,0,7,3,0,38,19,0,28,14,0,22,11,0,224,112,0,249,124,0,252,126,0,252,126,0,252,126,0,252,126,0,252,126,0,252,126,0,252,126,0,252,126,0,252,126,0,252,126,0,252,126,0,252,126,0,252,126,0,247,123,0,249,124,0,247,123,0,160,80,0,22,11,0,237,118,0,249,124,0,247,123,0,239,119,0,221,110,0,232,116,0,244,122,0,239,119,0,244,122,0,252,126,0,99,124,124,103,129,129,105,132,132,103,129,129,96,120,120,102,127,127,104,130,130,108,108,135,108,108,135,107,107,134,107,107,134,105,105,131,106,106,132,107,107,133,106,106,133,106,106,133,106,106,133,104,104,130,101,101,127,31,31,38,8,8,10,28,28,35,56,56,70,92,92,115,103,103,129,104,104,131,104,104,130,104,104,130,71,71,89,64,64,80,55,55,69,91,91,114,43,43,54,98,98,122,94,94,118,72,72,91,98,98,123,102,102,128,100,100,125,99,99,124,98,98,122,92,92,116,98,98,123,98,98,123,90,90,112,90,90,112,93,93,116,97,97,121,101,126,126,100,126,126,100,126,126,100,125,125,98,123,123,99,124,124,100,125,125,100,125,125,99,124,124,98,123,123,97,122,122,80,100,100,29,36,36,8,10,10,27,33,33,53,66,66,86,108,108,97,122,122,98,123,123,98,123,123,97,121,121,67,84,84,76,95,95,52,65,65,86,107,107,41,51,51,92,115,115,89,112,112,68,86,86,96,120,120,97,121,121,94,117,117,93,117,117,92,116,116,87,109,109,93,117,117,93,116,116,85,107,107,85,106,106,88,110,110,92,115,115,95,95,119,95,95,119,95,95,119,95,95,119,93,93,116,95,95,119,95,95,119,95,95,119,95,95,118,94,94,117,93,93,116,76,76,95,33,33,41,7,7,9,42,42,52,50,50,63,93,93,116,93,93,116,94,94,117,94,94,117,93,93,116,64,64,80,72,72,91,71,71,88,82,82,102,61,61,76,88,88,110,107,134,134,119,149,149,151,189,189,151,189,189,153,191,191,151,189,189,143,179,179,57,71,71,113,142,142,89,111,111,52,65,65,150,187,187,151,189,189,151,189,189,148,185,185,150,188,188,146,182,182,149,186,186,148,186,186,147,183,183,148,185,185,148,185,185,149,149,186,149,149,186,149,149,186,148,148,186,148,148,185,148,148,185,148,148,185,148,148,185,147,147,184,147,147,184,144,144,180,25,25,31,35,35,44,143,143,179,145,145,181,11,11,14,2,2,3,30,30,38,11,11,14,101,101,126,108,108,135,112,112,140,127,127,159,143,143,178,144,144,180,142,142,178,142,142,178,53,53,67,10,10,12,107,107,133,59,59,73,49,49,61,142,142,178,142,142,177,140,140,175,138,138,173,137,137,171,136,136,171,139,139,174,139,139,174,137,137,172,138,138,173,140,140,175,139,174,174,139,174,174,139,174,174,139,173,173,138,173,173,138,173,173,138,172,172,138,172,172,137,172,172,134,168,168,110,138,138,33,41,41,114,143,143,135,168,168,92,115,115,10,13,13,1,1,1,28,35,35,32,40,40,94,117,117,93,117,117,104,130,130,132,166,166,132,165,165,133,167,167,132,165,165,125,156,156,49,62,62,99,123,123,77,96,96,45,56,56,130,163,163,131,164,164,131,164,164,128,160,160,130,163,163,126,158,158,129,161,161,128,160,160,127,159,159,128,160,160,127,159,159,129,129,161,128,128,160,128,128,160,128,128,160,127,127,159,127,127,159,127,127,159,127,127,158,126,126,158,126,126,158,123,123,154,21,21,27,255,255,153,255,255,147,255,255,161,255,255,158,255,255,148,25,17,9,255,255,161,255,255,160,255,238,134,255,180,101,58,40,22,75,52,29,16,11,6,255,255,161,255,255,161,255,255,161,255,255,161,255,255,161,252,126,0,252,126,0,252,126,0,252,126,0,252,126,0,252,126,0,252,126,0,252,126,0,252,126,0,252,126,0,168,84,0,22,11,0,10,5,0,5,2,0,43,21,0,63,31,0,43,21,0,206,103,0,244,122,0,252,126,0,252,126,0,249,124,0,249,124,0,249,124,0,249,124,0,249,124,0,252,126,0,252,126,0,252,126,0,252,126,0,252,126,0,237,118,0,38,19,0,22,11,0,68,34,0,84,42,0,196,98,0,249,124,0,252,126,0,244,122,0,247,123,0,247,123,0,229,114,0,234,117,0,244,122,0,244,122,0,247,123,0,108,135,135,110,137,137,106,133,133,108,135,135,108,135,135,106,133,133,107,134,134,107,134,134,108,135,135,108,108,135,108,108,135,108,108,135,107,107,134,107,107,134,107,107,134,107,107,134,107,107,133,106,106,133,104,104,130,18,18,22,25,25,32,103,103,129,104,104,131,8,8,10,2,2,2,22,22,27,8,8,10,73,73,91,78,78,97,81,81,101,91,91,114,103,103,129,104,104,130,102,102,128,102,102,128,38,38,48,7,7,9,77,77,96,42,42,53,35,35,44,102,102,128,102,102,128,101,101,126,100,100,125,99,99,123,98,98,123,100,100,126,100,100,125,99,99,124,100,100,125,101,101,126,101,126,126,101,126,126,100,126,126,100,125,125,100,125,125,100,125,125,100,125,125,100,125,125,100,125,125,97,122,122,80,100,100,24,30,30,83,104,104,98,122,122,67,83,83,8,10,10,1,1,1,20,26,26,23,29,29,68,85,85,68,85,85,76,95,95,97,121,121,97,121,121,98,122,122,96,121,121,91,114,114,36,45,45,72,91,91,57,71,71,33,41,41,96,120,120,97,121,121,96,121,121,94,118,118,96,120,120,93,117,117,95,119,119,95,119,119,94,117,117,95,119,119,95,118,118,95,119,119,95,95,119,95,95,119,95,95,119,95,95,119,95,95,119,95,95,119,95,95,119,95,95,118,95,95,118,93,93,116,16,16,20,22,22,28,92,92,116,93,93,117,7,7,9,1,1,2,20,20,25,7,7,9,65,65,82,70,70,87,73,73,91,82,82,103,40,50,50,146,182,182,147,184,184,147,184,184,139,174,174,139,174,174,109,137,137,149,187,187,152,190,190,152,190,190,152,190,190,152,190,190,148,186,186,148,185,185,151,189,189,148,185,185,151,188,188,150,150,188,150,150,188,150,150,188,150,150,187,150,150,187,149,149,187,149,149,187,149,149,186,123,123,154,100,100,126,126,126,157,39,39,48,135,135,168,116,116,146,140,140,175,143,143,179,134,134,167,114,114,143,142,142,178,65,65,81,13,13,16,39,39,49,51,51,64,35,35,44,26,26,33,82,82,103,64,64,80,38,38,47,68,68,86,138,138,173,132,132,166,131,131,164,131,131,163,103,103,128,140,140,175,143,143,179,143,143,178,142,142,178,142,142,178,139,139,174,139,139,174,142,142,177,131,131,164,141,141,176,139,139,174,141,176,176,140,176,176,140,175,175,140,175,175,140,175,175,139,174,174,139,174,174,115,144,144,94,117,117,117,147,147,36,45,45,96,120,120,108,136,136,130,163,163,133,166,166,124,156,156,106,133,133,132,165,165,129,162,162,12,15,15,37,46,46,48,60,60,32,41,41,30,37,37,76,95,95,111,139,139,35,44,44,63,79,79,128,160,160,122,153,153,128,160,160,121,151,151,107,134,134,130,162,162,132,165,165,132,165,165,131,164,164,131,164,164,128,161,161,129,162,162,130,163,163,121,151,151,130,163,163,128,161,161,129,129,162,129,129,162,129,129,161,129,129,161,128,128,161,128,128,160,128,128,160,120,120,150,86,86,108,72,72,90,33,33,41,88,88,110,99,99,124,255,255,155,255,255,148,255,255,158,255,206,116,255,255,151,150,104,58,255,255,151,255,218,122,255,244,137,104,72,40,146,101,57,255,192,107,255,255,158,255,255,160,255,255,161,255,255,161,255,255,161,252,126,0,252,126,0,252,126,0,247,123,0,252,126,0,252,126,0,252,126,0,252,126,0,252,126,0,252,126,0,249,124,0,214,107,0,35,17,0,45,22,0,7,3,0,22,11,0,20,10,0,22,11,0,153,76,0,247,123,0,252,126,0,165,82,0,94,47,0,71,35,0,124,62,0,104,52,0,173,86,0,247,123,0,252,126,0,247,123,0,247,123,0,81,40,0,10,5,0,114,57,0,170,85,0,221,110,0,56,28,0,244,122,0,244,122,0,237,118,0,237,118,0,234,117,0,239,119,0,234,117,0,244,122,0,244,122,0,239,119,0,247,123,0,110,138,138,110,138,138,110,138,138,110,137,137,110,137,137,108,135,135,107,134,134,101,127,127,106,133,133,107,134,134,108,108,135,108,108,135,108,108,135,108,108,135,108,108,135,107,107,134,107,107,134,100,100,126,88,88,111,60,60,75,90,90,113,74,74,92,96,96,121,100,100,126,102,102,128,102,102,128,69,69,86,82,82,102,100,100,125,46,46,58,28,28,35,5,5,6,37,37,46,23,23,29,18,18,23,86,86,107,46,46,57,27,27,34,98,98,123,99,99,124,99,99,124,93,93,117,83,83,104,73,73,92,100,100,125,102,102,128,102,102,128,102,102,127,102,102,127,100,100,126,99,99,124,101,101,127,99,99,124,101,101,126,101,126,126,101,126,126,101,126,126,100,126,126,100,125,125,100,125,125,100,125,125,94,117,117,82,103,103,56,70,70,84,105,105,26,32,32,90,113,113,78,98,98,96,120,120,96,120,120,65,81,81,77,96,96,95,119,119,43,54,54,8,11,11,4,6,6,34,43,43,21,27,27,17,22,22,55,69,69,43,54,54,25,32,32,92,115,115,93,117,117,93,116,116,88,110,110,88,110,110,69,87,87,95,118,118,96,121,121,96,120,120,96,120,120,96,120,120,94,118,118,94,118,118,96,120,120,94,117,117,96,120,120,94,118,118,95,95,119,95,95,119,95,95,119,95,95,119,95,95,119,95,95,119,95,95,119,78,78,98,64,64,80,80,80,100,24,24,31,86,86,107,74,74,93,89,89,112,91,91,114,85,85,107,73,73,91,96,121,121,146,183,183,149,186,186,147,184,184,107,134,134,79,98,98,110,137,137,109,137,137,140,175,175,142,177,177,149,187,187,149,186,186,136,136,171,79,79,99,82,82,103,82,82,103,143,143,179,128,128,160,138,138,173,140,140,175,144,144,180,146,146,182,135,135,169,138,138,172,109,109,136,134,134,168,86,86,107,66,66,82,61,61,77,100,100,126,121,121,152,135,135,168,142,142,177,143,143,179,143,143,179,141,141,177,131,131,163,117,117,146,89,89,111,136,136,170,137,137,172,144,144,181,126,126,158,88,88,110,142,142,178,136,136,170,90,90,113,142,142,177,140,140,175,138,138,173,100,100,125,74,74,92,103,103,129,103,103,128,131,131,164,133,133,166,140,140,175,139,139,174,128,160,160,74,93,93,77,96,96,77,96,96,134,168,168,137,171,171,129,162,162,130,163,163,133,166,166,136,170,170,125,157,157,128,160,160,101,126,126,63,79,79,80,100,100,61,77,77,112,140,140,93,117,117,113,141,141,125,156,156,132,165,165,124,156,156,133,166,166,131,164,164,124,155,155,108,136,136,82,103,103,126,157,157,127,159,159,134,167,167,117,146,146,81,102,102,131,164,164,126,157,157,83,104,104,131,163,163,129,161,161,123,154,154,92,115,115,68,85,85,120,150,150,94,118,118,121,151,151,122,153,153,128,161,161,129,162,162,117,117,147,68,68,85,52,52,65,71,71,88,123,123,154,125,125,157,118,118,148,123,123,154,122,122,153,124,124,155,85,85,107,117,117,147,93,93,116,58,58,72,73,73,91,52,52,65,154,107,60,163,113,63,246,171,96,255,255,148,100,69,39,255,194,109,225,157,88,255,177,99,167,116,65,117,81,45,255,255,153,255,255,161,255,255,158,255,255,160,255,255,158,255,255,161,247,123,0,247,123,0,252,126,0,249,124,0,252,126,0,252,126,0,249,124,0,249,124,0,252,126,0,252,126,0,244,122,0,198,99,0,17,8,0,17,8,0,22,11,0,56,28,0,17,8,0,7,3,0,183,91,0,130,65,0,135,67,0,153,76,0,140,70,0,140,70,0,79,39,0,28,14,0,107,53,0,117,58,0,229,114,0,242,121,0,84,42,0,17,8,0,122,61,0,130,65,0,94,47,0,127,63,0,119,59,0,244,122,0,242,121,0,229,114,0,224,112,0,232,116,0,232,116,0,239,119,0,244,122,0,239,119,0,234,117,0,69,87,87,105,132,132,108,136,136,106,133,133,102,128,128,77,96,96,79,98,98,100,125,125,101,126,126,102,127,127,101,127,127,107,133,133,108,135,135,97,97,122,59,59,74,43,43,54,102,102,128,91,91,114,104,104,130,100,100,125,103,103,129,102,102,127,96,96,120,71,71,89,77,77,97,95,95,119,48,48,60,47,47,59,43,43,54,85,85,107,86,86,108,102,102,128,101,101,126,102,102,127,95,95,119,100,100,125,93,93,116,95,95,118,63,63,79,47,47,59,97,97,122,102,102,128,102,102,128,62,62,78,101,101,126,101,101,126,64,64,80,97,97,122,99,99,124,98,98,123,95,95,119,52,52,65,73,73,91,92,92,116,93,93,117,94,94,118,99,99,124,99,99,124,100,100,125,53,66,66,55,68,68,40,50,50,95,119,119,85,106,106,92,115,115,93,116,116,96,120,120,97,121,121,89,112,112,66,83,83,72,90,90,89,111,111,57,71,71,44,55,55,41,51,51,67,83,83,81,101,101,95,119,119,94,118,118,95,119,119,95,119,119,94,118,118,87,109,109,78,97,97,59,74,74,44,55,55,91,114,114,96,120,120,84,105,105,59,73,73,95,119,119,91,114,114,60,76,76,92,115,115,93,117,117,92,116,116,67,84,84,49,62,62,69,86,86,69,86,86,88,110,110,89,111,111,94,117,117,94,117,117,94,118,118,50,50,62,52,52,65,52,52,65,90,90,113,80,80,101,87,87,109,88,88,110,91,91,114,92,92,115,85,85,106,87,87,109,68,68,86,191,191,191,189,189,189,187,187,187,187,187,187,183,183,183,182,182,182,180,180,180,192,153,192,188,150,188,189,151,189,187,150,187,185,148,185,185,148,185,184,147,184,184,147,184,184,147,184,180,144,180,187,150,187,183,147,183,183,146,183,189,151,189,184,147,184,182,146,182,165,132,165,75,60,75,73,59,73,49,39,49,15,12,15,30,24,30,24,19,24,15,12,15,43,34,43,118,94,118,86,69,86,56,44,56,173,139,173,170,136,170,175,140,175,182,146,182,182,145,182,183,147,183,176,140,176,172,137,172,175,140,175,177,141,177,176,141,176,182,145,182,180,144,180,177,142,177,177,142,177,175,140,175,168,134,168,171,137,171,169,135,169,170,136,170,179,179,179,175,175,175,175,175,175,173,173,173,173,173,173,172,172,172,170,170,170,172,172,172,168,168,168,173,173,173,174,174,174,171,171,171,174,174,174,175,175,175,170,170,170,171,171,171,153,153,153,68,68,68,73,73,73,45,45,45,28,28,28,7,7,7,22,22,22,40,40,40,113,113,113,109,109,109,52,52,52,93,93,93,160,160,160,162,162,162,167,167,167,168,168,168,169,169,169,166,166,166,162,162,162,162,162,162,163,163,163,163,163,163,168,168,168,167,167,167,165,165,165,163,163,163,161,161,161,161,161,161,157,157,157,157,157,157,155,155,155,165,132,165,161,129,161,162,130,162,160,128,160,158,127,158,158,126,158,158,126,158,157,126,157,157,126,157,154,123,154,160,128,160,156,125,156,156,125,156,160,128,160,157,125,157,155,124,155,140,112,140,64,51,64,255,180,101,217,151,84,255,244,137,255,255,148,163,113,63,138,96,53,175,122,68,255,212,119,255,189,106,37,26,14,255,255,160,255,255,161,255,255,160,255,255,158,255,255,156,255,255,161,249,124,0,252,126,0,252,126,0,252,126,0,252,126,0,252,126,0,249,124,0,252,126,0,252,126,0,249,124,0,242,121,0,168,84,0,5,2,0,53,26,0,25,12,0,48,24,0,43,21,0,81,40,0,153,76,0,175,87,0,209,104,0,214,107,0,178,89,0,153,76,0,168,84,0,160,80,0,168,84,0,89,44,0,196,98,0,155,77,0,76,38,0,66,33,0,15,7,0,175,87,0,109,54,0,140,70,0,244,122,0,247,123,0,239,119,0,224,112,0,224,112,0,232,116,0,229,114,0,242,121,0,229,114,0,229,114,0,244,122,0,137,137,137,134,134,134,134,134,134,135,135,135,135,135,135,138,138,138,138,138,138,137,137,137,135,135,135,133,133,133,133,133,133,130,130,130,130,130,130,128,128,128,136,109,136,133,106,133,134,107,134,133,106,133,131,105,131,131,105,131,131,104,131,130,104,130,130,104,130,127,102,127,132,106,132,130,104,130,129,103,129,133,106,133,130,104,130,129,103,129,116,93,116,53,42,53,52,41,52,34,27,34,10,8,10,21,17,21,17,13,17,10,8,10,30,24,30,83,66,83,60,48,60,39,31,39,122,98,122,119,95,119,123,98,123,128,102,128,128,102,128,129,103,129,124,99,124,121,96,121,123,98,123,124,99,124,124,99,124,128,102,128,126,101,126,125,100,125,125,100,125,123,98,123,118,94,118,120,96,120,119,95,119,120,96,120,126,126,126,123,123,123,123,123,123,122,122,122,122,122,122,122,122,122,120,120,120,121,121,121,119,119,119,122,122,122,123,123,123,121,121,121,123,123,123,124,124,124,120,120,120,121,121,121,109,109,109,48,48,48,52,52,52,32,32,32,19,19,19,4,4,4,16,16,16,28,28,28,80,80,80,78,78,78,37,37,37,66,66,66,114,114,114,115,115,115,119,119,119,120,120,120,121,121,121,119,119,119,116,116,116,116,116,116,117,117,117,117,117,117,120,120,120,120,120,120,119,119,119,118,118,118,116,116,116,116,116,116,114,114,114,114,114,114,112,112,112,113,113,113,117,93,117,118,94,118,117,93,117,115,92,115,115,92,115,115,92,115,115,92,115,184,184,184,186,186,186,189,151,189,187,150,187,187,149,187,183,146,183,187,149,187,186,149,186,186,149,186,188,150,188,186,148,186,185,148,185,183,147,183,81,64,81,17,13,17,46,37,46,82,66,82,26,21,26,36,29,36,57,46,57,44,35,44,49,39,49,21,16,21,5,4,5,7,6,7,5,4,5,76,60,76,13,10,13,11,9,11,39,31,39,34,27,34,43,34,43,101,81,101,116,93,116,13,10,13,3,3,3,7,5,7,5,4,5,147,118,147,180,144,180,184,147,184,182,145,182,178,142,178,176,140,176,174,139,174,175,140,175,179,143,179,180,144,180,176,141,176,172,138,172,174,139,174,175,140,175,175,175,175,175,175,175,171,171,171,174,174,174,174,174,174,174,174,174,175,175,175,173,173,173,173,173,173,171,171,171,176,176,176,16,16,16,43,43,43,77,77,77,25,25,25,33,33,33,53,53,53,94,94,94,46,46,46,19,19,19,5,5,5,3,3,3,5,5,5,70,70,70,24,24,24,10,10,10,36,36,36,31,31,31,17,17,17,94,94,94,107,107,107,109,109,109,3,3,3,6,6,6,5,5,5,25,25,25,166,166,166,169,169,169,167,167,167,164,164,164,162,162,162,160,160,160,149,149,149,164,164,164,166,166,166,162,162,162,158,158,158,160,160,160,161,161,161,162,130,162,160,128,160,157,125,157,160,128,160,159,127,159,159,127,159,160,128,160,158,127,158,158,126,158,156,125,156,161,129,161,68,55,68,39,31,39,70,56,70,31,24,31,30,24,30,48,39,48,86,68,86,37,29,37,255,194,109,255,255,158,255,255,153,255,255,155,104,72,40,33,23,13,25,17,9,96,66,37,25,17,9,62,43,24,255,255,161,255,255,161,255,255,161,255,255,161,255,255,155,255,255,161,252,126,0,252,126,0,252,126,0,247,123,0,249,124,0,249,124,0,252,126,0,252,126,0,252,126,0,252,126,0,247,123,0,175,87,0,48,24,0,10,5,0,7,3,0,51,25,0,89,44,0,107,53,0,204,102,0,186,93,0,175,87,0,94,47,0,96,48,0,17,8,0,158,79,0,234,117,0,226,113,0,201,100,0,244,122,0,237,118,0,201,100,0,102,51,0,63,31,0,117,58,0,242,121,0,232,116,0,244,122,0,244,122,0,247,123,0,226,113,0,239,119,0,244,122,0,226,113,0,219,109,0,211,105,0,237,118,0,242,121,0,2,2,2,4,4,4,21,21,21,111,111,111,139,139,139,138,138,138,138,138,138,134,134,134,131,131,131,123,123,123,132,132,132,136,136,136,133,133,133,133,133,133,130,130,130,133,133,133,134,107,134,132,106,132,132,105,132,132,105,132,131,105,131,131,105,131,132,106,132,131,104,131,130,104,130,130,104,130,133,106,133,57,45,57,12,9,12,58,46,58,25,20,25,18,15,18,25,20,25,71,56,71,30,24,30,34,27,34,4,3,4,2,2,2,5,4,5,3,3,3,18,14,18,9,7,9,7,6,7,23,19,23,13,10,13,30,24,30,71,56,71,82,66,82,9,7,9,2,2,2,5,4,5,19,15,19,103,82,103,126,101,126,127,101,127,127,101,127,124,99,124,123,98,123,113,91,113,122,98,122,125,100,125,123,98,123,123,98,123,120,96,120,121,97,121,124,124,124,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,121,121,121,121,121,121,121,121,121,121,121,121,123,123,123,53,53,53,11,11,11,30,30,30,23,23,23,17,17,17,23,23,23,37,37,37,28,28,28,32,32,32,13,13,13,2,2,2,4,4,4,3,3,3,49,49,49,8,8,8,7,7,7,26,26,26,12,12,12,28,28,28,66,66,66,76,76,76,8,8,8,2,2,2,4,4,4,18,18,18,96,96,96,118,118,118,121,121,121,119,119,119,117,117,117,115,115,115,107,107,107,115,115,115,117,117,117,119,119,119,116,116,116,113,113,113,115,115,115,116,116,116,116,92,116,115,92,115,194,155,194,194,155,194,194,155,194,194,155,194,191,153,191,191,153,191,158,126,158,117,93,117,79,63,79,5,4,5,13,10,13,44,35,44,27,21,27,23,18,23,121,97,121,83,66,83,75,60,75,146,117,146,9,7,9,15,12,15,17,13,17,19,15,19,55,44,55,32,26,32,24,19,24,43,35,43,55,44,55,24,19,24,49,39,49,72,57,72,68,54,68,39,31,39,24,19,24,22,18,22,9,7,9,11,9,11,7,6,7,163,130,163,185,148,185,183,146,183,181,145,181,177,141,177,173,138,173,178,142,178,178,142,178,174,139,174,161,128,161,177,142,177,182,182,182,182,182,182,182,182,182,182,182,182,181,181,181,181,181,181,181,181,181,179,179,179,178,178,178,147,147,147,109,109,109,74,74,74,19,19,19,12,12,12,41,41,41,25,25,25,37,37,37,113,113,113,77,77,77,69,69,69,135,135,135,8,8,8,14,14,14,16,16,16,17,17,17,14,14,14,30,30,30,22,22,22,40,40,40,12,12,12,22,22,22,45,45,45,66,66,66,83,83,83,36,36,36,22,22,22,20,20,20,19,19,19,10,10,10,6,6,6,150,150,150,170,170,170,168,168,168,166,166,166,162,162,162,159,159,159,163,163,163,163,163,163,159,159,159,147,147,147,167,167,167,167,134,167,167,133,167,166,133,166,166,133,166,166,132,166,165,132,165,165,132,165,163,130,163,163,130,163,134,107,134,99,79,99,4,3,4,18,14,18,11,9,11,37,30,37,19,15,19,34,27,34,103,82,103,70,56,70,63,50,63,100,80,100,8,6,8,255,255,161,255,229,129,255,255,143,255,238,134,37,26,14,41,29,16,87,61,34,29,20,11,158,110,62,255,255,161,255,255,161,255,255,160,255,255,160,255,255,155,255,255,160,252,126,0,249,124,0,244,122,0,252,126,0,252,126,0,252,126,0,252,126,0,249,124,0,249,124,0,249,124,0,242,121,0,22,11,0,30,15,0,7,3,0,2,1,0,61,30,0,28,14,0,109,54,0,168,84,0,252,126,0,244,122,0,191,95,0,112,56,0,127,63,0,181,90,0,247,123,0,244,122,0,175,87,0,237,118,0,249,124,0,206,103,0,244,122,0,242,121,0,239,119,0,158,79,0,234,117,0,244,122,0,234,117,0,226,113,0,221,110,0,242,121,0,244,122,0,229,114,0,234,117,0,224,112,0,229,114,0,51,51,51,68,68,68,30,30,30,18,18,18,7,7,7,15,15,15,8,8,8,5,5,5,139,139,139,139,139,139,138,138,138,136,136,136,130,130,130,131,131,131,134,134,134,133,133,133,121,121,121,133,133,133,137,137,137,137,109,137,136,109,136,136,109,136,136,109,136,136,108,136,136,108,136,134,107,134,134,107,134,133,107,133,110,88,110,55,44,55,4,3,4,14,11,14,9,7,9,18,15,18,16,12,16,28,22,28,84,67,84,52,41,52,101,81,101,83,66,83,6,5,6,12,9,12,13,10,13,38,30,38,10,8,10,17,13,17,30,24,30,38,30,38,9,7,9,34,27,34,50,40,50,47,37,47,63,50,63,27,22,27,15,12,15,6,5,6,14,11,14,7,6,7,113,90,113,128,102,128,128,102,128,127,101,127,122,98,122,120,96,120,121,97,121,123,98,123,121,96,121,111,89,111,123,98,123,126,101,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,125,125,125,124,124,124,124,124,124,124,124,124,75,75,75,51,51,51,3,3,3,13,13,13,28,28,28,17,17,17,15,15,15,26,26,26,53,53,53,48,48,48,95,95,95,77,77,77,9,9,9,11,11,11,12,12,12,36,36,36,21,21,21,16,16,16,28,28,28,35,35,35,8,8,8,32,32,32,46,46,46,44,44,44,59,59,59,15,15,15,14,14,14,6,6,6,13,13,13,4,4,4,106,106,106,120,120,120,120,120,120,118,118,118,115,115,115,113,113,113,114,114,114,116,116,116,114,114,114,195,156,195,194,155,194,149,119,149,143,114,143,27,21,27,35,28,35,5,4,5,17,14,17,15,12,15,17,14,17,116,93,116,175,140,175,192,154,192,190,152,190,188,150,188,182,145,182,189,151,189,189,151,189,189,151,189,190,152,190,190,152,190,190,152,190,190,152,190,189,151,189,189,151,189,187,150,187,177,142,177,145,116,145,102,82,102,131,105,131,119,95,119,17,13,17,176,141,176,185,148,185,187,149,187,183,146,183,177,141,177,163,131,163,171,136,171,180,144,180,179,143,179,181,145,181,181,145,181,181,144,181,182,146,182,180,180,180,180,180,180,181,181,181,183,183,183,183,183,183,182,182,182,180,180,180,182,182,182,182,182,182,178,178,178,139,139,139,133,133,133,32,32,32,5,5,5,20,20,20,16,16,16,14,14,14,108,108,108,162,162,162,175,175,175,178,178,178,176,176,176,169,169,169,175,175,175,175,175,175,175,175,175,175,175,175,176,176,176,176,176,176,175,175,175,175,175,175,175,175,175,173,173,173,164,164,164,156,156,156,133,133,133,94,94,94,110,110,110,15,15,15,61,61,61,162,162,162,170,170,170,168,168,168,163,163,163,164,164,164,150,150,150,156,156,156,165,165,165,166,166,166,162,162,162,166,166,166,165,165,165,165,132,165,165,132,165,168,134,168,166,132,166,167,134,167,167,133,167,165,132,165,164,131,164,166,133,166,165,132,165,127,101,127,121,97,121,23,18,23,29,23,29,4,3,4,14,11,14,13,10,13,14,11,14,98,79,98,148,118,148,162,129,162,160,128,160,158,126,158,153,122,153,255,255,160,255,255,158,255,255,153,158,110,62,71,49,27,12,8,4,37,26,14,87,61,34,83,58,32,255,255,161,255,255,161,255,255,161,255,255,161,255,255,160,252,126,0,252,126,0,247,123,0,242,121,0,249,124,0,252,126,0,249,124,0,252,126,0,252,126,0,249,124,0,244,122,0,102,51,0,38,19,0,10,5,0,0,0,0,15,7,0,20,10,0,91,45,0,107,53,0,221,110,0,252,126,0,249,124,0,232,116,0,239,119,0,244,122,0,247,123,0,252,126,0,242,121,0,191,95,0,196,98,0,211,105,0,239,119,0,249,124,0,234,117,0,221,110,0,196,98,0,249,124,0,244,122,0,232,116,0,226,113,0,242,121,0,234,117,0,242,121,0,237,118,0,239,119,0,226,113,0,226,113,0,142,142,142,133,133,133,127,127,127,109,109,109,77,77,77,90,90,90,12,12,12,49,49,49,132,132,132,138,138,138,140,140,140,132,132,132,134,134,134,122,122,122,127,127,127,134,134,134,135,135,135,132,132,132,135,135,135,135,135,135,136,136,136,134,107,134,137,109,137,135,108,135,136,109,136,136,109,136,134,107,134,134,107,134,135,108,135,135,108,135,132,106,132,99,79,99,19,15,19,24,19,24,4,3,4,14,11,14,10,8,10,12,9,12,80,64,80,121,96,121,130,104,130,131,105,131,130,104,130,125,100,125,130,104,130,130,104,130,130,104,130,131,105,131,131,105,131,131,105,131,131,104,131,130,104,130,130,104,130,129,103,129,122,97,122,116,93,116,70,56,70,90,72,90,82,65,82,11,9,11,45,36,45,127,102,127,128,103,128,126,100,126,121,97,121,123,98,123,117,94,117,124,99,124,123,99,123,124,99,124,122,97,122,124,99,124,125,100,125,124,124,124,124,124,124,126,126,126,126,126,126,126,126,126,126,126,126,124,124,124,124,124,124,125,125,125,122,122,122,96,96,96,92,92,92,17,17,17,3,3,3,13,13,13,11,11,11,10,10,10,11,11,11,112,112,112,121,121,121,123,123,123,122,122,122,120,120,120,122,122,122,121,121,121,121,121,121,121,121,121,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,114,114,114,109,109,109,93,93,93,66,66,66,84,84,84,11,11,11,42,42,42,113,113,113,119,119,119,120,120,120,114,114,114,115,115,115,7,6,7,0,0,0,5,4,5,17,14,17,9,7,9,41,33,41,129,103,129,178,142,178,193,155,193,187,150,187,146,117,146,64,51,64,97,77,97,153,123,153,173,138,173,172,138,172,182,145,182,153,122,153,185,148,185,179,143,179,152,122,152,117,94,117,77,61,77,48,38,48,88,70,88,176,141,176,113,90,113,132,105,132,183,146,183,185,148,185,179,143,179,167,134,167,169,135,169,167,133,167,172,138,172,174,139,174,170,136,170,183,146,183,182,146,182,177,141,177,176,141,176,180,144,180,185,185,185,183,183,183,177,177,177,181,181,181,182,182,182,180,180,180,180,180,180,183,183,183,181,181,181,177,177,177,179,179,179,73,73,73,27,27,27,0,0,0,5,5,5,16,16,16,9,9,9,38,38,38,78,78,78,165,165,165,180,180,180,174,174,174,136,136,136,59,59,59,79,79,79,142,142,142,160,160,160,160,160,160,168,168,168,141,141,141,121,121,121,166,166,166,140,140,140,108,108,108,71,71,71,44,44,44,83,83,83,162,162,162,104,104,104,121,121,121,168,168,168,170,170,170,171,171,171,164,164,164,155,155,155,153,153,153,158,158,158,159,159,159,156,156,156,164,164,164,167,167,167,162,162,162,161,161,161,165,165,165,169,135,169,169,135,169,162,129,162,165,132,165,166,133,166,164,131,164,164,131,164,167,134,167,165,132,165,161,129,161,163,130,163,67,53,67,25,20,25,6,5,6,5,4,5,15,12,15,8,6,8,34,27,34,71,57,71,109,87,109,163,130,163,158,126,158,123,98,123,54,43,54,72,57,72,255,255,156,255,255,155,255,250,140,255,215,120,146,101,57,37,26,14,12,8,4,255,255,160,25,17,9,255,255,161,255,255,161,255,255,158,255,255,161,255,255,160,252,126,0,252,126,0,249,124,0,242,121,0,247,123,0,252,126,0,252,126,0,252,126,0,252,126,0,247,123,0,247,123,0,142,71,0,102,51,0,25,12,0,10,5,0,17,8,0,22,11,0,66,33,0,94,47,0,178,89,0,224,112,0,244,122,0,242,121,0,239,119,0,249,124,0,252,126,0,249,124,0,242,121,0,209,104,0,226,113,0,226,113,0,239,119,0,239,119,0,221,110,0,122,61,0,216,108,0,252,126,0,244,122,0,244,122,0,242,121,0,229,114,0,239,119,0,244,122,0,224,112,0,234,117,0,242,121,0,237,118,0,134,134,134,114,114,114,57,57,57,36,36,36,67,67,67,66,66,66,131,131,131,84,84,84,137,137,137,138,138,138,139,139,139,133,133,133,124,124,124,125,125,125,128,128,128,129,129,129,126,126,126,133,133,133,136,136,136,135,135,135,131,131,131,133,133,133,137,110,137,137,110,137,136,108,136,131,105,131,135,108,135,133,107,133,133,106,133,136,108,136,136,108,136,134,107,134,132,106,132,54,43,54,20,16,20,5,4,5,0,0,0,4,3,4,12,9,12,28,22,28,58,46,58,89,71,89,122,98,122,133,106,133,128,103,128,44,35,44,58,47,58,66,53,66,105,84,105,118,94,118,118,94,118,104,83,104,90,72,90,127,101,127,122,98,122,104,83,104,80,64,80,32,26,32,61,49,61,60,48,60,120,96,120,77,61,77,90,72,90,126,101,126,127,102,127,122,97,122,114,91,114,115,92,115,114,91,114,119,95,119,116,93,116,122,98,122,125,100,125,124,99,124,120,96,120,123,98,123,126,126,126,126,126,126,125,125,125,121,121,121,123,123,123,123,123,123,123,123,123,125,125,125,125,125,125,124,124,124,121,121,121,122,122,122,18,18,18,5,5,5,0,0,0,3,3,3,11,11,11,6,6,6,53,53,53,82,82,82,113,113,113,123,123,123,119,119,119,93,93,93,54,54,54,62,62,62,98,98,98,110,110,110,110,110,110,116,116,116,84,84,84,118,118,118,114,114,114,97,97,97,75,75,75,49,49,49,57,57,57,56,56,56,112,112,112,72,72,72,84,84,84,117,117,117,27,22,27,47,37,47,47,37,47,59,47,59,145,116,145,191,152,191,194,155,194,194,155,194,194,155,194,194,155,194,193,155,193,193,154,193,191,153,191,169,135,169,97,78,97,179,143,179,171,136,171,83,66,83,131,105,131,182,145,182,168,134,168,92,74,92,164,131,164,189,151,189,190,152,190,184,147,184,176,141,176,172,138,172,178,142,178,183,147,183,175,140,175,171,137,171,181,144,181,177,141,177,161,129,161,178,142,178,168,135,168,168,134,168,187,187,187,185,185,185,184,184,184,184,184,184,186,186,186,184,184,184,181,181,181,185,185,185,185,185,185,184,184,184,184,184,184,184,184,184,184,184,184,183,183,183,183,183,183,122,122,122,31,31,31,35,35,35,25,25,25,44,44,44,44,44,44,55,55,55,177,177,177,179,179,179,180,180,180,180,180,180,180,180,180,179,179,179,179,179,179,179,179,179,157,157,157,153,153,153,90,90,90,165,165,165,158,158,158,77,77,77,121,121,121,168,168,168,146,146,146,85,85,85,151,151,151,173,173,173,175,175,175,169,169,169,162,162,162,158,158,158,172,172,172,168,168,168,161,161,161,157,157,157,166,166,166,162,162,162,148,148,148,163,163,163,147,147,147,154,154,154,171,136,171,169,135,169,168,135,168,168,134,168,169,135,169,166,132,166,169,135,169,168,135,168,168,134,168,168,134,168,168,134,168,167,134,167,167,133,167,167,133,167,158,126,158,110,88,110,28,22,28,31,25,31,23,18,23,40,32,40,39,31,39,123,98,123,160,128,160,162,129,162,163,130,163,163,130,163,162,130,162,162,130,162,255,255,150,255,255,155,255,215,120,255,186,104,50,34,19,255,255,160,255,255,161,87,61,34,255,255,161,255,255,160,255,255,158,255,255,161,255,255,160,252,126,0,252,126,0,249,124,0,244,122,0,249,124,0,252,126,0,252,126,0,252,126,0,249,124,0,252,126,0,252,126,0,252,126,0,244,122,0,30,15,0,45,22,0,10,5,0,56,28,0,17,8,0,22,11,0,132,66,0,244,122,0,249,124,0,247,123,0,252,126,0,252,126,0,252,126,0,249,124,0,221,110,0,127,63,0,191,95,0,107,53,0,165,82,0,239,119,0,214,107,0,178,89,0,252,126,0,252,126,0,249,124,0,244,122,0,242,121,0,214,107,0,242,121,0,234,117,0,244,122,0,244,122,0,242,121,0,124,124,124,72,72,72,133,133,133,127,127,127,98,98,98,135,135,135,125,125,125,118,118,118,69,69,69,122,122,122,140,140,140,141,141,141,131,131,131,128,128,128,132,132,132,139,139,139,136,136,136,130,130,130,127,127,127,133,133,133,119,119,119,132,132,132,124,124,124,118,118,118,124,124,124,138,110,138,136,109,136,136,108,136,137,109,137,135,108,135,134,107,134,136,109,136,136,109,136,136,108,136,136,108,136,135,108,135,135,108,135,135,108,135,135,108,135,128,102,128,89,71,89,23,18,23,25,20,25,32,25,32,32,25,32,40,32,40,99,79,99,130,104,130,131,105,131,132,106,132,132,106,132,132,105,132,132,105,132,131,105,131,130,104,130,115,92,115,112,90,112,66,53,66,121,97,121,56,45,56,89,71,89,123,99,123,114,91,114,107,86,107,62,50,62,111,89,111,129,103,129,125,100,125,120,96,120,117,93,117,120,96,120,127,101,127,124,99,124,119,95,119,122,98,122,120,96,120,109,87,109,121,96,121,114,91,114,109,87,109,114,91,114,126,126,126,125,125,125,125,125,125,126,126,126,125,125,125,123,123,123,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,124,124,124,118,118,118,83,83,83,21,21,21,17,17,17,30,30,30,30,30,30,37,37,37,92,92,92,121,121,121,122,122,122,123,123,123,123,123,123,123,123,123,122,122,122,122,122,122,121,121,121,107,107,107,105,105,105,113,113,113,108,108,108,53,53,53,83,83,83,115,115,115,106,106,106,95,76,95,117,93,117,162,129,162,172,137,172,189,151,189,191,153,191,191,153,191,191,152,191,173,138,173,186,149,186,186,149,186,186,149,186,156,125,156,146,117,146,117,93,117,173,139,173,115,92,115,112,90,112,186,149,186,192,153,192,188,150,188,191,153,191,191,153,191,191,153,191,191,152,191,189,151,189,181,144,181,180,144,180,182,146,182,182,145,182,180,144,180,172,137,172,164,131,164,179,143,179,183,146,183,188,188,188,188,188,188,188,188,188,185,185,185,185,185,185,183,183,183,187,187,187,186,186,186,186,186,186,182,182,182,180,180,180,183,183,183,185,185,185,185,185,185,184,184,184,180,180,180,70,70,70,39,39,39,7,7,7,35,35,35,120,120,120,103,103,103,71,71,71,88,88,88,108,108,108,150,150,150,176,176,176,177,177,177,177,177,177,177,177,177,160,160,160,174,174,174,172,172,172,172,172,172,172,172,172,144,144,144,135,135,135,160,160,160,106,106,106,104,104,104,172,172,172,175,175,175,177,177,177,173,173,173,176,176,176,176,176,176,175,175,175,173,173,173,166,166,166,166,166,166,167,167,167,167,167,167,154,154,154,164,164,164,157,157,157,150,150,150,164,164,164,172,137,172,172,137,172,171,137,171,169,135,169,169,135,169,167,133,167,167,133,167,170,136,170,169,135,169,169,135,169,165,132,165,167,133,167,168,134,168,168,134,168,168,134,168,164,131,164,93,74,93,64,51,64,35,28,35,6,5,6,31,25,31,93,75,93,65,52,65,80,64,80,98,78,98,136,109,136,144,115,144,159,127,159,160,128,160,160,128,160,255,255,151,255,255,151,184,128,71,96,66,37,255,224,125,255,255,158,255,241,135,71,49,27,255,255,161,255,255,161,255,255,160,255,255,161,255,255,156,252,126,0,249,124,0,249,124,0,252,126,0,252,126,0,249,124,0,244,122,0,249,124,0,252,126,0,252,126,0,252,126,0,249,124,0,247,123,0,239,119,0,168,84,0,43,21,0,35,17,0,61,30,0,61,30,0,188,94,0,221,110,0,249,124,0,252,126,0,252,126,0,252,126,0,249,124,0,178,89,0,99,49,0,43,21,0,20,10,0,112,56,0,191,95,0,181,90,0,124,62,0,249,124,0,252,126,0,252,126,0,247,123,0,252,126,0,252,126,0,244,122,0,244,122,0,232,116,0,229,114,0,219,109,0,244,122,0,140,140,140,139,139,139,138,138,138,138,138,138,116,116,116,109,109,109,129,129,129,85,85,85,83,83,83,138,138,138,141,141,141,142,142,142,139,139,139,141,141,141,141,141,141,141,141,141,139,139,139,133,133,133,133,133,133,134,134,134,134,134,134,124,124,124,132,132,132,126,126,126,120,120,120,131,131,131,134,134,134,138,110,138,138,110,138,136,109,136,136,108,136,134,107,134,134,107,134,136,109,136,136,109,136,136,109,136,133,106,133,134,107,134,135,108,135,135,108,135,135,108,135,132,105,132,74,59,74,51,41,51,28,22,28,5,4,5,25,20,25,75,60,75,52,42,52,64,51,64,79,63,79,110,88,110,116,93,116,128,102,128,129,103,129,129,103,129,129,103,129,117,93,117,126,101,126,126,100,126,125,100,125,105,84,105,99,79,99,79,63,79,117,93,117,77,62,77,76,60,76,126,100,126,129,103,129,126,101,126,129,103,129,129,103,129,129,103,129,128,103,128,127,101,127,122,97,122,121,97,121,123,98,123,122,98,122,121,97,121,116,92,116,110,88,110,120,96,120,123,98,123,127,127,127,126,126,126,126,126,126,125,125,125,125,125,125,123,123,123,126,126,126,125,125,125,125,125,125,123,123,123,121,121,121,124,124,124,125,125,125,125,125,125,124,124,124,122,122,122,47,47,47,26,26,26,5,5,5,23,23,23,81,81,81,70,70,70,48,48,48,59,59,59,73,73,73,102,102,102,119,119,119,120,120,120,120,120,120,120,120,120,109,109,109,118,118,118,117,117,117,117,117,117,117,117,117,127,101,127,107,85,107,162,130,162,190,152,190,190,152,190,192,153,192,183,147,183,189,151,189,187,149,187,187,149,187,165,132,165,41,33,41,49,39,49,113,91,113,52,42,52,137,109,137,191,153,191,193,154,193,193,154,193,192,154,192,192,154,192,192,153,192,190,152,190,186,148,186,182,145,182,168,134,168,185,148,185,181,145,181,183,146,183,184,147,184,184,147,184,182,145,182,189,189,189,189,189,189,189,189,189,189,189,189,188,188,188,188,188,188,188,188,188,188,188,188,187,187,187,187,187,187,187,187,187,187,187,187,186,186,186,186,186,186,178,178,178,39,39,39,24,24,24,125,125,125,170,170,170,39,39,39,16,16,16,3,3,3,7,7,7,42,42,42,98,98,98,127,127,127,123,123,123,118,118,118,99,99,99,150,150,150,174,174,174,176,176,176,175,175,175,170,170,170,175,175,175,173,173,173,172,172,172,152,152,152,38,38,38,45,45,45,104,104,104,48,48,48,126,126,126,176,176,176,177,177,177,177,177,177,177,177,177,177,177,177,176,176,176,174,174,174,170,170,170,166,166,166,154,154,154,169,169,169,166,166,166,167,167,167,169,169,169,168,168,168,166,166,166,173,138,173,173,138,173,172,138,172,172,138,172,172,137,172,171,137,171,171,137,171,171,137,171,170,136,170,170,136,170,170,136,170,170,136,170,169,135,169,169,135,169,162,129,162,35,28,35,22,17,22,113,91,113,122,97,122,154,123,154,15,12,15,3,2,3,6,5,6,38,30,38,88,71,88,115,92,115,111,89,111,106,85,106,89,71,89,136,108,136,157,125,157,158,127,158,217,151,84,142,98,55,255,186,104,255,255,156,255,250,140,255,255,151,230,160,89,255,255,161,255,255,161,255,255,156,255,255,160,255,255,160,249,124,0,244,122,0,252,126,0,252,126,0,249,124,0,247,123,0,252,126,0,252,126,0,252,126,0,252,126,0,252,126,0,252,126,0,249,124,0,247,123,0,242,121,0,73,36,0,89,44,0,25,12,0,112,56,0,158,79,0,122,61,0,234,117,0,247,123,0,252,126,0,249,124,0,247,123,0,224,112,0,160,80,0,89,44,0,237,118,0,242,121,0,191,95,0,183,91,0,247,123,0,249,124,0,247,123,0,252,126,0,252,126,0,252,126,0,239,119,0,242,121,0,244,122,0,234,117,0,239,119,0,244,122,0,249,124,0,141,141,141,141,141,141,142,142,142,136,136,136,140,140,140,138,138,138,138,138,138,122,122,122,36,36,36,84,84,84,39,39,39,101,101,101,141,141,141,142,142,142,142,142,142,141,141,141,141,141,141,141,141,141,141,141,141,139,139,139,136,136,136,133,133,133,123,123,123,132,132,132,134,134,134,135,135,135,135,135,135,133,133,133,138,111,138,138,110,138,138,110,138,138,110,138,137,110,137,137,110,137,137,109,137,137,109,137,136,109,136,136,109,136,136,109,136,136,108,136,136,108,136,135,108,135,130,104,130,28,22,28,17,14,17,91,73,91,97,78,97,123,98,123,28,22,28,12,9,12,2,2,2,5,4,5,31,24,31,71,57,71,90,72,90,85,68,85,72,57,72,109,87,109,126,101,126,128,102,128,127,102,127,129,103,129,123,98,123,127,101,127,125,100,125,125,100,125,110,88,110,27,22,27,32,26,32,35,28,35,91,73,91,128,102,128,129,103,129,129,103,129,129,103,129,129,103,129,128,103,128,128,103,128,127,101,127,124,99,124,121,97,121,112,90,112,124,99,124,121,97,121,122,97,122,123,98,123,122,97,122,127,127,127,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,119,119,119,26,26,26,16,16,16,84,84,84,90,90,90,114,114,114,26,26,26,11,11,11,2,2,2,5,5,5,28,28,28,66,66,66,86,86,86,83,83,83,79,79,79,101,101,101,117,117,117,119,119,119,17,14,17,23,19,23,23,19,23,83,66,83,71,57,71,93,74,93,37,30,37,148,118,148,191,153,191,191,153,191,183,146,183,185,148,185,110,88,110,186,149,186,192,154,192,194,155,194,188,150,188,186,148,186,183,147,183,183,146,183,189,151,189,185,148,185,186,149,186,186,149,186,188,150,188,188,150,188,191,153,191,185,148,185,191,191,191,191,191,191,190,190,190,190,190,190,186,186,186,180,180,180,187,187,187,189,189,189,189,189,189,189,189,189,188,188,188,188,188,188,188,188,188,188,188,188,165,165,165,24,24,24,132,132,132,173,173,173,166,166,166,165,165,165,176,176,176,174,174,174,183,183,183,183,183,183,3,3,3,0,0,0,3,3,3,5,5,5,11,11,11,13,13,13,33,33,33,33,33,33,14,14,14,16,16,16,22,22,22,22,22,22,77,77,77,66,66,66,86,86,86,34,34,34,137,137,137,176,176,176,176,176,176,169,169,169,170,170,170,101,101,101,171,171,171,177,177,177,178,178,178,172,172,172,170,170,170,168,168,168,173,173,173,169,169,169,171,171,171,171,171,171,170,170,170,172,172,172,172,172,172,175,175,175,169,169,169,174,139,174,174,139,174,174,139,174,173,139,173,169,135,169,164,131,164,171,136,171,172,138,172,172,137,172,171,137,171,171,137,171,171,137,171,171,136,171,170,136,170,149,119,149,22,17,22,120,96,120,157,126,157,150,120,150,160,128,160,158,126,158,166,133,166,166,132,166,66,52,66,3,2,3,0,0,0,3,2,3,5,4,5,10,8,10,11,9,11,30,24,30,30,24,30,13,10,13,14,11,14,255,186,104,255,255,147,255,255,155,255,189,106,255,253,142,255,255,143,167,116,65,255,255,161,255,255,160,255,255,158,255,255,158,255,255,161,249,124,0,252,126,0,252,126,0,252,126,0,252,126,0,252,126,0,249,124,0,252,126,0,252,126,0,252,126,0,252,126,0,252,126,0,252,126,0,252,126,0,102,51,0,22,11,0,28,14,0,114,57,0,63,31,0,137,68,0,150,75,0,191,95,0,237,118,0,252,126,0,252,126,0,239,119,0,244,122,0,242,121,0,242,121,0,204,102,0,153,76,0,214,107,0,25,12,0,216,108,0,252,126,0,252,126,0,249,124,0,247,123,0,239,119,0,247,123,0,244,122,0,237,118,0,232,116,0,244,122,0,244,122,0,26,26,26,26,26,26,11,11,11,13,13,13,17,17,17,17,17,17,61,61,61,52,52,52,68,68,68,27,27,27,109,109,109,141,141,141,135,135,135,136,136,136,81,81,81,137,137,137,141,141,141,142,142,142,137,137,137,136,136,136,134,134,134,134,134,134,138,138,138,135,135,135,136,136,136,136,136,136,135,135,135,137,137,137,136,136,136,139,139,139,134,134,134,138,111,138,138,110,138,138,110,138,138,110,138,135,108,135,130,104,130,136,108,136,137,109,137,137,109,137,136,109,136,136,109,136,136,109,136,136,108,136,119,95,119,17,14,17,95,76,95,125,100,125,120,96,120,119,95,119,127,102,127,126,101,126,132,106,132,132,106,132,52,42,52,2,2,2,0,0,0,2,2,2,4,3,4,8,6,8,9,7,9,24,19,24,24,19,24,10,8,10,11,9,11,15,12,15,15,12,15,55,44,55,62,49,62,25,20,25,99,79,99,127,102,127,127,102,127,122,97,122,123,98,123,73,58,73,124,99,124,128,102,128,129,103,129,125,100,125,123,99,123,122,97,122,122,97,122,125,100,125,123,98,123,124,99,124,124,99,124,124,99,124,125,100,125,124,99,124,127,101,127,123,98,123,127,127,127,126,126,126,126,126,126,126,126,126,120,120,120,125,125,125,126,126,126,126,126,126,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,110,110,110,16,16,16,88,88,88,115,115,115,110,110,110,110,110,110,118,118,118,116,116,116,122,122,122,122,122,122,48,48,48,2,2,2,0,0,0,2,2,2,3,3,3,51,41,51,93,75,93,187,150,187,189,151,189,181,144,181,188,151,188,178,143,178,178,142,178,158,126,158,140,112,140,191,153,191,195,156,195,195,156,195,195,156,195,195,156,195,194,155,194,194,155,194,190,152,190,192,153,192,189,151,189,193,154,193,179,143,179,189,151,189,193,154,193,190,152,190,192,192,192,192,192,192,192,192,192,191,191,191,191,191,191,191,191,191,191,191,191,190,190,190,190,190,190,190,190,190,178,178,178,157,157,157,128,128,128,107,107,107,160,160,160,49,49,49,131,131,131,171,171,171,148,148,148,178,178,178,181,181,181,181,181,181,170,170,170,122,122,122,145,145,145,180,180,180,176,176,176,82,82,82,16,16,16,50,50,50,9,9,9,65,65,65,44,44,44,40,40,40,33,33,33,103,103,103,151,151,151,81,81,81,48,48,48,86,86,86,173,173,173,174,174,174,167,167,167,174,174,174,164,164,164,164,164,164,145,145,145,129,129,129,176,176,176,179,179,179,179,179,179,179,179,179,178,178,178,178,178,178,178,178,178,174,174,174,175,175,175,173,173,173,177,177,177,164,164,164,172,172,172,176,176,176,175,140,175,175,140,175,175,140,175,175,140,175,174,139,174,174,139,174,174,139,174,173,139,173,173,138,173,173,138,173,162,129,162,142,114,142,116,93,116,97,77,97,145,116,145,45,36,45,119,95,119,155,124,155,134,107,134,161,129,161,164,131,164,164,131,164,153,123,153,110,88,110,131,104,131,163,130,163,159,127,159,74,59,74,15,12,15,45,36,45,8,6,8,58,47,58,40,32,40,36,29,36,30,24,30,93,74,93,255,255,158,255,255,156,255,255,158,255,226,127,255,255,156,255,253,142,255,255,145,255,255,161,255,255,161,255,255,161,255,255,161,252,126,0,252,126,0,249,124,0,249,124,0,252,126,0,252,126,0,247,123,0,252,126,0,249,124,0,252,126,0,252,126,0,252,126,0,252,126,0,252,126,0,232,116,0,38,19,0,43,21,0,56,28,0,165,82,0,142,71,0,122,61,0,150,75,0,209,104,0,244,122,0,244,122,0,249,124,0,142,71,0,117,58,0,84,42,0,109,54,0,178,89,0,239,119,0,48,24,0,15,7,0,124,62,0,252,126,0,252,126,0,252,126,0,252,126,0,247,123,0,244,122,0,239,119,0,244,122,0,239,119,0,244,122,0,252,126,0,7,7,7,52,52,52,35,35,35,32,32,32,26,26,26,82,82,82,120,120,120,64,64,64,38,38,38,68,68,68,137,137,137,138,138,138,132,132,132,138,138,138,130,130,130,130,130,130,115,115,115,102,102,102,139,139,139,142,142,142,142,142,142,142,142,142,141,141,141,141,141,141,141,141,141,138,138,138,139,139,139,137,137,137,140,140,140,130,130,130,137,137,137,139,139,139,138,138,138,139,111,139,138,111,138,138,110,138,138,110,138,138,110,138,138,110,138,137,110,137,137,110,137,137,109,137,128,103,128,113,90,113,92,73,92,77,61,77,115,92,115,35,28,35,94,75,94,123,98,123,106,85,106,128,102,128,130,104,130,130,104,130,122,97,122,88,70,88,104,83,104,129,103,129,126,101,126,59,47,59,12,9,12,36,29,36,6,5,6,46,37,46,32,25,32,29,23,29,24,19,24,74,59,74,109,87,109,58,46,58,34,27,34,62,49,62,124,99,124,125,100,125,120,96,120,125,100,125,118,94,118,118,94,118,105,84,105,93,74,93,127,101,127,129,103,129,129,103,129,129,103,129,128,103,128,128,103,128,128,102,128,125,100,125,127,101,127,125,100,125,127,102,127,118,95,118,125,100,125,127,102,127,126,100,126,127,127,127,127,127,127,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,125,125,125,118,118,118,104,104,104,84,84,84,70,70,70,106,106,106,32,32,32,87,87,87,113,113,113,98,98,98,118,118,118,120,120,120,120,120,120,112,112,112,81,81,81,96,96,96,186,149,186,174,139,174,178,142,178,177,142,177,167,134,167,145,116,145,129,103,129,155,124,155,188,151,188,194,155,194,196,157,196,196,156,196,195,156,195,195,156,195,193,154,193,195,156,195,191,152,191,194,155,194,194,155,194,194,155,194,192,153,192,188,150,188,193,193,193,193,193,193,193,193,193,185,185,185,190,190,190,157,157,157,85,85,85,124,124,124,96,96,96,156,156,156,116,116,116,173,173,173,144,144,144,184,184,184,171,171,171,161,161,161,140,140,140,126,126,126,160,160,160,133,133,133,167,167,167,102,102,102,110,110,110,153,153,153,104,104,104,121,121,121,123,123,123,160,160,160,181,181,181,120,120,120,71,71,71,31,31,31,108,108,108,142,142,142,138,138,138,54,54,54,56,56,56,46,46,46,165,165,165,157,157,157,172,172,172,166,166,166,172,172,172,160,160,160,164,164,164,163,163,163,163,163,163,154,154,154,133,133,133,118,118,118,142,142,142,173,173,173,178,178,178,180,180,180,179,179,179,179,179,179,177,177,177,178,178,178,175,175,175,178,178,178,178,178,178,177,177,177,175,175,175,171,171,171,176,141,176,176,141,176,176,141,176,168,135,168,173,139,173,143,114,143,77,62,77,113,90,113,88,70,88,142,114,142,105,84,105,157,126,157,131,105,131,167,134,167,155,124,155,146,117,146,126,101,126,114,91,114,145,116,145,121,96,121,151,121,151,93,74,93,99,79,99,139,111,139,94,75,94,109,87,109,110,88,110,144,115,144,163,130,163,108,86,108,64,51,64,28,23,28,97,78,97,128,102,128,124,99,124,48,38,48,50,40,50,50,40,50,255,255,150,255,255,160,230,160,89,255,238,134,255,255,150,255,253,142,255,255,161,255,255,161,255,255,161,255,255,161,252,126,0,252,126,0,249,124,0,247,123,0,249,124,0,244,122,0,249,124,0,249,124,0,244,122,0,247,123,0,249,124,0,252,126,0,252,126,0,247,123,0,140,70,0,96,48,0,10,5,0,12,6,0,107,53,0,145,72,0,140,70,0,155,77,0,178,89,0,204,102,0,247,123,0,249,124,0,229,114,0,142,71,0,79,39,0,140,70,0,234,117,0,229,114,0,63,31,0,147,73,0,178,89,0,249,124,0,252,126,0,252,126,0,247,123,0,244,122,0,244,122,0,249,124,0,244,122,0,229,114,0,247,123,0,247,123,0,95,95,95,56,56,56,25,25,25,86,86,86,113,113,113,109,109,109,42,42,42,44,44,44,36,36,36,131,131,131,125,125,125,136,136,136,131,131,131,136,136,136,127,127,127,129,129,129,129,129,129,122,122,122,105,105,105,94,94,94,112,112,112,137,137,137,141,141,141,142,142,142,142,142,142,141,141,141,140,140,140,141,141,141,138,138,138,140,140,140,140,140,140,140,140,140,138,138,138,135,135,135,139,111,139,139,111,139,139,111,139,133,106,133,137,109,137,113,90,113,61,49,61,89,71,89,69,55,69,112,90,112,83,66,83,124,99,124,103,82,103,132,106,132,122,98,122,115,92,115,100,80,100,90,72,90,90,72,90,114,91,114,95,76,95,119,95,119,73,58,73,78,63,78,109,87,109,74,59,74,86,69,86,87,70,87,114,91,114,129,103,129,86,68,86,51,40,51,22,18,22,77,62,77,101,81,101,98,79,98,38,30,38,39,31,39,33,26,33,118,94,118,112,90,112,123,98,123,119,95,119,122,98,122,114,91,114,117,93,117,117,93,117,110,88,110,95,76,95,85,68,85,102,81,102,124,99,124,127,102,127,129,103,129,128,103,128,128,102,128,127,101,127,128,102,128,125,100,125,128,102,128,127,102,127,127,102,127,126,101,126,123,98,123,127,127,127,127,127,127,127,127,127,121,121,121,125,125,125,103,103,103,56,56,56,81,81,81,63,63,63,63,63,63,102,102,102,76,76,76,114,114,114,95,95,95,121,121,121,112,112,112,106,106,106,92,92,92,83,83,83,105,105,105,88,88,88,110,110,110,186,149,186,124,99,124,188,150,188,194,155,194,192,153,192,189,151,189,183,146,183,137,110,137,101,81,101,141,113,141,178,143,178,141,112,141,180,144,180,182,145,182,182,145,182,191,153,191,191,153,191,193,154,193,175,175,175,102,102,102,106,106,106,78,78,78,78,78,78,105,105,105,183,183,183,164,164,164,187,187,187,177,177,177,179,179,179,184,184,184,182,182,182,186,186,186,172,172,172,127,127,127,175,175,175,139,139,139,171,171,171,86,86,86,109,109,109,84,84,84,78,78,78,153,153,153,128,128,128,154,154,154,183,183,183,183,183,183,171,171,171,180,180,180,182,182,182,170,170,170,181,181,181,179,179,179,166,166,166,169,169,169,148,148,148,112,112,112,84,84,84,172,172,172,174,174,174,183,183,183,182,182,182,160,160,160,111,111,111,180,180,180,180,180,180,172,172,172,114,114,114,173,173,173,178,178,178,178,178,178,176,176,176,174,174,174,168,168,168,126,126,126,93,93,93,129,129,129,164,164,164,129,129,129,165,165,165,166,166,166,166,166,166,175,175,175,175,175,175,176,176,176,160,128,160,93,74,93,96,77,96,71,57,71,96,77,96,167,134,167,149,119,149,170,136,170,170,136,170,161,129,161,162,130,162,167,134,167,165,132,165,168,135,168,156,125,156,115,92,115,159,127,159,125,100,125,155,124,155,78,62,78,99,79,99,76,61,76,71,56,71,138,110,138,115,92,115,139,111,139,165,132,165,154,123,154,162,130,162,164,131,164,153,122,153,153,122,153,163,130,163,161,129,161,149,119,149,152,121,152,133,106,133,101,80,101,75,60,75,154,123,154,255,200,112,255,255,155,255,255,151,255,212,119,255,200,112,255,255,160,255,255,161,255,255,161,255,255,161,255,255,161,252,126,0,252,126,0,252,126,0,249,124,0,247,123,0,247,123,0,252,126,0,252,126,0,247,123,0,249,124,0,252,126,0,252,126,0,252,126,0,211,105,0,15,7,0,191,95,0,53,26,0,10,5,0,61,30,0,48,24,0,155,77,0,140,70,0,163,81,0,124,62,0,209,104,0,242,121,0,244,122,0,247,123,0,237,118,0,249,124,0,237,118,0,17,8,0,188,94,0,104,52,0,94,47,0,252,126,0,252,126,0,247,123,0,244,122,0,242,121,0,244,122,0,244,122,0,237,118,0,249,124,0,247,123,0,144,144,144,135,135,135,144,144,144,142,142,142,131,131,131,134,134,134,134,134,134,117,117,117,89,89,89,66,66,66,136,136,136,137,137,137,144,144,144,144,144,144,126,126,126,88,88,88,142,142,142,141,141,141,135,135,135,90,90,90,136,136,136,140,140,140,139,139,139,137,137,137,132,132,132,99,99,99,73,73,73,101,101,101,129,129,129,128,128,128,101,101,101,129,129,129,131,131,131,130,130,130,137,137,137,137,137,137,138,138,138,125,100,125,73,58,73,76,60,76,56,44,56,75,60,75,131,105,131,117,93,117,134,107,134,126,101,126,128,102,128,131,105,131,130,104,130,132,106,132,123,98,123,91,72,91,90,72,90,125,100,125,98,79,98,122,97,122,61,49,61,77,62,77,60,48,60,55,44,55,108,87,108,91,72,91,109,87,109,130,104,130,121,97,121,128,102,128,129,103,129,121,97,121,129,103,129,127,102,127,118,94,118,120,96,120,105,84,105,80,64,80,60,48,60,122,98,122,122,97,122,123,98,123,130,104,130,129,103,129,113,91,113,79,63,79,128,102,128,127,102,127,122,97,122,81,65,81,123,98,123,127,101,127,125,100,125,124,99,124,120,96,120,90,72,90,66,53,66,92,73,92,116,93,116,92,73,92,117,94,117,119,95,119,118,95,118,118,95,118,125,100,125,124,99,124,126,100,126,114,114,114,66,66,66,69,69,69,51,51,51,69,69,69,120,120,120,107,107,107,122,122,122,115,115,115,117,117,117,120,120,120,119,119,119,121,121,121,112,112,112,83,83,83,115,115,115,90,90,90,112,112,112,197,157,197,168,135,168,180,144,180,188,150,188,162,129,162,172,137,172,124,99,124,69,55,69,69,55,69,175,140,175,185,148,185,187,149,187,169,135,169,174,139,174,178,142,178,188,188,188,190,190,190,181,181,181,179,179,179,181,181,181,183,183,183,124,124,124,157,157,157,157,157,157,164,164,164,156,156,156,176,176,176,181,181,181,187,187,187,187,187,187,177,177,177,159,159,159,132,132,132,145,145,145,182,182,182,185,185,185,176,176,176,81,81,81,81,81,81,115,115,115,61,61,61,119,119,119,157,157,157,147,147,147,156,156,156,126,126,126,150,150,150,137,137,137,131,131,131,161,161,161,157,157,157,134,134,134,151,151,151,151,151,151,181,181,181,120,120,120,71,71,71,173,173,173,180,180,180,176,176,176,179,179,179,164,164,164,102,102,102,113,113,113,152,152,152,178,178,178,180,180,180,181,181,181,181,181,181,155,155,155,166,166,166,173,173,173,149,149,149,157,157,157,113,113,113,64,64,64,160,160,160,169,169,169,171,171,171,154,154,154,159,159,159,163,163,163,172,137,172,171,137,171,173,138,173,165,132,165,163,131,163,165,132,165,166,133,166,112,90,112,143,114,143,149,119,149,142,114,142,160,128,160,165,132,165,170,136,170,169,135,169,160,128,160,160,128,160,144,115,144,119,95,119,131,105,131,164,131,164,167,134,167,158,127,158,73,58,73,104,83,104,55,44,55,107,85,107,141,113,141,132,106,132,141,113,141,113,90,113,113,90,113,135,108,135,123,98,123,117,94,117,144,115,144,141,113,141,120,96,120,135,108,135,162,129,162,108,86,108,64,51,64,154,123,154,255,229,129,255,247,138,255,203,114,255,212,119,255,255,160,255,255,161,255,255,161,255,255,161,255,255,161,252,126,0,252,126,0,252,126,0,252,126,0,252,126,0,252,126,0,247,123,0,249,124,0,249,124,0,252,126,0,252,126,0,252,126,0,249,124,0,127,63,0,89,44,0,165,82,0,232,116,0,22,11,0,5,2,0,10,5,0,135,67,0,61,30,0,175,87,0,175,87,0,196,98,0,249,124,0,237,118,0,244,122,0,244,122,0,239,119,0,25,12,0,86,43,0,124,62,0,173,86,0,178,89,0,252,126,0,252,126,0,252,126,0,239,119,0,242,121,0,242,121,0,244,122,0,244,122,0,247,123,0,244,122,0,124,124,124,99,99,99,119,119,119,108,108,108,103,103,103,127,127,127,124,124,124,106,106,106,119,119,119,119,119,119,142,142,142,95,95,95,56,56,56,136,136,136,141,141,141,138,138,138,141,141,141,129,129,129,80,80,80,89,89,89,119,119,119,140,140,140,141,141,141,140,140,140,142,142,142,121,121,121,130,130,130,135,135,135,116,116,116,123,123,123,89,89,89,50,50,50,125,125,125,132,132,132,134,134,134,121,121,121,125,125,125,127,127,127,127,127,127,134,107,134,135,108,135,129,103,129,128,102,128,129,103,129,130,104,130,88,70,88,111,89,111,117,93,117,111,89,111,125,100,125,129,103,129,133,106,133,132,106,132,132,106,132,125,100,125,113,90,113,93,74,93,103,82,103,128,103,128,131,105,131,124,99,124,57,45,57,81,65,81,43,34,43,84,67,84,111,89,111,104,83,104,111,88,111,110,88,110,89,71,89,106,85,106,96,77,96,92,74,92,114,91,114,111,88,111,95,76,95,106,85,106,128,102,128,85,68,85,50,40,50,122,97,122,127,101,127,124,99,124,124,99,124,126,101,126,116,92,116,72,58,72,80,64,80,107,86,107,126,100,126,127,101,127,128,102,128,109,87,109,117,94,117,122,98,122,105,84,105,111,89,111,80,64,80,80,64,80,45,36,45,114,91,114,120,96,120,121,97,121,109,87,109,113,90,113,115,92,115,122,122,122,123,123,123,118,118,118,116,116,116,117,117,117,118,118,118,80,80,80,80,80,80,101,101,101,106,106,106,101,101,101,114,114,114,118,118,118,121,121,121,121,121,121,158,158,197,159,159,199,154,154,193,152,152,191,155,155,194,150,150,188,152,152,190,147,147,184,144,144,180,140,140,175,140,140,175,153,153,191,157,197,197,154,193,193,154,192,192,151,188,188,152,190,190,152,190,190,152,190,190,145,181,181,148,185,185,148,185,185,152,191,191,151,189,189,147,184,184,152,190,190,153,192,192,150,188,188,145,182,182,150,187,187,153,191,191,154,193,193,154,192,192,151,188,188,150,188,188,147,184,184,121,151,151,83,104,104,120,150,150,109,137,137,98,123,123,46,57,57,35,44,44,35,44,44,67,84,84,59,74,74,81,101,101,96,120,120,80,101,101,102,127,127,132,165,165,144,180,180,144,180,180,139,174,174,147,183,183,146,183,183,146,183,183,143,179,179,138,173,173,144,180,180,144,180,180,142,178,178,142,177,177,142,177,177,141,177,177,144,180,180,144,180,180,145,182,182,145,181,181,145,181,181,146,183,183,141,177,177,140,175,175,143,178,178,138,172,172,139,174,174,135,168,168,134,168,168,131,164,164,128,160,160,140,175,175,144,144,180,141,141,176,140,140,176,137,137,172,138,138,173,138,138,173,138,138,173,138,138,172,132,132,165,134,134,168,138,138,173,137,137,171,134,134,167,138,138,172,139,139,174,136,136,170,131,131,164,135,135,169,138,138,173,138,138,172,139,139,174,136,136,170,136,136,170,133,133,166,109,109,136,75,75,94,108,108,135,98,98,123,88,88,111,41,41,52,41,41,51,31,31,39,60,60,75,53,53,67,72,72,91,86,86,108,72,72,90,91,91,114,118,118,148,129,129,161,129,129,161,128,128,161,124,124,155,131,131,163,255,224,125,255,232,130,255,215,120,225,157,88,255,241,135,255,255,161,255,255,160,255,255,161,255,255,161,252,126,0,252,126,0,252,126,0,252,126,0,252,126,0,252,126,0,252,126,0,252,126,0,252,126,0,252,126,0,252,126,0,252,126,0,242,121,0,61,30,0,211,105,0,247,123,0,170,85,0,20,10,0,5,2,0,25,12,0,22,11,0,12,6,0,107,53,0,178,89,0,99,49,0,137,68,0,170,85,0,188,94,0,66,33,0,17,8,0,30,15,0,247,123,0,244,122,0,239,119,0,142,71,0,249,124,0,252,126,0,242,121,0,244,122,0,252,126,0,239,119,0,239,119,0,239,119,0,244,122,0,252,126,0,77,97,97,36,45,45,27,34,34,53,66,66,47,58,58,63,79,79,75,94,94,63,79,79,80,100,100,104,130,130,104,130,130,113,141,141,113,141,141,109,136,136,115,143,143,114,143,143,112,140,140,108,135,135,113,141,141,112,141,141,111,139,139,111,139,139,111,138,138,110,138,138,110,138,138,112,141,141,113,142,142,113,142,142,113,141,141,114,143,143,110,138,138,109,136,136,111,139,139,111,139,139,107,134,134,108,135,135,105,131,131,102,128,128,100,125,125,109,136,136,112,112,140,109,109,137,109,109,137,107,107,134,107,107,133,108,108,135,107,107,134,107,107,134,103,103,128,105,105,131,108,108,135,107,107,133,104,104,130,107,107,134,108,108,135,108,108,135,106,106,132,102,102,128,105,105,132,107,107,134,108,108,136,106,106,133,106,106,132,103,103,129,85,85,106,58,58,73,58,58,73,84,84,106,77,77,96,69,69,86,32,32,40,24,24,31,47,47,59,42,42,52,57,57,71,67,67,84,56,56,71,71,71,89,71,71,89,93,93,116,101,101,126,101,101,126,98,98,122,103,103,128,103,103,128,100,100,125,97,97,121,101,101,126,101,101,126,101,101,126,100,100,125,100,100,125,99,99,124,99,99,124,101,101,127,102,102,128,102,102,128,102,102,127,103,103,129,100,100,125,99,99,124,98,98,123,100,100,125,97,97,121,98,98,123,95,95,119,93,93,116,90,90,113,98,98,123,101,127,127,99,124,124,99,124,124,99,124,124,97,121,121,98,122,122,98,122,122,98,122,122,93,117,117,95,119,119,98,123,123,97,122,122,155,155,194,155,155,193,156,156,195,156,156,195,145,145,181,141,141,177,149,149,186,147,147,184,154,192,192,153,192,192,153,192,192,153,191,191,153,191,191,156,195,195,156,195,195,154,193,193,154,192,192,152,190,190,152,190,190,152,190,190,152,190,190,151,189,189,151,189,189,154,193,193,146,183,183,141,177,177,125,157,157,97,121,121,97,121,121,109,137,137,97,121,121,104,131,131,109,136,136,35,44,44,26,33,33,9,11,11,17,21,21,17,21,21,23,29,29,9,11,11,20,25,25,13,17,17,15,19,19,10,13,13,52,65,65,38,48,48,38,48,48,55,69,69,50,63,63,19,24,24,29,36,36,70,87,87,16,20,20,22,28,28,83,104,104,83,104,104,134,168,168,145,181,181,146,183,183,149,186,186,149,186,186,149,186,186,147,184,184,147,183,183,146,183,183,143,179,179,144,181,181,146,182,182,147,184,184,145,182,182,142,178,178,142,178,178,143,179,179,143,179,179,143,179,179,132,165,165,129,161,161,136,170,170,135,168,168,140,140,175,140,140,175,140,140,175,140,140,175,139,139,174,142,142,178,142,142,177,140,140,175,140,140,175,138,138,173,138,138,173,138,138,172,138,138,172,137,137,172,137,137,171,140,140,175,132,132,166,128,128,160,113,113,142,88,88,110,99,99,124,99,99,123,87,87,109,94,94,118,98,98,123,32,32,40,23,23,29,8,8,10,15,15,19,20,20,26,20,20,26,8,8,10,18,18,22,12,12,15,13,13,17,9,9,12,46,46,58,34,34,43,49,49,61,49,49,61,45,45,56,17,17,22,25,25,32,62,62,78,14,14,18,20,20,25,255,255,151,184,128,71,171,119,67,255,250,140,255,194,109,255,255,161,255,255,156,255,255,161,255,255,161,252,126,0,252,126,0,252,126,0,252,126,0,252,126,0,252,126,0,252,126,0,252,126,0,252,126,0,252,126,0,252,126,0,244,122,0,38,19,0,86,43,0,239,119,0,247,123,0,249,124,0,234,117,0,7,3,0,22,11,0,20,10,0,25,12,0,17,8,0,22,11,0,53,26,0,84,42,0,30,15,0,30,15,0,91,45,0,119,59,0,224,112,0,247,123,0,209,104,0,234,117,0,239,119,0,252,126,0,252,126,0,249,124,0,252,126,0,252,126,0,249,124,0,249,124,0,247,123,0,252,126,0,13,16,16,18,22,22,7,9,9,15,19,19,15,19,19,10,13,13,12,15,15,8,10,10,41,51,51,30,37,37,43,54,54,39,49,49,15,19,19,15,19,19,22,28,28,54,68,68,13,16,16,17,22,22,65,81,81,105,131,131,113,141,141,114,143,143,114,142,142,116,145,145,116,145,145,115,144,144,114,143,143,114,143,143,111,139,139,112,141,141,113,142,142,113,142,142,114,143,143,113,141,141,110,138,138,110,138,138,111,139,139,111,139,139,103,128,128,100,125,125,100,125,125,106,132,132,104,130,130,109,109,136,108,108,136,108,108,135,108,108,135,110,110,138,110,110,138,110,110,137,108,108,136,108,108,135,107,107,134,107,107,134,107,107,133,106,106,133,106,106,133,108,108,136,108,108,135,103,103,128,99,99,124,88,88,110,68,68,85,77,77,96,68,68,85,73,73,91,76,76,95,76,76,95,25,25,31,18,18,23,6,6,8,11,11,14,16,16,20,6,6,8,14,14,17,9,9,12,9,9,12,10,10,13,7,7,9,36,36,45,26,26,33,38,38,48,35,35,44,13,13,17,20,20,25,20,20,25,49,49,61,11,11,14,15,15,19,58,58,72,94,94,117,101,101,127,102,102,128,104,104,130,104,104,130,104,104,130,104,104,130,102,102,128,102,102,128,100,100,125,101,101,126,102,102,128,103,103,129,103,103,129,102,102,127,99,99,124,99,99,124,100,100,125,100,100,125,93,93,116,91,91,113,96,96,120,95,95,119,94,94,118,98,123,123,98,123,123,98,123,123,98,123,123,100,125,125,100,125,125,99,124,124,99,123,123,155,155,194,155,155,194,148,148,186,153,153,191,153,153,191,154,193,193,154,193,193,156,195,195,154,193,193,154,192,192,154,192,192,145,182,182,148,186,186,153,192,192,153,191,191,153,191,191,153,191,191,152,191,191,152,191,191,152,190,190,154,192,192,142,178,178,47,59,59,31,39,39,31,39,39,33,41,41,31,39,39,28,35,35,59,74,74,39,49,49,43,54,54,56,70,70,56,70,70,79,99,99,25,31,31,28,35,35,4,5,5,10,13,13,7,9,9,7,9,9,15,19,19,27,34,34,12,15,15,23,28,28,40,50,50,37,46,46,30,38,38,30,38,38,112,140,140,113,141,141,64,80,80,42,53,53,6,7,7,0,0,0,3,3,3,3,3,3,22,28,28,116,146,146,147,183,183,149,187,187,149,187,187,146,183,183,146,182,182,144,180,180,142,178,178,139,174,174,143,179,179,142,177,177,143,179,179,144,180,180,144,180,180,145,182,182,141,176,176,142,178,178,136,170,170,140,175,175,140,175,175,141,141,177,141,141,176,141,141,176,142,142,178,140,140,175,140,140,175,132,132,166,135,135,169,135,135,169,139,139,174,139,139,174,139,139,173,138,138,173,138,138,173,138,138,173,139,139,174,139,139,174,129,129,161,43,43,53,28,28,35,30,30,37,28,28,35,25,25,32,25,25,31,53,53,67,35,35,44,39,39,49,50,50,63,71,71,89,22,22,28,25,25,31,25,25,31,4,4,5,9,9,12,6,6,8,13,13,17,25,25,31,11,11,13,20,20,25,20,20,25,35,35,44,33,33,41,27,27,34,100,100,125,101,101,126,57,57,71,57,57,71,38,38,47,5,5,6,234,162,91,200,139,78,255,255,145,179,125,70,255,255,161,255,255,153,255,255,161,252,126,0,252,126,0,252,126,0,252,126,0,252,126,0,252,126,0,249,124,0,252,126,0,252,126,0,252,126,0,252,126,0,252,126,0,102,51,0,56,28,0,239,119,0,237,118,0,244,122,0,247,123,0,249,124,0,99,49,0,5,2,0,5,2,0,7,3,0,15,7,0,66,33,0,61,30,0,73,36,0,68,34,0,99,49,0,71,35,0,33,16,0,249,124,0,239,119,0,229,114,0,196,98,0,163,81,0,252,126,0,252,126,0,252,126,0,252,126,0,247,123,0,242,121,0,249,124,0,244,122,0,252,126,0,62,78,78,19,24,24,22,27,27,3,4,4,8,10,10,6,7,7,6,7,7,12,15,15,21,27,27,9,12,12,18,22,22,31,39,39,28,36,36,24,30,30,24,30,30,87,109,109,88,110,110,50,62,62,33,41,41,4,5,5,0,0,0,2,2,2,2,2,2,17,22,22,90,113,113,114,142,142,116,145,145,116,145,145,113,141,141,113,141,141,111,139,139,110,138,138,108,135,135,111,139,139,110,137,137,111,138,138,112,140,140,111,139,139,112,140,140,109,136,136,110,137,137,105,131,131,108,135,135,108,135,135,108,135,135,109,109,136,109,109,136,109,109,137,108,108,135,108,108,135,102,102,128,104,104,130,104,104,130,107,107,134,107,107,134,107,107,134,107,107,134,107,107,133,106,106,133,107,107,134,107,107,134,99,99,124,33,33,41,22,22,27,23,23,28,22,22,27,19,19,24,19,19,24,41,41,52,27,27,34,30,30,38,39,39,49,55,55,69,17,17,21,19,19,24,19,19,24,3,3,4,7,7,9,5,5,6,10,10,13,19,19,24,8,8,10,16,16,20,16,16,20,27,27,34,25,25,32,21,21,26,78,78,97,78,78,98,44,44,55,44,44,55,29,29,37,4,4,5,0,0,0,2,2,2,15,15,19,81,81,101,102,102,127,102,102,127,104,104,130,104,104,130,101,101,127,100,100,125,99,99,124,97,97,121,100,100,125,100,100,125,99,99,123,99,99,124,100,100,126,101,101,127,98,98,123,99,99,124,99,99,124,95,95,118,98,98,122,97,97,122,98,123,123,98,123,123,99,124,124,98,123,123,98,123,123,155,155,194,155,155,194,160,200,200,160,200,200,156,196,196,155,194,194,156,195,195,156,195,195,159,199,199,159,199,199,157,197,197,155,194,194,155,194,194,158,198,198,158,198,198,156,196,196,151,189,189,97,121,121,19,23,23,12,15,15,12,15,15,62,77,77,39,49,49,55,69,69,68,85,85,55,69,69,69,87,87,69,86,86,55,69,69,34,43,43,58,72,72,84,106,106,6,7,7,18,23,23,18,23,23,3,3,3,17,21,21,26,33,33,43,54,54,79,99,99,79,99,99,29,36,36,76,95,95,35,44,44,48,60,60,38,48,48,32,40,40,32,40,40,46,57,57,81,101,101,33,42,42,29,36,36,15,19,19,21,26,26,21,26,26,18,22,22,6,7,7,89,112,112,149,186,186,150,187,187,150,187,187,146,183,183,145,181,181,146,183,183,147,184,184,147,184,184,144,180,180,144,180,180,143,179,179,148,185,185,146,183,183,146,182,182,143,178,178,142,178,178,142,178,178,142,178,178,146,146,183,146,146,183,143,143,179,141,141,177,141,141,176,142,142,178,145,145,181,145,145,181,143,143,179,141,141,177,141,141,176,141,141,176,144,144,180,142,142,177,137,137,172,88,88,110,17,17,21,11,11,14,11,11,14,56,56,70,35,35,44,50,50,62,61,61,76,50,50,62,49,49,62,62,62,78,49,49,62,31,31,39,52,52,65,76,76,95,5,5,7,5,5,7,16,16,21,2,2,3,15,15,19,23,23,29,39,39,48,39,39,48,71,71,88,26,26,33,68,68,85,31,31,39,42,42,53,34,34,43,34,34,43,28,28,36,41,41,51,72,72,90,30,30,37,25,25,32,175,122,68,255,255,145,255,255,153,238,165,93,255,255,161,255,255,161,255,255,161,252,126,0,249,124,0,252,126,0,252,126,0,252,126,0,249,124,0,247,123,0,252,126,0,252,126,0,252,126,0,252,126,0,252,126,0,33,16,0,178,89,0,234,117,0,224,112,0,239,119,0,242,121,0,244,122,0,234,117,0,2,1,0,30,15,0,15,7,0,30,15,0,15,7,0,25,12,0,38,19,0,104,52,0,63,31,0,91,45,0,239,119,0,242,121,0,242,121,0,229,114,0,229,114,0,181,90,0,249,124,0,252,126,0,252,126,0,252,126,0,249,124,0,242,121,0,249,124,0,252,126,0,249,124,0,45,57,57,66,83,83,66,83,83,4,6,6,14,18,18,2,3,3,13,16,16,20,25,25,34,42,42,34,42,42,61,77,77,23,28,28,59,74,74,27,34,34,37,46,46,37,46,46,30,37,37,25,31,31,35,44,44,63,79,79,26,32,32,22,28,28,22,28,28,11,14,14,16,20,20,14,17,17,4,5,5,69,86,86,69,86,86,115,143,143,116,145,145,113,141,141,112,140,140,113,141,141,114,142,142,113,142,142,113,142,142,111,138,138,110,138,138,114,142,142,112,141,141,112,140,140,112,140,140,110,137,137,109,137,137,109,137,137,112,112,141,112,112,140,112,112,140,110,110,137,108,108,136,109,109,137,111,111,139,111,111,139,110,110,137,110,110,137,108,108,136,108,108,135,110,110,138,109,109,136,106,106,132,67,67,84,67,67,84,13,13,16,8,8,11,43,43,53,27,27,34,38,38,48,38,38,48,47,47,59,38,38,48,48,48,60,38,38,47,24,24,30,40,40,50,40,40,50,58,58,73,4,4,5,13,13,16,2,2,2,11,11,14,18,18,22,18,18,22,30,30,37,54,54,68,20,20,25,52,52,65,24,24,30,24,24,30,33,33,41,26,26,33,22,22,28,31,31,39,56,56,70,23,23,29,23,23,29,20,20,25,10,10,13,14,14,18,12,12,15,4,4,5,62,62,77,62,62,77,103,103,128,103,103,129,101,101,127,100,100,125,101,101,126,101,101,126,102,102,127,102,102,127,100,100,125,99,99,124,102,102,128,101,101,127,101,101,127,101,101,126,99,99,124,99,99,124,99,99,123,102,127,127,101,127,127,161,201,201,161,201,201,159,199,199,160,200,200,160,200,200,160,200,200,160,200,200,160,200,200,159,199,199,159,199,199,156,195,195,156,195,195,135,168,168,93,116,116,73,92,92,12,16,16,17,22,22,17,22,22,9,11,11,41,51,51,43,53,53,51,63,63,71,89,89,71,89,89,23,29,29,49,61,61,41,51,51,61,77,77,79,98,98,79,98,98,6,7,7,9,11,11,23,29,29,12,15,15,51,64,64,51,64,64,34,43,43,39,48,48,15,19,19,15,19,19,26,33,33,26,33,33,43,54,54,31,38,38,49,62,62,20,25,25,4,5,5,4,5,5,0,0,0,6,7,7,27,34,34,7,9,9,6,7,7,6,7,7,13,17,17,1,1,1,74,93,93,148,185,185,147,184,184,147,184,184,147,184,184,148,186,186,150,187,187,148,185,185,148,185,185,145,181,181,146,182,182,149,186,186,144,180,180,139,174,174,139,174,174,143,179,179,143,179,179,138,173,173,147,147,184,147,147,184,147,147,183,146,146,183,145,145,181,146,146,183,146,146,182,146,146,182,145,145,182,145,145,182,145,145,181,145,145,181,142,142,177,122,122,153,122,122,153,84,84,105,66,66,83,11,11,14,15,15,19,8,8,10,8,8,10,37,37,46,38,38,48,46,46,57,64,64,80,21,21,26,21,21,26,44,44,55,37,37,46,55,55,69,71,71,88,5,5,7,5,5,7,8,8,10,21,21,26,11,11,14,46,46,58,30,30,38,30,30,38,35,35,43,13,13,17,13,13,17,23,23,29,38,38,48,38,38,48,27,27,34,44,44,55,17,17,22,4,4,5,4,4,5,0,0,0,5,5,6,255,255,158,255,238,134,255,255,151,251,174,98,255,255,160,255,255,161,255,255,161,252,126,0,252,126,0,252,126,0,249,124,0,244,122,0,249,124,0,252,126,0,252,126,0,252,126,0,252,126,0,252,126,0,209,104,0,51,25,0,173,86,0,239,119,0,247,123,0,198,99,0,219,109,0,224,112,0,201,100,0,196,98,0,28,14,0,30,15,0,12,6,0,89,44,0,56,28,0,45,22,0,188,94,0,102,51,0,206,103,0,244,122,0,232,116,0,209,104,0,204,102,0,234,117,0,226,113,0,247,123,0,252,126,0,252,126,0,252,126,0,252,126,0,252,126,0,252,126,0,249,124,0,252,126,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18,23,23,9,12,12,40,50,50,26,33,33,26,33,33,30,38,38,12,15,15,12,15,15,20,25,25,33,42,42,33,42,42,24,30,30,38,48,48,15,19,19,3,4,4,0,0,0,0,0,0,4,5,5,21,26,26,5,7,7,4,5,5,10,13,13,10,13,13,1,1,1,57,72,72,113,142,142,113,142,142,113,141,141,113,141,141,114,142,142,115,144,144,113,142,142,111,139,139,112,140,140,112,140,140,114,142,142,110,138,138,107,133,133,110,137,137,110,137,137,110,137,137,106,132,132,113,113,141,112,112,141,112,112,140,111,111,139,111,111,139,112,112,140,111,111,139,111,111,139,111,111,139,111,111,139,111,111,139,111,111,138,108,108,135,93,93,117,64,64,81,51,51,64,51,51,64,8,8,11,12,12,15,6,6,8,28,28,35,28,28,35,29,29,37,35,35,44,49,49,61,16,16,20,34,34,42,33,33,42,28,28,35,42,42,53,54,54,68,4,4,5,6,6,8,6,6,8,16,16,20,8,8,10,35,35,44,23,23,29,26,26,33,26,26,33,10,10,13,10,10,13,18,18,22,30,30,37,21,21,26,21,21,26,34,34,42,13,13,17,3,3,3,0,0,0,4,4,5,4,4,5,19,19,23,5,5,6,4,4,5,9,9,11,1,1,1,1,1,1,51,51,64,101,101,127,101,101,127,101,101,127,102,102,128,102,102,128,103,103,129,102,102,127,100,100,125,100,100,126,102,102,128,102,102,128,99,99,124,96,96,120,99,99,124,99,99,124,161,201,201,161,201,201,161,201,201,161,201,201,160,201,201,160,200,200,160,200,200,158,198,198,158,198,198,153,192,192,148,185,185,62,78,78,16,20,20,9,12,12,9,12,12,27,34,34,27,34,34,41,52,52,12,16,16,12,16,16,14,17,17,59,73,73,68,85,85,70,87,87,70,87,87,138,173,173,149,186,186,90,113,113,17,21,21,9,11,11,9,11,11,11,13,13,14,17,17,29,37,37,48,61,61,48,60,60,95,119,119,105,131,131,103,129,129,112,140,140,112,140,140,128,160,160,115,144,144,96,120,120,77,97,97,73,91,91,72,91,91,110,137,137,89,112,112,20,25,25,6,7,7,6,7,7,10,13,13,10,13,13,3,3,3,122,153,153,122,153,153,150,187,187,151,189,189,151,189,189,147,184,184,144,180,180,144,180,180,144,180,180,144,180,180,145,181,181,149,187,187,149,186,186,146,182,182,138,173,173,145,182,182,148,185,185,148,148,185,148,148,185,148,148,185,147,147,184,146,146,182,147,147,184,147,147,184,146,146,183,146,146,183,146,146,183,146,146,182,146,146,182,145,145,182,144,144,180,139,139,174,134,134,168,57,57,71,57,57,71,14,14,18,8,8,10,24,24,30,24,24,30,24,24,30,37,37,47,11,11,14,12,12,16,53,53,66,53,53,66,61,61,77,63,63,78,124,124,155,134,134,167,81,81,101,81,81,101,15,15,19,8,8,10,9,9,12,12,12,15,12,12,15,26,26,33,43,43,54,85,85,107,94,94,117,93,93,117,92,92,115,100,100,125,114,114,142,102,102,128,86,86,107,85,85,107,69,69,86,64,64,81,97,97,122,79,79,99,79,79,99,255,226,127,255,247,138,255,255,151,255,255,156,255,255,161,255,255,161,252,126,0,252,126,0,252,126,0,252,126,0,249,124,0,252,126,0,252,126,0,252,126,0,252,126,0,252,126,0,249,124,0,214,107,0,124,62,0,234,117,0,198,99,0,247,123,0,244,122,0,229,114,0,165,82,0,244,122,0,239,119,0,73,36,0,66,33,0,163,81,0,89,44,0,107,53,0,155,77,0,96,48,0,114,57,0,232,116,0,242,121,0,244,122,0,234,117,0,226,113,0,186,93,0,165,82,0,242,121,0,247,123,0,247,123,0,249,124,0,247,123,0,237,118,0,244,122,0,252,126,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,87,109,109,87,108,108,99,123,123,89,111,111,74,93,93,60,75,75,56,70,70,56,70,70,84,106,106,69,86,86,15,19,19,4,5,5,4,5,5,8,10,10,8,10,10,2,2,2,94,117,117,94,117,117,115,143,143,116,145,145,115,144,144,113,141,141,110,138,138,110,138,138,110,138,138,110,137,137,111,139,139,114,143,143,114,142,142,111,139,139,105,132,132,111,139,139,113,141,141,113,113,141,113,113,141,113,113,141,112,112,141,111,111,139,112,112,140,112,112,140,112,112,140,111,111,139,111,111,139,111,111,139,111,111,139,111,111,139,109,109,137,106,106,133,102,102,128,43,43,54,43,43,54,11,11,13,6,6,8,18,18,23,18,18,23,18,18,23,28,28,35,8,8,11,9,9,12,40,40,50,40,40,50,47,47,58,48,48,60,95,95,119,102,102,128,62,62,77,62,62,77,11,11,14,6,6,8,7,7,9,9,9,12,9,9,12,20,20,25,33,33,41,65,65,82,72,72,90,72,72,90,70,70,88,77,77,96,87,87,109,79,79,98,66,66,82,66,66,82,53,53,66,50,50,62,75,75,94,61,61,76,61,61,76,13,13,17,4,4,5,7,7,9,7,7,9,7,7,9,2,2,2,84,84,105,102,102,128,103,103,129,103,103,129,103,103,129,101,101,126,99,99,123,99,99,123,98,98,123,98,98,123,99,99,124,102,102,128,161,202,202,161,202,202,161,201,201,161,201,201,161,201,201,161,201,201,160,201,201,107,133,133,89,111,111,14,18,18,14,18,18,6,8,8,3,4,4,4,6,6,11,14,14,11,14,14,25,32,32,20,26,26,141,176,176,157,196,196,157,196,196,158,198,198,158,198,198,158,197,197,158,197,197,157,197,197,157,197,197,157,196,196,157,196,196,157,196,196,157,196,196,156,196,196,156,195,195,156,195,195,156,195,195,156,195,195,155,194,194,155,194,194,155,194,194,155,194,194,155,194,194,155,193,193,154,193,193,154,193,193,152,191,191,152,190,190,152,190,190,149,186,186,110,137,137,10,13,13,10,13,13,6,7,7,69,86,86,149,187,187,152,190,190,152,190,190,150,188,188,147,184,184,147,184,184,147,183,183,145,181,181,145,181,181,137,171,171,143,179,179,143,178,178,145,182,182,147,183,183,148,185,185,148,185,185,148,185,185,144,181,181,149,149,186,148,148,186,148,148,185,148,148,185,148,148,185,148,148,185,147,147,184,147,147,184,147,147,184,147,147,184,147,147,183,146,146,183,146,146,183,146,146,182,146,146,182,97,97,121,80,80,101,13,13,16,13,13,16,5,5,7,2,2,3,4,4,5,10,10,12,10,10,12,23,23,29,18,18,23,127,127,159,141,141,177,141,141,176,142,142,178,142,142,178,142,142,177,142,142,177,141,141,177,141,141,176,141,141,176,141,141,176,140,140,176,140,140,175,140,140,175,140,140,175,139,139,174,139,139,174,139,139,174,139,139,173,138,138,173,138,138,173,138,138,173,138,138,172,137,137,172,137,137,172,137,137,171,137,137,171,135,135,169,135,135,169,132,132,165,255,197,111,255,255,153,255,255,151,255,244,137,255,255,161,255,255,161,252,126,0,252,126,0,252,126,0,252,126,0,252,126,0,252,126,0,252,126,0,252,126,0,247,123,0,170,85,0,142,71,0,214,107,0,175,87,0,229,114,0,239,119,0,209,104,0,173,86,0,181,90,0,145,72,0,165,82,0,232,116,0,114,57,0,51,25,0,79,39,0,160,80,0,119,59,0,73,36,0,63,31,0,226,113,0,237,118,0,226,113,0,237,118,0,181,90,0,216,108,0,175,87,0,198,99,0,127,63,0,191,95,0,183,91,0,186,93,0,229,114,0,234,117,0,247,123,0,249,124,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,117,146,146,114,143,143,114,142,142,84,105,105,8,10,10,4,5,5,53,66,66,53,66,66,114,142,142,116,145,145,115,143,143,112,140,140,112,140,140,112,140,140,110,138,138,110,138,138,104,130,130,104,130,130,109,136,136,111,138,138,112,140,140,113,141,141,112,141,141,112,140,140,110,137,137,113,113,141,113,113,141,113,113,141,112,112,141,112,112,140,112,112,140,112,112,140,112,112,140,112,112,140,111,111,139,111,111,139,111,111,139,111,111,139,111,111,139,111,111,138,73,73,92,73,73,92,61,61,76,10,10,12,4,4,5,2,2,2,2,2,2,3,3,4,7,7,9,17,17,22,14,14,17,14,14,17,96,96,121,107,107,134,108,108,135,108,108,135,108,108,135,108,108,135,108,108,135,107,107,134,107,107,134,107,107,134,107,107,134,107,107,134,107,107,133,107,107,133,106,106,133,106,106,133,106,106,133,106,106,133,106,106,132,106,106,132,106,106,132,105,105,132,105,105,132,105,105,132,105,105,131,105,105,131,104,104,130,104,104,130,101,101,127,101,101,127,75,75,93,7,7,9,4,4,5,47,47,59,47,47,59,102,102,127,104,104,130,102,102,128,102,102,128,100,100,125,100,100,125,99,99,124,99,99,123,99,99,123,162,202,202,162,202,202,158,198,198,158,198,198,124,155,155,119,148,148,22,28,28,22,28,28,29,36,36,4,6,6,17,22,22,14,18,18,14,18,18,12,16,16,14,18,18,96,121,121,96,121,121,145,181,181,156,195,195,159,199,199,157,196,196,157,196,196,155,194,194,150,188,188,156,196,196,156,195,195,156,195,195,156,195,195,156,195,195,157,196,196,157,196,196,157,196,196,157,196,196,156,196,196,156,195,195,156,195,195,156,195,195,156,195,195,154,193,193,154,192,192,146,182,182,139,174,174,119,149,149,119,148,148,84,105,105,107,134,134,98,122,122,14,17,17,14,17,17,54,68,68,144,180,180,152,190,190,153,191,191,153,191,191,149,187,187,145,181,181,146,183,183,146,182,182,133,167,167,139,174,174,147,184,184,147,183,183,146,183,183,148,185,185,144,181,181,147,184,184,147,184,184,147,184,184,148,185,185,146,146,183,146,146,183,146,146,183,149,149,186,147,147,184,148,148,186,148,148,185,148,148,185,148,148,185,146,146,183,146,146,183,146,146,182,147,147,184,147,147,184,144,144,180,143,143,179,112,112,140,107,107,134,20,20,25,26,26,33,26,26,33,4,4,5,16,16,20,13,13,16,13,13,16,11,11,14,13,13,16,87,87,109,130,130,163,130,130,163,140,140,175,143,143,179,141,141,176,141,141,176,139,139,174,135,135,168,140,140,175,140,140,175,140,140,175,139,139,174,139,139,174,140,140,176,140,140,175,140,140,175,140,140,175,139,139,174,139,139,174,139,139,174,139,139,174,138,138,173,137,137,171,130,130,162,129,129,162,124,124,155,105,105,132,75,75,93,74,74,93,95,95,119,87,87,108,255,255,148,255,255,156,255,235,132,255,255,161,255,255,161,252,126,0,252,126,0,252,126,0,252,126,0,252,126,0,252,126,0,252,126,0,224,112,0,109,54,0,153,76,0,214,107,0,137,68,0,145,72,0,237,118,0,239,119,0,186,93,0,145,72,0,188,94,0,198,99,0,196,98,0,216,108,0,244,122,0,96,48,0,43,21,0,168,84,0,112,56,0,56,28,0,124,62,0,237,118,0,209,104,0,186,93,0,242,121,0,201,100,0,170,85,0,242,121,0,244,122,0,234,117,0,175,87,0,181,90,0,94,47,0,89,44,0,206,103,0,232,116,0,239,119,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,116,146,146,114,142,142,114,142,142,110,137,137,111,139,139,101,127,127,101,127,127,106,132,132,111,139,139,111,139,139,112,140,140,112,140,140,109,137,137,112,140,140,111,139,139,111,139,139,112,140,140,111,111,139,111,111,138,113,113,141,113,113,141,111,111,139,112,112,140,112,112,140,112,112,140,112,112,140,110,110,138,110,110,138,111,111,139,111,111,139,111,111,139,108,108,136,85,85,106,85,85,106,81,81,102,15,15,19,20,20,25,3,3,4,3,3,4,12,12,15,9,9,12,8,8,11,9,9,12,9,9,12,66,66,82,99,99,123,106,106,133,106,106,133,108,108,135,107,107,134,106,106,132,102,102,128,102,102,128,106,106,133,106,106,133,106,106,133,106,106,132,106,106,132,107,107,133,106,106,133,106,106,133,106,106,133,106,106,133,106,106,132,106,106,132,106,106,132,105,105,132,104,104,130,99,99,124,94,94,118,94,94,118,80,80,101,57,57,71,73,73,91,73,73,91,66,66,83,9,9,11,36,36,46,98,98,122,97,97,122,103,103,128,104,104,130,101,101,127,101,101,127,98,98,123,99,99,124,162,203,203,159,198,198,113,141,141,9,12,12,9,12,12,6,8,8,9,12,12,19,24,24,19,24,24,30,38,38,27,34,34,68,85,85,51,64,64,51,64,64,97,121,121,111,139,139,132,165,165,132,165,165,137,171,171,135,169,169,112,140,140,112,140,140,125,156,156,147,184,184,110,138,138,110,138,138,49,62,62,67,83,83,47,59,59,47,59,59,73,91,91,143,179,179,151,188,188,149,186,186,149,186,186,52,65,65,11,13,13,75,94,94,75,94,94,94,118,118,80,100,100,74,92,92,73,92,92,62,78,78,81,101,101,43,54,54,43,54,54,150,187,187,149,187,187,149,187,187,144,181,181,144,180,180,136,170,170,144,180,180,142,178,178,142,178,178,146,183,183,145,181,181,141,177,177,141,177,177,143,178,178,147,184,184,145,182,182,145,181,181,148,185,185,145,181,181,148,185,185,150,150,188,150,150,188,150,150,188,150,150,187,147,147,183,146,146,183,146,146,183,147,147,184,147,147,184,147,147,184,148,148,185,148,148,185,148,148,185,148,148,185,147,147,184,147,147,184,144,144,180,144,144,180,102,102,128,8,8,11,5,5,7,8,8,11,8,8,11,17,17,22,27,27,34,24,24,31,24,24,31,61,61,76,46,46,58,87,87,109,87,87,109,100,100,125,119,119,149,123,123,154,123,123,153,121,121,151,101,101,126,112,112,140,132,132,165,132,132,165,99,99,123,44,44,55,60,60,75,59,59,74,42,42,53,65,65,81,127,127,159,127,127,159,134,134,168,132,132,166,46,46,58,46,46,58,9,9,12,67,67,84,84,84,105,71,71,89,71,71,89,65,65,81,55,55,69,72,72,90,72,72,90,255,255,151,255,255,148,209,145,81,255,255,161,252,126,0,252,126,0,252,126,0,252,126,0,252,126,0,249,124,0,242,121,0,163,81,0,163,81,0,183,91,0,168,84,0,221,110,0,219,109,0,145,72,0,214,107,0,178,89,0,224,112,0,147,73,0,237,118,0,239,119,0,216,108,0,201,100,0,244,122,0,242,121,0,183,91,0,86,43,0,165,82,0,132,66,0,211,105,0,242,121,0,249,124,0,153,76,0,247,123,0,237,118,0,247,123,0,239,119,0,247,123,0,234,117,0,216,108,0,76,38,0,117,58,0,237,118,0,216,108,0,224,112,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,107,134,134,108,135,135,111,139,139,110,137,137,110,137,137,112,140,140,109,137,137,111,139,139,111,139,139,113,113,142,113,113,141,113,113,141,110,110,138,110,110,138,110,110,138,111,111,139,111,111,139,111,111,139,112,112,140,112,112,140,111,111,139,111,111,139,111,111,139,111,111,139,108,108,136,108,108,135,77,77,96,6,6,8,4,4,5,6,6,8,6,6,8,13,13,16,21,21,26,18,18,23,18,18,23,46,46,58,35,35,44,66,66,82,66,66,82,75,75,94,90,90,112,93,93,116,93,93,116,91,91,114,76,76,95,85,85,106,100,100,125,100,100,125,74,74,93,33,33,42,45,45,56,45,45,56,32,32,40,49,49,62,96,96,121,96,96,121,102,102,127,100,100,126,35,35,44,35,35,44,7,7,9,51,51,64,64,64,80,63,63,79,54,54,67,49,49,62,42,42,53,55,55,68,55,55,68,29,29,37,101,101,126,101,101,126,101,101,126,101,101,126,97,97,122,92,92,115,14,18,18,14,18,18,19,24,24,4,6,6,1,2,2,1,2,2,60,75,75,39,49,49,17,22,22,17,22,22,61,77,77,143,179,179,146,183,183,146,182,182,146,182,182,111,139,139,59,74,74,59,74,74,61,76,76,37,46,46,11,14,14,11,14,14,99,124,124,148,185,185,102,128,128,102,128,128,142,178,178,89,112,112,113,142,142,113,141,141,153,191,191,119,149,149,47,59,59,47,59,59,41,51,51,14,17,17,9,11,11,9,11,11,109,136,136,112,140,140,67,84,84,67,84,84,86,108,108,96,120,120,151,188,188,150,188,188,150,188,188,153,192,192,147,183,183,146,183,183,140,175,175,135,169,169,123,153,153,122,153,153,141,176,176,141,176,176,134,168,168,134,168,168,145,181,181,148,185,185,148,185,185,147,184,184,144,180,180,141,176,176,148,186,186,148,185,185,151,151,189,151,151,189,151,151,188,147,147,184,144,144,180,148,148,186,148,148,185,150,150,187,148,148,185,148,148,185,147,147,184,149,149,186,149,149,186,148,148,186,148,148,185,146,146,183,142,142,177,85,85,106,85,85,106,13,13,16,17,17,22,4,4,5,4,4,5,1,1,1,54,54,68,35,35,44,35,35,44,16,16,20,55,55,69,129,129,161,128,128,161,131,131,164,131,131,164,100,100,125,100,100,125,53,53,67,55,55,68,33,33,41,33,33,41,10,10,12,89,89,111,132,132,165,132,132,165,91,91,114,127,127,159,80,80,100,79,79,99,101,101,126,136,136,170,106,106,133,106,106,132,42,42,53,36,36,45,12,12,15,12,12,15,8,8,10,96,96,121,99,99,124,99,99,124,60,60,75,76,76,95,84,84,106,255,255,151,255,255,150,255,180,101,255,255,161,252,126,0,252,126,0,252,126,0,252,126,0,247,123,0,214,107,0,132,66,0,124,62,0,153,76,0,229,114,0,244,122,0,226,113,0,211,105,0,234,117,0,175,87,0,188,94,0,188,94,0,102,51,0,216,108,0,239,119,0,237,118,0,249,124,0,247,123,0,249,124,0,224,112,0,229,114,0,153,76,0,178,89,0,244,122,0,249,124,0,242,121,0,244,122,0,214,107,0,168,84,0,237,118,0,249,124,0,214,107,0,239,119,0,247,123,0,170,85,0,188,94,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,137,137,111,139,139,111,139,139,111,139,139,108,136,136,106,133,133,106,132,132,111,139,139,114,114,142,113,113,142,113,113,142,111,111,139,108,108,135,108,108,135,111,111,139,112,112,141,111,111,139,111,111,139,111,111,138,112,112,140,111,111,139,111,111,139,111,111,139,110,110,137,106,106,133,106,106,133,63,63,79,10,10,12,13,13,16,13,13,16,3,3,4,1,1,1,41,41,51,41,41,51,26,26,33,12,12,15,41,41,52,41,41,52,96,96,121,99,99,123,98,98,123,98,98,123,75,75,94,40,40,50,41,41,51,41,41,51,25,25,31,7,7,9,67,67,84,67,67,84,99,99,124,69,69,86,96,96,120,96,96,120,60,60,75,76,76,95,103,103,129,103,103,129,80,80,100,32,32,40,27,27,34,27,27,34,9,9,12,6,6,8,73,73,91,73,73,91,75,75,94,45,45,57,58,58,72,58,58,72,64,64,80,101,101,126,101,101,126,101,101,126,0,0,0,4,6,6,4,6,6,9,12,12,13,16,16,13,16,16,59,73,73,68,85,85,107,134,134,107,134,134,142,177,177,161,201,201,159,199,199,159,199,199,159,199,199,144,180,180,113,142,142,113,141,141,115,143,143,114,143,143,114,143,143,147,183,183,156,195,195,154,193,193,154,193,193,140,175,175,110,138,138,149,186,186,149,186,186,157,196,196,150,188,188,129,161,161,129,161,161,105,131,131,68,85,85,68,85,85,106,133,133,138,172,172,150,188,188,150,188,188,99,124,124,143,179,179,151,189,189,151,189,189,149,187,187,151,189,189,152,190,190,152,190,190,147,184,184,139,174,174,139,174,174,147,183,183,145,181,181,149,187,187,149,186,186,146,182,182,136,170,170,139,174,174,139,174,174,139,174,174,139,173,173,145,181,181,145,181,181,147,184,184,152,152,190,152,152,190,151,151,189,150,150,187,145,145,181,145,145,181,148,148,185,150,150,188,150,150,188,150,150,188,150,150,187,150,150,187,149,149,187,149,149,187,146,146,183,144,144,180,144,144,180,145,145,182,84,84,105,5,5,7,5,5,7,4,4,5,0,0,0,4,4,5,4,4,5,8,8,11,11,11,14,53,53,66,53,53,66,62,62,77,97,97,121,97,97,121,127,127,159,145,145,181,143,143,179,143,143,179,143,143,178,129,129,162,101,101,127,101,101,127,103,103,128,102,102,128,131,131,164,131,131,164,139,139,174,138,138,172,125,125,156,124,124,156,98,98,123,133,133,166,132,132,166,139,139,174,133,133,167,115,115,143,114,114,143,93,93,116,60,60,75,94,94,118,94,94,118,122,122,152,133,133,166,88,88,110,88,88,110,127,127,158,133,133,167,255,255,143,138,96,53,255,255,161,252,126,0,252,126,0,242,121,0,249,124,0,206,103,0,155,77,0,191,95,0,221,110,0,237,118,0,216,108,0,237,118,0,219,109,0,219,109,0,163,81,0,122,61,0,145,72,0,181,90,0,204,102,0,206,103,0,244,122,0,229,114,0,214,107,0,209,104,0,224,112,0,244,122,0,168,84,0,119,59,0,132,66,0,96,48,0,244,122,0,239,119,0,224,112,0,198,99,0,196,98,0,247,123,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,102,128,128,104,131,131,104,130,130,104,130,130,104,130,130,108,136,136,111,138,138,110,138,138,114,114,142,113,113,142,113,113,142,112,112,140,108,108,136,111,111,138,110,110,138,112,112,141,112,112,140,112,112,140,112,112,140,112,112,140,112,112,140,109,109,137,109,109,136,108,108,135,109,109,136,109,109,136,62,62,78,4,4,5,3,3,4,3,3,4,0,0,0,3,3,4,6,6,8,6,6,8,8,8,11,39,39,49,46,46,58,46,46,58,72,72,91,95,95,119,95,95,119,108,108,136,107,107,134,107,107,134,107,107,134,97,97,121,76,76,95,77,77,96,77,77,96,77,77,96,98,98,123,105,105,131,105,105,131,103,103,129,94,94,117,93,93,117,74,74,92,100,100,125,105,105,131,105,105,131,100,100,126,86,86,108,70,70,88,70,70,88,45,45,57,71,71,89,92,92,115,92,92,115,100,100,126,66,66,83,66,66,83,96,96,120,6,8,8,6,8,8,6,8,8,11,14,14,9,12,12,9,12,12,21,26,26,114,143,143,144,180,180,144,180,180,160,200,200,156,196,196,155,193,193,155,193,193,153,191,191,153,191,191,152,191,191,159,199,199,160,201,201,160,200,200,160,200,200,158,198,198,153,192,192,153,191,191,124,155,155,124,155,155,146,183,183,146,183,183,133,166,166,151,188,188,150,188,188,155,194,194,156,196,196,147,184,184,147,183,183,138,173,173,121,151,151,90,113,113,90,113,113,146,182,182,155,194,194,155,194,194,150,188,188,145,181,181,140,175,175,140,175,175,137,171,171,137,171,171,136,171,171,146,182,182,149,186,186,150,188,188,150,187,187,145,181,181,140,175,175,140,175,175,143,179,179,138,173,173,136,171,171,136,170,170,139,174,174,144,180,180,153,153,191,152,152,191,151,151,188,151,151,188,150,150,188,152,152,190,151,151,189,151,151,189,151,151,189,149,149,187,149,149,187,149,149,186,150,150,188,150,150,188,148,148,185,148,148,185,149,149,187,149,149,187,149,149,186,149,149,186,144,144,180,99,99,124,99,99,123,17,17,22,26,26,33,5,5,7,5,5,7,5,5,7,10,10,13,10,10,13,8,8,11,19,19,24,103,103,129,103,103,129,129,129,162,144,144,180,144,144,180,140,140,176,139,139,174,137,137,171,137,137,171,137,137,171,142,142,178,142,142,178,143,143,179,143,143,179,141,141,177,141,141,176,137,137,171,110,110,138,110,110,138,110,110,138,130,130,163,118,118,148,118,118,148,134,134,167,138,138,172,139,139,174,139,139,173,130,130,162,123,123,153,122,122,153,107,107,133,80,80,100,129,129,161,128,128,161,137,137,171,255,232,130,167,116,65,255,255,161,252,126,0,249,124,0,232,116,0,158,79,0,145,72,0,229,114,0,226,113,0,244,122,0,242,121,0,247,123,0,216,108,0,168,84,0,183,91,0,226,113,0,114,57,0,150,75,0,99,49,0,193,96,0,224,112,0,209,104,0,237,118,0,234,117,0,183,91,0,175,87,0,211,105,0,181,90,0,247,123,0,229,114,0,201,100,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,105,131,131,105,131,131,107,134,134,103,129,129,102,127,127,102,127,127,104,130,130,107,134,134,107,134,134,114,114,142,112,112,141,112,112,140,112,112,140,113,113,141,113,113,141,113,113,141,113,113,141,111,111,139,111,111,139,111,111,139,112,112,140,112,112,140,110,110,138,110,110,138,111,111,139,111,111,139,111,111,139,111,111,139,107,107,134,73,73,92,73,73,92,13,13,16,20,20,25,20,20,25,4,4,5,4,4,5,7,7,9,7,7,9,6,6,8,14,14,17,77,77,96,77,77,96,96,96,121,107,107,134,107,107,134,105,105,131,103,103,129,102,102,128,102,102,128,102,102,128,106,106,133,106,106,133,107,107,134,107,107,134,106,106,132,106,106,132,102,102,128,83,83,103,83,83,103,82,82,103,97,97,122,89,89,111,89,89,111,100,100,125,103,103,129,104,104,130,104,104,130,98,98,122,92,92,115,92,92,115,80,80,100,23,28,28,39,49,49,39,49,49,39,49,49,49,61,61,49,61,61,121,152,152,159,199,199,160,201,201,160,201,201,162,202,202,162,202,202,162,202,202,161,202,202,161,202,202,161,202,202,161,201,201,161,201,201,159,199,199,159,199,199,141,176,176,137,172,172,137,172,172,81,101,101,148,186,186,142,177,177,142,177,177,69,86,86,109,137,137,109,136,136,151,189,189,139,174,174,139,174,174,131,164,164,76,96,96,136,170,170,135,169,169,156,195,195,157,197,197,157,197,197,152,191,191,146,182,182,142,178,178,142,178,178,147,184,184,155,193,193,154,193,193,151,189,189,145,181,181,144,181,181,141,177,177,149,186,186,146,182,182,145,182,182,133,166,166,147,183,183,146,183,183,138,173,173,132,165,165,138,173,173,138,172,172,153,153,192,151,151,189,151,151,189,151,151,189,151,151,189,152,152,190,152,152,190,150,150,188,149,149,186,148,148,186,151,151,189,151,151,189,151,151,189,151,151,188,150,150,188,150,150,188,150,150,188,150,150,187,150,150,187,149,149,187,149,149,187,149,149,186,141,141,177,141,141,176,99,99,124,25,25,31,25,25,31,28,28,35,20,20,26,20,20,26,35,35,44,35,35,44,44,44,55,44,44,55,109,109,137,143,143,179,143,143,179,144,144,180,145,145,182,145,145,181,145,145,181,145,145,181,144,144,181,144,144,180,144,144,180,144,144,180,143,143,179,142,142,177,126,126,157,123,123,153,122,122,153,72,72,90,132,132,165,132,132,165,126,126,157,61,61,77,97,97,121,97,97,121,134,134,167,123,123,154,123,123,154,116,116,145,67,67,84,67,67,84,120,120,150,138,138,172,139,139,174,139,139,173,255,255,155,255,235,132,255,255,158,252,126,0,114,57,0,89,44,0,84,42,0,242,121,0,244,122,0,232,116,0,234,117,0,239,119,0,239,119,0,214,107,0,193,96,0,168,84,0,219,109,0,224,112,0,142,71,0,107,53,0,81,40,0,158,79,0,196,98,0,244,122,0,122,61,0,237,118,0,237,118,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,111,139,139,108,136,136,99,124,124,99,124,124,109,137,137,103,129,129,98,123,123,98,123,123,103,128,128,114,114,143,114,114,142,113,113,141,112,112,141,112,112,140,112,112,140,113,113,141,112,112,140,112,112,140,110,110,138,112,112,141,112,112,140,112,112,140,112,112,140,112,112,140,112,112,140,111,111,139,111,111,139,111,111,139,111,111,139,111,111,139,111,111,138,110,110,138,105,105,131,73,73,92,73,73,92,18,18,23,21,21,26,15,15,19,15,15,19,26,26,33,26,26,33,26,26,33,33,33,41,81,81,101,81,81,101,106,106,133,107,107,134,108,108,135,108,108,135,108,108,135,108,108,135,107,107,134,107,107,134,107,107,134,107,107,134,107,107,134,106,106,132,94,94,117,94,94,117,91,91,114,53,53,67,53,53,67,98,98,123,94,94,118,46,46,57,46,46,57,72,72,90,100,100,125,100,100,125,92,92,116,44,55,55,72,91,91,72,91,91,102,128,128,79,99,99,79,99,99,143,179,179,151,189,189,151,189,189,159,199,199,162,203,203,162,203,203,162,202,202,162,202,202,157,196,196,157,196,196,114,143,143,37,46,46,37,46,46,63,79,79,27,34,34,27,34,34,13,16,16,30,38,38,30,38,38,71,89,89,121,151,151,137,171,171,137,171,171,133,167,167,90,112,112,90,112,112,115,144,144,154,192,192,154,192,192,158,198,198,158,198,198,158,198,198,158,197,197,156,195,195,153,191,191,152,191,191,156,195,195,151,188,188,150,188,188,133,166,166,145,182,182,145,182,182,150,187,187,146,183,183,146,183,183,144,181,181,146,182,182,144,180,180,144,180,180,147,184,184,148,186,186,148,185,185,145,181,181,154,154,193,154,154,192,154,154,192,152,152,190,152,152,190,152,152,190,153,153,191,153,153,191,152,152,191,152,152,190,149,149,186,149,149,186,152,152,190,151,151,189,151,151,189,151,151,189,151,151,189,151,151,188,150,150,188,150,150,188,150,150,188,150,150,187,150,150,187,149,149,187,149,149,187,147,147,184,131,131,163,131,131,163,42,42,52,21,21,26,14,14,18,14,14,18,40,40,50,65,65,82,65,65,81,92,92,115,71,71,89,71,71,89,128,128,161,136,136,170,135,135,169,143,143,178,145,145,182,145,145,181,145,145,181,145,145,181,140,140,175,140,140,175,102,102,127,33,33,41,33,33,41,56,56,70,24,24,30,24,24,30,11,11,14,27,27,34,63,63,79,63,63,79,107,107,134,121,121,152,121,121,152,118,118,148,79,79,99,79,79,99,102,102,127,136,136,170,140,140,175,140,140,175,139,139,174,139,139,174,139,139,174,255,255,150,255,255,145,132,66,0,137,68,0,102,51,0,122,61,0,239,119,0,244,122,0,234,117,0,244,122,0,247,123,0,232,116,0,232,116,0,209,104,0,173,86,0,239,119,0,237,118,0,247,123,0,84,42,0,188,94,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,108,135,135,107,134,134,108,136,136,107,134,134,107,134,134,109,136,136,110,138,138,108,135,135,107,134,134,114,114,143,114,114,143,114,114,142,112,112,141,112,112,141,112,112,140,113,113,142,113,113,141,113,113,141,113,113,141,110,110,138,112,112,140,112,112,140,112,112,140,112,112,140,112,112,140,111,111,139,111,111,139,111,111,139,111,111,139,111,111,139,111,111,138,111,111,138,110,110,138,109,109,136,109,109,136,97,97,121,31,31,38,31,31,38,15,15,19,11,11,13,11,11,13,29,29,37,48,48,60,68,68,85,68,68,85,52,52,66,95,95,119,95,95,119,100,100,126,106,106,132,106,106,132,108,108,135,107,107,134,107,107,134,107,107,134,104,104,130,75,75,94,75,75,94,24,24,31,42,42,52,42,42,52,18,18,22,8,8,10,8,8,10,20,20,25,47,47,59,47,47,58,80,80,100,81,101,101,81,101,101,87,109,109,97,122,122,97,122,122,124,155,155,153,192,192,153,191,191,161,202,202,163,203,203,163,203,203,162,203,203,162,203,203,154,192,192,154,192,192,155,194,194,157,196,196,157,196,196,153,192,192,143,179,179,143,179,179,151,189,189,154,193,193,154,193,193,151,188,188,121,152,152,121,152,152,116,145,145,124,155,155,124,155,155,156,195,195,159,199,199,159,199,199,159,199,199,159,199,199,157,196,196,157,196,196,155,194,194,155,194,194,155,194,194,158,197,197,158,197,197,157,197,197,151,189,189,152,191,191,152,190,190,152,190,190,150,188,188,150,188,188,144,180,180,150,187,187,150,187,187,143,179,179,146,183,183,146,183,183,150,188,188,150,188,188,155,155,194,155,155,193,154,154,193,154,154,193,154,154,193,151,151,189,152,152,190,152,152,190,152,152,190,148,148,186,148,148,185,151,151,189,151,151,189,151,151,189,147,147,184,150,150,188,150,150,188,148,148,186,150,150,187,150,150,187,151,151,189,151,151,188,150,150,188,150,150,188,149,149,186,138,138,172,138,138,172,22,22,28,25,25,32,25,25,32,4,4,5,33,33,41,33,33,41,75,75,93,59,59,74,59,59,74,73,73,91,79,79,98,79,79,98,87,87,109,111,111,139,111,111,139,137,137,172,144,144,181,144,144,180,146,146,182,145,145,182,145,145,181,145,145,181,137,137,172,139,139,173,138,138,173,140,140,175,136,136,171,136,136,170,127,127,159,134,134,168,134,134,168,137,137,171,134,134,167,133,133,167,107,107,134,103,103,129,103,103,129,110,110,137,138,138,173,138,138,172,140,140,176,140,140,175,140,140,175,140,140,175,138,138,173,136,136,171,255,255,145,127,63,0,168,84,0,201,100,0,244,122,0,163,81,0,160,80,0,204,102,0,204,102,0,229,114,0,237,118,0,229,114,0,237,118,0,216,108,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,111,139,139,106,133,133,111,139,139,111,139,139,106,133,133,108,135,135,108,135,135,111,139,139,111,139,139,111,139,139,114,114,143,114,114,143,114,114,143,114,114,142,111,111,139,112,112,140,112,112,140,112,112,140,109,109,137,109,109,137,111,111,139,111,111,139,111,111,139,109,109,136,111,111,139,111,111,138,109,109,137,110,110,138,110,110,138,111,111,139,111,111,139,111,111,139,111,111,138,109,109,137,101,101,127,101,101,127,16,16,20,18,18,23,18,18,23,3,3,4,24,24,30,24,24,30,55,55,69,44,44,55,44,44,55,54,54,67,58,58,72,58,58,72,64,64,81,82,82,102,82,82,102,101,101,127,107,107,133,107,107,133,107,107,134,107,107,134,107,107,134,107,107,134,102,102,127,102,102,128,102,102,128,103,103,129,101,101,126,101,101,126,94,94,118,100,100,125,99,99,124,91,114,114,106,132,132,139,174,174,139,174,174,140,176,176,155,194,194,155,194,194,158,198,198,161,202,202,161,202,202,161,202,202,92,115,115,75,94,94,75,94,94,37,47,47,54,67,67,54,67,67,70,88,88,49,61,61,49,61,61,65,81,81,129,161,161,128,161,161,136,171,171,60,75,75,60,75,75,16,20,20,138,172,172,137,172,172,160,200,200,160,200,200,160,200,200,160,200,200,156,195,195,156,195,195,157,197,197,156,195,195,155,194,194,155,194,194,152,190,190,152,190,190,152,190,190,151,189,189,151,189,189,150,187,187,153,191,191,152,191,191,146,182,182,154,192,192,153,192,192,149,186,186,139,174,174,139,173,173,151,189,189,146,183,183,146,183,183,155,155,194,155,155,194,155,155,194,155,155,194,155,155,193,154,154,193,154,154,193,154,154,193,154,154,192,154,154,192,150,150,188,150,150,188,153,153,191,153,153,191,153,153,191,149,149,187,151,151,189,151,151,188,152,152,190,152,152,190,152,152,190,151,151,189,151,151,189,151,151,189,142,142,177,30,30,38,30,30,38,42,42,53,69,69,87,69,69,87,6,6,7,7,7,9,7,7,9,63,63,79,123,123,154,123,123,154,85,85,106,82,82,103,82,82,102,95,95,119,125,125,156,125,125,156,126,126,158,139,139,174,139,139,174,142,142,177,145,145,181,144,144,180,144,144,180,82,82,103,82,82,102,67,67,84,33,33,42,33,33,42,48,48,60,62,62,78,62,62,78,43,43,54,58,58,72,57,57,72,114,114,142,121,121,151,121,121,151,53,53,66,14,14,17,14,14,17,121,121,152,141,141,177,141,141,176,141,141,176,140,140,176,140,140,175,137,137,172,138,138,173,138,138,173,242,121,0,244,122,0,234,117,0,211,105,0,232,116,0,242,121,0,234,117,0,131,131,163,130,130,163,133,133,166,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,113,141,141,108,135,135,108,135,135,113,142,142,110,137,137,110,137,137,102,128,128,112,140,140,111,139,139,108,135,135,115,115,143,114,114,143,114,114,143,114,114,143,114,114,142,114,114,142,114,114,142,113,113,142,113,113,142,113,113,141,113,113,141,110,110,138,113,113,141,112,112,141,112,112,140,110,110,137,110,110,137,111,111,138,112,112,140,111,111,139,111,111,139,111,111,139,111,111,139,111,111,139,104,104,130,104,104,130,22,22,27,31,31,39,31,31,39,51,51,64,4,4,5,4,4,5,5,5,6,46,46,58,46,46,58,90,90,113,62,62,78,62,62,78,60,60,75,70,70,88,70,70,87,92,92,115,93,93,116,93,93,116,102,102,128,104,104,131,104,104,130,106,106,133,106,106,133,60,60,76,60,60,75,49,49,62,24,24,31,24,24,31,35,35,44,46,46,57,104,131,131,116,145,145,133,166,166,133,166,166,161,201,201,162,203,203,162,203,203,162,203,203,162,202,202,148,186,186,87,109,109,87,109,109,66,82,82,93,117,117,93,117,117,67,84,84,72,90,90,72,90,90,114,143,143,154,192,192,154,192,192,135,169,169,31,38,38,31,38,38,9,12,12,79,99,99,79,99,99,156,195,195,160,201,201,160,201,201,160,200,200,157,196,196,157,196,196,158,198,198,156,195,195,156,195,195,156,195,195,151,189,189,151,189,189,155,194,194,157,196,196,157,196,196,153,192,192,153,192,192,148,185,185,151,189,189,151,189,189,149,187,187,149,187,187,149,186,186,152,190,190,150,188,188,150,188,188,155,194,194,156,156,195,156,156,195,156,156,195,156,156,195,155,155,194,155,155,194,155,155,194,155,155,194,155,155,193,154,154,193,154,154,193,151,151,189,152,152,191,152,152,190,152,152,190,152,152,190,152,152,190,153,153,191,153,153,191,153,153,191,152,152,191,152,152,190,152,152,190,150,150,188,150,150,188,127,127,159,9,9,11,9,9,11,19,19,24,114,114,142,114,114,142,31,31,39,6,6,7,6,6,7,9,9,11,36,36,45,36,36,45,102,102,128,100,100,126,100,100,125,91,91,114,94,94,118,94,94,117,104,104,130,119,119,149,119,119,149,144,144,180,145,145,182,145,145,181,145,145,181,133,133,166,132,132,166,78,78,97,58,58,73,58,58,73,83,83,104,60,60,75,60,60,75,64,64,80,102,102,127,101,101,127,136,136,170,136,136,170,120,120,150,27,27,34,27,27,34,8,8,10,70,70,88,70,70,88,137,137,172,141,141,177,141,141,177,141,141,176,138,138,172,138,138,172,139,139,174,137,137,172,247,123,0,137,137,171,132,132,165,132,132,165,136,136,170,137,137,172,137,137,171,134,134,168,129,129,162,129,129,162,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,109,137,137,112,140,140,110,138,138,110,138,138,110,137,137,112,140,140,112,140,140,111,138,138,114,142,142,114,142,142,115,115,143,114,114,143,114,114,143,114,114,143,114,114,143,114,114,142,114,114,142,113,113,142,113,113,142,113,113,142,111,111,138,111,111,138,111,111,139,111,111,139,111,111,139,111,111,139,111,111,139,112,112,140,112,112,140,112,112,140,111,111,139,111,111,139,111,111,139,110,110,137,93,93,116,93,93,116,6,6,8,14,14,18,14,14,18,83,83,104,23,23,29,23,23,29,4,4,5,6,6,8,6,6,8,26,26,33,75,75,93,75,75,93,73,73,92,67,67,83,67,67,83,69,69,86,76,76,96,76,76,95,87,87,109,106,106,132,105,105,132,106,106,133,106,106,133,106,106,133,97,97,122,97,97,122,57,57,71,43,43,54,106,133,133,90,112,112,90,112,112,136,170,170,136,170,170,157,197,197,159,199,199,159,199,199,159,199,199,160,200,200,160,200,200,153,192,192,158,198,198,158,198,198,156,195,195,156,195,195,156,195,195,138,172,172,34,43,43,34,43,43,41,51,51,41,51,51,95,118,118,44,55,55,44,55,55,114,142,142,159,199,199,159,199,199,161,201,201,161,201,201,161,201,201,160,201,201,160,200,200,160,200,200,160,200,200,160,200,200,160,200,200,158,197,197,158,197,197,154,193,193,151,189,189,151,188,188,139,174,174,154,192,192,153,192,192,150,188,188,151,189,189,151,189,189,153,191,191,153,191,191,152,191,191,151,188,188,157,157,196,157,157,196,156,156,196,156,156,196,156,156,195,156,156,195,156,156,195,156,156,195,155,155,194,155,155,194,155,155,194,155,155,194,155,155,193,154,154,193,154,154,193,154,154,193,154,154,192,154,154,192,154,154,192,153,153,192,153,153,192,153,153,191,153,153,191,153,153,191,146,146,183,32,32,40,32,32,40,19,19,24,102,102,128,102,102,128,110,110,137,139,139,173,138,138,173,32,32,40,31,31,39,13,13,17,3,3,3,3,3,3,6,6,7,34,34,43,34,34,43,79,79,99,103,103,129,103,103,129,100,100,125,95,95,119,95,95,119,80,80,100,122,122,153,122,122,152,141,141,176,141,141,176,142,142,178,142,142,177,142,142,177,143,143,179,137,137,171,136,136,171,141,141,176,139,139,174,139,139,174,139,139,173,122,122,153,122,122,153,30,30,38,36,36,45,36,36,45,84,84,105,83,83,104,39,39,48,101,101,126,100,100,126,140,140,176,142,142,177,141,141,177,141,141,177,141,141,176,141,141,176,140,140,176,140,140,175,140,140,175,140,140,175,140,140,175,138,138,172,135,135,169,135,135,168,132,132,165,122,122,152,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,128,128,113,141,141,113,141,141,110,138,138,111,139,139,111,139,139,112,140,140,112,140,140,112,140,140,110,138,138,110,138,138,115,115,144,115,115,143,114,114,143,114,114,143,114,114,143,114,114,142,114,114,142,114,114,142,113,113,142,113,113,142,113,113,141,113,113,141,113,113,141,113,113,141,112,112,141,112,112,140,112,112,140,112,112,140,112,112,140,112,112,140,111,111,139,111,111,139,111,111,139,106,106,133,23,23,29,23,23,29,14,14,18,75,75,93,74,74,93,80,80,100,101,101,126,101,101,126,23,23,29,23,23,29,9,9,12,2,2,2,2,2,2,4,4,5,25,25,31,25,25,31,58,58,72,75,75,94,75,75,94,73,73,91,70,70,87,70,70,87,59,59,73,89,89,111,89,89,111,103,103,129,103,103,129,104,104,130,113,142,142,113,142,142,90,112,112,90,112,112,133,166,166,154,193,193,154,193,193,159,199,199,159,199,199,159,199,199,159,199,199,155,194,194,155,194,194,114,142,142,114,142,142,16,20,20,47,59,59,47,59,59,125,156,156,120,150,150,120,150,150,88,110,110,60,75,75,60,75,75,145,182,182,145,182,182,161,202,202,161,202,202,161,202,202,161,201,201,158,197,197,157,197,197,156,195,195,156,195,195,155,194,194,155,194,194,155,194,194,155,194,194,153,192,192,153,191,191,154,193,193,154,193,193,154,193,193,152,191,191,152,190,190,144,180,180,153,192,192,153,192,192,155,194,194,155,193,193,154,193,193,157,157,197,156,156,195,155,155,194,157,157,196,157,157,196,157,157,196,156,156,196,156,156,195,156,156,195,156,156,195,156,156,195,154,154,192,155,155,194,155,155,194,155,155,194,155,155,193,154,154,193,154,154,193,154,154,193,154,154,193,154,154,192,154,154,192,149,149,186,85,85,106,85,85,106,23,23,29,23,23,28,52,52,65,144,144,181,144,144,180,149,149,186,152,152,190,151,151,189,150,150,187,65,65,82,65,65,82,6,6,7,6,6,7,13,13,17,15,15,18,15,15,18,13,13,17,7,7,9,7,7,9,12,12,15,63,63,79,63,63,78,105,105,131,104,104,131,101,101,127,80,80,100,80,80,100,119,119,149,138,138,173,138,138,172,142,142,178,142,142,177,142,142,177,141,141,177,141,141,177,138,138,173,101,101,126,101,101,126,14,14,18,42,42,53,42,42,52,110,110,138,110,110,138,106,106,132,78,78,98,78,78,97,53,53,66,128,128,160,128,128,160,142,142,178,142,142,177,142,142,177,141,141,177,141,141,177,138,138,173,136,136,171,136,136,170,136,136,170,136,136,170,136,136,170,135,135,169,134,134,167,133,133,167,135,135,168,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,113,142,142,113,141,141,112,140,140,112,140,140,105,132,132,112,141,141,112,140,140,113,142,142,113,141,141,113,141,141,115,115,144,115,115,144,114,114,142,114,114,143,114,114,143,114,114,143,114,114,143,114,114,142,114,114,142,113,113,142,113,113,142,112,112,140,112,112,140,113,113,141,113,113,141,113,113,141,112,112,141,112,112,140,112,112,140,112,112,140,112,112,140,112,112,140,108,108,135,108,108,135,62,62,77,16,16,21,16,16,21,38,38,47,38,38,47,105,105,131,108,108,135,108,108,135,110,110,138,109,109,136,109,109,136,47,47,59,4,4,5,4,4,5,9,9,12,9,9,12,11,11,13,9,9,12,9,9,12,5,5,6,8,8,10,8,8,10,46,46,57,76,76,95,76,76,95,74,74,92,74,74,92,72,90,90,90,113,113,90,112,112,112,140,140,123,154,154,123,154,154,123,154,154,123,154,154,119,149,149,51,64,64,51,64,64,9,12,12,4,6,6,4,6,6,56,70,70,56,70,70,148,186,186,80,101,101,80,101,101,112,140,140,133,166,166,133,166,166,115,143,143,115,143,143,162,203,203,162,203,203,162,202,202,162,202,202,160,200,200,160,200,200,160,200,200,159,199,199,154,193,193,154,193,193,154,193,193,157,197,197,155,194,194,155,194,194,155,194,194,155,194,194,155,194,194,150,187,187,150,187,187,151,189,189,153,191,191,152,191,191,157,196,196,157,196,196,155,194,194,158,158,198,158,158,198,158,158,197,158,158,197,157,157,197,157,157,197,157,157,196,157,157,196,157,157,196,157,157,196,155,155,194,153,153,191,153,153,191,156,156,195,156,156,195,155,155,194,155,155,194,155,155,194,155,155,194,155,155,193,154,154,193,154,154,193,154,154,193,151,151,189,62,62,77,62,62,77,34,34,42,105,105,131,105,105,131,147,147,183,146,146,183,128,128,160,152,152,190,152,152,190,150,150,188,141,141,176,141,141,176,45,45,57,45,45,57,4,4,5,13,13,17,13,13,17,12,12,15,7,7,9,7,7,9,1,1,1,1,1,1,9,9,11,22,22,28,22,22,28,58,58,73,64,64,80,64,64,80,80,80,101,80,80,100,100,100,125,110,110,137,110,110,137,109,109,137,106,106,133,106,106,133,45,45,57,45,45,57,8,8,11,4,4,5,4,4,5,49,49,62,131,131,164,131,131,164,71,71,89,71,71,89,99,99,123,117,117,147,117,117,147,101,101,126,143,143,179,143,143,178,142,142,178,142,142,178,142,142,177,140,140,175,140,140,175,140,140,175,135,135,169,135,135,169,135,135,169,135,135,168,137,137,172,136,136,170,135,135,169,135,135,169,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,114,142,142,113,142,142,113,142,142,109,137,137,110,138,138,110,138,138,111,139,139,111,139,139,114,143,143,113,142,142,113,141,141,115,115,144,115,115,144,115,115,144,115,115,143,114,114,143,114,114,143,114,114,143,114,114,143,114,114,142,112,112,141,112,112,140,111,111,139,111,111,139,113,113,141,113,113,141,113,113,141,112,112,141,112,112,141,112,112,140,112,112,140,112,112,140,112,112,140,109,109,137,109,109,137,45,45,56,24,24,30,24,24,30,76,76,95,76,76,95,106,106,133,92,92,116,92,92,116,110,110,138,109,109,136,109,109,136,102,102,127,102,102,127,33,33,41,3,3,4,3,3,4,9,9,12,8,8,11,8,8,11,5,5,6,5,5,6,1,1,1,6,6,8,6,6,8,16,16,20,15,18,18,15,18,18,20,25,25,20,25,25,20,25,25,70,87,87,70,87,87,60,75,75,78,98,98,78,97,97,31,39,39,31,39,39,124,155,155,161,201,201,161,201,201,160,201,201,160,200,200,153,192,192,155,194,194,155,194,194,92,115,115,156,195,195,156,195,195,161,201,201,161,201,201,162,203,203,157,197,197,157,196,196,155,194,194,155,194,194,153,192,192,153,192,192,153,191,191,158,197,197,154,193,193,154,193,193,156,195,195,156,195,195,155,194,194,155,194,194,155,194,194,157,196,196,156,196,196,156,195,195,159,199,199,159,199,199,154,193,193,159,159,199,159,159,198,158,158,198,158,158,198,158,158,198,158,158,198,158,158,197,154,154,193,154,154,193,149,149,187,155,155,194,155,155,194,157,157,196,157,157,196,156,156,196,156,156,195,156,156,195,156,156,195,156,156,195,155,155,194,155,155,194,155,155,194,155,155,194,136,136,170,136,136,170,20,20,25,20,20,25,109,109,136,143,143,179,143,143,178,136,136,170,136,136,170,136,136,170,145,145,181,145,145,181,143,143,179,151,151,188,150,150,188,150,150,188,150,150,188,59,59,74,3,3,3,3,3,3,0,0,0,3,3,3,3,3,3,4,4,5,4,4,5,9,9,11,10,10,13,10,10,13,27,27,33,27,27,33,27,27,33,12,12,15,12,12,15,13,13,16,17,17,22,17,17,22,17,17,22,17,17,22,62,62,78,53,53,66,53,53,66,69,69,87,69,69,86,28,28,35,110,110,138,110,110,138,142,142,178,142,142,178,142,142,177,136,136,170,135,135,169,137,137,171,81,81,101,81,81,101,137,137,172,137,137,172,141,141,177,143,143,178,142,142,178,138,138,172,136,136,170,136,136,170,134,134,168,134,134,168,134,134,167,138,138,172,138,138,172,135,135,168,134,134,168,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,114,142,142,114,142,142,113,142,142,113,142,142,113,141,141,114,143,143,114,142,142,114,142,142,116,145,145,116,145,145,112,140,140,112,140,140,115,115,144,115,115,144,115,115,144,115,115,143,115,115,143,114,114,143,112,112,140,112,112,140,108,108,135,113,113,141,112,112,141,113,113,142,113,113,142,113,113,141,113,113,141,113,113,141,113,113,141,112,112,141,112,112,140,112,112,140,112,112,140,112,112,140,98,98,123,98,98,123,14,14,18,14,14,18,78,78,98,103,103,129,103,103,129,98,98,123,98,98,123,98,98,123,105,105,131,104,104,131,103,103,129,109,109,136,108,108,136,108,108,136,108,108,135,43,43,54,2,2,2,2,2,2,0,0,0,2,2,2,2,2,2,3,3,4,3,3,4,45,56,56,35,44,44,35,44,44,46,58,58,40,50,50,40,50,50,26,33,33,26,33,33,66,83,83,146,183,183,146,183,183,161,202,202,161,201,201,151,189,189,136,170,170,136,170,170,152,190,190,152,190,190,101,126,126,155,194,194,155,194,194,162,202,202,161,202,202,163,204,204,159,199,199,159,199,199,156,195,195,156,195,195,157,197,197,159,199,199,159,198,198,162,202,202,162,202,202,160,200,200,153,191,191,153,191,191,153,191,191,153,191,191,159,199,199,157,197,197,157,196,196,157,196,196,157,196,196,158,198,198,160,200,200,159,199,199,158,158,197,159,159,199,159,159,199,159,159,199,159,159,198,158,158,198,158,158,198,158,158,198,156,156,196,156,156,195,158,158,197,157,157,197,157,157,197,157,157,196,157,157,196,157,157,196,157,157,196,156,156,196,156,156,195,156,156,195,156,156,195,154,154,193,154,154,192,129,129,161,128,128,161,31,31,39,106,106,133,106,106,133,136,136,170,135,135,169,149,149,187,137,137,171,136,136,171,146,146,182,145,145,182,147,147,184,150,150,187,149,149,187,148,148,185,148,148,185,141,141,177,30,30,38,30,30,38,1,1,1,13,13,17,13,13,17,15,15,19,15,15,19,12,12,15,48,48,60,48,48,60,39,39,49,39,39,49,36,36,45,77,77,96,76,76,96,43,43,54,43,43,54,40,40,50,31,31,39,31,31,39,41,41,52,41,41,52,35,35,44,23,23,29,23,23,29,59,59,74,59,59,74,130,130,162,143,143,179,143,143,178,134,134,167,133,133,167,120,120,150,134,134,168,134,134,168,89,89,111,88,88,111,136,136,171,142,142,178,142,142,177,143,143,179,143,143,179,140,140,175,137,137,171,136,136,171,138,138,172,139,139,174,139,139,173,141,141,177,141,141,176,139,139,174,133,133,167,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,111,139,139,111,139,139,111,139,139,116,145,145,115,144,144,114,143,143,114,143,143,114,142,142,115,144,144,115,143,143,116,145,145,114,114,143,114,114,143,115,115,144,115,115,144,115,115,144,115,115,143,114,114,143,114,114,143,113,113,141,113,113,141,114,114,142,114,114,142,113,113,142,113,113,142,113,113,142,113,113,141,113,113,141,113,113,141,113,113,141,112,112,141,112,112,140,112,112,140,111,111,139,92,92,116,92,92,116,22,22,28,22,22,28,76,76,95,97,97,122,97,97,122,107,107,134,107,107,134,98,98,123,105,105,131,105,105,131,106,106,132,105,105,132,107,107,134,106,106,133,106,106,133,102,102,127,101,101,127,22,22,27,1,1,1,1,1,1,9,9,12,42,52,52,42,52,52,60,75,75,60,75,75,47,58,58,46,58,58,154,192,192,155,194,194,155,194,194,147,184,184,147,183,183,155,194,194,150,187,187,150,187,187,159,199,199,159,199,199,128,160,160,106,132,132,106,132,132,162,203,203,162,203,203,163,204,204,163,204,204,163,204,204,163,204,204,163,204,204,163,204,204,163,203,203,162,203,203,162,203,203,162,203,203,160,201,201,160,200,200,160,200,200,160,200,200,160,200,200,160,200,200,158,197,197,158,197,197,158,197,197,157,197,197,159,199,199,159,198,198,159,198,198,160,160,200,160,160,200,160,160,200,160,160,200,159,159,199,159,159,199,159,159,199,159,159,199,159,159,198,158,158,198,158,158,198,158,158,198,158,158,198,158,158,197,158,158,197,157,157,197,157,157,197,154,154,193,154,154,192,154,154,192,131,131,164,131,131,164,134,134,168,134,134,167,102,102,128,77,77,96,77,77,96,61,61,76,61,61,76,144,144,180,122,122,152,122,122,152,151,151,189,151,151,189,151,151,189,135,135,169,135,135,169,141,141,176,141,141,176,123,123,154,122,122,152,122,122,152,149,149,187,149,149,186,118,118,148,118,118,148,16,16,21,58,58,72,58,58,72,18,18,22,18,18,22,9,9,11,9,9,11,9,9,11,25,25,32,25,25,32,18,18,22,22,22,28,22,22,28,61,61,77,61,61,77,37,37,46,37,37,46,37,37,46,53,53,67,53,53,67,41,41,52,137,137,171,136,136,171,138,138,172,137,137,172,130,130,162,137,137,171,137,137,171,132,132,165,132,132,165,141,141,176,113,113,141,112,112,141,93,93,117,93,93,116,142,142,178,144,144,180,143,143,179,143,143,179,143,143,179,143,143,179,143,143,178,142,142,178,142,142,178,142,142,177,142,142,177,141,141,177,140,140,175,139,139,174,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,165,103,0,128,80,0,159,99,0,103,64,0,82,51,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,116,146,146,116,145,145,116,145,145,116,145,145,116,145,145,114,143,143,114,143,143,114,143,143,115,144,144,115,144,144,115,143,143,115,143,143,116,116,145,115,115,144,115,115,144,115,115,144,115,115,144,115,115,143,115,115,143,114,114,143,114,114,143,114,114,143,114,114,142,114,114,142,114,114,142,113,113,142,113,113,142,113,113,141,113,113,141,110,110,138,110,110,138,110,110,138,94,94,118,94,94,118,96,96,120,73,73,92,73,73,92,55,55,69,55,55,69,44,44,55,103,103,129,103,103,129,87,87,109,87,87,109,108,108,135,108,108,135,108,108,135,97,97,121,97,97,121,101,101,126,89,89,111,88,88,111,87,87,109,87,87,109,107,107,134,107,107,134,43,54,54,43,54,54,79,98,98,158,197,197,158,197,197,159,199,199,159,199,199,152,190,190,159,199,199,159,199,199,150,188,188,150,188,188,150,188,188,133,167,167,133,166,166,118,148,148,118,147,147,161,201,201,161,201,201,164,205,205,164,205,205,164,205,205,164,205,205,164,205,205,163,204,204,163,204,204,163,204,204,163,204,204,163,204,204,159,199,199,159,199,199,161,201,201,159,199,199,159,199,199,162,203,203,162,202,202,150,188,188,158,198,198,158,198,198,161,202,202,161,201,201,159,199,199,161,161,201,161,161,201,160,160,201,160,160,200,160,160,200,160,160,200,160,160,200,160,160,200,159,159,199,159,159,199,159,159,199,159,159,199,159,159,198,159,159,198,158,158,198,158,158,198,158,158,198,158,158,197,148,148,185,130,130,163,130,130,163,106,106,133,106,106,133,88,88,111,133,133,166,133,133,166,41,41,51,41,41,51,108,108,136,108,108,136,141,141,177,122,122,153,122,122,153,147,147,184,147,147,184,150,150,187,150,150,187,149,149,187,140,140,175,140,140,175,101,101,126,119,119,149,119,119,149,148,148,185,148,148,185,145,145,181,145,145,181,67,67,84,13,13,17,13,13,17,41,41,51,41,41,51,7,7,9,53,53,66,53,53,66,36,36,45,36,36,45,33,33,41,33,33,41,27,27,34,84,84,106,84,84,105,123,123,154,123,123,154,66,66,82,39,39,48,39,39,48,70,70,88,70,70,87,140,140,175,141,141,177,141,141,176,135,135,169,135,135,169,140,140,176,140,140,175,133,133,166,132,132,166,132,132,165,117,117,147,117,117,147,104,104,130,142,142,177,141,141,177,144,144,180,144,144,180,144,144,180,143,143,179,143,143,179,143,143,179,143,143,179,143,143,178,142,142,178,142,142,178,139,139,174,139,139,174,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,191,119,0,183,114,0,199,124,0,185,116,0,184,115,0,160,100,0,132,82,0,91,57,0,39,24,0,106,66,0,161,100,0,150,94,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,118,148,148,116,145,145,116,145,145,117,146,146,115,144,144,115,144,144,117,147,147,117,146,146,109,136,136,114,143,143,114,143,143,116,145,145,116,145,145,115,144,144,115,143,143,116,116,145,115,115,144,115,115,144,115,115,144,115,115,144,115,115,144,115,115,143,114,114,143,114,114,143,114,114,143,114,114,143,114,114,142,114,114,142,113,113,142,113,113,142,113,113,142,113,113,141,106,106,133,93,93,117,93,93,117,76,76,95,76,76,95,63,63,79,95,95,119,95,95,119,29,29,36,29,29,36,77,77,97,77,77,97,101,101,126,87,87,109,87,87,109,105,105,131,105,105,131,107,107,134,107,107,134,107,107,134,100,100,125,100,100,125,72,72,90,85,85,106,85,85,106,158,198,198,150,187,187,150,187,187,160,200,200,160,200,200,159,199,199,137,172,172,137,172,172,152,191,191,152,190,190,134,167,167,154,192,192,154,192,192,118,148,148,118,148,148,148,185,185,148,185,185,163,204,204,165,206,206,164,206,206,164,205,205,164,205,205,164,205,205,164,205,205,164,205,205,164,205,205,163,204,204,162,202,202,161,202,202,161,202,202,156,195,195,156,195,195,146,183,183,146,183,183,154,193,193,154,192,192,160,200,200,160,200,200,160,200,200,158,198,198,158,198,198,161,161,202,161,161,201,161,161,201,161,161,201,161,161,201,160,160,201,160,160,200,160,160,200,160,160,200,160,160,200,155,155,193,155,155,193,153,153,191,153,153,191,103,103,128,106,106,132,106,106,132,102,102,128,102,102,128,115,115,144,115,115,143,121,121,151,149,149,187,149,149,187,154,154,193,154,154,192,85,85,107,85,85,107,90,90,112,147,147,184,147,147,183,126,126,157,126,126,157,148,148,185,114,114,143,114,114,143,97,97,121,97,97,121,109,109,137,109,109,136,132,132,165,88,88,111,88,88,111,101,101,126,101,101,126,145,145,182,145,145,182,140,140,176,69,69,86,69,69,86,38,38,48,38,38,48,35,35,44,35,35,44,105,105,132,67,67,84,67,67,84,64,64,80,64,64,80,67,67,83,92,92,115,92,92,115,57,57,72,57,57,71,54,54,68,54,54,67,67,67,84,141,141,176,141,141,176,133,133,167,133,133,166,142,142,177,141,141,177,141,141,177,122,122,152,122,122,152,135,135,169,134,134,168,118,118,148,118,118,147,135,135,169,104,104,130,104,104,130,130,130,163,130,130,163,143,143,179,144,144,181,144,144,180,144,144,180,144,144,180,143,143,179,143,143,179,143,143,179,143,143,179,142,142,178,141,141,176,141,141,176,140,140,176,140,140,175,136,136,170,127,127,159,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,187,117,0,183,114,0,193,121,0,191,119,0,153,95,0,174,109,0,101,63,0,100,62,0,130,81,0,127,79,0,109,68,0,138,86,0,118,74,0,46,29,0,71,44,0,120,75,0,187,117,0,186,116,0,103,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,119,149,149,119,149,149,119,149,149,119,148,148,119,148,148,117,147,147,117,146,146,117,146,146,117,146,146,113,141,141,113,141,141,105,132,132,111,139,139,111,139,139,116,145,145,115,144,144,115,144,144,114,142,142,114,142,142,116,116,145,116,116,145,116,116,145,115,115,144,115,115,144,115,115,144,115,115,144,115,115,143,115,115,143,114,114,143,114,114,143,111,111,138,109,109,137,109,109,137,73,73,92,73,73,92,75,75,94,73,73,91,73,73,91,82,82,102,82,82,102,86,86,108,86,86,108,106,106,133,110,110,137,110,110,137,61,61,76,61,61,76,64,64,80,64,64,80,104,104,131,90,90,112,90,90,112,105,105,132,105,105,131,81,81,102,81,81,102,69,69,86,78,78,97,78,78,97,94,94,118,160,201,201,160,200,200,162,202,202,162,202,202,148,185,185,148,185,185,155,193,193,141,176,176,141,176,176,149,187,187,149,186,186,99,123,123,99,123,123,142,178,178,142,178,178,162,202,202,163,204,204,163,204,204,165,206,206,165,206,206,165,206,206,164,206,206,164,205,205,164,205,205,164,205,205,159,199,199,159,199,199,164,205,205,163,204,204,160,200,200,158,198,198,158,198,198,161,202,202,161,201,201,163,203,203,162,203,203,161,201,201,160,201,201,160,201,201,162,162,202,162,162,202,161,161,202,161,161,202,161,161,202,161,161,201,161,161,201,161,161,201,161,161,201,157,157,197,157,157,196,136,136,170,84,84,105,84,84,105,93,93,117,93,93,117,79,79,98,78,78,98,117,117,146,117,117,146,91,91,114,105,105,132,105,105,132,153,153,192,153,153,191,138,138,173,138,138,173,137,137,171,90,90,113,90,90,113,147,147,184,147,147,184,114,114,142,113,113,142,124,124,156,129,129,161,129,129,161,89,89,112,89,89,112,86,86,108,86,86,107,116,116,145,122,122,152,121,121,152,120,120,150,120,120,150,119,119,149,119,119,149,149,149,186,116,116,145,116,116,145,30,30,38,30,30,38,13,13,17,13,13,17,47,47,59,96,96,121,96,96,120,58,58,72,58,58,72,71,71,89,71,71,89,112,112,141,27,27,34,27,27,34,12,12,15,12,12,15,77,77,96,77,77,96,137,137,171,137,137,171,132,132,165,142,142,178,142,142,178,143,143,179,143,143,179,131,131,164,131,131,164,137,137,171,124,124,156,124,124,155,132,132,165,131,131,164,87,87,109,87,87,108,125,125,156,142,142,178,142,142,178,143,143,179,143,143,179,144,144,181,144,144,180,144,144,180,144,144,180,143,143,179,143,143,179,143,143,179,138,138,173,138,138,173,142,142,178,139,139,174,139,139,174,137,137,172,137,137,171,140,140,175,139,139,174,141,141,176,139,139,174,139,139,174,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,195,122,0,195,122,0,179,112,0,117,73,0,179,112,0,195,122,0,178,111,0,156,97,0,164,102,0,103,64,0,93,58,0,65,40,0,97,60,0,95,59,0,97,61,0,137,85,0,106,66,0,98,61,0,75,47,0,49,31,0,68,42,0,180,112,0,172,107,0,171,107,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,118,148,148,118,147,147,119,149,149,119,148,148,120,150,150,119,149,149,119,149,149,119,149,149,119,149,149,119,149,149,119,148,148,115,144,144,115,143,143,118,148,148,115,144,144,115,144,144,114,143,143,114,142,142,116,145,145,116,145,145,117,146,146,115,144,144,115,144,144,115,144,144,115,144,144,116,116,145,116,116,145,116,116,145,115,115,144,115,115,144,115,115,144,115,115,144,115,115,144,115,115,143,112,112,140,97,97,121,97,97,121,60,60,75,60,60,75,66,66,83,66,66,83,56,56,70,83,83,104,83,83,104,65,65,81,65,65,81,75,75,94,75,75,94,109,109,136,98,98,123,98,98,123,97,97,121,97,97,121,64,64,80,64,64,80,104,104,131,81,81,101,81,81,101,88,88,111,88,88,110,91,91,114,91,91,114,63,63,79,63,63,79,157,197,197,157,197,197,147,184,184,147,184,184,150,188,188,150,187,187,150,187,187,141,177,177,141,177,177,122,153,153,122,153,153,109,136,136,131,163,163,131,163,163,159,199,199,159,199,199,164,205,205,164,205,205,165,207,207,165,206,206,165,206,206,165,206,206,165,206,206,163,204,204,163,203,203,164,205,205,164,205,205,161,201,201,160,201,201,164,205,205,163,204,204,163,204,204,163,204,204,163,204,204,161,202,202,161,201,201,158,197,197,162,162,203,162,162,203,162,162,203,162,162,203,162,162,202,162,162,202,155,155,194,155,155,194,160,160,200,132,132,165,132,132,165,71,71,89,71,71,89,104,104,130,103,103,129,81,81,101,81,81,101,131,131,163,97,97,121,96,96,121,145,145,181,145,145,181,120,120,150,120,120,150,154,154,192,142,142,178,142,142,178,134,134,168,134,134,167,116,116,145,116,116,145,105,105,131,105,105,131,133,133,166,111,111,138,111,111,138,139,139,174,139,139,174,85,85,106,85,85,106,91,91,114,91,91,114,127,127,159,86,86,108,86,86,107,100,100,125,100,100,125,101,101,127,101,101,126,132,132,165,149,149,186,149,149,186,99,99,124,99,99,124,58,58,73,58,58,73,26,26,32,26,26,32,89,89,111,117,117,146,116,116,146,113,113,142,113,113,141,44,44,55,44,44,55,45,45,57,45,45,57,38,38,47,135,135,169,135,135,168,128,128,161,128,128,160,140,140,175,140,140,175,135,135,169,139,139,174,139,139,174,130,130,163,130,130,162,133,133,166,132,132,166,132,132,165,132,132,165,124,124,156,108,108,135,108,108,135,96,96,120,96,96,120,115,115,143,114,114,143,139,139,174,139,139,174,143,143,179,145,145,181,144,144,180,144,144,180,144,144,180,144,144,180,143,143,179,142,142,177,143,143,179,143,143,178,140,140,175,139,139,174,142,142,178,142,142,177,142,142,177,141,141,177,141,141,176,139,139,174,139,139,174,165,151,170,255,223,170,255,255,175,255,255,175,228,230,174,255,255,174,187,117,0,180,112,0,112,70,0,173,108,0,191,119,0,105,66,0,62,39,0,86,53,0,126,79,0,125,78,0,85,53,0,67,42,0,160,100,0,155,97,0,118,74,0,119,74,0,93,58,0,108,67,0,137,86,0,178,111,0,189,118,0,172,107,0,176,110,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,129,129,89,112,112,89,112,112,79,99,99,79,99,99,95,119,119,115,144,144,115,144,144,119,149,149,119,148,148,120,150,150,119,149,149,119,149,149,119,149,149,119,149,149,117,147,147,117,147,147,118,148,148,118,148,148,116,145,145,115,144,144,118,147,147,117,147,147,117,147,147,117,146,146,117,146,146,115,144,144,115,144,144,113,141,141,113,141,141,116,116,145,116,116,145,116,116,145,116,116,145,115,115,144,110,110,138,110,110,138,114,114,142,94,94,117,94,94,117,51,51,63,50,50,63,74,74,92,73,73,92,57,57,72,57,57,72,93,93,116,68,68,86,68,68,86,103,103,128,103,103,128,85,85,107,85,85,107,109,109,136,109,109,136,101,101,126,95,95,119,95,95,119,82,82,103,82,82,103,74,74,93,74,74,93,94,94,118,78,78,98,78,78,98,98,98,123,98,98,123,157,197,197,120,150,150,120,150,150,159,199,199,159,199,199,143,179,179,143,179,179,108,135,135,108,135,135,126,158,158,99,124,124,99,124,124,134,168,168,134,168,168,156,195,195,156,195,195,162,203,203,162,203,203,162,203,203,162,203,203,165,207,207,163,204,204,163,204,204,161,202,202,161,202,202,156,195,195,156,195,195,158,197,197,157,197,197,161,201,201,160,201,201,160,201,201,162,202,202,162,202,202,163,204,204,163,204,204,163,163,204,163,163,204,163,163,203,161,161,201,161,161,201,149,149,186,149,149,186,104,104,131,104,104,131,81,81,102,81,81,102,99,99,124,99,99,124,84,84,105,122,122,152,122,122,152,141,141,176,141,141,176,150,150,188,150,150,188,144,144,180,143,143,179,151,151,189,148,148,185,148,148,185,151,151,189,151,151,188,133,133,166,133,133,166,147,147,184,147,147,184,81,81,101,110,110,137,110,110,137,117,117,147,117,117,147,124,124,155,123,123,154,98,98,122,98,98,122,93,93,116,93,93,116,146,146,183,148,148,185,148,148,185,103,103,129,103,103,129,133,133,166,133,133,166,123,123,154,123,123,154,143,143,179,148,148,185,147,147,184,96,96,120,96,96,120,63,63,79,63,63,79,35,35,44,35,35,44,101,101,127,67,67,84,67,67,84,33,33,42,33,33,42,33,33,42,33,33,42,74,74,93,74,74,93,123,123,154,123,123,154,124,124,155,142,142,178,142,142,178,134,134,168,134,134,168,131,131,164,131,131,163,139,139,174,139,139,174,106,106,133,140,140,176,140,140,175,126,126,158,126,126,158,95,95,119,95,95,118,111,111,139,111,111,139,87,87,109,118,118,147,118,118,147,137,137,171,136,136,171,142,142,178,142,142,177,142,142,177,141,141,177,144,144,180,144,144,180,142,142,178,140,140,176,140,140,175,136,136,170,135,135,169,137,137,171,136,136,171,228,184,174,255,237,174,255,235,173,255,204,175,255,217,175,255,223,176,255,215,176,255,253,176,255,255,175,255,255,175,255,255,175,255,255,173,255,240,160,255,255,160,176,166,112,151,150,112,123,120,87,153,139,87,121,76,0,118,73,0,96,60,0,145,90,0,107,66,0,110,68,0,172,107,0,182,113,0,98,61,0,78,48,0,130,81,0,139,87,0,168,105,0,174,109,0,184,115,0,189,118,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,115,144,144,88,110,110,88,110,110,116,145,145,105,131,131,104,131,131,78,98,98,78,98,98,92,115,115,91,114,114,72,90,90,72,90,90,97,122,122,113,141,141,113,141,141,117,147,147,117,147,147,117,146,146,117,146,146,119,149,149,119,149,149,117,147,147,116,145,145,116,145,145,112,140,140,112,140,140,113,141,141,113,141,141,115,144,144,115,144,144,115,144,144,115,143,143,116,145,145,117,146,146,116,146,146,116,116,145,116,116,145,116,116,145,116,116,145,114,114,143,114,114,143,106,106,132,74,74,93,74,74,93,58,58,72,58,58,72,70,70,88,70,70,88,60,60,75,60,60,75,86,86,108,100,100,125,100,100,125,106,106,133,106,106,133,102,102,127,101,101,127,107,107,134,107,107,134,104,104,131,104,104,131,106,106,133,94,94,117,94,94,117,104,104,130,104,104,130,57,57,72,57,57,72,77,77,97,77,77,97,83,83,104,151,189,189,134,167,167,134,167,167,113,142,142,113,142,142,145,182,182,145,182,182,160,201,201,160,200,200,160,200,200,158,198,198,158,198,198,87,109,109,87,109,109,72,90,90,72,90,90,89,111,111,89,111,111,120,151,151,122,153,153,122,152,152,120,150,150,120,150,150,150,188,188,150,187,187,161,202,202,161,202,202,158,197,197,158,197,197,158,197,197,161,201,201,161,201,201,159,199,199,159,198,198,160,160,200,160,160,200,142,142,177,142,142,177,74,74,92,74,74,92,57,57,72,57,57,72,54,54,67,123,123,154,123,123,153,155,155,194,155,155,194,144,144,180,143,143,179,143,143,179,143,143,179,156,156,195,156,156,195,154,154,193,143,143,178,142,142,178,157,157,196,157,157,196,137,137,171,137,137,171,130,130,163,130,130,163,145,145,181,144,144,181,106,106,132,138,138,172,138,138,172,76,76,96,76,76,96,91,91,113,91,91,113,111,111,139,111,111,139,113,113,141,112,112,141,115,115,144,82,82,103,82,82,103,148,148,185,148,148,185,142,142,177,141,141,177,146,146,183,146,146,182,128,128,161,128,128,160,153,153,192,151,151,189,151,151,189,153,153,191,152,152,191,144,144,181,144,144,180,100,100,126,100,100,126,65,65,81,64,64,81,100,100,125,100,100,125,118,118,148,80,80,100,79,79,99,127,127,159,127,127,159,145,145,181,145,145,181,145,145,181,144,144,181,129,129,161,129,129,161,142,142,178,98,98,123,98,98,122,143,143,179,143,143,179,134,134,167,133,133,167,118,118,148,118,118,148,100,100,125,100,100,125,128,128,160,141,141,177,141,141,176,141,141,176,141,141,176,139,139,174,139,139,173,76,76,96,76,76,95,63,63,79,63,63,79,77,77,97,105,105,131,105,105,131,106,106,133,106,106,133,104,104,131,117,111,130,139,135,163,255,221,163,255,204,175,255,233,175,216,176,171,255,203,171,255,228,170,255,231,174,255,235,173,202,169,171,199,168,171,255,249,172,255,255,172,255,242,152,255,253,152,143,129,79,140,127,79,115,102,61,95,88,58,92,87,58,212,198,131,252,223,131,255,255,166,255,255,166,230,220,153,255,255,153,255,241,153,242,227,152,186,116,0,184,115,0,96,60,0,134,84,0,172,107,0,187,117,0,191,119,0,164,102,0,168,105,0,161,101,0,158,99,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,117,147,147,81,101,101,81,101,101,118,148,148,118,148,148,110,138,138,110,138,138,97,122,122,97,122,122,82,103,103,106,132,132,106,132,132,116,146,146,116,145,145,116,145,145,116,145,145,114,143,143,114,143,143,63,79,79,63,79,79,52,65,65,64,80,80,64,80,80,87,108,108,86,108,108,88,110,110,87,109,109,86,108,108,86,108,108,107,134,134,107,134,134,115,144,144,113,141,141,113,141,141,113,141,141,112,141,141,115,143,143,114,143,143,113,141,141,113,141,141,114,114,143,114,114,142,101,101,126,101,101,126,52,52,65,41,41,51,40,40,51,38,38,48,38,38,48,87,87,109,87,87,109,110,110,137,110,110,137,101,101,127,101,101,127,101,101,127,110,110,138,110,110,138,109,109,136,109,109,136,101,101,126,100,100,126,111,111,138,110,110,138,97,97,121,96,96,121,92,92,115,102,102,127,102,102,127,74,74,93,74,74,93,97,97,121,97,97,121,54,54,67,158,198,198,105,131,131,105,131,131,159,199,199,159,199,199,164,205,205,162,203,203,162,203,203,160,201,201,160,201,201,155,194,194,155,194,194,116,145,145,116,145,145,86,107,107,85,107,107,119,149,149,119,149,149,151,189,189,119,149,149,119,149,149,152,190,190,152,190,190,154,192,192,153,192,192,153,192,192,153,192,192,161,202,202,161,202,202,161,202,202,161,201,201,163,203,203,147,147,184,147,147,184,86,86,107,86,86,107,89,89,111,89,89,111,66,66,82,66,66,82,89,89,111,89,89,111,154,154,193,154,154,193,138,138,172,138,138,172,157,157,196,149,149,186,149,149,186,150,150,188,150,150,188,155,155,193,155,155,193,153,153,191,153,153,191,156,156,195,156,156,195,144,144,180,144,144,180,106,106,133,147,147,184,147,147,183,116,116,145,116,116,145,143,143,179,143,143,179,72,72,90,72,72,90,91,91,114,91,91,114,70,70,88,70,70,87,65,65,81,65,65,81,127,127,159,106,106,133,106,106,133,128,128,160,128,128,160,152,152,190,151,151,189,142,142,177,142,142,177,149,149,187,149,149,187,151,151,188,150,150,188,141,141,176,150,150,188,150,150,187,148,148,185,148,148,185,137,137,171,137,137,171,139,139,174,139,139,174,122,122,153,122,122,152,92,92,116,92,92,115,69,69,86,69,69,86,141,141,176,142,142,178,142,142,178,150,150,187,149,149,187,149,149,187,149,149,186,131,131,163,130,130,163,91,91,113,91,91,113,146,146,183,146,146,183,146,146,183,140,140,175,140,140,175,93,93,116,93,93,116,141,141,176,140,140,175,145,145,181,144,144,181,143,143,178,142,142,178,141,141,176,141,141,176,136,136,170,102,102,127,101,101,127,75,75,94,75,75,93,243,173,130,150,127,130,153,142,164,255,222,164,244,174,129,199,151,129,255,216,165,255,218,165,255,218,167,255,220,166,255,212,166,255,207,175,255,232,174,255,234,174,255,229,174,252,196,175,255,203,175,255,246,159,255,252,158,157,145,92,163,148,92,167,152,95,173,156,95,135,119,70,175,157,95,142,136,95,218,219,165,255,255,165,255,249,147,255,238,147,255,247,168,255,255,167,255,243,158,255,255,158,255,240,159,238,228,159,255,255,164,255,255,164,255,255,162,255,255,165,193,121,0,176,110,0,179,112,0,133,83,0,131,82,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,117,147,147,123,154,154,123,154,154,123,154,154,108,135,135,108,135,135,75,94,94,75,93,93,121,151,151,121,151,151,120,151,151,120,150,150,115,144,144,115,144,144,76,96,96,76,95,95,116,145,145,115,144,144,119,149,149,117,147,147,117,147,147,116,145,145,116,145,145,112,140,140,112,140,140,84,105,105,83,104,104,61,77,77,61,77,77,85,107,107,85,107,107,108,135,135,85,106,106,85,106,106,109,136,136,109,136,136,110,137,137,110,137,137,109,137,137,109,137,137,115,144,144,115,144,144,115,143,143,115,143,143,116,145,145,105,105,131,105,105,131,61,61,76,61,61,76,63,63,79,63,63,79,46,46,58,46,46,58,63,63,78,63,63,78,109,109,136,109,109,136,97,97,122,97,97,121,111,111,139,105,105,131,105,105,131,106,106,132,106,106,132,109,109,136,109,109,136,107,107,134,107,107,134,109,109,137,109,109,137,101,101,127,101,101,126,75,75,94,103,103,129,103,103,129,81,81,102,81,81,102,100,100,126,95,119,119,165,206,206,160,200,200,160,200,200,165,206,206,164,206,206,164,206,206,164,205,205,166,207,207,166,207,207,161,201,201,160,201,201,115,143,143,115,143,143,94,118,118,94,118,118,72,90,90,72,90,90,62,77,77,58,73,73,58,73,73,109,136,136,109,136,136,135,169,169,135,169,169,157,196,196,157,196,196,157,196,196,157,196,196,156,196,196,156,196,196,83,83,104,83,83,104,88,88,110,88,88,110,83,83,103,82,82,103,134,134,167,79,79,99,79,79,99,129,129,161,128,128,161,155,155,193,155,155,193,158,158,197,158,158,197,151,151,189,151,151,188,139,139,174,139,139,174,157,157,196,157,157,196,158,158,198,158,158,198,153,153,191,136,136,171,136,136,171,144,144,181,144,144,180,123,123,154,123,123,154,106,106,133,106,106,133,132,132,165,132,132,165,109,109,137,109,109,137,86,86,108,86,86,108,94,94,118,94,94,118,62,62,78,70,70,88,70,70,87,121,121,151,121,121,151,140,140,175,140,140,175,128,128,161,128,128,160,153,153,192,153,153,192,125,125,156,124,124,156,132,132,165,132,132,165,129,129,161,128,128,161,144,144,180,138,138,172,137,137,172,150,150,187,150,150,187,143,143,179,143,143,179,113,113,142,113,113,141,107,107,133,107,107,133,108,108,135,108,108,135,108,108,135,107,107,134,147,147,184,147,147,184,150,150,188,150,150,187,150,150,187,145,145,181,145,145,181,138,138,173,138,138,173,144,144,180,144,144,180,144,144,180,143,143,179,105,105,132,105,105,132,84,84,105,84,84,105,145,145,182,145,145,182,140,140,176,140,140,175,145,145,181,144,144,181,144,144,180,145,145,182,145,145,182,255,233,176,255,236,175,237,169,125,237,169,125,194,138,103,171,127,103,143,103,79,146,104,78,101,78,67,122,88,67,115,83,63,117,84,63,221,158,118,255,192,147,253,185,146,255,211,170,255,218,170,255,220,169,242,189,169,210,172,169,255,208,168,161,145,89,154,141,89,173,155,94,179,159,94,163,146,89,169,150,88,222,211,143,184,187,143,131,124,84,193,189,137,226,210,137,255,255,165,255,255,165,255,255,168,255,255,168,255,244,161,255,255,160,229,217,148,231,218,148,255,255,166,255,255,166,255,255,168,255,255,167,255,255,162,255,255,162,255,245,144,255,255,152,255,255,152,104,130,130,103,129,129,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,89,111,111,89,111,111,89,111,111,122,152,152,121,152,152,124,155,155,123,154,154,123,154,154,123,154,154,119,149,149,114,142,142,114,142,142,119,148,148,118,148,148,118,148,148,118,148,148,87,108,108,87,108,108,69,86,86,69,86,86,120,150,150,119,149,149,115,144,144,115,144,144,119,149,149,119,148,148,118,148,148,119,149,149,119,149,149,115,144,144,115,144,144,82,103,103,82,103,103,67,84,84,67,84,84,51,64,64,51,64,64,44,55,55,44,55,55,42,52,52,42,52,52,77,97,97,77,97,97,96,120,120,112,140,140,111,139,139,111,139,139,111,139,139,111,139,139,111,139,139,59,59,73,59,59,73,62,62,78,62,62,78,58,58,73,58,58,73,95,95,118,94,94,118,56,56,70,56,56,70,90,90,113,90,90,113,109,109,136,111,111,139,111,111,139,106,106,133,106,106,133,98,98,122,98,98,122,110,110,138,110,110,138,111,111,139,111,111,139,107,107,134,107,107,134,96,96,120,95,95,119,101,101,126,101,101,126,86,86,108,75,75,93,167,209,209,167,209,209,169,211,211,168,211,211,156,196,196,156,195,195,156,195,195,156,195,195,153,191,191,152,191,191,144,180,180,144,180,180,118,148,148,118,148,148,50,63,63,50,63,63,77,97,97,77,97,97,94,118,118,94,118,118,106,132,132,159,199,199,159,199,199,127,159,159,127,159,159,152,190,190,152,190,190,157,196,196,157,196,196,122,122,152,122,122,152,110,110,137,110,110,137,131,131,164,131,131,164,159,159,199,159,159,199,151,151,189,151,151,188,106,106,132,106,106,132,140,140,175,140,140,175,145,145,181,145,145,181,148,148,185,140,140,175,139,139,174,157,157,197,157,157,197,159,159,199,159,159,198,149,149,186,148,148,186,140,140,175,140,140,175,153,153,191,153,153,191,133,133,166,133,133,166,126,126,158,126,126,158,139,139,174,139,139,174,152,152,190,151,151,189,142,142,177,141,141,177,90,90,112,90,90,112,90,90,112,62,62,78,62,62,78,100,100,126,100,100,126,123,123,153,123,123,153,130,130,163,130,130,163,113,113,141,112,112,141,147,147,184,147,147,184,145,145,182,145,145,181,134,134,167,134,134,167,137,137,171,137,137,171,132,132,165,131,131,164,144,144,180,151,151,189,151,151,189,103,103,128,103,103,128,73,73,91,73,73,91,143,143,178,142,142,178,80,80,100,80,80,100,126,126,158,126,126,158,151,151,188,150,150,188,149,149,186,149,149,186,148,148,186,148,148,185,146,146,183,146,146,183,140,140,175,140,140,175,127,127,159,100,100,125,100,100,125,113,113,142,113,113,141,140,140,175,140,140,175,147,147,184,147,147,184,148,148,185,255,240,185,255,230,172,255,230,171,255,230,171,255,230,171,255,255,255,255,255,255,255,210,157,255,202,157,230,167,129,221,162,129,101,72,55,82,63,55,142,105,84,173,127,102,191,136,102,216,154,115,208,150,115,255,221,173,255,211,172,212,161,138,237,173,137,255,194,164,241,186,164,214,175,169,255,212,169,225,206,131,247,220,131,219,196,118,226,200,118,255,238,141,255,239,141,183,200,171,203,212,170,255,241,161,168,185,161,154,153,113,196,179,113,255,251,149,255,254,155,255,255,154,255,255,158,255,255,157,221,212,148,255,240,148,255,255,167,255,255,167,255,255,168,255,255,168,255,255,157,255,255,157,255,255,148,255,253,148,255,255,161,129,161,161,112,140,140,112,140,140,106,133,133,106,133,133,117,146,146,116,146,146,127,159,159,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,85,106,106,85,106,106,60,75,75,60,75,75,117,147,147,117,147,147,66,83,83,66,82,82,104,130,130,104,130,130,124,155,155,124,155,155,122,153,153,122,153,153,122,152,152,122,152,152,120,150,150,115,144,144,115,144,144,105,131,131,104,131,131,82,102,102,82,102,102,93,116,116,93,116,116,115,144,144,115,143,143,121,151,151,120,151,151,121,152,152,121,152,152,112,141,141,112,140,140,112,140,140,112,140,140,109,137,137,109,137,137,103,129,129,103,129,129,84,106,106,36,45,45,36,45,45,55,69,69,55,69,69,67,84,84,67,84,84,75,94,94,75,94,94,113,142,142,113,141,141,90,113,113,90,113,113,108,135,135,108,135,135,111,139,139,111,139,139,86,86,107,86,86,107,77,77,97,77,77,97,92,92,116,92,92,116,112,112,140,112,112,140,106,106,133,74,74,93,74,74,93,99,99,123,98,98,123,102,102,127,102,102,127,104,104,130,104,104,130,98,98,122,98,98,122,110,110,138,110,110,138,111,111,139,111,111,139,104,104,130,104,104,130,98,98,123,98,98,122,107,107,134,107,107,133,167,209,209,167,209,209,143,179,179,143,179,179,153,192,192,153,191,191,160,200,200,160,200,200,137,172,172,137,172,172,146,182,182,146,182,182,105,131,131,105,131,131,59,74,74,59,74,74,148,186,186,148,186,186,157,196,196,157,196,196,158,198,198,158,198,198,143,179,179,143,178,178,148,185,185,147,184,184,151,189,189,159,159,199,159,159,199,160,160,201,160,160,200,153,153,192,153,153,192,152,152,190,151,151,189,153,153,191,153,153,191,154,154,193,154,154,193,104,104,130,104,104,130,132,132,165,132,132,165,139,139,173,138,138,173,132,132,165,132,132,165,148,148,185,148,148,185,153,153,191,152,152,191,157,157,197,157,157,197,157,157,196,157,157,196,148,148,186,148,148,186,133,133,167,133,133,167,110,110,138,110,110,138,122,122,152,152,152,190,152,152,190,155,155,194,155,155,194,147,147,184,147,147,183,67,67,84,67,67,84,96,96,120,96,96,120,51,51,64,51,51,64,99,99,124,99,99,124,131,131,164,131,131,163,122,122,153,122,122,153,130,130,163,130,130,163,104,104,131,104,104,131,125,125,156,125,125,156,113,113,142,113,113,142,108,108,136,108,108,135,133,133,167,133,133,167,130,130,162,130,130,162,111,111,139,111,111,138,125,125,156,149,149,187,149,149,187,99,99,124,99,99,124,58,58,73,58,58,73,142,142,178,142,142,177,148,148,185,148,148,185,144,144,180,144,144,180,147,147,184,147,147,184,134,134,168,134,134,168,84,84,105,83,83,104,92,92,116,92,92,115,124,124,155,124,124,155,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,198,150,255,211,159,255,208,159,208,149,114,172,132,114,112,82,64,114,83,64,255,210,161,255,215,161,255,228,170,255,225,170,255,218,171,255,224,171,248,186,154,255,200,154,208,168,159,253,190,159,255,195,162,255,197,162,237,234,171,255,255,171,238,235,172,255,255,172,255,255,164,248,237,164,206,210,162,252,238,162,213,215,163,185,197,163,179,194,165,255,255,164,198,179,111,211,187,111,255,239,141,255,234,140,255,237,147,255,234,140,255,230,140,255,255,157,255,255,157,255,255,162,255,255,161,255,255,166,255,255,166,255,255,166,255,255,165,255,255,157,255,255,156,112,141,141,112,140,140,93,116,116,93,116,116,102,128,128,102,127,127,128,160,160,127,159,159,130,162,162,130,162,162,123,153,153,122,153,153,56,70,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,89,112,112,110,138,138,110,138,138,107,134,134,107,134,134,91,114,114,91,114,114,103,128,128,102,128,128,123,154,154,123,153,153,81,102,102,81,102,102,48,60,60,48,60,60,116,146,146,116,146,146,121,152,152,121,151,151,118,148,148,118,148,148,120,151,151,120,150,150,110,138,138,110,137,137,68,86,86,76,95,95,76,95,95,102,127,127,101,127,127,119,148,148,119,148,148,120,150,150,119,149,149,120,151,151,120,150,150,103,129,129,103,128,128,110,137,137,110,137,137,114,143,143,114,143,143,98,123,123,98,123,123,104,130,130,104,130,130,75,93,93,75,93,93,42,52,52,42,52,52,106,132,132,105,132,132,111,139,139,111,139,139,112,140,140,112,140,140,101,126,126,101,126,126,104,130,130,104,130,130,106,133,133,112,112,140,112,112,140,113,113,141,113,113,141,108,108,135,108,108,135,107,107,133,106,106,133,107,107,134,107,107,134,108,108,135,108,108,135,73,73,91,73,73,91,93,93,116,92,92,116,97,97,121,97,97,121,92,92,115,92,92,115,103,103,129,103,103,129,107,107,133,106,106,133,110,110,137,110,110,137,109,109,137,109,109,137,162,203,203,162,203,203,166,207,207,166,207,207,164,205,205,164,205,205,165,207,207,165,206,206,138,172,172,138,172,172,114,142,142,114,142,142,90,112,112,90,112,112,125,157,157,125,156,156,156,195,195,155,194,194,138,173,173,138,173,173,131,164,164,131,164,164,140,175,175,140,175,175,160,200,200,160,200,200,163,163,204,163,163,203,147,147,184,147,147,184,149,149,186,149,149,186,147,147,184,147,147,184,138,138,173,138,138,173,151,151,189,151,151,189,158,158,197,158,158,197,104,104,130,104,104,130,152,152,190,152,152,190,150,150,188,150,150,188,115,115,144,115,115,144,153,153,191,143,143,179,143,143,179,148,148,185,148,148,185,152,152,191,152,152,190,139,139,174,139,139,174,126,126,157,125,125,157,112,112,140,112,112,140,154,154,193,154,154,193,151,151,189,151,151,188,157,157,196,157,157,196,129,129,162,129,129,161,53,53,66,53,53,66,119,119,149,119,119,149,70,70,88,70,70,88,97,97,122,97,97,122,149,149,186,148,148,186,153,153,191,153,153,191,141,141,177,141,141,177,76,76,95,76,76,95,147,147,184,147,147,184,147,147,184,147,147,183,121,121,152,121,121,151,91,91,114,91,91,114,136,136,170,136,136,170,150,150,188,150,150,187,151,151,189,151,151,189,140,140,175,140,140,175,34,34,42,34,34,42,122,122,153,122,122,153,148,148,185,148,148,185,151,151,189,151,151,188,143,143,178,143,143,178,138,138,172,138,138,172,119,119,149,119,119,149,65,65,82,117,117,146,117,117,146,147,147,184,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,216,180,229,175,150,251,185,150,210,154,124,205,152,124,180,129,98,182,130,97,248,178,136,247,178,136,255,223,169,255,225,168,255,194,150,255,187,150,219,166,142,250,182,142,202,161,151,247,184,150,255,209,172,215,176,172,255,255,175,255,255,175,255,254,158,255,247,158,255,255,160,196,202,159,156,176,157,230,222,157,243,226,148,243,226,148,163,182,162,224,220,161,255,255,168,255,255,168,211,187,111,194,177,111,255,255,162,255,255,161,255,255,159,255,255,159,239,210,122,239,210,122,255,255,162,255,255,162,255,255,151,255,255,151,255,255,156,255,255,155,255,255,160,128,160,160,117,146,146,116,146,146,105,132,132,105,131,131,94,118,118,129,162,162,129,161,161,126,158,158,126,158,158,131,164,164,131,164,164,108,135,135,108,135,135,44,55,55,44,55,55,99,124,124,99,124,124,58,73,73,58,73,73,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,63,78,78,122,152,152,121,152,152,121,152,152,121,151,151,100,125,125,100,125,125,75,94,94,75,94,94,112,140,140,112,140,140,123,154,154,123,154,154,124,155,155,124,155,155,115,144,144,115,143,143,28,35,35,28,35,35,100,125,125,100,125,125,121,152,152,121,152,152,124,155,155,123,154,154,117,146,146,117,146,146,113,141,141,112,141,141,97,122,122,97,122,122,53,67,67,53,67,67,95,119,119,95,119,119,120,150,150,120,150,150,118,148,148,118,148,148,118,148,148,118,147,147,116,146,146,116,145,145,118,148,148,117,146,146,117,146,146,118,148,148,118,147,147,98,123,123,98,123,123,81,101,101,81,101,101,64,80,80,64,80,80,89,111,111,89,111,111,110,138,138,110,138,138,98,122,122,98,122,122,93,116,116,93,116,116,99,123,123,98,123,123,113,141,141,112,141,141,115,115,143,114,114,143,104,104,130,103,103,129,104,104,131,104,104,131,103,103,129,103,103,129,97,97,121,97,97,121,106,106,133,106,106,132,110,110,138,110,110,138,73,73,91,73,73,91,106,106,133,106,106,133,105,105,131,105,105,131,80,80,101,80,80,100,107,107,133,106,106,133,99,99,124,99,99,124,206,206,206,205,205,205,212,212,212,212,212,212,211,211,211,211,211,211,209,209,209,209,209,209,204,204,204,204,204,204,204,204,204,204,204,204,198,198,198,197,197,197,197,197,197,197,197,197,186,186,186,186,186,186,184,184,184,184,184,184,192,192,192,192,192,192,202,202,202,202,202,202,208,167,208,208,167,208,202,161,202,202,161,202,204,163,204,203,163,203,201,161,201,201,161,201,201,161,201,201,160,201,207,165,207,207,165,207,198,158,198,198,158,198,198,158,198,198,158,198,197,158,197,197,158,197,201,161,201,201,161,201,197,157,197,197,157,197,190,152,190,190,152,190,200,160,200,200,160,200,202,161,202,202,161,202,197,158,197,197,158,197,197,157,197,197,157,197,199,159,199,198,159,198,196,157,196,196,157,196,202,161,202,202,161,202,199,159,199,199,159,199,195,156,195,195,156,195,197,157,197,196,157,196,194,155,194,194,155,194,184,147,184,183,147,183,169,135,169,169,135,169,151,120,151,150,120,150,152,122,152,152,122,152,116,93,116,116,92,116,132,105,132,131,105,131,135,108,135,135,108,135,147,117,147,147,117,147,180,144,180,180,144,180,186,149,186,186,148,186,181,145,181,181,145,181,189,151,189,189,151,189,188,151,188,188,150,188,180,144,180,180,144,180,187,150,187,187,150,187,187,149,187,187,149,187,188,151,188,188,150,188,184,147,184,184,147,184,180,144,180,179,143,179,173,139,173,173,138,173,183,146,183,182,146,182,186,149,186,186,148,186,183,147,183,183,146,183,183,146,183,183,146,183,181,144,181,180,144,180,255,248,254,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,242,249,255,255,255,255,255,255,255,255,255,255,255,255,255,198,185,255,199,182,255,196,182,255,182,178,255,195,178,255,224,178,255,236,177,255,223,172,255,228,171,255,227,171,255,229,171,255,205,161,255,206,161,255,203,159,255,184,159,255,171,166,255,201,165,255,216,174,255,197,174,255,255,179,255,248,179,255,253,173,255,255,173,255,255,174,196,185,174,248,210,172,255,249,172,255,229,172,255,246,171,255,224,176,255,233,176,255,255,169,255,255,168,255,255,168,255,255,168,255,255,168,255,255,167,255,255,170,255,255,170,255,255,166,255,255,166,255,255,161,255,255,160,255,255,169,255,255,168,255,255,170,255,255,170,255,255,166,166,166,166,165,165,165,165,165,165,167,167,167,166,166,166,164,164,164,164,164,164,169,169,169,169,169,169,167,167,167,166,166,166,163,163,163,162,162,162,164,164,164,163,163,163,161,161,161,161,161,161,153,153,153,152,152,152,140,140,140,140,140,140,125,125,125,125,125,125,126,126,126,126,126,126,96,96,96,96,96,96,109,109,109,108,108,108,112,112,112,111,111,111,121,121,121,121,121,121,148,148,148,148,148,148,153,153,153,153,153,153,149,149,149,149,149,149,155,155,155,155,155,155,155,155,155,154,154,154,148,148,148,147,147,147,154,154,154,153,153,153,153,153,153,153,153,153,154,154,154,154,154,154,151,151,151,150,150,150,147,147,147,147,147,147,142,142,142,141,141,141,149,149,149,149,149,149,152,152,152,152,152,152,150,150,150,149,149,149,149,149,149,149,149,149,147,147,147,147,147,147,148,148,148,148,148,148,148,148,148,148,148,148,147,147,147,147,147,147,147,147,147,147,147,147,151,151,151,151,151,151,151,151,151,150,150,150,149,149,149,148,148,148,145,145,145,145,145,145,145,145,145,145,145,145,140,140,140,140,140,140,139,139,139,139,139,139,132,132,132,131,131,131,130,130,130,129,129,129,135,135,135,135,135,135,142,142,142,142,142,142,146,117,146,146,117,146,142,113,142,141,113,141,143,114,143,142,114,142,141,113,141,141,112,141,140,112,140,140,112,140,144,115,144,144,115,144,138,110,138,138,110,138,138,110,138,138,110,138,137,110,137,137,110,137,140,112,140,140,112,140,137,109,137,137,109,137,132,106,132,132,105,132,210,210,210,210,210,210,212,212,212,212,212,212,205,205,205,205,205,205,203,203,203,203,203,203,207,207,207,207,207,207,200,200,200,200,200,200,202,202,202,202,202,202,195,195,195,195,195,195,191,191,191,191,191,191,186,186,186,186,186,186,203,203,203,203,203,203,209,167,209,209,167,209,209,167,209,204,163,204,204,163,204,204,163,204,204,163,204,200,160,200,199,159,199,201,161,201,201,161,201,201,161,201,201,161,201,201,160,201,201,160,201,192,153,192,192,153,192,196,157,196,196,156,196,202,161,202,202,161,202,199,159,199,199,159,199,195,156,195,195,156,195,201,160,201,200,160,200,202,162,202,202,162,202,198,158,198,198,158,198,191,153,191,191,153,191,197,158,197,197,157,197,201,161,201,201,160,201,202,162,202,202,162,202,198,158,198,198,158,198,198,158,198,197,158,197,193,154,193,193,154,193,158,126,158,158,126,158,109,87,109,109,87,109,157,126,157,157,126,157,143,114,143,143,114,143,129,103,129,128,103,128,60,48,60,60,48,60,46,36,46,46,36,46,88,70,88,88,70,88,77,62,77,77,62,77,105,84,105,105,84,105,125,100,125,125,100,125,105,84,105,105,84,105,132,106,132,132,105,132,171,137,171,171,137,171,187,149,187,186,149,186,186,149,186,186,149,186,180,144,180,180,144,180,189,151,189,189,151,189,189,151,189,188,151,188,184,147,184,184,147,184,178,142,178,178,142,178,177,142,177,185,148,185,185,148,185,184,147,184,184,147,184,182,146,182,182,145,182,181,145,181,181,145,181,181,145,181,181,144,181,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,238,185,255,194,179,255,196,179,255,175,177,255,173,177,255,218,180,255,231,180,255,224,174,255,228,174,255,234,175,255,235,175,255,222,169,255,223,169,255,208,165,255,216,165,255,190,161,255,191,160,255,226,175,255,196,175,255,255,180,255,255,179,255,255,176,255,255,175,255,255,175,237,206,175,255,254,171,255,224,171,255,215,172,255,233,172,255,255,171,255,220,171,255,228,171,255,255,171,255,255,163,255,255,163,255,255,166,255,255,166,255,250,171,255,255,171,255,255,169,255,255,168,255,255,165,255,255,164,255,255,169,255,255,169,255,255,170,255,255,170,255,255,166,166,166,166,161,161,161,160,160,160,165,165,165,165,165,165,168,168,168,168,168,168,169,169,169,169,169,169,165,165,165,165,165,165,165,165,165,165,165,165,161,161,161,161,161,161,160,160,160,131,131,131,131,131,131,90,90,90,90,90,90,130,130,130,130,130,130,118,118,118,118,118,118,106,106,106,106,106,106,49,49,49,49,49,49,38,38,38,38,38,38,72,72,72,72,72,72,64,64,64,64,64,64,86,86,86,86,86,86,102,102,102,102,102,102,86,86,86,86,86,86,108,108,108,108,108,108,140,140,140,140,140,140,153,153,153,152,152,152,152,152,152,152,152,152,147,147,147,147,147,147,154,154,154,154,154,154,154,154,154,154,154,154,150,150,150,150,150,150,145,145,145,145,145,145,151,151,151,151,151,151,150,150,150,150,150,150,148,148,148,148,148,148,148,148,148,148,148,148,147,147,147,147,147,147,147,147,147,147,147,147,150,150,150,149,149,149,151,151,151,151,151,151,150,150,150,150,150,150,150,150,150,150,150,150,151,151,151,151,151,151,146,146,146,146,146,146,144,144,144,144,144,144,147,147,147,146,146,146,142,142,142,141,141,141,143,143,143,142,142,142,138,138,138,138,138,138,134,134,134,134,134,134,131,131,131,131,131,131,143,143,143,142,142,142,142,142,142,146,117,146,146,117,146,143,114,143,143,114,143,143,114,143,142,114,142,139,111,139,139,111,139,140,112,140,140,112,140,140,112,140,140,112,140,140,112,140,140,112,140,134,107,134,133,107,133,136,109,136,136,109,136,140,112,140,140,112,140,138,111,138,138,110,138,211,211,211,210,210,210,208,208,208,208,208,208,208,208,208,208,208,208,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,196,196,196,196,196,196,200,200,200,200,200,200,200,200,200,200,200,200,197,197,197,197,197,197,199,199,199,199,199,199,210,168,210,209,167,209,205,164,205,205,164,205,207,165,207,207,165,207,204,163,204,204,163,204,202,162,202,202,161,202,202,161,202,202,161,202,201,161,201,201,161,201,201,161,201,201,161,201,199,159,199,198,159,198,200,160,200,200,160,200,200,160,200,200,160,200,195,156,195,195,156,195,201,161,201,201,161,201,203,162,203,203,162,203,203,162,203,198,159,198,198,158,198,198,158,198,198,158,198,202,161,202,202,161,202,203,163,203,203,163,203,199,159,199,199,159,199,197,157,197,196,157,196,198,158,198,198,158,198,177,142,177,177,142,177,81,65,81,81,65,81,79,63,79,79,63,79,85,68,85,85,68,85,52,42,52,52,42,52,16,12,16,16,12,16,32,25,32,32,25,32,8,6,8,8,6,8,26,20,26,26,20,26,16,12,16,16,12,16,46,36,46,45,36,45,129,103,129,129,103,129,125,100,125,125,100,125,125,100,125,91,73,91,91,72,91,59,47,59,59,47,59,106,85,106,106,85,106,183,146,183,182,146,182,178,143,178,178,142,178,184,147,184,183,147,183,189,151,189,189,151,189,191,152,191,190,152,190,190,152,190,190,152,190,191,153,191,191,153,191,187,150,187,187,149,187,183,146,183,182,146,182,178,143,178,178,142,178,182,145,182,181,145,181,183,146,183,255,255,255,255,255,255,255,255,255,255,255,255,255,239,248,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,222,237,255,255,255,255,230,182,255,189,181,255,183,181,255,206,181,255,199,179,255,213,178,255,216,178,255,227,178,255,223,170,255,219,170,255,231,173,255,224,173,255,219,173,255,208,172,255,204,170,255,211,170,255,216,172,255,192,171,255,255,180,255,252,180,255,255,176,255,255,176,250,214,177,242,209,177,255,254,175,255,218,175,226,199,173,216,194,172,255,255,172,255,226,172,255,215,171,255,255,171,255,255,171,255,255,171,255,255,169,255,255,168,255,255,170,255,255,169,255,255,169,255,255,169,255,255,169,255,255,165,255,255,165,255,255,170,255,255,169,255,255,171,255,255,170,167,167,167,166,166,166,166,166,166,166,166,166,169,169,169,169,169,169,170,170,170,170,170,170,166,166,166,166,166,166,164,164,164,164,164,164,165,165,165,165,165,165,147,147,147,147,147,147,67,67,67,67,67,67,65,65,65,65,65,65,70,70,70,70,70,70,43,43,43,43,43,43,13,13,13,13,13,13,26,26,26,26,26,26,6,6,6,6,6,6,21,21,21,21,21,21,21,21,21,13,13,13,13,13,13,37,37,37,37,37,37,106,106,106,106,106,106,102,102,102,102,102,102,74,74,74,74,74,74,48,48,48,48,48,48,87,87,87,87,87,87,149,149,149,149,149,149,146,146,146,145,145,145,150,150,150,150,150,150,154,154,154,154,154,154,155,155,155,155,155,155,155,155,155,155,155,155,156,156,156,156,156,156,152,152,152,152,152,152,149,149,149,148,148,148,145,145,145,145,145,145,148,148,148,147,147,147,149,149,149,149,149,149,148,148,148,148,148,148,148,148,148,148,148,148,147,147,147,152,152,152,152,152,152,151,151,151,151,151,151,149,149,149,149,149,149,147,147,147,147,147,147,147,147,147,147,147,147,145,145,145,145,145,145,145,145,145,144,144,144,138,138,138,138,138,138,141,141,141,141,141,141,140,140,140,140,140,140,139,139,139,138,138,138,140,140,140,139,139,139,147,117,147,146,117,146,143,115,143,143,114,143,144,115,144,144,115,144,143,114,143,142,114,142,141,112,141,141,112,141,140,112,140,140,112,140,140,112,140,140,112,140,140,112,140,139,111,139,139,111,139,138,110,138,137,110,137,139,111,139,139,111,139,209,209,209,209,209,209,208,208,208,206,206,206,206,206,206,208,208,208,208,208,208,210,210,210,210,210,210,199,199,199,199,199,199,201,201,201,201,201,201,203,203,203,202,202,202,202,202,202,202,202,202,198,198,198,198,198,198,204,163,204,204,163,204,204,163,204,203,163,203,208,166,208,207,166,207,203,162,203,203,162,203,201,160,201,200,160,200,200,160,200,202,162,202,202,162,202,202,161,202,202,161,202,208,166,208,208,166,208,205,164,205,205,164,205,205,164,205,205,164,205,203,162,203,202,162,202,198,158,198,198,158,198,200,160,200,200,160,200,202,161,202,201,161,201,201,161,201,201,161,201,205,164,205,205,164,205,205,164,205,204,163,204,202,162,202,202,161,202,202,161,202,197,158,197,197,158,197,197,158,197,197,157,197,201,161,201,201,160,201,159,127,159,159,127,159,114,91,114,114,91,114,55,44,55,55,44,55,12,9,12,12,9,12,12,9,12,12,9,12,8,6,8,8,6,8,12,9,12,12,9,12,32,25,32,32,25,32,18,14,18,18,14,18,20,16,20,20,16,20,20,16,20,92,73,92,92,73,92,77,62,77,77,62,77,53,43,53,53,43,53,79,63,79,79,63,79,35,28,35,35,28,35,49,39,49,49,39,49,29,23,29,29,23,29,57,45,57,57,45,57,116,92,116,115,92,115,141,112,141,141,112,141,187,150,187,187,150,187,193,154,193,192,154,192,192,154,192,192,153,192,192,153,192,191,153,191,191,153,191,189,151,189,189,151,189,185,148,185,184,147,184,186,149,186,186,148,186,184,147,184,255,255,255,255,233,244,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,244,253,255,255,255,255,255,255,255,255,255,255,255,255,255,243,182,255,233,180,255,233,180,255,208,181,255,194,181,255,205,181,255,196,182,255,226,182,255,195,172,255,223,172,255,202,174,255,222,173,255,223,175,255,195,175,255,230,174,255,230,174,255,205,170,255,195,170,255,255,175,255,226,175,255,255,175,255,255,174,200,189,178,245,211,177,186,180,174,255,216,173,200,186,171,207,189,171,255,223,172,233,203,172,240,206,172,203,188,172,255,255,171,255,255,176,255,255,176,255,255,174,255,250,174,255,255,173,255,255,173,255,255,171,255,255,171,255,255,167,255,255,167,255,255,168,255,255,168,255,255,169,255,255,169,255,255,169,169,169,169,172,172,172,172,172,172,171,171,171,171,171,171,169,169,169,169,169,169,165,165,165,165,165,165,164,164,164,164,164,164,164,164,164,167,167,167,167,167,167,132,132,132,132,132,132,95,95,95,94,94,94,45,45,45,45,45,45,10,10,10,10,10,10,10,10,10,10,10,10,6,6,6,6,6,6,10,10,10,9,9,9,26,26,26,26,26,26,14,14,14,14,14,14,16,16,16,16,16,16,75,75,75,75,75,75,64,64,64,63,63,63,63,63,63,44,44,44,44,44,44,65,65,65,65,65,65,29,29,29,29,29,29,40,40,40,40,40,40,24,24,24,24,24,24,46,46,46,46,46,46,94,94,94,94,94,94,115,115,115,114,114,114,152,152,152,152,152,152,157,157,157,156,156,156,156,156,156,156,156,156,156,156,156,155,155,155,154,154,154,153,153,153,153,153,153,150,150,150,150,150,150,151,151,151,151,151,151,149,149,149,149,149,149,148,148,148,148,148,148,148,148,148,148,148,148,151,151,151,150,150,150,152,152,152,151,151,151,150,150,150,149,149,149,148,148,148,148,148,148,146,146,146,146,146,146,147,147,147,147,147,147,148,148,148,148,148,148,140,140,140,140,140,140,140,140,140,141,141,141,141,141,141,142,142,142,142,142,142,142,142,142,141,141,141,138,138,138,138,138,138,142,114,142,142,114,142,142,113,142,142,113,142,144,115,144,144,115,144,141,113,141,141,113,141,139,111,139,139,111,139,140,112,140,140,112,140,140,112,140,140,112,140,144,115,144,144,115,144,142,114,142,142,114,142,142,113,142,207,207,207,207,207,207,207,207,207,206,206,206,206,206,206,210,210,210,210,210,210,206,206,206,206,206,206,201,201,201,201,201,201,199,199,199,199,199,199,201,201,201,201,201,201,192,192,192,192,192,192,204,163,204,204,163,204,204,163,204,204,163,204,204,163,204,204,163,204,204,163,204,203,163,203,203,163,203,203,162,203,203,162,203,207,166,207,207,165,207,203,162,203,202,162,202,206,165,206,206,165,206,208,166,208,208,166,208,208,166,208,208,166,208,208,166,208,207,166,207,207,166,207,205,164,205,205,164,205,205,164,205,204,163,204,206,165,206,206,165,206,200,160,200,200,160,200,203,163,203,203,163,203,203,162,203,203,162,203,201,160,201,200,160,200,198,158,198,198,158,198,198,158,198,198,158,198,197,158,197,201,161,201,201,161,201,150,120,150,149,119,149,100,80,100,100,80,100,47,37,47,47,37,47,38,31,38,38,31,38,42,34,42,42,34,42,18,14,18,18,14,18,12,9,12,12,9,12,36,29,36,36,29,36,22,17,22,22,17,22,22,17,22,44,35,44,44,35,44,74,59,74,74,59,74,80,64,80,80,64,80,86,68,86,85,68,85,91,73,91,91,73,91,133,106,133,133,106,133,77,62,77,77,61,77,41,33,41,41,33,41,35,28,35,35,28,35,35,28,35,21,17,21,21,17,21,110,88,110,109,87,109,162,130,162,162,130,162,189,151,189,189,151,189,193,154,193,192,154,192,192,154,192,192,153,192,192,153,192,191,153,191,189,151,189,189,151,189,191,152,191,190,152,190,184,147,184,184,147,184,255,255,255,255,255,255,255,255,255,255,255,255,255,244,252,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,241,181,255,241,180,255,237,180,255,240,180,255,223,180,255,190,183,255,198,183,255,191,179,255,214,178,255,198,178,255,212,174,255,229,174,255,189,172,255,191,172,255,215,173,255,228,173,255,207,165,255,194,165,255,255,176,255,255,175,255,255,175,255,255,175,202,188,175,204,189,174,189,181,174,188,181,174,198,186,173,232,203,173,255,215,173,255,225,176,236,206,176,211,192,172,255,255,172,255,255,175,255,255,175,255,255,176,255,247,176,255,255,176,255,255,175,255,255,175,255,255,175,255,255,173,255,255,173,255,255,172,255,255,172,255,255,173,255,255,173,255,255,168,167,167,167,167,167,167,170,170,170,170,170,170,170,170,170,169,169,169,167,167,167,167,167,167,165,165,165,165,165,165,165,165,165,164,164,164,167,167,167,167,167,167,124,124,124,124,124,124,83,83,83,83,83,83,39,39,39,38,38,38,32,32,32,32,32,32,32,32,32,35,35,35,35,35,35,15,15,15,15,15,15,10,10,10,10,10,10,29,29,29,29,29,29,18,18,18,18,18,18,36,36,36,36,36,36,61,61,61,60,60,60,65,65,65,65,65,65,70,70,70,70,70,70,70,70,70,75,75,75,74,74,74,108,108,108,108,108,108,63,63,63,63,63,63,33,33,33,33,33,33,28,28,28,28,28,28,17,17,17,17,17,17,89,89,89,89,89,89,132,132,132,132,132,132,154,154,154,153,153,153,156,156,156,156,156,156,156,156,156,156,156,156,155,155,155,155,155,155,155,155,155,153,153,153,153,153,153,154,154,154,154,154,154,149,149,149,149,149,149,149,149,149,148,148,148,148,148,148,148,148,148,151,151,151,151,151,151,152,152,152,152,152,152,150,150,150,150,150,150,149,149,149,146,146,146,146,146,146,146,146,146,146,146,146,145,145,145,145,145,145,148,148,148,148,148,148,145,145,145,144,144,144,141,141,141,141,141,141,139,139,139,139,139,139,140,140,140,140,140,140,134,134,134,134,134,134,143,114,143,142,114,142,142,114,142,142,113,142,142,113,142,142,113,142,141,113,141,141,113,141,141,113,141,141,113,141,141,112,141,143,115,143,143,114,143,140,112,140,140,112,140,143,114,143,142,114,142,144,115,144,207,207,207,207,207,207,207,207,207,209,209,209,209,209,209,209,209,209,208,208,208,193,193,193,193,193,193,189,189,189,189,189,189,188,188,188,199,199,199,199,199,199,197,197,197,197,197,197,205,164,205,205,164,205,205,164,205,205,164,205,204,163,204,204,163,204,204,163,204,204,163,204,208,166,208,208,166,208,208,166,208,208,166,208,207,166,207,205,164,205,205,164,205,205,164,205,205,164,205,202,162,202,202,162,202,202,162,202,202,161,202,202,161,202,202,161,202,201,161,201,201,161,201,201,161,201,201,161,201,201,160,201,205,164,205,205,164,205,194,155,194,194,155,194,187,150,187,187,150,187,166,133,166,166,133,166,128,103,128,128,103,128,145,116,145,145,116,145,128,102,128,128,102,128,138,110,138,138,110,138,138,110,138,144,115,144,144,115,144,47,37,47,47,37,47,34,27,34,34,27,34,12,9,12,12,9,12,22,18,22,22,17,22,30,24,30,30,24,30,12,9,12,12,9,12,26,21,26,26,21,26,26,21,26,18,14,18,18,14,18,20,16,20,20,16,20,14,11,14,14,11,14,68,54,68,68,54,68,50,40,50,50,40,50,72,57,72,72,57,72,65,52,65,65,52,65,25,20,25,25,20,25,25,20,25,37,30,37,37,30,37,91,72,91,91,72,91,21,17,21,21,17,21,29,23,29,29,23,29,108,86,108,108,86,108,174,139,174,174,139,174,187,150,187,187,150,187,187,149,187,189,151,189,188,151,188,192,154,192,192,153,192,192,153,192,191,153,191,191,153,191,191,152,191,189,151,189,188,151,188,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,193,217,255,255,255,255,255,255,255,255,255,255,255,255,255,251,255,255,255,255,255,247,185,255,241,181,255,241,181,255,241,180,255,239,180,255,228,182,255,239,181,255,208,181,255,208,181,255,200,167,255,189,167,255,211,167,255,204,163,255,196,163,255,223,172,255,211,171,255,224,169,255,225,169,255,255,176,255,255,176,255,255,176,255,255,175,204,190,175,189,182,175,204,189,175,189,182,174,233,203,174,250,214,177,245,211,177,207,192,177,255,221,176,255,233,174,221,198,174,255,255,174,255,255,174,255,255,171,255,243,171,255,255,171,255,255,171,255,255,170,255,255,170,255,255,170,255,255,170,255,255,169,255,255,169,255,255,169,255,255,172,255,255,172,163,163,163,162,162,162,157,157,157,157,157,157,139,139,139,139,139,139,107,107,107,107,107,107,121,121,121,120,120,120,106,106,106,106,106,106,106,106,106,114,114,114,114,114,114,119,119,119,119,119,119,39,39,39,39,39,39,28,28,28,28,28,28,10,10,10,10,10,10,18,18,18,18,18,18,25,25,25,25,25,25,10,10,10,10,10,10,10,10,10,21,21,21,21,21,21,14,14,14,14,14,14,16,16,16,16,16,16,11,11,11,11,11,11,55,55,55,55,55,55,41,41,41,40,40,40,58,58,58,58,58,58,58,58,58,53,53,53,53,53,53,21,21,21,21,21,21,30,30,30,30,30,30,74,74,74,74,74,74,17,17,17,17,17,17,24,24,24,23,23,23,87,87,87,87,87,87,141,141,141,141,141,141,141,141,141,152,152,152,151,151,151,153,153,153,153,153,153,155,155,155,155,155,155,155,155,155,155,155,155,154,154,154,154,154,154,152,152,152,152,152,152,152,152,152,152,152,152,148,148,148,148,148,148,148,148,148,149,149,149,149,149,149,150,150,150,150,150,150,152,152,152,151,151,151,150,150,150,149,149,149,146,146,146,146,146,146,146,146,146,145,145,145,147,147,147,147,147,147,146,146,146,146,146,146,146,146,146,135,135,135,135,135,135,132,132,132,132,132,132,139,139,139,139,139,139,137,137,137,137,137,137,143,114,143,142,114,142,142,114,142,142,114,142,142,113,142,142,113,142,141,113,141,141,113,141,141,113,141,144,115,144,144,115,144,143,115,143,143,115,143,142,113,142,141,113,141,141,113,141,205,205,205,205,205,205,205,205,205,203,203,203,203,203,203,202,202,202,192,192,192,191,191,191,189,189,189,189,189,189,200,200,200,200,200,200,195,195,195,195,195,195,206,164,206,205,164,205,207,166,207,207,166,207,211,169,211,211,169,211,211,169,211,211,169,211,211,169,211,211,168,211,210,168,210,206,165,206,206,165,206,204,163,204,203,163,203,199,159,199,199,159,199,195,156,195,194,155,194,194,155,194,196,157,196,196,157,196,202,162,202,202,162,202,202,161,202,202,161,202,199,159,199,199,159,199,197,158,197,197,157,197,180,144,180,180,144,180,180,144,180,194,155,194,194,155,194,198,158,198,198,158,198,135,108,135,135,108,135,89,71,89,89,71,89,93,74,93,93,74,93,74,59,74,74,59,74,128,102,128,128,102,128,128,102,128,63,51,63,63,51,63,76,60,76,76,60,76,16,13,16,16,13,16,12,9,12,12,9,12,12,9,12,12,9,12,12,9,12,12,9,12,12,9,12,36,29,36,36,29,36,32,26,32,32,25,32,36,29,36,36,29,36,30,24,30,30,24,30,12,9,12,12,9,12,22,17,22,22,17,22,34,27,34,34,27,34,34,27,34,32,25,32,32,25,32,31,25,31,31,25,31,89,71,89,89,71,89,91,73,91,91,73,91,5,4,5,5,4,5,3,3,3,3,3,3,3,3,3,11,9,11,11,9,11,118,94,118,117,94,117,188,150,188,188,150,188,193,155,193,193,154,193,193,154,193,192,154,192,188,151,188,188,150,188,188,150,188,188,150,188,187,150,187,185,148,185,185,148,185,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,198,219,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,242,182,255,239,179,255,239,179,255,239,179,255,239,179,255,236,178,255,237,178,255,233,176,255,225,176,255,172,166,255,193,166,255,183,166,255,206,163,255,192,163,255,225,172,255,211,172,255,224,168,255,215,168,255,255,177,255,255,176,255,255,178,215,196,178,204,192,181,206,193,181,201,191,180,226,203,180,225,203,180,200,190,180,210,194,179,255,219,175,239,207,175,190,182,173,202,187,173,250,210,169,255,227,169,255,245,165,255,255,164,255,255,166,255,255,166,255,255,165,255,255,171,255,255,170,255,255,170,255,255,170,255,255,168,255,255,167,255,255,165,255,255,165,151,151,151,150,150,150,163,163,163,162,162,162,165,165,165,165,165,165,165,165,165,112,112,112,112,112,112,74,74,74,74,74,74,77,77,77,77,77,77,61,61,61,61,61,61,106,106,106,106,106,106,53,53,53,52,52,52,52,52,52,62,62,62,62,62,62,13,13,13,13,13,13,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,30,30,30,30,30,30,30,30,30,26,26,26,26,26,26,29,29,29,29,29,29,24,24,24,24,24,24,9,9,9,9,9,9,18,18,18,18,18,18,27,27,27,27,27,27,26,26,26,26,26,26,26,26,26,26,26,26,25,25,25,72,72,72,72,72,72,74,74,74,74,74,74,4,4,4,4,4,4,3,3,3,3,3,3,9,9,9,9,9,9,9,9,9,95,95,95,95,95,95,152,152,152,152,152,152,156,156,156,156,156,156,156,156,156,155,155,155,152,152,152,152,152,152,152,152,152,151,151,151,150,150,150,149,149,149,149,149,149,149,149,149,149,149,149,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,147,147,147,149,149,149,148,148,148,147,147,147,146,146,146,146,146,146,145,145,145,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,142,142,142,142,142,142,134,134,134,134,134,134,132,132,132,132,132,132,132,132,132,139,139,139,139,139,139,136,136,136,135,135,135,143,114,143,142,114,142,144,115,144,144,115,144,146,117,146,146,117,146,146,117,146,146,117,146,146,116,146,145,116,145,145,116,145,142,114,142,142,113,142,140,112,140,206,206,206,205,205,205,203,203,203,203,203,203,192,192,192,192,192,192,190,190,190,190,190,190,200,200,200,200,200,200,196,196,196,195,195,195,206,165,206,206,165,206,206,165,206,208,166,208,208,166,208,212,169,212,212,169,212,212,169,212,211,169,211,211,169,211,211,169,211,207,165,207,207,165,207,206,165,206,204,163,204,204,163,204,200,160,200,199,159,199,195,156,195,195,156,195,197,157,197,197,157,197,203,162,203,203,162,203,203,162,203,202,162,202,202,162,202,200,160,200,200,160,200,198,158,198,197,158,197,180,144,180,180,144,180,195,156,195,195,156,195,199,159,199,198,159,198,198,159,198,135,108,135,135,108,135,89,71,89,89,71,89,93,74,93,93,74,93,74,59,74,74,59,74,128,102,128,128,102,128,128,102,128,64,51,64,64,51,64,76,61,76,76,61,76,16,13,16,16,13,16,12,9,12,12,9,12,12,9,12,12,9,12,12,9,12,12,9,12,12,9,12,36,29,36,36,29,36,32,26,32,32,26,32,36,29,36,36,29,36,30,24,30,30,24,30,12,9,12,12,9,12,12,9,12,22,17,22,22,17,22,34,27,34,34,27,34,32,25,32,32,25,32,32,25,32,32,25,32,90,72,90,89,71,89,91,73,91,91,73,91,91,73,91,5,4,5,5,4,5,3,3,3,3,3,3,11,9,11,11,9,11,118,94,118,118,94,118,189,151,189,188,151,188,188,150,188,194,155,194,193,155,193,193,154,193,193,154,193,189,151,189,189,151,189,188,151,188,188,150,188,186,149,186,186,148,186,185,148,185,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,242,182,255,240,180,255,239,180,255,239,179,255,239,179,255,238,179,255,239,178,255,236,176,255,236,176,255,217,166,255,208,166,255,207,164,255,189,164,255,175,164,255,222,173,255,227,172,255,225,168,255,207,168,255,255,177,255,255,177,255,255,178,228,203,178,187,184,182,189,185,181,196,189,181,255,226,181,233,207,180,255,222,180,255,228,180,255,255,176,255,255,176,249,211,174,181,177,173,239,204,169,255,255,169,255,229,165,245,205,165,255,255,165,255,255,166,255,255,166,255,255,171,255,255,171,255,255,170,255,255,170,255,255,168,255,255,168,255,255,166,255,255,166,255,255,165,151,151,151,151,151,151,163,163,163,162,162,162,166,166,166,165,165,165,113,113,113,113,113,113,74,74,74,74,74,74,77,77,77,77,77,77,77,77,77,62,62,62,61,61,61,106,106,106,106,106,106,53,53,53,52,52,52,63,63,63,63,63,63,13,13,13,13,13,13,13,13,13,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,30,30,30,30,30,30,26,26,26,26,26,26,29,29,29,29,29,29,29,29,29,24,24,24,24,24,24,9,9,9,9,9,9,18,18,18,18,18,18,27,27,27,27,27,27,26,26,26,26,26,26,26,26,26,26,26,26,25,25,25,73,73,73,72,72,72,74,74,74,74,74,74,4,4,4,4,4,4,3,3,3,3,3,3,9,9,9,9,9,9,9,9,9,95,95,95,95,95,95,152,152,152,152,152,152,156,156,156,156,156,156,156,156,156,156,156,156,152,152,152,152,152,152,152,152,152,152,152,152,151,151,151,150,150,150,149,149,149,149,149,149,149,149,149,149,149,149,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,147,147,147,149,149,149,148,148,148,147,147,147,147,147,147,145,145,145,145,145,145,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,142,142,142,142,142,142,134,134,134,134,134,134,132,132,132,132,132,132,139,139,139,139,139,139,136,136,136,136,136,136,135,135,135,143,114,143,143,114,143,144,115,144,144,115,144,146,117,146,146,117,146,146,117,146,146,117,146,146,116,146,145,116,145,142,114,142,142,114,142,206,206,206,206,206,206,199,199,199,199,199,199,201,201,201,201,201,201,203,203,203,203,203,203,203,203,203,203,203,203,202,202,202,207,165,207,206,165,206,211,168,211,210,168,210,212,170,212,212,170,212,210,168,210,210,168,210,210,168,210,207,166,207,207,166,207,205,164,205,205,164,205,209,167,209,209,167,209,204,163,204,204,163,204,204,163,204,204,163,204,204,163,204,204,163,204,204,163,204,203,163,203,203,162,203,201,161,201,201,161,201,199,159,199,198,159,198,198,158,198,194,155,194,194,155,194,196,156,196,195,156,195,178,143,178,178,143,178,111,89,111,111,89,111,20,16,20,20,16,20,20,16,20,33,26,33,33,26,33,22,18,22,22,18,22,29,23,29,29,23,29,79,63,79,79,63,79,95,76,95,95,76,95,95,76,95,138,111,138,138,110,138,66,52,66,66,52,66,22,18,22,22,18,22,8,6,8,8,6,8,2,1,2,2,1,2,2,1,2,2,1,2,2,1,2,8,6,8,8,6,8,18,14,18,18,14,18,42,34,42,42,34,42,42,34,42,14,11,14,14,11,14,20,16,20,20,16,20,32,25,32,32,25,32,54,43,54,54,43,54,46,37,46,46,36,46,46,36,46,110,88,110,110,88,110,82,65,82,81,65,81,61,49,61,61,49,61,11,9,11,11,9,11,1,1,1,1,1,1,1,1,1,13,11,13,13,11,13,61,48,61,61,48,61,169,135,169,169,135,169,192,153,192,192,153,192,187,150,187,187,150,187,187,150,187,189,151,189,188,151,188,184,147,184,184,147,184,186,149,186,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,225,239,255,255,255,255,255,255,255,255,255,255,248,255,255,255,255,255,255,255,255,235,177,255,235,176,255,235,176,255,237,178,255,237,178,255,244,183,255,244,183,255,239,179,255,239,178,255,229,172,255,231,172,255,232,174,255,218,174,247,168,173,255,205,175,255,232,175,255,224,174,255,229,174,255,255,178,255,255,177,255,229,181,185,183,180,182,182,182,207,194,182,199,190,181,217,198,179,255,233,179,255,244,177,255,255,177,255,255,175,255,255,174,255,255,178,255,224,177,191,182,173,255,255,173,255,223,173,255,255,173,255,255,172,255,255,172,255,255,172,255,255,171,255,255,171,255,255,169,255,255,169,255,255,169,255,255,167,255,255,166,255,255,162,255,255,162,164,164,164,163,163,163,149,149,149,149,149,149,92,92,92,92,92,92,92,92,92,17,17,17,17,17,17,27,27,27,27,27,27,19,19,19,19,19,19,24,24,24,24,24,24,65,65,65,65,65,65,65,65,65,78,78,78,78,78,78,114,114,114,114,114,114,54,54,54,54,54,54,18,18,18,18,18,18,6,6,6,6,6,6,6,6,6,1,1,1,1,1,1,1,1,1,1,1,1,6,6,6,6,6,6,15,15,15,14,14,14,34,34,34,34,34,34,34,34,34,11,11,11,11,11,11,16,16,16,16,16,16,26,26,26,26,26,26,44,44,44,44,44,44,44,44,44,37,37,37,37,37,37,89,89,89,89,89,89,66,66,66,66,66,66,50,50,50,49,49,49,9,9,9,9,9,9,9,9,9,1,1,1,1,1,1,11,11,11,11,11,11,49,49,49,49,49,49,136,136,136,136,136,136,155,155,155,154,154,154,154,154,154,151,151,151,150,150,150,152,152,152,152,152,152,148,148,148,148,148,148,149,149,149,149,149,149,150,150,150,150,150,150,150,150,150,148,148,148,148,148,148,146,146,146,146,146,146,150,150,150,150,150,150,145,145,145,145,145,145,142,142,142,142,142,142,142,142,142,143,143,143,143,143,143,147,147,147,147,147,147,144,144,144,143,143,143,139,139,139,138,138,138,138,138,138,140,140,140,139,139,139,141,141,141,141,141,141,140,140,140,140,140,140,143,114,143,143,114,143,146,116,146,145,116,145,145,116,145,146,117,146,146,117,146,145,116,145,144,115,144,143,114,143,143,114,143,208,208,208,208,208,208,199,199,199,199,199,199,199,199,199,205,205,205,205,205,205,205,205,205,205,205,205,207,166,207,207,165,207,207,165,207,207,165,207,207,165,207,209,167,209,208,167,208,206,165,206,206,165,206,206,165,206,206,165,206,195,156,195,195,156,195,195,156,195,199,159,199,199,159,199,205,164,205,205,164,205,205,164,205,204,163,204,204,163,204,204,163,204,204,163,204,204,163,204,204,163,204,204,163,204,203,163,203,203,162,203,203,162,203,205,164,205,205,164,205,190,152,190,190,152,190,190,152,190,63,50,63,63,50,63,42,33,42,42,33,42,44,35,44,44,35,44,41,33,41,41,33,41,41,33,41,37,30,37,37,30,37,79,63,79,79,63,79,52,41,52,52,41,52,58,46,58,58,46,58,58,46,58,74,59,74,74,59,74,105,84,105,105,84,105,33,26,33,33,26,33,37,29,37,37,29,37,37,29,37,6,4,6,6,4,6,14,11,14,14,11,14,10,8,10,10,8,10,20,16,20,20,16,20,36,29,36,36,29,36,36,29,36,16,13,16,16,13,16,30,24,30,30,24,30,52,42,52,52,42,52,48,38,48,48,38,48,48,38,48,40,32,40,40,32,40,146,117,146,146,117,146,148,118,148,148,118,148,84,67,84,83,67,83,83,67,83,55,44,55,55,44,55,7,6,7,7,6,7,0,0,0,0,0,0,3,3,3,3,3,3,3,3,3,29,23,29,29,23,29,151,121,151,151,121,151,190,152,190,190,152,190,193,155,193,193,154,193,193,154,193,193,154,193,192,154,192,188,150,188,255,255,255,255,255,255,255,255,255,255,255,255,255,202,222,245,180,205,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,243,183,255,243,183,255,245,184,255,245,184,255,245,184,255,247,185,255,247,185,255,239,179,255,239,179,255,241,180,255,241,180,255,230,172,255,215,172,219,156,172,255,210,177,255,231,177,255,227,177,255,232,176,255,255,178,255,255,178,195,186,177,199,188,177,199,189,179,191,185,179,193,186,178,255,255,176,255,255,176,255,255,176,255,255,175,255,255,166,255,255,166,255,255,169,255,255,169,218,193,168,235,204,174,255,244,173,255,255,173,255,255,173,255,255,173,255,255,172,255,255,172,255,255,172,255,255,171,255,255,171,255,255,171,255,255,171,255,255,170,255,255,172,255,255,172,159,159,159,159,159,159,158,158,158,52,52,52,52,52,52,35,35,35,35,35,35,36,36,36,36,36,36,34,34,34,34,34,34,31,31,31,31,31,31,31,31,31,65,65,65,65,65,65,43,43,43,43,43,43,48,48,48,48,48,48,61,61,61,61,61,61,61,61,61,86,86,86,86,86,86,27,27,27,27,27,27,30,30,30,30,30,30,5,5,5,5,5,5,5,5,5,11,11,11,11,11,11,8,8,8,8,8,8,16,16,16,16,16,16,29,29,29,29,29,29,29,29,29,13,13,13,13,13,13,24,24,24,24,24,24,42,42,42,42,42,42,39,39,39,39,39,39,32,32,32,32,32,32,32,32,32,118,118,118,118,118,118,120,120,120,119,119,119,67,67,67,67,67,67,45,45,45,45,45,45,44,44,44,6,6,6,6,6,6,0,0,0,0,0,0,3,3,3,3,3,3,23,23,23,23,23,23,23,23,23,121,121,121,121,121,121,153,153,153,152,152,152,155,155,155,155,155,155,155,155,155,155,155,155,154,154,154,151,151,151,151,151,151,149,149,149,149,149,149,147,147,147,147,147,147,143,143,143,143,143,143,148,148,148,147,147,147,147,147,147,145,145,145,145,145,145,147,147,147,146,146,146,148,148,148,147,147,147,149,149,149,149,149,149,148,148,148,144,144,144,143,143,143,145,145,145,145,145,145,138,138,138,138,138,138,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,143,114,143,143,114,143,143,114,143,142,114,142,144,115,144,144,115,144,143,115,143,142,113,142,142,113,142,209,209,209,204,204,204,204,204,204,206,206,206,206,206,206,208,208,208,208,208,208,210,168,210,210,168,210,210,168,210,207,166,207,207,166,207,207,166,207,207,165,207,202,162,202,202,162,202,202,162,202,206,165,206,206,165,206,206,165,206,206,165,206,206,165,206,206,164,206,206,164,206,205,164,205,205,164,205,207,166,207,207,166,207,205,164,205,205,164,205,204,163,204,204,163,204,204,163,204,204,163,204,204,163,204,202,161,202,201,161,201,208,166,208,207,166,207,89,71,89,88,71,88,19,15,19,19,15,19,19,15,19,50,40,50,50,40,50,90,72,90,90,72,90,39,31,39,39,31,39,29,23,29,29,23,29,29,23,29,39,31,39,39,31,39,62,50,62,62,50,62,110,88,110,110,88,110,110,88,110,47,38,47,47,38,47,54,43,54,54,43,54,22,18,22,22,18,22,6,4,6,6,4,6,6,4,6,4,3,4,4,3,4,8,6,8,8,6,8,6,4,6,6,4,6,82,65,82,82,65,82,81,65,81,28,22,28,28,22,28,14,11,14,14,11,14,12,9,12,12,9,12,42,34,42,42,34,42,42,34,42,36,29,36,36,29,36,20,16,20,20,16,20,46,37,46,46,37,46,108,86,108,108,86,108,108,86,108,124,99,124,124,99,124,126,100,126,125,100,125,13,11,13,13,11,13,3,3,3,3,3,3,3,3,3,7,6,7,7,6,7,5,4,5,5,4,5,29,23,29,29,23,29,29,23,29,155,124,155,155,124,155,190,152,190,190,152,190,193,154,193,193,154,193,191,153,191,190,152,190,255,255,255,255,255,255,255,255,255,255,255,255,255,202,223,219,166,197,231,173,202,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,241,181,255,246,185,255,245,184,255,248,186,255,247,186,255,247,185,255,242,181,255,242,181,255,242,181,255,241,181,255,236,177,255,224,176,209,155,178,255,197,178,255,233,177,255,234,179,255,237,179,255,255,180,255,255,180,251,215,178,202,190,178,199,188,177,189,183,177,255,228,177,255,255,173,255,255,173,255,255,176,255,255,176,255,255,175,255,255,175,255,255,175,255,255,175,255,255,174,179,177,174,233,203,174,255,236,175,255,255,175,255,255,173,255,255,173,255,255,172,255,255,172,255,255,172,255,255,172,255,255,171,255,255,169,255,255,169,255,255,174,255,255,174,173,173,173,74,74,74,74,74,74,15,15,15,15,15,15,42,42,42,42,42,42,75,75,75,75,75,75,75,75,75,33,33,33,33,33,33,24,24,24,24,24,24,32,32,32,32,32,32,51,51,51,51,51,51,51,51,51,91,91,91,91,91,91,39,39,39,39,39,39,44,44,44,44,44,44,44,44,44,18,18,18,18,18,18,5,5,5,5,5,5,3,3,3,3,3,3,6,6,6,6,6,6,6,6,6,5,5,5,5,5,5,66,66,66,66,66,66,23,23,23,23,23,23,11,11,11,11,11,11,11,11,11,9,9,9,9,9,9,34,34,34,34,34,34,29,29,29,29,29,29,16,16,16,16,16,16,16,16,16,37,37,37,37,37,37,87,87,87,87,87,87,100,100,100,100,100,100,101,101,101,101,101,101,101,101,101,11,11,11,11,11,11,3,3,3,3,3,3,6,6,6,6,6,6,6,6,6,4,4,4,4,4,4,23,23,23,23,23,23,124,124,124,124,124,124,152,152,152,152,152,152,152,152,152,155,155,155,155,155,155,153,153,153,152,152,152,152,152,152,152,152,152,149,149,149,148,148,148,148,148,148,147,147,147,146,146,146,145,145,145,144,144,144,135,135,135,135,135,135,145,145,145,145,145,145,145,145,145,148,148,148,148,148,148,149,149,149,149,149,149,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,141,141,141,141,141,141,142,142,142,142,142,142,144,144,144,143,143,143,145,116,145,145,116,145,144,115,144,143,114,143,142,114,142,142,114,142,142,114,142,139,111,139,209,209,209,204,204,204,204,204,204,204,204,204,208,208,208,208,208,208,210,168,210,210,168,210,208,166,208,208,166,208,208,166,208,207,166,207,207,166,207,207,166,207,207,166,207,211,169,211,211,169,211,211,169,211,211,169,211,211,168,211,213,170,213,213,170,213,212,170,212,212,170,212,206,164,206,206,164,206,210,168,210,210,168,210,209,167,209,211,169,211,211,169,211,203,162,203,202,162,202,202,162,202,202,162,202,202,161,202,191,153,191,191,153,191,36,28,36,36,28,36,38,30,38,38,30,38,82,66,82,82,66,82,82,66,82,44,35,44,44,35,44,92,74,92,92,74,92,63,50,63,63,50,63,63,50,63,88,70,88,88,70,88,67,53,67,67,53,67,39,31,39,39,31,39,102,81,102,102,81,102,102,81,102,72,58,72,72,58,72,43,34,43,43,34,43,14,11,14,14,11,14,14,11,14,84,67,84,84,67,84,16,13,16,16,13,16,18,14,18,18,14,18,34,27,34,34,27,34,34,27,34,71,57,71,71,57,71,26,21,26,26,21,26,36,29,36,36,29,36,36,29,36,63,50,63,63,50,63,46,37,46,46,37,46,28,22,28,28,22,28,28,22,28,18,14,18,18,14,18,28,22,28,28,22,28,46,37,46,46,36,46,66,53,66,66,52,66,66,52,66,42,33,42,41,33,41,25,20,25,25,20,25,39,31,39,39,31,39,39,31,39,11,9,11,11,9,11,7,6,7,7,6,7,43,34,43,43,34,43,190,152,190,190,152,190,190,152,190,194,155,194,193,155,193,193,154,193,193,154,193,191,152,191,255,255,255,255,255,255,255,255,255,255,227,240,220,168,200,224,170,201,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,246,185,255,243,183,255,243,183,255,248,186,255,247,186,255,247,186,255,247,186,255,247,185,255,237,178,255,237,177,255,241,181,255,241,181,255,182,177,229,162,176,255,206,176,255,236,179,255,240,179,255,255,181,255,234,181,188,183,178,230,204,178,197,188,178,236,207,178,255,255,177,255,243,177,255,255,177,255,255,180,255,255,180,255,250,180,255,218,179,249,214,179,255,255,181,255,255,180,255,255,180,195,187,180,255,255,174,255,255,174,255,255,173,255,255,177,255,255,176,255,255,178,255,255,178,255,255,170,255,255,170,255,255,170,255,255,169,255,255,169,255,255,160,255,255,160,30,30,30,30,30,30,31,31,31,31,31,31,31,31,31,68,68,68,68,68,68,36,36,36,36,36,36,77,77,77,76,76,76,52,52,52,52,52,52,52,52,52,72,72,72,72,72,72,55,55,55,55,55,55,32,32,32,32,32,32,32,32,32,84,84,84,84,84,84,59,59,59,59,59,59,35,35,35,35,35,35,11,11,11,11,11,11,11,11,11,69,69,69,69,69,69,13,13,13,13,13,13,15,15,15,15,15,15,15,15,15,28,28,28,28,28,28,58,58,58,58,58,58,21,21,21,21,21,21,21,21,21,29,29,29,29,29,29,51,51,51,51,51,51,37,37,37,37,37,37,22,22,22,22,22,22,22,22,22,14,14,14,14,14,14,22,22,22,22,22,22,37,37,37,37,37,37,37,37,37,53,53,53,53,53,53,33,33,33,33,33,33,20,20,20,20,20,20,31,31,31,31,31,31,31,31,31,9,9,9,9,9,9,6,6,6,6,6,6,34,34,34,34,34,34,34,34,34,152,152,152,152,152,152,155,155,155,155,155,155,155,155,155,154,154,154,152,152,152,152,152,152,152,152,152,147,147,147,147,147,147,150,150,150,150,150,150,146,146,146,146,146,146,146,146,146,144,144,144,144,144,144,148,148,148,148,148,148,146,146,146,146,146,146,149,149,149,149,149,149,149,149,149,148,148,148,148,148,148,142,142,142,142,142,142,145,145,145,144,144,144,144,144,144,141,141,141,141,141,141,144,144,144,143,143,143,145,116,145,145,116,145,143,114,143,143,114,143,143,114,143,142,114,142,205,205,205,205,205,205,209,209,209,209,209,209,211,169,211,211,168,211,208,167,208,208,167,208,208,166,208,208,166,208,208,166,208,208,166,208,208,166,208,212,169,212,212,169,212,212,169,212,211,169,211,211,169,211,213,171,213,213,170,213,213,170,213,213,170,213,213,170,213,206,165,206,206,165,206,210,168,210,210,168,210,212,169,212,212,169,212,212,169,212,203,162,203,203,162,203,203,162,203,203,162,203,192,153,192,192,153,192,191,153,191,36,28,36,36,28,36,38,30,38,38,30,38,82,66,82,82,66,82,82,66,82,44,35,44,44,35,44,93,74,93,93,74,93,63,50,63,63,50,63,88,70,88,88,70,88,88,70,88,67,53,67,67,53,67,39,31,39,39,31,39,102,82,102,102,82,102,102,82,102,73,58,73,73,58,73,43,35,43,43,35,43,14,11,14,14,11,14,14,11,14,85,68,85,85,68,85,16,13,16,16,13,16,18,14,18,18,14,18,18,14,18,35,28,35,35,28,35,72,57,72,71,57,71,26,21,26,26,21,26,26,21,26,36,29,36,36,29,36,63,50,63,63,50,63,46,37,46,46,37,46,28,22,28,28,22,28,28,22,28,18,14,18,18,14,18,28,22,28,28,22,28,46,37,46,46,37,46,46,37,46,66,53,66,66,53,66,42,33,42,42,33,42,26,20,26,25,20,25,25,20,25,39,31,39,39,31,39,11,9,11,11,9,11,7,6,7,7,6,7,7,6,7,43,34,43,43,34,43,191,153,191,191,152,191,194,155,194,194,155,194,194,155,194,194,155,194,193,155,193,191,153,191,255,255,255,255,255,255,255,255,255,212,163,195,255,225,240,228,173,203,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,245,186,255,244,184,255,244,183,255,246,187,255,243,187,255,247,186,255,248,186,255,248,186,255,237,178,255,237,178,255,242,181,255,242,181,255,234,177,213,156,177,255,174,176,255,236,180,255,239,180,255,255,181,201,191,181,184,181,179,188,183,179,255,243,178,255,255,178,255,255,178,255,237,177,255,255,177,255,255,181,255,255,180,255,230,180,255,251,180,255,231,179,255,232,181,255,255,181,255,255,180,255,253,180,255,255,180,255,255,174,255,255,174,255,255,177,255,255,177,255,255,178,255,255,178,255,255,171,255,255,170,255,255,170,255,255,170,255,255,170,255,255,160,255,255,160,30,30,30,30,30,30,30,30,30,31,31,31,31,31,31,68,68,68,68,68,68,36,36,36,36,36,36,36,36,36,77,77,77,77,77,77,52,52,52,52,52,52,73,73,73,73,73,73,72,72,72,55,55,55,55,55,55,32,32,32,32,32,32,84,84,84,84,84,84,84,84,84,59,59,59,59,59,59,35,35,35,35,35,35,11,11,11,11,11,11,11,11,11,69,69,69,69,69,69,13,13,13,13,13,13,15,15,15,15,15,15,28,28,28,28,28,28,28,28,28,58,58,58,58,58,58,21,21,21,21,21,21,29,29,29,29,29,29,29,29,29,51,51,51,51,51,51,37,37,37,37,37,37,22,22,22,22,22,22,22,22,22,14,14,14,14,14,14,22,22,22,22,22,22,37,37,37,37,37,37,37,37,37,53,53,53,53,53,53,33,33,33,33,33,33,20,20,20,20,20,20,20,20,20,31,31,31,31,31,31,9,9,9,9,9,9,6,6,6,6,6,6,34,34,34,34,34,34,34,34,34,152,152,152,152,152,152,155,155,155,155,155,155,155,155,155,155,155,155,154,154,154,153,153,153,152,152,152,147,147,147,147,147,147,150,150,150,150,150,150,150,150,150,146,146,146,146,146,146,144,144,144,144,144,144,149,149,149,148,148,148,148,148,148,146,146,146,146,146,146,149,149,149,149,149,149,149,149,149,148,148,148,148,148,148,142,142,142,142,142,142,145,145,145,144,144,144,141,141,141,141,141,141,141,141,141,144,144,144,144,144,144,145,116,145,145,116,145,143,114,143,143,114,143,209,209,209,209,209,209,216,172,216,216,172,216,215,172,215,215,172,215,215,172,215,211,168,211,211,168,211,210,168,210,208,166,208,208,166,208,210,168,210,210,168,210,214,171,214,214,171,214,214,171,214,214,171,214,214,171,214,211,169,211,211,169,211,209,167,209,209,167,209,209,167,209,208,167,208,208,167,208,212,170,212,212,170,212,210,168,210,210,168,210,210,168,210,203,162,203,203,162,203,130,104,130,130,104,130,25,20,25,25,20,25,25,20,25,17,13,17,17,13,17,83,66,83,82,66,82,53,42,53,53,42,53,53,42,53,74,59,74,74,59,74,91,72,91,90,72,90,73,59,73,73,59,73,73,59,73,92,74,92,92,74,92,73,58,73,73,58,73,46,36,46,46,36,46,46,36,46,77,62,77,77,61,77,112,90,112,112,90,112,8,6,8,8,6,8,8,6,8,24,19,24,24,19,24,4,3,4,4,3,4,22,18,22,22,18,22,22,18,22,35,28,35,35,28,35,57,46,57,57,46,57,105,84,105,104,83,104,104,83,104,39,31,39,38,31,38,100,80,100,100,80,100,47,37,47,46,37,46,46,37,46,63,50,63,63,50,63,50,40,50,50,40,50,42,34,42,42,34,42,42,34,42,60,48,60,60,48,60,106,85,106,106,85,106,44,35,44,44,35,44,44,35,44,38,30,38,38,30,38,20,16,20,19,15,19,19,15,19,27,22,27,27,22,27,23,19,23,23,19,23,7,6,7,7,6,7,7,6,7,116,93,116,116,93,116,193,154,193,193,154,193,194,155,194,194,155,194,194,155,194,190,152,190,255,255,255,255,255,255,255,232,245,213,164,198,255,255,255,212,164,198,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,244,184,255,244,184,255,244,184,255,250,189,255,248,189,255,247,187,255,246,187,255,248,186,255,248,186,255,247,186,255,242,182,255,242,181,255,239,181,255,223,181,239,168,181,255,225,180,255,239,180,255,255,185,208,197,185,190,187,185,233,209,185,255,255,184,255,248,180,255,255,180,255,255,178,255,255,178,255,255,179,255,255,179,255,236,179,255,224,182,255,236,182,255,255,181,255,255,181,255,255,179,255,255,179,255,255,179,255,255,176,255,255,176,255,255,176,255,255,176,255,255,179,255,255,179,255,255,178,255,255,176,255,255,176,255,255,170,255,255,170,253,181,109,247,178,109,108,108,108,21,21,21,21,21,21,14,14,14,14,14,14,69,69,69,69,69,69,68,68,68,44,44,44,44,44,44,61,61,61,61,61,61,75,75,75,75,75,75,75,75,75,61,61,61,60,60,60,76,76,76,76,76,76,76,76,76,60,60,60,60,60,60,37,37,37,37,37,37,63,63,63,63,63,63,63,63,63,92,92,92,92,92,92,6,6,6,6,6,6,20,20,20,20,20,20,20,20,20,3,3,3,3,3,3,18,18,18,18,18,18,28,28,28,28,28,28,28,28,28,46,46,46,46,46,46,85,85,85,84,84,84,31,31,31,31,31,31,31,31,31,81,81,81,80,80,80,37,37,37,37,37,37,50,50,50,50,50,50,50,50,50,40,40,40,40,40,40,34,34,34,34,34,34,48,48,48,48,48,48,48,48,48,85,85,85,85,85,85,35,35,35,35,35,35,30,30,30,30,30,30,30,30,30,16,16,16,15,15,15,22,22,22,22,22,22,19,19,19,19,19,19,19,19,19,6,6,6,6,6,6,93,93,93,93,93,93,154,154,154,154,154,154,153,153,153,155,155,155,155,155,155,151,151,151,151,151,151,149,149,149,149,149,149,149,149,149,150,150,150,150,150,150,151,151,151,151,151,151,151,151,151,151,151,151,150,150,150,147,147,147,147,147,147,147,147,147,146,146,146,151,151,151,151,151,151,150,150,150,149,149,149,149,149,149,148,148,148,148,148,148,145,145,145,145,145,145,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,148,118,148,148,118,148,203,203,203,216,173,216,216,173,216,216,173,216,216,172,216,216,172,216,215,172,215,215,172,215,209,167,209,209,167,209,208,167,208,208,167,208,208,166,208,210,168,210,210,168,210,210,168,210,210,168,210,212,169,212,212,169,212,212,169,212,214,171,214,213,171,213,211,169,211,211,169,211,211,169,211,211,168,211,211,168,211,210,168,210,210,168,210,189,151,189,189,151,189,188,151,188,66,53,66,66,53,66,27,22,27,27,22,27,25,20,25,25,20,25,25,20,25,59,47,59,59,47,59,53,42,53,53,42,53,87,69,87,87,69,87,87,69,87,114,91,114,114,91,114,59,47,59,59,47,59,59,47,59,54,43,54,54,43,54,71,57,71,71,57,71,54,43,54,54,43,54,54,43,54,100,80,100,100,80,100,119,95,119,119,95,119,10,8,10,10,8,10,10,8,10,6,5,6,6,5,6,10,8,10,10,8,10,24,19,24,24,19,24,24,19,24,58,46,58,58,46,58,62,49,62,62,49,62,61,49,61,41,33,41,41,32,41,41,32,41,41,32,41,43,34,43,43,34,43,43,34,43,14,11,14,14,11,14,44,35,44,44,35,44,69,55,69,69,55,69,69,55,69,77,61,77,77,61,77,40,32,40,40,32,40,40,32,40,30,24,30,30,24,30,6,4,6,6,4,6,4,3,4,4,3,4,4,3,4,0,0,0,0,0,0,4,3,4,3,3,3,7,6,7,7,6,7,7,6,7,7,6,7,7,6,7,35,28,35,35,28,35,178,142,178,177,142,177,177,142,177,193,154,193,192,154,192,190,152,190,190,152,190,255,255,255,255,255,255,255,255,255,227,172,203,255,255,255,255,251,255,229,174,207,255,255,255,255,243,254,255,255,255,255,255,255,255,255,255,255,245,185,255,244,184,255,244,184,255,249,188,255,249,188,255,243,183,255,242,183,255,243,183,255,243,183,255,243,182,255,243,182,255,242,182,255,238,180,255,235,179,230,164,179,255,204,175,255,208,175,255,254,186,203,194,186,190,188,185,255,255,185,255,255,185,255,255,184,255,255,184,255,255,178,255,255,178,255,255,178,255,246,178,255,255,177,255,255,179,255,255,179,255,255,178,255,255,178,255,255,178,255,255,179,255,240,179,255,255,181,255,255,180,255,255,178,255,255,178,255,255,178,255,255,177,255,255,177,255,255,177,255,255,176,255,255,158,255,255,158,255,255,158,126,91,55,55,55,55,23,23,23,23,23,23,23,23,23,21,21,21,21,21,21,49,49,49,49,49,49,44,44,44,44,44,44,44,44,44,72,72,72,72,72,72,94,94,94,94,94,94,48,48,48,48,48,48,48,48,48,45,45,45,45,45,45,58,58,58,58,58,58,44,44,44,44,44,44,44,44,44,82,82,82,82,82,82,97,97,97,97,97,97,97,97,97,8,8,8,8,8,8,5,5,5,5,5,5,8,8,8,8,8,8,8,8,8,20,20,20,20,20,20,47,47,47,47,47,47,50,50,50,50,50,50,50,50,50,33,33,33,33,33,33,33,33,33,33,33,33,33,33,33,34,34,34,34,34,34,11,11,11,11,11,11,36,36,36,36,36,36,36,36,36,55,55,55,55,55,55,62,62,62,61,61,61,32,32,32,32,32,32,32,32,32,24,24,24,24,24,24,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,0,0,0,0,0,0,3,3,3,3,3,3,3,3,3,6,6,6,6,6,6,6,6,6,6,6,6,28,28,28,28,28,28,28,28,28,141,141,141,141,141,141,153,153,153,153,153,153,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,149,149,149,149,149,149,153,153,153,153,153,153,153,153,153,151,151,151,151,151,151,147,147,147,147,147,147,147,147,147,147,147,147,146,146,146,149,149,149,149,149,149,146,146,146,146,146,146,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,143,143,143,143,143,143,143,143,143,139,139,139,139,139,139,148,118,148,217,173,217,216,173,216,216,173,216,216,173,216,216,173,216,216,173,216,209,167,209,209,167,209,209,167,209,209,167,209,209,167,209,211,169,211,211,168,211,211,168,211,210,168,210,210,168,210,212,170,212,212,170,212,214,171,214,214,171,214,214,171,214,212,169,212,211,169,211,211,169,211,211,169,211,211,169,211,211,169,211,211,169,211,189,151,189,189,151,189,66,53,66,66,53,66,66,53,66,27,22,27,27,22,27,25,20,25,25,20,25,59,47,59,59,47,59,59,47,59,53,42,53,53,42,53,87,69,87,87,69,87,87,69,87,114,91,114,114,91,114,59,47,59,59,47,59,55,44,55,55,44,55,55,44,55,71,57,71,71,57,71,54,43,54,54,43,54,54,43,54,101,80,101,101,80,101,119,95,119,119,95,119,10,8,10,10,8,10,10,8,10,6,5,6,6,5,6,10,8,10,10,8,10,10,8,10,25,20,25,24,19,24,58,46,58,58,46,58,62,49,62,62,49,62,62,49,62,41,33,41,41,33,41,41,33,41,41,33,41,41,32,41,43,34,43,43,34,43,14,11,14,14,11,14,45,36,45,45,36,45,45,36,45,69,55,69,69,55,69,77,62,77,77,61,77,77,61,77,40,32,40,40,32,40,30,24,30,30,24,30,6,4,6,6,4,6,6,4,6,4,3,4,4,3,4,0,0,0,0,0,0,0,0,0,4,3,4,4,3,4,8,6,8,7,6,7,7,6,7,7,6,7,7,6,7,35,28,35,35,28,35,178,142,178,178,142,178,193,155,193,193,154,193,193,154,193,191,152,191,190,152,190,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,202,226,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,245,185,255,245,185,255,245,185,255,249,188,255,249,188,255,244,184,255,244,184,255,243,183,255,243,183,255,243,183,255,243,183,255,243,182,255,240,180,255,239,180,255,192,180,255,174,176,255,202,175,239,213,186,196,191,186,201,193,186,255,255,185,255,255,185,255,255,185,255,255,185,255,255,179,255,255,178,255,255,178,255,255,178,255,255,178,255,255,179,255,255,179,255,221,179,255,255,178,255,255,178,255,255,180,255,249,179,255,255,181,255,255,181,255,255,180,255,255,178,255,255,178,255,255,178,255,255,177,255,255,177,255,255,177,255,255,177,255,255,158,255,255,158,126,91,55,55,55,55,55,55,55,23,23,23,23,23,23,21,21,21,21,21,21,49,49,49,49,49,49,49,49,49,44,44,44,44,44,44,72,72,72,72,72,72,94,94,94,94,94,94,94,94,94,49,49,49,48,48,48,45,45,45,45,45,45,45,45,45,59,59,59,58,58,58,45,45,45,44,44,44,82,82,82,82,82,82,82,82,82,97,97,97,97,97,97,8,8,8,8,8,8,8,8,8,5,5,5,5,5,5,8,8,8,8,8,8,20,20,20,20,20,20,20,20,20,47,47,47,47,47,47,50,50,50,50,50,50,50,50,50,33,33,33,33,33,33,33,33,33,33,33,33,34,34,34,34,34,34,34,34,34,11,11,11,11,11,11,36,36,36,36,36,36,36,36,36,55,55,55,55,55,55,62,62,62,62,62,62,32,32,32,32,32,32,32,32,32,24,24,24,24,24,24,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,0,0,0,0,0,0,3,3,3,3,3,3,3,3,3,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,28,28,28,28,28,28,141,141,141,141,141,141,154,154,154,153,153,153,153,153,153,151,151,151,151,151,151,151,151,151,151,151,151,149,149,149,149,149,149,149,149,149,153,153,153,153,153,153,151,151,151,151,151,151,151,151,151,147,147,147,147,147,147,147,147,147,147,147,147,150,150,150,149,149,149,149,149,149,146,146,146,146,146,146,146,146,146,145,145,145,145,145,145,145,145,145,145,145,145,143,143,143,143,143,143,140,140,140,139,139,139,217,173,217,217,173,217,217,173,217,216,173,216,216,173,216,214,171,214,214,171,214,216,173,216,216,173,216,216,172,216,216,172,216,215,172,215,215,172,215,215,172,215,215,172,215,215,172,215,215,172,215,215,172,215,214,171,214,214,171,214,214,171,214,214,171,214,210,168,210,209,167,209,181,145,181,181,145,181,181,145,181,125,100,125,125,100,125,99,79,99,99,79,99,17,13,17,17,13,17,17,13,17,23,18,23,23,18,23,12,10,12,12,10,12,12,10,12,55,44,55,55,44,55,57,46,57,57,46,57,68,54,68,68,54,68,68,54,68,95,76,95,95,76,95,31,25,31,31,25,31,31,25,31,65,52,65,65,52,65,55,44,55,54,43,54,54,43,54,82,65,82,82,65,82,105,84,105,105,84,105,8,6,8,8,6,8,8,6,8,12,10,12,12,10,12,31,25,31,31,25,31,31,25,31,16,13,16,16,13,16,68,55,68,68,54,68,68,54,68,45,36,45,45,36,45,51,41,51,51,41,51,20,16,20,20,16,20,20,16,20,20,16,20,20,16,20,35,28,35,34,27,34,34,27,34,57,46,57,57,45,57,40,32,40,40,32,40,65,52,65,65,52,65,65,52,65,26,21,26,26,21,26,6,4,6,6,4,6,6,4,6,0,0,0,0,0,0,8,6,8,8,6,8,8,6,8,36,29,36,36,28,36,10,8,10,10,8,10,8,6,8,8,6,8,8,6,8,17,14,17,17,14,17,1,1,1,1,1,1,1,1,1,97,77,97,97,77,97,192,153,192,191,153,191,191,153,191,191,153,191,191,153,191,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,207,230,255,255,255,255,191,218,255,255,255,255,255,255,255,255,255,255,248,187,255,247,187,255,253,191,255,252,191,255,252,190,255,244,184,255,244,184,255,236,178,255,236,178,255,236,177,255,243,183,255,243,183,255,243,182,255,242,182,255,227,182,190,146,176,255,212,176,197,192,187,199,193,186,255,239,186,255,255,186,255,246,186,255,255,185,255,255,185,255,255,183,255,255,183,255,255,182,255,255,184,255,255,184,255,255,183,255,227,183,231,207,183,255,238,183,255,255,182,255,255,182,255,255,182,255,255,181,255,255,181,255,255,181,255,255,181,255,255,180,255,255,176,255,255,176,255,255,176,255,255,152,255,248,152,240,172,104,227,166,104,192,137,82,194,138,82,82,82,82,14,14,14,14,14,14,19,19,19,19,19,19,19,19,19,10,10,10,10,10,10,46,46,46,46,46,46,45,45,45,47,47,47,47,47,47,56,56,56,56,56,56,78,78,78,78,78,78,78,78,78,26,26,26,26,26,26,53,53,53,53,53,53,53,53,53,45,45,45,44,44,44,67,67,67,67,67,67,67,67,67,85,85,85,85,85,85,6,6,6,6,6,6,10,10,10,10,10,10,10,10,10,25,25,25,25,25,25,13,13,13,13,13,13,13,13,13,55,55,55,55,55,55,36,36,36,36,36,36,41,41,41,41,41,41,41,41,41,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,28,28,28,28,28,28,46,46,46,46,46,46,46,46,46,32,32,32,32,32,32,52,52,52,52,52,52,21,21,21,21,21,21,21,21,21,4,4,4,4,4,4,0,0,0,0,0,0,0,0,0,6,6,6,6,6,6,28,28,28,28,28,28,28,28,28,8,8,8,7,7,7,6,6,6,6,6,6,14,14,14,14,14,14,14,14,14,1,1,1,1,1,1,77,77,77,77,77,77,77,77,77,152,152,152,152,152,152,152,152,152,151,151,151,151,151,151,151,151,151,151,151,151,152,152,152,152,152,152,153,153,153,153,153,153,153,153,153,151,151,151,151,151,151,148,148,148,147,147,147,147,147,147,148,148,148,148,148,148,151,151,151,151,151,151,146,146,146,146,146,146,146,146,146,141,141,141,141,141,141,145,145,145,145,145,145,145,145,145,145,145,145,144,144,144,217,174,217,217,173,217,217,173,217,217,173,217,217,173,217,216,173,216,216,173,216,216,173,216,216,173,216,216,173,216,216,173,216,216,172,216,216,172,216,215,172,215,215,172,215,215,172,215,215,172,215,215,172,215,215,172,215,215,172,215,212,170,212,212,170,212,212,170,212,190,152,190,190,152,190,190,152,190,190,152,190,190,152,190,95,76,95,94,75,94,6,5,6,6,5,6,6,5,6,51,41,51,51,41,51,8,6,8,8,6,8,32,25,32,32,25,32,32,25,32,62,49,62,62,49,62,32,25,32,32,25,32,32,25,32,42,34,42,42,34,42,59,47,59,59,47,59,59,47,59,38,30,38,38,30,38,59,47,59,59,47,59,59,47,59,110,88,110,109,87,109,95,76,95,95,76,95,10,8,10,10,8,10,10,8,10,8,6,8,8,6,8,33,26,33,33,26,33,33,26,33,27,21,27,27,21,27,79,63,79,79,63,79,79,63,79,27,21,27,27,21,27,76,61,76,76,61,76,76,61,76,49,39,49,49,39,49,26,21,26,26,21,26,90,72,90,90,72,90,90,72,90,32,26,32,32,26,32,24,19,24,24,19,24,24,19,24,18,14,18,18,14,18,16,13,16,16,13,16,16,13,16,8,6,8,8,6,8,4,3,4,4,3,4,4,3,4,6,4,6,6,4,6,28,22,28,28,22,28,28,22,28,20,16,20,20,16,20,8,6,8,8,6,8,8,6,8,8,6,8,8,6,8,3,3,3,3,3,3,35,28,35,35,28,35,35,28,35,194,155,194,194,155,194,196,156,196,195,156,195,195,156,195,255,255,255,255,255,255,255,255,255,255,199,225,255,255,255,255,255,255,255,255,255,222,170,204,255,203,227,255,255,255,255,255,255,255,255,255,255,248,188,255,248,188,255,250,189,255,250,189,255,250,189,255,245,185,255,244,184,255,236,178,255,236,178,255,236,178,255,244,183,255,243,183,255,243,183,255,243,183,255,237,182,236,169,186,255,176,186,197,192,187,235,211,187,255,255,187,255,255,186,255,253,186,255,255,186,255,255,186,255,255,185,255,255,185,255,255,185,255,255,184,255,255,184,255,233,184,226,205,184,255,255,183,255,236,183,255,255,183,255,255,182,255,255,182,255,242,182,255,255,182,255,255,181,255,255,181,255,255,181,255,255,179,255,255,178,255,255,178,255,255,160,255,255,159,255,255,159,255,255,159,255,255,159,187,133,79,79,79,79,5,5,5,5,5,5,5,5,5,42,42,42,42,42,42,7,7,7,7,7,7,7,7,7,26,26,26,26,26,26,51,51,51,51,51,51,26,26,26,26,26,26,26,26,26,35,35,35,35,35,35,49,49,49,48,48,48,48,48,48,31,31,31,31,31,31,48,48,48,48,48,48,48,48,48,89,89,89,89,89,89,77,77,77,77,77,77,77,77,77,8,8,8,8,8,8,6,6,6,6,6,6,6,6,6,27,27,27,27,27,27,22,22,22,22,22,22,64,64,64,64,64,64,64,64,64,21,21,21,21,21,21,62,62,62,61,61,61,61,61,61,40,40,40,40,40,40,21,21,21,21,21,21,21,21,21,72,72,72,72,72,72,26,26,26,26,26,26,26,26,26,19,19,19,19,19,19,14,14,14,14,14,14,13,13,13,13,13,13,13,13,13,6,6,6,6,6,6,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,22,22,22,22,22,22,22,22,22,16,16,16,15,15,15,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,3,3,3,3,3,3,28,28,28,28,28,28,28,28,28,154,154,154,154,154,154,155,155,155,155,155,155,154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,152,152,152,151,151,151,150,150,150,149,149,149,148,148,148,150,150,150,150,150,150,149,149,149,146,146,146,146,146,146,141,141,141,141,141,141,141,141,141,145,145,145,145,145,145,145,145,145,217,174,217,217,174,217,217,174,217,217,173,217,217,173,217,217,173,217,217,173,217,216,173,216,216,173,216,216,173,216,216,173,216,216,173,216,216,173,216,216,172,216,216,172,216,215,172,215,215,172,215,215,172,215,215,172,215,213,170,213,213,170,213,191,152,191,191,152,191,190,152,190,190,152,190,190,152,190,95,76,95,95,76,95,95,76,95,6,5,6,6,5,6,51,41,51,51,41,51,51,41,51,8,6,8,8,6,8,32,25,32,32,25,32,32,25,32,62,49,62,62,49,62,32,25,32,32,25,32,32,25,32,42,34,42,42,34,42,59,47,59,59,47,59,59,47,59,38,30,38,38,30,38,59,47,59,59,47,59,59,47,59,110,88,110,110,88,110,95,76,95,95,76,95,10,8,10,10,8,10,10,8,10,8,6,8,8,6,8,33,26,33,33,26,33,33,26,33,27,21,27,27,21,27,79,63,79,79,63,79,79,63,79,27,21,27,27,21,27,77,61,77,77,61,77,77,61,77,49,39,49,49,39,49,26,21,26,26,21,26,26,21,26,91,72,91,90,72,90,33,26,33,33,26,33,32,26,32,24,19,24,24,19,24,18,14,18,18,14,18,18,14,18,16,13,16,16,13,16,8,6,8,8,6,8,8,6,8,4,3,4,4,3,4,6,4,6,6,4,6,6,4,6,28,22,28,28,22,28,20,16,20,20,16,20,8,6,8,8,6,8,8,6,8,8,6,8,8,6,8,4,3,4,4,3,4,3,3,3,35,28,35,35,28,35,195,156,195,195,156,195,194,155,194,196,157,196,196,157,196,196,156,196,255,255,255,255,255,255,255,255,255,255,241,254,255,254,255,255,255,255,255,255,255,210,164,200,255,194,221,255,255,255,255,255,255,255,255,255,255,255,255,255,248,188,255,251,190,255,250,189,255,250,189,255,245,185,255,245,185,255,235,179,255,236,178,255,235,178,255,243,184,255,244,183,255,243,183,255,243,183,255,241,183,255,204,186,255,187,186,231,209,188,243,215,187,255,250,187,255,237,187,255,255,187,255,253,186,255,255,186,255,255,186,255,255,185,255,255,185,255,255,185,255,255,185,255,255,184,255,251,184,255,255,184,255,255,183,255,255,183,255,255,183,255,255,183,255,255,182,255,255,182,255,255,182,255,255,181,255,255,181,255,255,181,255,255,179,255,255,179,255,255,160,255,255,160,255,255,159,255,255,159,255,255,159,187,133,79,79,79,79,79,79,79,5,5,5,5,5,5,43,43,43,43,43,43,42,42,42,7,7,7,7,7,7,26,26,26,26,26,26,26,26,26,51,51,51,51,51,51,26,26,26,26,26,26,35,35,35,35,35,35,35,35,35,49,49,49,49,49,49,31,31,31,31,31,31,31,31,31,48,48,48,48,48,48,90,90,90,89,89,89,89,89,89,77,77,77,77,77,77,8,8,8,8,8,8,8,8,8,6,6,6,6,6,6,27,27,27,27,27,27,27,27,27,22,22,22,22,22,22,64,64,64,64,64,64,64,64,64,21,21,21,21,21,21,62,62,62,62,62,62,61,61,61,40,40,40,40,40,40,21,21,21,21,21,21,21,21,21,72,72,72,72,72,72,26,26,26,26,26,26,26,26,26,19,19,19,19,19,19,14,14,14,14,14,14,13,13,13,13,13,13,13,13,13,6,6,6,6,6,6,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,22,22,22,22,22,22,22,22,22,16,16,16,16,16,16,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,3,3,3,3,3,3,3,3,3,28,28,28,28,28,28,154,154,154,154,154,154,154,154,154,155,155,155,155,155,155,154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,151,151,151,151,151,151,150,150,150,149,149,149,148,148,148,150,150,150,150,150,150,146,146,146,146,146,146,146,146,146,141,141,141,141,141,141,145,145,145,145,145,145,218,174,218,217,174,217,217,174,217,217,174,217,217,174,217,217,173,217,217,173,217,217,173,217,217,173,217,217,173,217,216,173,216,216,173,216,214,171,214,214,171,214,214,171,214,214,171,214,213,171,213,213,171,213,213,170,213,213,170,213,176,141,176,176,141,176,130,104,130,130,104,130,130,104,130,88,71,88,88,71,88,6,5,6,6,5,6,6,5,6,23,19,23,23,19,23,15,12,15,15,12,15,15,12,15,49,39,49,49,39,49,30,24,30,30,24,30,30,24,30,25,20,25,25,20,25,45,36,45,45,36,45,44,35,44,134,107,134,134,107,134,91,73,91,91,73,91,91,73,91,83,66,83,83,66,83,161,129,161,161,129,161,161,129,161,131,105,131,131,105,131,10,8,10,10,8,10,10,8,10,16,13,16,16,13,16,18,15,18,18,15,18,18,15,18,21,16,21,21,16,21,60,48,60,60,48,60,60,48,60,16,13,16,16,13,16,35,28,35,35,28,35,35,28,35,27,21,27,27,21,27,47,38,47,47,38,47,47,38,47,60,48,60,60,48,60,14,11,14,14,11,14,14,11,14,26,21,26,26,21,26,53,42,53,53,42,53,53,42,53,78,62,78,77,62,77,73,59,73,73,58,73,73,58,73,98,78,98,97,78,97,42,34,42,42,34,42,42,34,42,26,21,26,26,21,26,24,19,24,24,19,24,24,19,24,10,8,10,10,8,10,22,17,22,22,17,22,22,17,22,12,9,12,12,9,12,8,6,8,8,6,8,7,6,7,173,138,173,173,138,173,197,157,197,196,157,196,196,157,196,196,157,196,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,242,251,210,162,195,255,255,255,255,255,255,255,255,255,255,255,255,255,241,183,255,246,186,255,246,186,255,245,186,255,245,185,255,245,185,255,238,181,255,239,181,255,220,167,255,219,167,255,220,167,255,244,184,255,244,183,255,250,189,255,243,189,226,166,188,211,199,188,216,202,188,255,244,187,250,219,187,255,255,187,255,247,187,255,255,186,255,255,186,255,255,186,255,255,186,255,255,185,255,255,185,255,255,185,255,255,184,255,255,184,255,255,184,255,255,184,255,255,183,255,255,183,255,255,183,255,252,181,255,255,180,255,255,180,255,255,180,255,255,180,255,255,179,255,255,179,255,242,148,255,240,147,255,245,147,255,182,109,252,180,109,170,122,74,74,74,74,74,74,74,5,5,5,5,5,5,19,19,19,19,19,19,19,19,19,12,12,12,12,12,12,12,12,12,41,41,41,40,40,40,24,24,24,24,24,24,21,21,21,21,21,21,21,21,21,37,37,37,36,36,36,36,36,36,110,110,110,110,110,110,75,75,75,75,75,75,67,67,67,67,67,67,67,67,67,131,131,131,131,131,131,131,131,131,107,107,107,106,106,106,8,8,8,8,8,8,13,13,13,13,13,13,13,13,13,15,15,15,15,15,15,15,15,15,16,16,16,16,16,16,49,49,49,49,49,49,48,48,48,13,13,13,13,13,13,28,28,28,28,28,28,28,28,28,21,21,21,21,21,21,38,38,38,38,38,38,38,38,38,48,48,48,48,48,48,11,11,11,11,11,11,11,11,11,21,21,21,21,21,21,42,42,42,42,42,42,42,42,42,62,62,62,62,62,62,58,58,58,58,58,58,58,58,58,77,77,77,77,77,77,33,33,33,33,33,33,33,33,33,20,20,20,20,20,20,19,19,19,19,19,19,19,19,19,7,7,7,7,7,7,17,17,17,17,17,17,17,17,17,9,9,9,9,9,9,6,6,6,6,6,6,6,6,6,137,137,137,136,136,136,155,155,155,155,155,155,155,155,155,154,154,154,154,154,154,152,152,152,152,152,152,152,152,152,150,150,150,150,150,150,147,147,147,147,147,147,146,146,146,143,143,143,143,143,143,144,144,144,144,144,144,144,144,144,147,147,147,147,147,147,146,146,146,146,146,146,146,146,146,143,143,143,143,143,143,216,172,216,218,174,218,218,174,218,218,174,218,217,174,217,217,174,217,217,174,217,217,174,217,217,173,217,217,173,217,217,173,217,217,173,217,216,173,216,216,173,216,216,173,216,216,173,216,214,171,214,214,171,214,213,171,213,207,165,207,207,165,207,200,160,200,200,160,200,200,160,200,84,67,84,84,67,84,21,17,21,21,17,21,21,17,21,13,10,13,12,10,12,36,29,36,36,29,36,36,29,36,36,29,36,36,29,36,56,44,56,56,44,56,56,44,56,17,13,17,17,13,17,19,15,19,19,15,19,19,15,19,79,63,79,79,63,79,92,73,92,92,73,92,91,73,91,94,75,94,93,75,93,185,148,185,185,148,185,185,148,185,200,160,200,199,159,199,199,159,199,121,96,121,120,96,120,23,18,23,23,18,23,23,18,23,12,10,12,12,10,12,14,11,14,14,11,14,14,11,14,18,15,18,18,15,18,39,31,39,39,31,39,39,31,39,64,51,64,64,51,64,127,102,127,127,101,127,127,101,127,139,111,139,139,111,139,137,109,137,137,109,137,137,109,137,149,119,149,149,119,149,169,135,169,169,135,169,169,135,169,152,122,152,152,122,152,127,102,127,127,102,127,127,101,127,102,82,102,102,82,102,96,77,96,96,76,96,96,76,96,145,116,145,144,115,144,118,94,118,118,94,118,117,94,117,26,21,26,26,21,26,26,21,26,8,6,8,8,6,8,14,11,14,14,11,14,14,11,14,14,11,14,14,11,14,4,3,4,4,3,4,4,3,4,160,128,160,159,127,159,195,156,195,195,156,195,195,156,195,196,157,196,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,233,245,255,255,255,255,255,255,255,255,255,255,255,255,255,244,185,255,246,187,255,246,186,255,253,192,255,253,192,255,253,191,255,248,187,255,247,187,255,233,177,255,232,177,255,233,177,255,247,186,255,246,186,255,251,189,255,250,189,255,191,189,211,200,188,224,206,188,213,201,188,255,243,188,255,254,187,255,255,187,255,255,187,255,255,187,255,255,184,255,255,184,255,255,186,255,255,185,255,255,185,255,255,185,255,255,185,255,255,184,255,255,184,255,255,184,255,255,183,255,255,183,255,255,183,255,255,183,255,255,182,255,255,182,255,255,182,255,255,180,255,255,179,255,255,179,255,255,173,255,255,173,255,255,167,255,255,167,255,255,167,167,119,70,70,70,70,18,18,18,18,18,18,18,18,18,10,10,10,10,10,10,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,46,46,46,46,46,46,46,46,46,14,14,14,14,14,14,14,14,14,15,15,15,15,15,15,65,65,65,64,64,64,64,64,64,75,75,75,75,75,75,76,76,76,76,76,76,76,76,76,151,151,151,150,150,150,162,162,162,162,162,162,162,162,162,98,98,98,98,98,98,18,18,18,18,18,18,18,18,18,10,10,10,10,10,10,11,11,11,11,11,11,11,11,11,15,15,15,15,15,15,32,32,32,32,32,32,32,32,32,52,52,52,52,52,52,102,102,102,102,102,102,102,102,102,111,111,111,111,111,111,109,109,109,109,109,109,109,109,109,119,119,119,119,119,119,135,135,135,135,135,135,135,135,135,121,121,121,121,121,121,121,121,121,101,101,101,101,101,101,81,81,81,81,81,81,81,81,81,76,76,76,76,76,76,115,115,115,114,114,114,114,114,114,93,93,93,93,93,93,20,20,20,20,20,20,20,20,20,6,6,6,6,6,6,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,3,3,3,3,3,3,3,3,3,126,126,126,126,126,126,154,154,154,154,154,154,153,153,153,155,155,155,154,154,154,154,154,154,154,154,154,154,154,154,151,151,151,150,150,150,147,147,147,147,147,147,147,147,147,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,147,147,147,147,147,147,147,147,147,151,151,151,151,151,151,148,148,148,218,174,218,218,174,218,218,174,218,218,174,218,218,174,218,218,174,218,217,174,217,217,174,217,217,174,217,217,174,217,217,173,217,217,173,217,217,173,217,217,173,217,216,173,216,214,171,214,214,171,214,207,166,207,207,166,207,207,166,207,200,160,200,200,160,200,85,68,85,84,67,84,84,67,84,21,17,21,21,17,21,13,10,13,13,10,13,13,10,13,36,29,36,36,29,36,36,29,36,36,29,36,36,29,36,56,44,56,56,44,56,56,44,56,17,13,17,17,13,17,19,15,19,19,15,19,19,15,19,79,63,79,79,63,79,92,73,92,92,73,92,92,73,92,94,75,94,94,75,94,186,148,186,185,148,185,185,148,185,200,160,200,200,160,200,200,160,200,121,97,121,121,96,121,23,18,23,23,18,23,23,18,23,12,10,12,12,10,12,14,11,14,14,11,14,14,11,14,18,15,18,18,15,18,40,32,40,39,31,39,39,31,39,65,52,65,65,52,65,127,102,127,127,102,127,127,102,127,140,112,140,139,111,139,139,111,139,137,110,137,137,109,137,149,119,149,149,119,149,149,119,149,170,136,170,169,135,169,153,122,153,153,122,153,152,122,152,127,102,127,127,102,127,102,82,102,102,82,102,102,82,102,96,77,96,96,77,96,145,116,145,145,116,145,145,116,145,118,94,118,118,94,118,26,21,26,26,21,26,26,21,26,8,6,8,8,6,8,8,6,8,14,11,14,14,11,14,14,11,14,14,11,14,14,11,14,4,3,4,4,3,4,160,128,160,160,128,160,160,128,160,195,156,195,195,156,195,197,157,197,197,157,197,255,255,255,255,255,255,255,255,255,255,255,255,255,230,245,255,255,255,255,255,255,255,238,249,246,182,210,255,255,255,255,255,255,255,255,255,255,255,255,255,244,185,255,246,187,255,246,187,255,253,192,255,252,192,255,251,192,255,247,188,255,247,187,255,232,177,255,233,177,255,234,177,255,247,186,255,247,186,255,252,190,255,251,189,255,239,189,255,224,189,255,233,189,209,198,188,255,222,188,255,255,188,255,255,187,255,255,187,255,255,187,255,255,185,255,255,184,255,255,186,255,255,186,255,255,186,255,255,185,255,255,185,255,255,185,255,255,184,255,255,184,255,255,184,255,255,184,255,255,183,255,255,183,255,255,183,255,255,182,255,255,182,255,255,182,255,255,180,255,255,180,255,255,174,255,255,173,255,255,173,255,255,167,255,255,167,167,119,70,70,70,70,70,70,70,18,18,18,18,18,18,10,10,10,10,10,10,10,10,10,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,46,46,46,46,46,46,46,46,46,14,14,14,14,14,14,15,15,15,15,15,15,15,15,15,65,65,65,65,65,65,75,75,75,75,75,75,75,75,75,76,76,76,76,76,76,151,151,151,151,151,151,151,151,151,162,162,162,162,162,162,98,98,98,98,98,98,98,98,98,18,18,18,18,18,18,10,10,10,10,10,10,10,10,10,11,11,11,11,11,11,11,11,11,15,15,15,15,15,15,32,32,32,32,32,32,32,32,32,52,52,52,52,52,52,102,102,102,102,102,102,102,102,102,112,112,112,111,111,111,110,110,110,109,109,109,109,109,109,119,119,119,119,119,119,135,135,135,135,135,135,135,135,135,121,121,121,121,121,121,121,121,121,101,101,101,101,101,101,81,81,81,81,81,81,81,81,81,76,76,76,76,76,76,115,115,115,115,115,115,114,114,114,93,93,93,93,93,93,20,20,20,20,20,20,20,20,20,6,6,6,6,6,6,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,3,3,3,3,3,3,126,126,126,126,126,126,126,126,126,154,154,154,154,154,154,155,155,155,155,155,155,154,154,154,154,154,154,154,154,154,151,151,151,151,151,151,150,150,150,147,147,147,147,147,147,147,147,147,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,147,147,147,147,147,147,151,151,151,151,151,151,218,175,218,218,175,218,218,174,218,218,174,218,218,174,218,218,174,218,218,174,218,218,174,218,211,169,211,211,168,211,211,168,211,215,172,215,215,172,215,217,173,217,217,173,217,217,173,217,214,171,214,214,171,214,181,145,181,181,145,181,181,145,181,85,68,85,85,68,85,85,68,85,17,13,17,17,13,17,23,19,23,23,19,23,23,19,23,30,24,30,30,24,30,30,24,30,30,24,30,30,24,30,28,22,28,28,22,28,28,22,28,10,8,10,10,8,10,43,34,43,43,34,43,43,34,43,133,106,133,133,106,133,180,144,180,180,144,180,180,144,180,197,157,197,197,157,197,212,169,212,211,169,211,211,169,211,207,165,207,207,165,207,207,165,207,206,165,206,206,165,206,191,153,191,191,153,191,191,153,191,165,132,165,165,132,165,131,105,131,131,105,131,131,104,131,133,106,133,133,106,133,162,130,162,162,129,162,162,129,162,197,158,197,197,158,197,197,158,197,205,164,205,205,164,205,205,164,205,205,164,205,205,164,205,204,163,204,204,163,204,206,165,206,206,165,206,206,164,206,203,163,203,203,162,203,203,162,203,203,162,203,203,162,203,196,157,196,196,157,196,196,156,196,127,102,127,127,102,127,135,108,135,135,108,135,135,108,135,170,136,170,170,136,170,102,81,102,102,81,102,102,81,102,67,53,67,67,53,67,67,53,67,12,9,12,12,9,12,6,4,6,6,4,6,6,4,6,4,3,4,4,3,4,8,6,8,8,6,8,8,6,8,164,131,164,164,131,164,198,158,198,198,158,198,198,158,198,197,158,197,197,158,197,197,157,197,255,255,255,255,255,255,255,255,255,255,253,255,255,255,255,255,255,255,255,214,236,227,173,205,255,255,255,255,255,255,255,255,255,255,255,255,255,247,188,255,247,187,255,247,187,255,244,187,255,245,187,255,243,186,255,244,186,255,246,186,255,244,186,255,245,185,255,245,185,255,247,187,255,247,186,255,251,190,255,250,190,255,247,190,255,226,189,224,207,189,249,219,189,249,219,188,255,254,188,255,255,188,255,255,188,255,255,187,255,255,183,255,255,183,255,255,187,255,255,186,255,255,186,255,255,186,255,255,185,255,255,185,255,255,185,255,255,185,247,216,184,255,242,184,255,255,184,255,245,178,255,255,178,255,255,181,255,255,181,255,255,180,255,255,182,255,255,182,255,255,180,255,255,179,255,255,179,255,253,151,255,253,151,255,255,151,71,71,71,70,70,70,14,14,14,14,14,14,14,14,14,19,19,19,19,19,19,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,23,23,23,23,23,23,23,23,23,8,8,8,8,8,8,8,8,8,35,35,35,35,35,35,109,109,109,109,109,109,109,109,109,147,147,147,147,147,147,161,161,161,160,160,160,160,160,160,172,172,172,172,172,172,168,168,168,168,168,168,168,168,168,167,167,167,167,167,167,167,167,167,154,154,154,154,154,154,133,133,133,133,133,133,133,133,133,105,105,105,105,105,105,107,107,107,107,107,107,106,106,106,130,130,130,130,130,130,130,130,130,158,158,158,158,158,158,164,164,164,164,164,164,164,164,164,164,164,164,163,163,163,163,163,163,163,163,163,163,163,163,164,164,164,164,164,164,162,162,162,162,162,162,161,161,161,161,161,161,161,161,161,161,161,161,155,155,155,155,155,155,101,101,101,101,101,101,101,101,101,107,107,107,107,107,107,134,134,134,134,134,134,134,134,134,80,80,80,80,80,80,53,53,53,53,53,53,53,53,53,9,9,9,9,9,9,9,9,9,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,6,6,6,6,6,6,129,129,129,129,129,129,129,129,129,156,156,156,155,155,155,155,155,155,155,155,155,155,155,155,153,153,153,153,153,153,152,152,152,154,154,154,154,154,154,153,153,153,153,153,153,153,153,153,150,150,150,149,149,149,148,148,148,148,148,148,147,147,147,147,147,147,147,147,147,147,147,147,219,175,219,219,175,219,218,175,218,218,175,218,218,174,218,218,174,218,218,174,218,218,174,218,218,174,218,218,174,218,217,174,217,217,174,217,217,174,217,217,174,217,217,173,217,217,173,217,217,173,217,160,128,160,159,127,159,159,127,159,74,59,74,74,59,74,17,13,17,17,13,17,17,13,17,24,19,24,23,19,23,23,19,23,6,5,6,6,5,6,32,26,32,32,26,32,32,26,32,23,19,23,23,19,23,19,15,19,19,15,19,19,15,19,19,15,19,19,15,19,19,15,19,144,115,144,144,115,144,202,162,202,202,161,202,202,161,202,208,166,208,208,166,208,208,166,208,208,166,208,207,166,207,209,167,209,209,167,209,209,167,209,211,169,211,211,169,211,209,167,209,208,167,208,208,167,208,210,168,210,210,168,210,208,166,208,208,166,208,207,166,207,207,166,207,207,166,207,207,165,207,207,165,207,207,165,207,208,167,208,208,167,208,208,166,208,206,165,206,206,164,206,208,166,208,207,166,207,207,166,207,207,165,207,207,165,207,207,165,207,206,165,206,206,165,206,206,165,206,206,165,206,206,164,206,203,163,203,203,162,203,203,162,203,203,162,203,202,162,202,200,160,200,200,160,200,200,160,200,144,115,144,144,115,144,94,75,94,94,75,94,94,75,94,114,91,114,114,91,114,153,122,153,153,122,153,153,122,153,36,29,36,36,29,36,36,29,36,8,6,8,8,6,8,20,16,20,20,16,20,20,16,20,38,30,38,38,30,38,38,30,38,187,149,187,187,149,187,194,155,194,194,155,194,194,155,194,194,155,194,193,155,193,195,156,195,255,255,255,255,255,255,255,255,255,255,253,255,255,255,255,255,255,255,255,255,255,255,209,228,255,255,255,255,255,255,255,255,255,255,255,255,255,245,186,255,244,186,255,244,186,255,240,183,255,241,183,255,240,183,255,244,186,255,246,186,255,251,190,255,251,190,255,250,189,255,248,187,255,247,187,255,249,189,255,244,188,255,216,188,233,211,190,232,211,189,207,198,189,212,200,189,255,254,189,255,255,188,255,255,188,255,255,188,255,255,187,255,255,187,255,255,187,255,255,187,255,255,186,255,255,186,255,255,186,255,255,186,255,255,185,255,235,185,200,192,185,255,255,184,255,238,184,255,247,184,255,243,184,255,255,183,255,255,183,255,255,183,255,255,182,255,255,182,255,255,182,255,255,182,255,255,181,255,224,133,255,223,133,255,223,133,62,62,62,61,61,61,14,14,14,14,14,14,14,14,14,19,19,19,19,19,19,19,19,19,5,5,5,5,5,5,26,26,26,26,26,26,26,26,26,19,19,19,19,19,19,19,19,19,16,16,16,16,16,16,15,15,15,15,15,15,15,15,15,118,118,118,118,118,118,165,165,165,165,165,165,165,165,165,170,170,170,169,169,169,169,169,169,169,169,169,168,168,168,170,170,170,170,170,170,169,169,169,171,171,171,171,171,171,169,169,169,168,168,168,168,168,168,170,170,170,169,169,169,169,169,169,167,167,167,167,167,167,167,167,167,166,166,166,166,166,166,166,166,166,165,165,165,167,167,167,167,167,167,166,166,166,164,164,164,164,164,164,164,164,164,165,165,165,165,165,165,165,165,165,165,165,165,164,164,164,164,164,164,164,164,164,164,164,164,163,163,163,163,163,163,161,161,161,161,161,161,161,161,161,161,161,161,160,160,160,158,158,158,158,158,158,158,158,158,114,114,114,113,113,113,74,74,74,74,74,74,74,74,74,90,90,90,90,90,90,90,90,90,120,120,120,120,120,120,28,28,28,28,28,28,28,28,28,6,6,6,6,6,6,15,15,15,15,15,15,15,15,15,30,30,30,30,30,30,30,30,30,147,147,147,146,146,146,153,153,153,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,153,153,153,153,153,153,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,145,145,145,145,145,145,145,145,145,138,138,138,138,138,138,138,138,138,146,146,146,219,175,219,219,175,219,219,175,219,219,175,219,218,175,218,218,175,218,218,174,218,218,174,218,218,174,218,218,174,218,218,174,218,218,174,218,217,174,217,217,174,217,217,174,217,217,174,217,160,128,160,160,128,160,74,59,74,74,59,74,74,59,74,17,14,17,17,14,17,17,14,17,24,19,24,24,19,24,6,5,6,6,5,6,6,5,6,32,26,32,32,26,32,32,26,32,23,19,23,23,19,23,19,15,19,19,15,19,19,15,19,19,15,19,19,15,19,145,116,145,144,115,144,144,115,144,203,162,203,202,162,202,202,162,202,209,167,209,208,167,208,208,167,208,208,166,208,208,166,208,210,168,210,210,168,210,210,168,210,212,169,212,211,169,211,209,167,209,209,167,209,209,167,209,211,168,211,211,168,211,210,168,210,208,166,208,208,166,208,208,166,208,208,166,208,207,166,207,207,166,207,207,166,207,209,167,209,209,167,209,209,167,209,206,165,206,206,165,206,206,165,206,208,166,208,208,166,208,207,166,207,207,166,207,207,166,207,207,165,207,207,165,207,206,165,206,206,165,206,206,165,206,204,163,204,204,163,204,203,163,203,203,162,203,203,162,203,201,160,201,200,160,200,200,160,200,144,115,144,144,115,144,144,115,144,94,75,94,94,75,94,115,92,115,115,92,115,114,91,114,153,123,153,153,122,153,153,122,153,36,29,36,36,29,36,8,6,8,8,6,8,8,6,8,20,16,20,20,16,20,20,16,20,38,30,38,38,30,38,187,150,187,187,150,187,187,149,187,195,156,195,195,156,195,194,155,194,194,155,194,194,155,194,196,156,196,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,225,239,255,255,255,255,255,255,255,255,255,255,255,255,255,245,186,255,245,186,255,244,186,255,241,184,255,242,183,255,247,187,255,244,187,255,245,187,255,251,190,255,251,190,255,251,190,255,248,188,255,248,187,255,250,189,255,217,189,213,161,188,208,199,190,200,195,190,205,197,190,222,206,189,255,255,189,255,255,189,255,255,188,255,255,188,255,255,188,255,255,188,255,255,187,255,255,187,255,255,187,255,255,187,255,255,186,255,255,186,255,224,186,251,218,185,238,212,185,255,232,185,255,231,185,255,250,184,255,219,184,255,255,184,255,255,183,255,255,183,255,255,183,255,255,183,255,255,182,255,255,182,255,255,182,255,255,182,255,224,134,255,225,133,146,104,62,62,62,62,62,62,62,14,14,14,14,14,14,19,19,19,19,19,19,19,19,19,5,5,5,5,5,5,5,5,5,26,26,26,26,26,26,19,19,19,19,19,19,19,19,19,16,16,16,16,16,16,16,16,16,15,15,15,15,15,15,118,118,118,118,118,118,118,118,118,165,165,165,165,165,165,165,165,165,170,170,170,169,169,169,169,169,169,169,169,169,169,169,169,170,170,170,170,170,170,171,171,171,171,171,171,171,171,171,169,169,169,169,169,169,168,168,168,170,170,170,169,169,169,167,167,167,167,167,167,167,167,167,167,167,167,166,166,166,166,166,166,166,166,166,166,166,166,167,167,167,167,167,167,167,167,167,165,165,165,164,164,164,166,166,166,166,166,166,165,165,165,165,165,165,165,165,165,165,165,165,164,164,164,164,164,164,164,164,164,164,164,164,163,163,163,161,161,161,161,161,161,161,161,161,161,161,161,160,160,160,159,159,159,158,158,158,158,158,158,114,114,114,114,114,114,113,113,113,74,74,74,74,74,74,90,90,90,90,90,90,90,90,90,121,121,121,120,120,120,28,28,28,28,28,28,28,28,28,6,6,6,6,6,6,6,6,6,15,15,15,15,15,15,30,30,30,30,30,30,30,30,30,147,147,147,147,147,147,146,146,146,153,153,153,152,152,152,152,152,152,152,152,152,152,152,152,153,153,153,153,153,153,153,153,153,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,145,145,145,145,145,145,139,139,139,138,138,138,138,138,138]
\ No newline at end of file
diff --git a/testsuite/tests/hpc/raytrace/test.T b/testsuite/tests/hpc/raytrace/test.T
new file mode 100644
index 0000000000000000000000000000000000000000..28d80ae92d8047534e71c0b48050c472242d3e06
--- /dev/null
+++ b/testsuite/tests/hpc/raytrace/test.T
@@ -0,0 +1,20 @@
+setTestOpts([
+  omit_ghci, # really slow
+  when(fast(), skip)
+])
+
+hpc_prefix = "perl hpcrun.pl --clear --exeext={exeext} --hpc={hpc}"
+
+# TODO. It is unclear what the purpose of this test is. It produces lots of
+# output, but the expected output file is missing. I (thomie) added
+# the ignore_stdout setup function, just to make the test pass for the
+# moment.
+# Note that the subdirectory tixs also has a test.T file, and those tests
+# depend on some of the files in this directory.
+# Also note that testsuite/tests/programs/galois_raytrace has a similar (but
+# not the same) copy of this program.
+test('hpc_raytrace',
+     [extra_files(['../hpcrun.pl', 'CSG.hs', 'Construct.hs', 'Data.hs', 'Eval.hs', 'Geometry.hs', 'Illumination.hs', 'Intersections.hs', 'Interval.hs', 'Main.hs', 'Misc.hs', 'Parse.hs', 'Primitives.hs', 'Surface.hs', 'galois.gml', 'galois.sample']),
+      cmd_prefix(hpc_prefix), ignore_stdout],
+     multimod_compile_and_run, ['Main','-fhpc -package parsec'])
+
diff --git a/testsuite/tests/hpc/raytrace/tixs/.hpc/CSG.mix b/testsuite/tests/hpc/raytrace/tixs/.hpc/CSG.mix
new file mode 100644
index 0000000000000000000000000000000000000000..8dc1d3d569806598e113c5fab7598751901f7c31
--- /dev/null
+++ b/testsuite/tests/hpc/raytrace/tixs/.hpc/CSG.mix
@@ -0,0 +1 @@
+Mix "./CSG.hs" 2011-06-30 14:14:25 UTC 1441175296 8 []
\ No newline at end of file
diff --git a/testsuite/tests/hpc/raytrace/tixs/.hpc/Construct.mix b/testsuite/tests/hpc/raytrace/tixs/.hpc/Construct.mix
new file mode 100644
index 0000000000000000000000000000000000000000..6a06e4bd11a50099d5292174e2d29160adc0afbb
--- /dev/null
+++ b/testsuite/tests/hpc/raytrace/tixs/.hpc/Construct.mix
@@ -0,0 +1 @@
+Mix "./Construct.hs" 2011-06-30 14:14:25 UTC 2039014732 8 [(258:23-258:24,ExpBox False),(258:26-258:27,ExpBox False),(258:29-258:30,ExpBox False),(258:17-258:30,ExpBox False),(259:23-259:24,ExpBox False),(259:26-259:27,ExpBox False),(259:29-259:30,ExpBox False),(259:17-259:30,ExpBox False),(260:23-260:24,ExpBox False),(260:26-260:27,ExpBox False),(260:29-260:30,ExpBox False),(260:17-260:30,ExpBox False),(261:23-261:24,ExpBox False),(261:26-261:27,ExpBox False),(261:29-261:30,ExpBox False),(261:17-261:30,ExpBox False),(262:23-262:24,ExpBox False),(262:26-262:27,ExpBox False),(262:29-262:30,ExpBox False),(262:17-262:30,ExpBox False),(263:23-263:24,ExpBox False),(263:26-263:27,ExpBox False),(263:29-263:30,ExpBox False),(263:17-263:30,ExpBox False),(264:23-264:24,ExpBox False),(264:26-264:27,ExpBox False),(264:29-264:30,ExpBox False),(264:17-264:30,ExpBox False),(265:23-265:24,ExpBox False),(265:26-265:27,ExpBox False),(265:29-265:30,ExpBox False),(265:17-265:30,ExpBox False),(258:16-265:31,ExpBox False),(258:9-265:31,LocalBox ["transformBox","pts"]),(257:28-257:28,ExpBox False),(257:20-257:29,ExpBox False),(257:31-257:33,ExpBox False),(257:16-257:33,ExpBox False),(257:9-257:33,LocalBox ["transformBox","pts'"]),(251:16-251:18,ExpBox False),(251:25-251:30,ExpBox False),(251:32-251:35,ExpBox False),(251:20-251:36,ExpBox False),(251:8-251:37,ExpBox False),(252:16-252:18,ExpBox False),(252:25-252:30,ExpBox False),(252:32-252:35,ExpBox False),(252:20-252:36,ExpBox False),(252:8-252:37,ExpBox False),(253:16-253:18,ExpBox False),(253:25-253:30,ExpBox False),(253:32-253:35,ExpBox False),(253:20-253:36,ExpBox False),(253:8-253:37,ExpBox False),(254:16-254:18,ExpBox False),(254:25-254:30,ExpBox False),(254:32-254:35,ExpBox False),(254:20-254:36,ExpBox False),(254:8-254:37,ExpBox False),(255:16-255:18,ExpBox False),(255:25-255:30,ExpBox False),(255:32-255:35,ExpBox False),(255:20-255:36,ExpBox False),(255:8-255:37,ExpBox False),(256:16-256:18,ExpBox False),(256:25-256:30,ExpBox False),(256:32-256:35,ExpBox False),(256:20-256:36,ExpBox False),(256:8-256:37,ExpBox False),(251:5-256:38,ExpBox False),(250:1-265:31,TopLevelBox ["transformBox"]),(246:8-246:10,ExpBox False),(246:18-246:20,ExpBox False),(246:7-246:21,ExpBox False),(246:24-246:26,ExpBox False),(246:34-246:36,ExpBox False),(246:23-246:37,ExpBox False),(247:8-247:10,ExpBox False),(247:18-247:20,ExpBox False),(247:7-247:21,ExpBox False),(247:24-247:26,ExpBox False),(247:34-247:36,ExpBox False),(247:23-247:37,ExpBox False),(248:8-248:10,ExpBox False),(248:18-248:20,ExpBox False),(248:7-248:21,ExpBox False),(248:24-248:26,ExpBox False),(248:34-248:36,ExpBox False),(248:23-248:37,ExpBox False),(246:5-248:37,ExpBox False),(245:1-248:37,TopLevelBox ["mergeBox"]),(205:16-205:16,ExpBox False),(205:12-205:16,ExpBox False),(205:24-205:24,ExpBox False),(205:20-205:24,ExpBox False),(205:19-205:24,ExpBox False),(205:32-205:32,ExpBox False),(205:35-205:35,ExpBox False),(205:9-205:37,ExpBox False),(206:16-206:16,ExpBox False),(206:12-206:16,ExpBox False),(206:24-206:24,ExpBox False),(206:20-206:24,ExpBox False),(206:32-206:32,ExpBox False),(206:35-206:35,ExpBox False),(206:9-206:37,ExpBox False),(207:16-207:16,ExpBox False),(207:24-207:24,ExpBox False),(207:32-207:32,ExpBox False),(207:35-207:35,ExpBox False),(207:9-207:37,ExpBox False),(208:16-208:16,ExpBox False),(208:24-208:24,ExpBox False),(208:32-208:32,ExpBox False),(208:35-208:35,ExpBox False),(208:9-208:37,ExpBox False),(205:7-208:39,ExpBox False),(204:7-208:39,ExpBox False),(210:16-210:16,ExpBox False),(210:12-210:16,ExpBox False),(210:24-210:24,ExpBox False),(210:20-210:24,ExpBox False),(210:32-210:32,ExpBox False),(210:35-210:35,ExpBox False),(210:9-210:37,ExpBox False),(211:16-211:16,ExpBox False),(211:12-211:16,ExpBox False),(211:11-211:16,ExpBox False),(211:24-211:24,ExpBox False),(211:20-211:24,ExpBox False),(211:32-211:32,ExpBox False),(211:35-211:35,ExpBox False),(211:9-211:37,ExpBox False),(212:16-212:16,ExpBox False),(212:24-212:24,ExpBox False),(212:32-212:32,ExpBox False),(212:35-212:35,ExpBox False),(212:9-212:37,ExpBox False),(213:16-213:16,ExpBox False),(213:24-213:24,ExpBox False),(213:32-213:32,ExpBox False),(213:35-213:35,ExpBox False),(213:9-213:37,ExpBox False),(210:7-213:39,ExpBox False),(209:7-213:39,ExpBox False),(204:5-213:41,ExpBox False),(203:1-213:41,TopLevelBox ["rotzM"]),(239:26-239:26,ExpBox False),(239:20-239:26,ExpBox False),(238:13-238:14,ExpBox False),(238:16-238:19,ExpBox False),(238:6-238:19,ExpBox False),(238:29-238:32,ExpBox False),(238:34-238:35,ExpBox False),(238:22-238:35,ExpBox False),(238:5-238:36,ExpBox False),(237:1-239:26,TopLevelBox ["rotateEyeZ"]),(193:16-193:16,ExpBox False),(193:12-193:16,ExpBox False),(193:24-193:24,ExpBox False),(193:32-193:32,ExpBox False),(193:28-193:32,ExpBox False),(193:35-193:35,ExpBox False),(193:9-193:37,ExpBox False),(194:16-194:16,ExpBox False),(194:24-194:24,ExpBox False),(194:32-194:32,ExpBox False),(194:35-194:35,ExpBox False),(194:9-194:37,ExpBox False),(195:16-195:16,ExpBox False),(195:12-195:16,ExpBox False),(195:11-195:16,ExpBox False),(195:24-195:24,ExpBox False),(195:32-195:32,ExpBox False),(195:28-195:32,ExpBox False),(195:35-195:35,ExpBox False),(195:9-195:37,ExpBox False),(196:16-196:16,ExpBox False),(196:24-196:24,ExpBox False),(196:32-196:32,ExpBox False),(196:35-196:35,ExpBox False),(196:9-196:37,ExpBox False),(193:7-196:39,ExpBox False),(192:7-196:39,ExpBox False),(198:16-198:16,ExpBox False),(198:12-198:16,ExpBox False),(198:24-198:24,ExpBox False),(198:32-198:32,ExpBox False),(198:28-198:32,ExpBox False),(198:27-198:32,ExpBox False),(198:35-198:35,ExpBox False),(198:9-198:37,ExpBox False),(199:16-199:16,ExpBox False),(199:24-199:24,ExpBox False),(199:32-199:32,ExpBox False),(199:35-199:35,ExpBox False),(199:9-199:37,ExpBox False),(200:16-200:16,ExpBox False),(200:12-200:16,ExpBox False),(200:24-200:24,ExpBox False),(200:32-200:32,ExpBox False),(200:28-200:32,ExpBox False),(200:35-200:35,ExpBox False),(200:9-200:37,ExpBox False),(201:16-201:16,ExpBox False),(201:24-201:24,ExpBox False),(201:32-201:32,ExpBox False),(201:35-201:35,ExpBox False),(201:9-201:37,ExpBox False),(198:7-201:39,ExpBox False),(197:7-201:39,ExpBox False),(192:5-201:41,ExpBox False),(191:1-201:41,TopLevelBox ["rotyM"]),(236:26-236:26,ExpBox False),(236:20-236:26,ExpBox False),(235:13-235:14,ExpBox False),(235:16-235:19,ExpBox False),(235:6-235:19,ExpBox False),(235:29-235:32,ExpBox False),(235:34-235:35,ExpBox False),(235:22-235:35,ExpBox False),(235:5-235:36,ExpBox False),(234:1-236:26,TopLevelBox ["rotateEyeY"]),(181:16-181:16,ExpBox False),(181:24-181:24,ExpBox False),(181:32-181:32,ExpBox False),(181:35-181:35,ExpBox False),(181:9-181:37,ExpBox False),(182:16-182:16,ExpBox False),(182:24-182:24,ExpBox False),(182:20-182:24,ExpBox False),(182:32-182:32,ExpBox False),(182:28-182:32,ExpBox False),(182:27-182:32,ExpBox False),(182:35-182:35,ExpBox False),(182:9-182:37,ExpBox False),(183:16-183:16,ExpBox False),(183:24-183:24,ExpBox False),(183:20-183:24,ExpBox False),(183:32-183:32,ExpBox False),(183:28-183:32,ExpBox False),(183:35-183:35,ExpBox False),(183:9-183:37,ExpBox False),(184:16-184:16,ExpBox False),(184:24-184:24,ExpBox False),(184:32-184:32,ExpBox False),(184:35-184:35,ExpBox False),(184:9-184:37,ExpBox False),(181:7-184:39,ExpBox False),(180:7-184:39,ExpBox False),(186:16-186:16,ExpBox False),(186:24-186:24,ExpBox False),(186:32-186:32,ExpBox False),(186:35-186:35,ExpBox False),(186:9-186:37,ExpBox False),(187:16-187:16,ExpBox False),(187:24-187:24,ExpBox False),(187:20-187:24,ExpBox False),(187:32-187:32,ExpBox False),(187:28-187:32,ExpBox False),(187:35-187:35,ExpBox False),(187:9-187:37,ExpBox False),(188:16-188:16,ExpBox False),(188:24-188:24,ExpBox False),(188:20-188:24,ExpBox False),(188:19-188:24,ExpBox False),(188:32-188:32,ExpBox False),(188:28-188:32,ExpBox False),(188:35-188:35,ExpBox False),(188:9-188:37,ExpBox False),(189:16-189:16,ExpBox False),(189:24-189:24,ExpBox False),(189:32-189:32,ExpBox False),(189:35-189:35,ExpBox False),(189:9-189:37,ExpBox False),(186:7-189:39,ExpBox False),(185:7-189:39,ExpBox False),(180:5-189:41,ExpBox False),(179:1-189:41,TopLevelBox ["rotxM"]),(233:26-233:26,ExpBox False),(233:20-233:26,ExpBox False),(232:13-232:14,ExpBox False),(232:16-232:19,ExpBox False),(232:6-232:19,ExpBox False),(232:29-232:32,ExpBox False),(232:34-232:35,ExpBox False),(232:22-232:35,ExpBox False),(232:5-232:36,ExpBox False),(231:1-233:26,TopLevelBox ["rotateEyeX"]),(177:22-177:22,ExpBox False),(177:14-177:22,ExpBox False),(177:9-177:22,LocalBox ["scaleM","z'"]),(176:22-176:22,ExpBox False),(176:14-176:22,ExpBox False),(176:9-176:22,LocalBox ["scaleM","y'"]),(175:22-175:22,ExpBox False),(175:14-175:22,ExpBox False),(175:9-175:22,LocalBox ["scaleM","x'"]),(166:13-166:14,ExpBox False),(166:20-166:20,ExpBox False),(166:26-166:26,ExpBox False),(166:29-166:29,ExpBox False),(166:9-166:31,ExpBox False),(167:14-167:14,ExpBox False),(167:19-167:20,ExpBox False),(167:26-167:26,ExpBox False),(167:29-167:29,ExpBox False),(167:9-167:31,ExpBox False),(168:14-168:14,ExpBox False),(168:20-168:20,ExpBox False),(168:25-168:26,ExpBox False),(168:29-168:29,ExpBox False),(168:9-168:31,ExpBox False),(169:14-169:14,ExpBox False),(169:20-169:20,ExpBox False),(169:26-169:26,ExpBox False),(169:29-169:29,ExpBox False),(169:9-169:31,ExpBox False),(166:7-169:33,ExpBox False),(165:7-169:33,ExpBox False),(171:11-171:11,ExpBox False),(171:13-171:14,ExpBox False),(171:11-171:14,ExpBox False),(171:20-171:20,ExpBox False),(171:26-171:26,ExpBox False),(171:29-171:29,ExpBox False),(171:9-171:31,ExpBox False),(172:14-172:14,ExpBox False),(172:17-172:17,ExpBox False),(172:19-172:20,ExpBox False),(172:17-172:20,ExpBox False),(172:26-172:26,ExpBox False),(172:29-172:29,ExpBox False),(172:9-172:31,ExpBox False),(173:14-173:14,ExpBox False),(173:20-173:20,ExpBox False),(173:23-173:23,ExpBox False),(173:25-173:26,ExpBox False),(173:23-173:26,ExpBox False),(173:29-173:29,ExpBox False),(173:9-173:31,ExpBox False),(174:14-174:14,ExpBox False),(174:20-174:20,ExpBox False),(174:26-174:26,ExpBox False),(174:29-174:29,ExpBox False),(174:9-174:31,ExpBox False),(171:7-174:33,ExpBox False),(170:7-174:33,ExpBox False),(165:5-174:35,ExpBox False),(164:1-177:22,TopLevelBox ["scaleM"]),(154:11-154:11,ExpBox False),(154:14-154:14,ExpBox False),(154:17-154:17,ExpBox False),(154:20-154:20,ExpBox False),(154:9-154:22,ExpBox False),(155:11-155:11,ExpBox False),(155:14-155:14,ExpBox False),(155:17-155:17,ExpBox False),(155:20-155:20,ExpBox False),(155:9-155:22,ExpBox False),(156:11-156:11,ExpBox False),(156:14-156:14,ExpBox False),(156:17-156:17,ExpBox False),(156:20-156:20,ExpBox False),(156:9-156:22,ExpBox False),(157:11-157:11,ExpBox False),(157:14-157:14,ExpBox False),(157:17-157:17,ExpBox False),(157:20-157:20,ExpBox False),(157:9-157:22,ExpBox False),(154:7-157:24,ExpBox False),(153:7-157:24,ExpBox False),(159:11-159:11,ExpBox False),(159:14-159:14,ExpBox False),(159:17-159:17,ExpBox False),(159:21-159:21,ExpBox False),(159:20-159:21,ExpBox False),(159:9-159:23,ExpBox False),(160:11-160:11,ExpBox False),(160:14-160:14,ExpBox False),(160:17-160:17,ExpBox False),(160:21-160:21,ExpBox False),(160:20-160:21,ExpBox False),(160:9-160:23,ExpBox False),(161:11-161:11,ExpBox False),(161:14-161:14,ExpBox False),(161:17-161:17,ExpBox False),(161:21-161:21,ExpBox False),(161:20-161:21,ExpBox False),(161:9-161:23,ExpBox False),(162:11-162:11,ExpBox False),(162:14-162:14,ExpBox False),(162:17-162:17,ExpBox False),(162:21-162:21,ExpBox False),(162:9-162:23,ExpBox False),(159:7-162:25,ExpBox False),(158:7-162:25,ExpBox False),(153:5-162:27,ExpBox False),(152:1-162:27,TopLevelBox ["transM"]),(230:27-230:29,ExpBox False),(230:20-230:29,ExpBox False),(229:13-229:14,ExpBox False),(229:16-229:19,ExpBox False),(229:6-229:19,ExpBox False),(229:29-229:32,ExpBox False),(229:34-229:35,ExpBox False),(229:22-229:35,ExpBox False),(229:5-229:36,ExpBox False),(228:1-230:29,TopLevelBox ["translateEye"]),(147:11-147:13,ExpBox False),(147:16-147:18,ExpBox False),(147:21-147:23,ExpBox False),(147:26-147:28,ExpBox False),(147:9-147:30,ExpBox False),(148:11-148:13,ExpBox False),(148:16-148:18,ExpBox False),(148:21-148:23,ExpBox False),(148:26-148:28,ExpBox False),(148:9-148:30,ExpBox False),(149:11-149:13,ExpBox False),(149:16-149:18,ExpBox False),(149:21-149:23,ExpBox False),(149:26-149:28,ExpBox False),(149:9-149:30,ExpBox False),(150:11-150:13,ExpBox False),(150:16-150:18,ExpBox False),(150:21-150:23,ExpBox False),(150:26-150:28,ExpBox False),(150:9-150:30,ExpBox False),(147:7-150:32,ExpBox False),(146:8-150:32,ExpBox False),(146:1-150:32,TopLevelBox ["unit"]),(227:8-227:11,ExpBox False),(227:14-227:17,ExpBox False),(227:7-227:18,ExpBox False),(227:1-227:18,TopLevelBox ["eye"]),(116:63-116:63,ExpBox False),(116:65-116:66,ExpBox False),(116:55-116:67,ExpBox False),(116:83-116:85,ExpBox False),(116:87-116:88,ExpBox False),(116:75-116:89,ExpBox False),(116:91-116:91,ExpBox False),(116:44-116:91,ExpBox True),(117:66-117:68,ExpBox False),(117:70-117:70,ExpBox False),(117:55-117:71,ExpBox False),(117:86-117:88,ExpBox False),(117:90-117:90,ExpBox False),(117:75-117:91,ExpBox False),(117:44-117:91,ExpBox True),(118:66-118:68,ExpBox False),(118:70-118:70,ExpBox False),(118:55-118:71,ExpBox False),(118:86-118:88,ExpBox False),(118:90-118:90,ExpBox False),(118:75-118:91,ExpBox False),(118:44-118:91,ExpBox True),(119:66-119:68,ExpBox False),(119:70-119:70,ExpBox False),(119:55-119:71,ExpBox False),(119:86-119:88,ExpBox False),(119:90-119:90,ExpBox False),(119:75-119:91,ExpBox False),(119:44-119:91,ExpBox True),(120:69-120:69,ExpBox False),(120:71-120:73,ExpBox False),(120:55-120:74,ExpBox False),(120:87-120:89,ExpBox False),(120:91-120:91,ExpBox False),(120:76-120:92,ExpBox False),(120:44-120:92,ExpBox True),(121:55-121:55,ExpBox False),(121:57-121:58,ExpBox False),(121:60-121:63,ExpBox False),(121:44-121:63,ExpBox True),(116:1-121:63,TopLevelBox ["transform"]),(126:17-126:25,ExpBox False),(126:36-126:38,ExpBox False),(126:29-126:38,ExpBox False),(126:17-126:38,ExpBox False),(126:1-126:38,TopLevelBox ["translate"]),(127:27-127:27,ExpBox False),(127:30-127:30,ExpBox False),(127:33-127:33,ExpBox False),(127:26-127:34,ExpBox False),(127:16-127:34,ExpBox False),(127:1-127:34,TopLevelBox ["translateX"]),(128:27-128:27,ExpBox False),(128:30-128:30,ExpBox False),(128:33-128:33,ExpBox False),(128:26-128:34,ExpBox False),(128:16-128:34,ExpBox False),(128:1-128:34,TopLevelBox ["translateY"]),(129:27-129:27,ExpBox False),(129:30-129:30,ExpBox False),(129:33-129:33,ExpBox False),(129:26-129:34,ExpBox False),(129:16-129:34,ExpBox False),(129:1-129:34,TopLevelBox ["translateZ"]),(134:13-134:21,ExpBox False),(134:32-134:34,ExpBox False),(134:25-134:34,ExpBox False),(134:13-134:34,ExpBox False),(134:1-134:34,TopLevelBox ["scale"]),(135:19-135:19,ExpBox False),(135:22-135:22,ExpBox False),(135:25-135:25,ExpBox False),(135:18-135:26,ExpBox False),(135:12-135:26,ExpBox False),(135:1-135:26,TopLevelBox ["scaleX"]),(136:19-136:19,ExpBox False),(136:22-136:22,ExpBox False),(136:25-136:25,ExpBox False),(136:18-136:26,ExpBox False),(136:12-136:26,ExpBox False),(136:1-136:26,TopLevelBox ["scaleY"]),(137:19-137:19,ExpBox False),(137:22-137:22,ExpBox False),(137:25-137:25,ExpBox False),(137:18-137:26,ExpBox False),(137:12-137:26,ExpBox False),(137:1-137:26,TopLevelBox ["scaleZ"]),(138:19-138:19,ExpBox False),(138:21-138:21,ExpBox False),(138:23-138:23,ExpBox False),(138:18-138:24,ExpBox False),(138:12-138:24,ExpBox False),(138:1-138:24,TopLevelBox ["uscale"]),(142:13-142:21,ExpBox False),(142:31-142:31,ExpBox False),(142:25-142:31,ExpBox False),(142:13-142:31,ExpBox False),(142:1-142:31,TopLevelBox ["rotateX"]),(143:13-143:21,ExpBox False),(143:31-143:31,ExpBox False),(143:25-143:31,ExpBox False),(143:13-143:31,ExpBox False),(143:1-143:31,TopLevelBox ["rotateY"]),(144:13-144:21,ExpBox False),(144:31-144:31,ExpBox False),(144:25-144:31,ExpBox False),(144:13-144:31,ExpBox False),(144:1-144:31,TopLevelBox ["rotateZ"]),(90:9-90:13,ExpBox False),(90:1-90:13,TopLevelBox ["plane"]),(86:17-86:17,ExpBox False),(86:19-86:19,ExpBox False),(86:13-86:19,ExpBox False),(86:1-86:19,TopLevelBox ["mkBox"]),(92:16-92:16,ExpBox False),(92:15-92:16,ExpBox False),(92:20-92:26,ExpBox False),(92:14-92:27,ExpBox False),(92:30-92:30,ExpBox False),(92:34-92:40,ExpBox False),(92:29-92:41,ExpBox False),(93:16-93:16,ExpBox False),(93:15-93:16,ExpBox False),(93:20-93:26,ExpBox False),(93:14-93:27,ExpBox False),(93:30-93:30,ExpBox False),(93:34-93:40,ExpBox False),(93:29-93:41,ExpBox False),(94:16-94:16,ExpBox False),(94:15-94:16,ExpBox False),(94:20-94:26,ExpBox False),(94:14-94:27,ExpBox False),(94:30-94:30,ExpBox False),(94:34-94:40,ExpBox False),(94:29-94:41,ExpBox False),(92:11-94:42,ExpBox False),(94:52-94:52,ExpBox False),(94:44-94:53,ExpBox False),(92:5-94:53,ExpBox False),(91:1-94:53,TopLevelBox ["sphere"]),(96:16-96:16,ExpBox False),(96:15-96:16,ExpBox False),(96:20-96:26,ExpBox False),(96:14-96:27,ExpBox False),(96:30-96:30,ExpBox False),(96:34-96:40,ExpBox False),(96:29-96:41,ExpBox False),(97:20-97:26,ExpBox False),(97:14-97:27,ExpBox False),(97:30-97:30,ExpBox False),(97:34-97:40,ExpBox False),(97:29-97:41,ExpBox False),(98:16-98:16,ExpBox False),(98:15-98:16,ExpBox False),(98:20-98:26,ExpBox False),(98:14-98:27,ExpBox False),(98:30-98:30,ExpBox False),(98:34-98:40,ExpBox False),(98:29-98:41,ExpBox False),(96:11-98:42,ExpBox False),(98:50-98:50,ExpBox False),(98:44-98:51,ExpBox False),(96:5-98:51,ExpBox False),(95:1-98:51,TopLevelBox ["cone"]),(100:17-100:23,ExpBox False),(100:14-100:24,ExpBox False),(100:27-100:27,ExpBox False),(100:31-100:37,ExpBox False),(100:26-100:38,ExpBox False),(101:17-101:23,ExpBox False),(101:14-101:24,ExpBox False),(101:27-101:27,ExpBox False),(101:31-101:37,ExpBox False),(101:26-101:38,ExpBox False),(102:17-102:23,ExpBox False),(102:14-102:24,ExpBox False),(102:27-102:27,ExpBox False),(102:31-102:37,ExpBox False),(102:26-102:38,ExpBox False),(100:11-102:39,ExpBox False),(102:47-102:47,ExpBox False),(102:41-102:48,ExpBox False),(100:5-102:48,ExpBox False),(99:1-102:48,TopLevelBox ["cube"]),(104:16-104:16,ExpBox False),(104:15-104:16,ExpBox False),(104:20-104:26,ExpBox False),(104:14-104:27,ExpBox False),(104:30-104:30,ExpBox False),(104:34-104:40,ExpBox False),(104:29-104:41,ExpBox False),(105:20-105:26,ExpBox False),(105:14-105:27,ExpBox False),(105:30-105:30,ExpBox False),(105:34-105:40,ExpBox False),(105:29-105:41,ExpBox False),(106:16-106:16,ExpBox False),(106:15-106:16,ExpBox False),(106:20-106:26,ExpBox False),(106:14-106:27,ExpBox False),(106:30-106:30,ExpBox False),(106:34-106:40,ExpBox False),(106:29-106:41,ExpBox False),(104:11-106:42,ExpBox False),(106:54-106:54,ExpBox False),(106:44-106:55,ExpBox False),(104:5-106:55,ExpBox False),(103:1-106:55,TopLevelBox ["cylinder"]),(81:31-81:32,ExpBox False),(81:46-81:46,ExpBox False),(81:48-81:48,ExpBox False),(81:34-81:49,ExpBox False),(81:27-81:49,ExpBox True),(84:29-84:29,ExpBox False),(84:31-84:31,ExpBox False),(84:18-84:31,ExpBox True),(81:1-84:31,TopLevelBox ["difference"]),(78:53-78:54,ExpBox False),(78:56-78:57,ExpBox False),(78:43-78:58,ExpBox False),(78:71-78:71,ExpBox False),(78:73-78:73,ExpBox False),(78:60-78:74,ExpBox False),(78:39-78:74,ExpBox True),(79:27-79:27,ExpBox False),(79:29-79:29,ExpBox False),(79:17-79:29,ExpBox True),(78:1-79:29,TopLevelBox ["intersect"]),(74:49-74:50,ExpBox False),(74:52-74:53,ExpBox False),(74:39-74:54,ExpBox False),(74:63-74:63,ExpBox False),(74:65-74:65,ExpBox False),(74:56-74:66,ExpBox False),(74:35-74:66,ExpBox True),(75:19-75:19,ExpBox False),(75:21-75:21,ExpBox False),(75:13-75:21,ExpBox True),(74:1-75:21,TopLevelBox ["union"]),(35:12-35:15,TopLevelBox ["showsPrec"]),(35:12-35:15,TopLevelBox ["showList"]),(51:12-51:15,TopLevelBox ["showsPrec"]),(51:12-51:15,TopLevelBox ["showList"]),(64:13-64:16,TopLevelBox ["showsPrec"]),(64:13-64:16,TopLevelBox ["showList"])]
\ No newline at end of file
diff --git a/testsuite/tests/hpc/raytrace/tixs/.hpc/Data.mix b/testsuite/tests/hpc/raytrace/tixs/.hpc/Data.mix
new file mode 100644
index 0000000000000000000000000000000000000000..9a22f57339da43b887325a32d8da3e40f8a1a7b2
--- /dev/null
+++ b/testsuite/tests/hpc/raytrace/tixs/.hpc/Data.mix
@@ -0,0 +1 @@
+Mix "./Data.hs" 2011-09-06 12:02:04 UTC 2953926806 8 [(407:46-407:46,ExpBox False),(407:49-407:49,ExpBox False),(407:53-407:53,ExpBox False),(407:48-407:54,ExpBox False),(407:56-407:56,ExpBox False),(407:44-407:56,ExpBox False),(407:33-407:57,ExpBox False),(407:27-407:58,ExpBox False),(407:20-407:58,ExpBox True),(408:20-408:20,ExpBox False),(408:13-408:20,ExpBox True),(407:1-408:20,TopLevelBox ["sphere'"]),(398:46-398:47,ExpBox False),(398:49-398:50,ExpBox False),(398:52-398:54,ExpBox False),(398:65-398:70,ExpBox False),(398:56-398:71,ExpBox False),(398:73-398:75,ExpBox False),(398:36-398:75,ExpBox False),(398:1-398:75,TopLevelBox ["mySpotlight"]),(394:13-394:13,ExpBox False),(394:17-394:17,ExpBox False),(394:13-394:17,ExpBox False),(394:13-394:17,BinBox GuardBinBox True),(394:13-394:17,BinBox GuardBinBox False),(394:31-394:72,ExpBox False),(394:25-394:72,ExpBox True),(395:13-395:21,ExpBox False),(395:13-395:21,BinBox GuardBinBox True),(395:13-395:21,BinBox GuardBinBox False),(395:30-395:30,ExpBox False),(395:25-395:30,ExpBox True),(394:1-395:30,TopLevelBox ["ourSqrt"]),(390:20-390:55,ExpBox False),(390:14-390:55,ExpBox True),(391:14-391:14,ExpBox False),(391:22-391:22,ExpBox False),(391:14-391:22,ExpBox True),(390:1-391:22,TopLevelBox ["ourRem"]),(386:21-386:56,ExpBox False),(386:15-386:56,ExpBox True),(387:15-387:15,ExpBox False),(387:24-387:24,ExpBox False),(387:15-387:24,ExpBox True),(386:1-387:24,TopLevelBox ["ourQuot"]),(379:22-379:24,ExpBox False),(379:14-379:25,ExpBox False),(379:27-379:27,ExpBox False),(379:6-379:27,ExpBox False),(379:6-379:27,BinBox GuardBinBox True),(379:6-379:27,BinBox GuardBinBox False),(379:31-379:33,ExpBox False),(379:37-379:37,ExpBox False),(379:31-379:37,ExpBox True),(380:6-380:14,ExpBox False),(380:6-380:14,BinBox GuardBinBox True),(380:6-380:14,BinBox GuardBinBox False),(380:25-380:57,ExpBox False),(381:30-381:30,ExpBox False),(381:25-381:30,ExpBox False),(382:25-382:52,ExpBox False),(383:43-383:45,ExpBox False),(383:35-383:46,ExpBox False),(383:30-383:47,ExpBox False),(383:25-383:47,ExpBox False),(383:52-383:54,ExpBox False),(383:25-383:54,ExpBox False),(382:25-383:54,ExpBox False),(381:25-383:54,ExpBox False),(380:24-383:55,ExpBox False),(380:18-383:55,ExpBox True),(378:1-383:55,TopLevelBox ["ixGet"]),(374:22-374:22,ExpBox False),(374:26-374:30,ExpBox False),(374:39-374:39,ExpBox False),(374:34-374:39,ExpBox False),(374:44-374:47,ExpBox False),(374:34-374:47,ExpBox False),(374:26-374:47,ExpBox False),(374:21-374:48,ExpBox False),(374:50-374:50,ExpBox False),(374:15-374:50,ExpBox False),(374:1-374:50,TopLevelBox ["mytrace"]),(342:38-342:42,ExpBox False),(342:37-342:43,ExpBox True),(343:38-343:43,ExpBox False),(343:37-343:44,ExpBox True),(344:38-344:44,ExpBox False),(344:37-344:45,ExpBox True),(345:38-345:43,ExpBox False),(345:37-345:44,ExpBox True),(346:38-346:43,ExpBox False),(346:37-346:44,ExpBox True),(347:38-347:42,ExpBox False),(347:37-347:43,ExpBox True),(348:38-348:44,ExpBox False),(348:37-348:45,ExpBox True),(349:38-349:42,ExpBox False),(349:44-349:48,ExpBox False),(349:37-349:49,ExpBox True),(350:38-350:42,ExpBox False),(350:44-350:48,ExpBox False),(350:37-350:49,ExpBox True),(351:38-351:43,ExpBox False),(351:45-351:50,ExpBox False),(351:37-351:51,ExpBox True),(352:38-352:43,ExpBox False),(352:45-352:50,ExpBox False),(352:37-352:51,ExpBox True),(353:38-353:44,ExpBox False),(353:46-353:50,ExpBox False),(353:37-353:51,ExpBox True),(354:45-354:52,ExpBox False),(354:54-354:61,ExpBox False),(354:44-354:62,ExpBox True),(355:45-355:51,ExpBox False),(355:53-355:59,ExpBox False),(355:44-355:60,ExpBox True),(356:45-356:50,ExpBox False),(356:52-356:57,ExpBox False),(356:59-356:64,ExpBox False),(356:44-356:65,ExpBox True),(357:45-357:52,ExpBox False),(357:54-357:59,ExpBox False),(357:44-357:60,ExpBox True),(358:45-358:52,ExpBox False),(358:54-358:59,ExpBox False),(358:61-358:66,ExpBox False),(358:68-358:73,ExpBox False),(358:44-358:74,ExpBox True),(359:45-359:51,ExpBox False),(359:53-359:60,ExpBox False),(359:44-359:61,ExpBox True),(361:45-361:51,ExpBox False),(361:53-361:59,ExpBox False),(361:61-361:67,ExpBox False),(361:69-361:74,ExpBox False),(361:76-361:81,ExpBox False),(361:44-361:82,ExpBox True),(362:45-362:51,ExpBox False),(363:45-363:51,ExpBox False),(364:45-364:52,ExpBox False),(365:45-365:49,ExpBox False),(366:45-366:50,ExpBox False),(367:45-367:50,ExpBox False),(368:45-368:50,ExpBox False),(369:45-369:52,ExpBox False),(362:44-369:53,ExpBox True),(342:1-369:53,TopLevelBox ["getPrimOpType"]),(323:7-323:12,ExpBox False),(323:17-323:22,ExpBox False),(323:5-323:23,ExpBox False),(324:7-324:11,ExpBox False),(324:17-324:21,ExpBox False),(324:5-324:22,ExpBox False),(325:7-325:12,ExpBox False),(325:17-325:22,ExpBox False),(325:5-325:23,ExpBox False),(326:7-326:14,ExpBox False),(326:17-326:24,ExpBox False),(326:5-326:25,ExpBox False),(327:7-327:12,ExpBox False),(327:17-327:22,ExpBox False),(327:5-327:23,ExpBox False),(328:7-328:13,ExpBox False),(328:17-328:23,ExpBox False),(328:5-328:24,ExpBox False),(329:7-329:13,ExpBox False),(329:17-329:23,ExpBox False),(329:5-329:24,ExpBox False),(330:7-330:14,ExpBox False),(330:17-330:24,ExpBox False),(330:5-330:25,ExpBox False),(331:7-331:13,ExpBox False),(331:17-331:23,ExpBox False),(331:5-331:24,ExpBox False),(332:7-332:13,ExpBox False),(332:17-332:28,ExpBox False),(332:5-332:29,ExpBox False),(333:7-333:14,ExpBox False),(333:17-333:23,ExpBox False),(333:5-333:24,ExpBox False),(323:3-334:3,ExpBox False),(322:1-334:3,TopLevelBox ["typeTable"]),(336:20-336:27,ExpBox False),(336:29-336:36,ExpBox False),(336:19-336:37,ExpBox False),(336:39-336:47,ExpBox False),(336:13-336:47,ExpBox False),(336:1-336:47,TopLevelBox ["typeNames"]),(213:5-213:11,ExpBox False),(213:19-213:24,ExpBox False),(213:47-213:70,ExpBox False),(213:41-213:70,ExpBox False),(213:4-213:71,ExpBox False),(214:5-214:8,ExpBox False),(214:19-214:21,ExpBox False),(214:47-214:67,ExpBox False),(214:41-214:67,ExpBox False),(214:4-214:68,ExpBox False),(215:5-215:11,ExpBox False),(215:25-215:29,ExpBox False),(215:19-215:29,ExpBox False),(215:47-215:70,ExpBox False),(215:41-215:70,ExpBox False),(215:4-215:71,ExpBox False),(216:5-216:10,ExpBox False),(216:25-216:28,ExpBox False),(216:19-216:28,ExpBox False),(216:47-216:69,ExpBox False),(216:41-216:69,ExpBox False),(216:4-216:70,ExpBox False),(213:2-217:2,ExpBox False),(217:26-217:26,ExpBox False),(217:32-217:32,ExpBox False),(217:28-217:32,ExpBox False),(217:34-217:34,ExpBox False),(217:25-217:35,ExpBox False),(217:11-217:36,ExpBox False),(220:5-220:10,ExpBox False),(220:19-220:25,ExpBox False),(220:45-220:51,ExpBox False),(220:55-220:58,ExpBox False),(220:44-220:59,ExpBox False),(220:34-220:59,ExpBox False),(220:4-220:60,ExpBox False),(221:5-221:10,ExpBox False),(221:19-221:25,ExpBox False),(221:46-221:48,ExpBox False),(221:34-221:48,ExpBox False),(221:4-221:49,ExpBox False),(222:5-222:10,ExpBox False),(222:19-222:25,ExpBox False),(222:49-222:51,ExpBox False),(222:34-222:51,ExpBox False),(222:4-222:52,ExpBox False),(223:5-223:10,ExpBox False),(223:19-223:25,ExpBox False),(223:45-223:51,ExpBox False),(223:55-223:58,ExpBox False),(223:44-223:59,ExpBox False),(223:34-223:59,ExpBox False),(223:4-223:60,ExpBox False),(224:5-224:12,ExpBox False),(224:19-224:27,ExpBox False),(224:44-224:49,ExpBox False),(224:34-224:49,ExpBox False),(224:4-224:50,ExpBox False),(225:5-225:10,ExpBox False),(225:19-225:25,ExpBox False),(225:46-225:49,ExpBox False),(225:34-225:49,ExpBox False),(225:4-225:50,ExpBox False),(226:5-226:9,ExpBox False),(226:19-226:24,ExpBox False),(226:45-226:47,ExpBox False),(226:51-226:57,ExpBox False),(226:44-226:58,ExpBox False),(226:34-226:58,ExpBox False),(226:4-226:59,ExpBox False),(227:5-227:10,ExpBox False),(227:19-227:25,ExpBox False),(227:46-227:49,ExpBox False),(227:34-227:49,ExpBox False),(227:4-227:50,ExpBox False),(228:5-228:14,ExpBox False),(228:19-228:29,ExpBox False),(228:46-228:53,ExpBox False),(228:34-228:53,ExpBox False),(228:4-228:54,ExpBox False),(229:5-229:16,ExpBox False),(229:19-229:31,ExpBox False),(229:46-229:55,ExpBox False),(229:34-229:55,ExpBox False),(229:4-229:56,ExpBox False),(230:5-230:10,ExpBox False),(230:19-230:25,ExpBox False),(230:46-230:54,ExpBox False),(230:34-230:54,ExpBox False),(230:4-230:55,ExpBox False),(231:5-231:10,ExpBox False),(231:19-231:25,ExpBox False),(231:49-231:51,ExpBox False),(231:34-231:51,ExpBox False),(231:4-231:52,ExpBox False),(232:5-232:9,ExpBox False),(232:19-232:24,ExpBox False),(232:47-232:50,ExpBox False),(232:34-232:50,ExpBox False),(232:4-232:51,ExpBox False),(233:5-233:9,ExpBox False),(233:19-233:24,ExpBox False),(233:49-233:52,ExpBox False),(233:34-233:52,ExpBox False),(233:4-233:53,ExpBox False),(234:5-234:11,ExpBox False),(234:19-234:26,ExpBox False),(234:43-234:47,ExpBox False),(234:34-234:47,ExpBox False),(234:4-234:48,ExpBox False),(235:5-235:10,ExpBox False),(235:19-235:25,ExpBox False),(235:45-235:47,ExpBox False),(235:51-235:64,ExpBox False),(235:44-235:65,ExpBox False),(235:34-235:65,ExpBox False),(235:4-235:66,ExpBox False),(236:5-236:9,ExpBox False),(236:19-236:24,ExpBox False),(236:48-236:52,ExpBox False),(236:34-236:52,ExpBox False),(236:4-236:53,ExpBox False),(237:5-237:10,ExpBox False),(237:19-237:25,ExpBox False),(237:57-237:57,ExpBox False),(237:45-237:58,ExpBox False),(237:34-237:58,ExpBox False),(237:4-237:59,ExpBox False),(238:5-238:10,ExpBox False),(238:19-238:25,ExpBox False),(238:57-238:57,ExpBox False),(238:45-238:58,ExpBox False),(238:34-238:58,ExpBox False),(238:4-238:59,ExpBox False),(239:5-239:10,ExpBox False),(239:19-239:25,ExpBox False),(239:57-239:57,ExpBox False),(239:45-239:58,ExpBox False),(239:34-239:58,ExpBox False),(239:4-239:59,ExpBox False),(240:5-240:15,ExpBox False),(240:19-240:30,ExpBox False),(240:46-240:54,ExpBox False),(240:34-240:54,ExpBox False),(240:4-240:55,ExpBox False),(241:5-241:12,ExpBox False),(241:19-241:27,ExpBox False),(241:43-241:46,ExpBox False),(241:50-241:52,ExpBox False),(241:56-241:61,ExpBox False),(241:50-241:61,ExpBox False),(241:42-241:62,ExpBox False),(241:34-241:62,ExpBox False),(241:4-241:63,ExpBox False),(242:5-242:11,ExpBox False),(242:19-242:26,ExpBox False),(242:47-242:49,ExpBox False),(242:34-242:49,ExpBox False),(242:4-242:50,ExpBox False),(243:5-243:11,ExpBox False),(243:19-243:26,ExpBox False),(243:49-243:51,ExpBox False),(243:34-243:51,ExpBox False),(243:4-243:52,ExpBox False),(244:5-244:11,ExpBox False),(244:19-244:26,ExpBox False),(244:52-244:56,ExpBox False),(244:34-244:56,ExpBox False),(244:4-244:57,ExpBox False),(245:5-245:10,ExpBox False),(245:19-245:25,ExpBox False),(245:46-245:53,ExpBox False),(245:34-245:53,ExpBox False),(245:4-245:54,ExpBox False),(246:5-246:10,ExpBox False),(246:19-246:25,ExpBox False),(246:46-246:48,ExpBox False),(246:34-246:48,ExpBox False),(246:4-246:49,ExpBox False),(247:5-247:10,ExpBox False),(247:19-247:25,ExpBox False),(247:49-247:51,ExpBox False),(247:34-247:51,ExpBox False),(247:4-247:52,ExpBox False),(248:5-248:10,ExpBox False),(248:19-248:25,ExpBox False),(248:42-248:47,ExpBox False),(248:34-248:47,ExpBox False),(248:4-248:48,ExpBox False),(249:5-249:10,ExpBox False),(249:19-249:25,ExpBox False),(249:44-249:49,ExpBox False),(249:34-249:49,ExpBox False),(249:4-249:50,ExpBox False),(250:5-250:11,ExpBox False),(250:19-250:26,ExpBox False),(250:46-250:50,ExpBox False),(250:34-250:50,ExpBox False),(250:4-250:51,ExpBox False),(251:5-251:11,ExpBox False),(251:19-251:26,ExpBox False),(251:55-251:60,ExpBox False),(251:34-251:60,ExpBox False),(251:4-251:61,ExpBox False),(252:5-252:16,ExpBox False),(252:19-252:31,ExpBox False),(252:52-252:61,ExpBox False),(252:34-252:61,ExpBox False),(252:4-252:62,ExpBox False),(253:5-253:10,ExpBox False),(253:19-253:25,ExpBox False),(253:43-253:54,ExpBox False),(253:34-253:54,ExpBox False),(253:4-253:55,ExpBox False),(254:5-254:12,ExpBox False),(254:19-254:27,ExpBox False),(254:34-254:39,ExpBox False),(254:50-254:52,ExpBox False),(254:43-254:52,ExpBox False),(254:34-254:52,ExpBox False),(254:4-254:53,ExpBox False),(255:5-255:13,ExpBox False),(255:19-255:28,ExpBox False),(255:74-255:74,ExpBox False),(255:65-255:75,ExpBox False),(255:77-255:77,ExpBox False),(255:57-255:77,ExpBox False),(255:47-255:78,ExpBox False),(255:34-255:78,ExpBox False),(255:4-255:79,ExpBox False),(256:5-256:13,ExpBox False),(256:19-256:28,ExpBox False),(256:74-256:74,ExpBox False),(256:65-256:75,ExpBox False),(256:77-256:77,ExpBox False),(256:57-256:77,ExpBox False),(256:47-256:78,ExpBox False),(256:34-256:78,ExpBox False),(256:4-256:79,ExpBox False),(257:5-257:13,ExpBox False),(257:19-257:28,ExpBox False),(257:74-257:74,ExpBox False),(257:65-257:75,ExpBox False),(257:77-257:77,ExpBox False),(257:57-257:77,ExpBox False),(257:47-257:78,ExpBox False),(257:34-257:78,ExpBox False),(257:4-257:79,ExpBox False),(258:5-258:11,ExpBox False),(258:19-258:26,ExpBox False),(258:78-258:78,ExpBox False),(258:80-258:80,ExpBox False),(258:82-258:82,ExpBox False),(258:77-258:83,ExpBox False),(258:85-258:85,ExpBox False),(258:71-258:85,ExpBox False),(258:57-258:86,ExpBox False),(258:34-258:86,ExpBox False),(258:4-258:87,ExpBox False),(259:5-259:9,ExpBox False),(259:19-259:24,ExpBox False),(259:45-259:47,ExpBox False),(259:51-259:57,ExpBox False),(259:44-259:58,ExpBox False),(259:34-259:58,ExpBox False),(259:4-259:59,ExpBox False),(260:5-260:12,ExpBox False),(260:19-260:27,ExpBox False),(260:46-260:52,ExpBox False),(260:34-260:52,ExpBox False),(260:4-260:53,ExpBox False),(261:5-261:15,ExpBox False),(261:19-261:30,ExpBox False),(261:68-261:78,ExpBox False),(261:34-261:78,ExpBox False),(261:4-261:79,ExpBox False),(262:5-262:10,ExpBox False),(262:19-262:25,ExpBox False),(262:44-262:50,ExpBox False),(262:34-262:50,ExpBox False),(262:4-262:51,ExpBox False),(263:5-263:10,ExpBox False),(263:19-263:25,ExpBox False),(263:46-263:48,ExpBox False),(263:34-263:48,ExpBox False),(263:4-263:49,ExpBox False),(264:5-264:10,ExpBox False),(264:19-264:25,ExpBox False),(264:49-264:51,ExpBox False),(264:34-264:51,ExpBox False),(264:4-264:52,ExpBox False),(265:5-265:11,ExpBox False),(265:19-265:26,ExpBox False),(265:53-265:59,ExpBox False),(265:34-265:59,ExpBox False),(265:4-265:60,ExpBox False),(266:5-266:15,ExpBox False),(266:19-266:30,ExpBox False),(266:82-266:82,ExpBox False),(266:84-266:84,ExpBox False),(266:86-266:86,ExpBox False),(266:81-266:87,ExpBox False),(266:89-266:89,ExpBox False),(266:71-266:89,ExpBox False),(266:57-266:90,ExpBox False),(266:34-266:90,ExpBox False),(266:4-266:91,ExpBox False),(267:5-267:11,ExpBox False),(267:19-267:26,ExpBox False),(267:46-267:50,ExpBox False),(267:34-267:50,ExpBox False),(267:4-267:51,ExpBox False),(268:5-268:12,ExpBox False),(268:19-268:27,ExpBox False),(268:64-268:64,ExpBox False),(268:66-268:66,ExpBox False),(268:57-268:66,ExpBox False),(268:47-268:67,ExpBox False),(268:34-268:67,ExpBox False),(268:4-268:68,ExpBox False),(220:2-269:2,ExpBox False),(217:7-269:2,ExpBox False),(213:2-269:2,ExpBox False),(212:1-269:2,TopLevelBox ["opcodes"]),(206:15-206:55,ExpBox False),(206:9-206:55,ExpBox False),(206:1-206:55,TopLevelBox ["image"]),(205:15-205:34,ExpBox False),(205:9-205:34,ExpBox False),(205:1-205:34,TopLevelBox ["undef"]),(202:22-202:29,ExpBox False),(202:31-202:38,ExpBox False),(202:21-202:39,ExpBox False),(203:52-203:58,ExpBox False),(203:22-203:23,ExpBox False),(203:25-203:28,ExpBox False),(203:21-203:29,ExpBox False),(203:19-203:60,ExpBox False),(202:15-203:60,ExpBox False),(202:1-203:60,TopLevelBox ["opNameTable"]),(199:38-199:44,ExpBox False),(199:14-199:16,ExpBox False),(199:18-199:19,ExpBox False),(199:13-199:20,ExpBox False),(199:11-199:46,ExpBox False),(199:1-199:46,TopLevelBox ["opTable"]),(195:33-195:39,ExpBox False),(195:14-195:16,ExpBox False),(195:12-195:41,ExpBox False),(195:1-195:41,TopLevelBox ["keyWords"]),(123:30-123:30,ExpBox False),(123:32-123:32,ExpBox False),(123:23-123:32,ExpBox False),(123:1-123:32,TopLevelBox ["lookupEnv"]),(120:31-120:31,ExpBox False),(120:34-120:34,ExpBox False),(120:30-120:35,ExpBox False),(120:37-120:37,ExpBox False),(120:29-120:38,ExpBox False),(120:25-120:38,ExpBox False),(120:1-120:38,TopLevelBox ["extendEnv"]),(117:16-117:17,ExpBox False),(117:12-117:17,ExpBox False),(117:1-117:17,TopLevelBox ["emptyEnv"]),(97:34-97:34,ExpBox False),(97:29-97:34,ExpBox False),(97:39-97:48,ExpBox False),(97:29-97:48,ExpBox True),(98:34-98:34,ExpBox False),(98:29-98:34,ExpBox False),(98:39-98:47,ExpBox False),(98:29-98:47,ExpBox True),(99:34-99:34,ExpBox False),(99:29-99:34,ExpBox False),(99:39-99:48,ExpBox False),(99:29-99:48,ExpBox True),(100:34-100:34,ExpBox False),(100:29-100:34,ExpBox False),(100:39-100:50,ExpBox False),(100:29-100:50,ExpBox True),(101:29-101:50,ExpBox True),(103:8-103:17,ExpBox False),(103:47-103:49,ExpBox False),(103:39-103:50,ExpBox False),(103:34-103:51,ExpBox False),(103:28-103:52,ExpBox False),(103:23-103:52,ExpBox False),(103:57-103:78,ExpBox False),(103:23-103:78,ExpBox False),(103:8-103:78,ExpBox True),(104:29-104:31,ExpBox False),(104:41-104:41,ExpBox False),(104:36-104:41,ExpBox False),(105:29-105:31,ExpBox False),(105:41-105:41,ExpBox False),(105:36-105:41,ExpBox False),(106:29-106:31,ExpBox False),(106:41-106:41,ExpBox False),(106:36-106:41,ExpBox False),(107:29-107:40,ExpBox False),(106:36-107:40,ExpBox False),(106:29-107:40,ExpBox False),(105:36-107:40,ExpBox False),(105:29-107:40,ExpBox False),(104:36-107:40,ExpBox False),(104:29-107:40,ExpBox True),(108:29-108:48,ExpBox True),(109:29-109:47,ExpBox True),(110:29-110:33,ExpBox False),(110:43-110:46,ExpBox False),(110:38-110:46,ExpBox False),(110:51-110:64,ExpBox False),(110:38-110:64,ExpBox False),(110:29-110:64,ExpBox True),(97:1-110:64,TopLevelBox ["showStkEle"]),(91:17-91:20,TopLevelBox ["showsPrec"]),(91:17-91:20,TopLevelBox ["showList"]),(180:15-180:16,TopLevelBox ["=="]),(180:15-180:16,TopLevelBox ["/="]),(180:18-180:20,TopLevelBox ["compare"]),(180:18-180:20,TopLevelBox ["<"]),(180:18-180:20,TopLevelBox [">="]),(180:18-180:20,TopLevelBox [">"]),(180:18-180:20,TopLevelBox ["<="]),(180:22-180:23,TopLevelBox ["range"]),(180:22-180:23,TopLevelBox ["unsafeIndex"]),(180:22-180:23,TopLevelBox ["inRange"]),(180:25-180:31,TopLevelBox ["minBound"]),(180:25-180:31,TopLevelBox ["maxBound"]),(114:47-114:50,TopLevelBox ["showsPrec"]),(114:47-114:50,TopLevelBox ["showList"]),(320:17-320:18,TopLevelBox ["=="]),(320:17-320:18,TopLevelBox ["/="]),(320:20-320:22,TopLevelBox ["compare"]),(320:20-320:22,TopLevelBox ["<"]),(320:20-320:22,TopLevelBox [">="]),(320:20-320:22,TopLevelBox [">"]),(320:20-320:22,TopLevelBox ["<="]),(320:24-320:25,TopLevelBox ["range"]),(320:24-320:25,TopLevelBox ["unsafeIndex"]),(320:24-320:25,TopLevelBox ["inRange"]),(320:27-320:33,TopLevelBox ["minBound"]),(320:27-320:33,TopLevelBox ["maxBound"]),(339:33-339:41,ExpBox False),(339:45-339:46,ExpBox False),(339:32-339:47,ExpBox False),(339:21-339:47,ExpBox False),(339:4-339:47,TopLevelBox ["showsPrec"]),(183:33-183:43,ExpBox False),(183:47-183:48,ExpBox False),(183:32-183:49,ExpBox False),(183:21-183:49,ExpBox False),(183:4-183:49,TopLevelBox ["showsPrec"]),(94:47-94:51,ExpBox False),(94:35-94:52,ExpBox False),(94:24-94:52,ExpBox False),(94:4-94:52,TopLevelBox ["showsPrec"]),(42:37-42:38,ExpBox False),(42:31-42:38,ExpBox True),(43:42-43:43,ExpBox False),(43:31-43:43,ExpBox True),(44:43-44:45,ExpBox False),(44:49-44:50,ExpBox False),(44:42-44:51,ExpBox False),(44:31-44:51,ExpBox True),(45:37-45:40,ExpBox False),(45:31-45:40,ExpBox True),(46:37-46:37,ExpBox False),(46:31-46:37,ExpBox True),(47:37-47:37,ExpBox False),(47:31-47:37,ExpBox True),(48:37-48:37,ExpBox False),(48:31-48:37,ExpBox True),(49:37-49:40,ExpBox False),(49:31-49:40,ExpBox True),(50:43-50:46,ExpBox False),(50:32-50:46,ExpBox False),(51:47-51:47,ExpBox False),(51:60-51:62,ExpBox False),(51:51-51:62,ExpBox False),(51:66-51:66,ExpBox False),(51:51-51:66,ExpBox False),(51:47-51:66,ExpBox False),(51:37-51:67,ExpBox False),(51:69-51:70,ExpBox False),(51:77-51:81,ExpBox False),(51:83-51:86,ExpBox False),(51:72-51:87,ExpBox False),(51:31-51:87,ExpBox False),(52:42-52:44,ExpBox False),(52:31-52:44,ExpBox False),(51:31-52:44,ExpBox False),(50:32-52:44,ExpBox True),(53:42-53:48,ExpBox False),(53:31-53:48,ExpBox True),(54:42-54:45,ExpBox False),(54:31-54:45,ExpBox True),(42:4-54:45,TopLevelBox ["showsPrec"]),(56:32-56:35,ExpBox False),(56:21-56:35,ExpBox False),(57:37-57:37,ExpBox False),(57:50-57:52,ExpBox False),(57:41-57:52,ExpBox False),(57:56-57:56,ExpBox False),(57:41-57:56,ExpBox False),(57:37-57:56,ExpBox False),(57:27-57:57,ExpBox False),(57:59-57:60,ExpBox False),(57:67-57:71,ExpBox False),(57:73-57:76,ExpBox False),(57:62-57:77,ExpBox False),(57:21-57:77,ExpBox False),(58:32-58:34,ExpBox False),(58:21-58:34,ExpBox False),(57:21-58:34,ExpBox False),(56:21-58:34,ExpBox False),(56:4-58:34,TopLevelBox ["showList"])]
\ No newline at end of file
diff --git a/testsuite/tests/hpc/raytrace/tixs/.hpc/Eval.mix b/testsuite/tests/hpc/raytrace/tixs/.hpc/Eval.mix
new file mode 100644
index 0000000000000000000000000000000000000000..29d2b383c830b3b9d175f3cf51fbc17fff010d23
--- /dev/null
+++ b/testsuite/tests/hpc/raytrace/tixs/.hpc/Eval.mix
@@ -0,0 +1 @@
+Mix "./Eval.hs" 2011-09-06 12:02:04 UTC 1993219040 8 [(347:12-347:73,ExpBox False),(347:1-347:73,TopLevelBox ["abstest1"]),(328:8-328:69,ExpBox False),(328:1-328:69,TopLevelBox ["done"]),(305:34-305:35,ExpBox False),(305:37-305:38,ExpBox False),(305:40-305:41,ExpBox False),(305:26-305:42,ExpBox False),(305:46-305:48,ExpBox False),(305:25-305:49,ExpBox False),(305:18-305:49,ExpBox True),(308:23-308:49,ExpBox False),(308:59-308:60,ExpBox False),(308:54-308:60,ExpBox False),(308:65-308:67,ExpBox False),(308:54-308:67,ExpBox False),(308:22-308:68,ExpBox False),(308:18-308:68,ExpBox True),(304:1-308:68,TopLevelBox ["doAbsOp"]),(145:20-145:27,ExpBox False),(145:29-145:36,ExpBox False),(145:19-145:37,ExpBox False),(146:52-146:58,ExpBox False),(146:22-146:23,ExpBox False),(146:25-146:28,ExpBox False),(146:21-146:29,ExpBox False),(146:19-146:60,ExpBox False),(145:13-146:60,ExpBox False),(145:1-146:60,TopLevelBox ["opFnTable"]),(67:32-67:36,ExpBox True),(68:32-68:35,ExpBox True),(67:1-68:35,TopLevelBox ["moreCode"]),(77:15-77:16,ExpBox False),(77:35-77:35,ExpBox False),(77:28-77:36,ExpBox False),(77:38-77:42,ExpBox False),(77:28-77:42,ExpBox False),(77:55-77:56,ExpBox False),(77:14-77:59,ExpBox False),(77:7-77:59,ExpBox True),(79:15-79:16,ExpBox False),(79:34-79:34,ExpBox False),(79:28-79:35,ExpBox False),(79:37-79:41,ExpBox False),(79:28-79:41,ExpBox False),(79:55-79:56,ExpBox False),(79:14-79:59,ExpBox False),(79:7-79:59,ExpBox True),(81:15-81:16,ExpBox False),(81:35-81:35,ExpBox False),(81:28-81:36,ExpBox False),(81:38-81:42,ExpBox False),(81:28-81:42,ExpBox False),(81:55-81:56,ExpBox False),(81:14-81:59,ExpBox False),(81:7-81:59,ExpBox True),(83:15-83:16,ExpBox False),(83:37-83:37,ExpBox False),(83:28-83:38,ExpBox False),(83:40-83:44,ExpBox False),(83:28-83:44,ExpBox False),(83:55-83:56,ExpBox False),(83:14-83:59,ExpBox False),(83:7-83:59,ExpBox True),(87:35-87:37,ExpBox False),(87:39-87:40,ExpBox False),(87:42-87:42,ExpBox False),(87:25-87:42,ExpBox False),(87:53-87:57,ExpBox False),(87:68-87:69,ExpBox False),(87:10-87:72,ExpBox False),(87:3-87:72,ExpBox True),(89:7-89:49,ExpBox False),(89:3-89:49,ExpBox True),(93:19-93:21,ExpBox False),(93:23-93:24,ExpBox False),(93:8-93:25,ExpBox False),(94:21-94:22,ExpBox False),(94:34-94:34,ExpBox False),(94:36-94:40,ExpBox False),(94:34-94:40,ExpBox False),(94:51-94:52,ExpBox False),(94:20-94:55,ExpBox False),(94:13-94:55,ExpBox True),(95:19-95:54,ExpBox False),(95:59-95:60,ExpBox False),(95:18-95:61,ExpBox False),(95:14-95:61,ExpBox True),(93:3-95:61,ExpBox True),(99:11-99:12,ExpBox False),(99:34-99:36,ExpBox False),(99:38-99:41,ExpBox False),(99:24-99:42,ExpBox False),(99:44-99:48,ExpBox False),(99:24-99:48,ExpBox False),(99:58-99:59,ExpBox False),(99:10-99:62,ExpBox False),(99:3-99:62,ExpBox True),(103:34-103:37,ExpBox False),(103:48-103:52,ExpBox False),(103:62-103:66,ExpBox False),(103:20-103:68,ExpBox False),(103:15-103:68,ExpBox False),(104:16-104:17,ExpBox False),(104:29-104:31,ExpBox False),(104:41-104:42,ExpBox False),(104:15-104:45,ExpBox False),(104:8-104:45,ExpBox False),(103:3-105:6,ExpBox True),(107:7-107:39,ExpBox False),(107:3-107:39,ExpBox True),(109:7-109:36,ExpBox False),(109:3-109:36,ExpBox True),(113:34-113:36,ExpBox False),(113:47-113:48,ExpBox False),(113:58-113:62,ExpBox False),(113:20-113:64,ExpBox False),(113:15-113:64,ExpBox False),(114:26-114:28,ExpBox False),(114:19-114:28,ExpBox False),(114:30-114:30,ExpBox False),(114:19-114:30,ExpBox False),(114:12-114:30,LocalBox ["step","last"]),(115:25-115:25,ExpBox False),(115:27-115:30,ExpBox False),(115:24-115:31,ExpBox False),(115:39-115:42,ExpBox False),(115:44-115:47,ExpBox False),(115:49-115:49,ExpBox False),(115:44-115:49,ExpBox False),(115:38-115:52,ExpBox False),(115:54-115:56,ExpBox False),(115:33-115:57,ExpBox False),(115:18-115:57,ExpBox False),(115:12-115:57,LocalBox ["step","arr"]),(116:16-116:17,ExpBox False),(116:37-116:39,ExpBox False),(116:29-116:40,ExpBox False),(116:42-116:46,ExpBox False),(116:29-116:46,ExpBox False),(116:56-116:57,ExpBox False),(116:15-116:60,ExpBox False),(116:8-116:60,ExpBox False),(113:3-117:6,ExpBox True),(121:34-121:35,ExpBox False),(121:46-121:50,ExpBox False),(121:60-121:61,ExpBox False),(121:20-121:63,ExpBox False),(121:15-121:63,ExpBox False),(122:16-122:17,ExpBox False),(122:29-122:31,ExpBox False),(122:41-122:42,ExpBox False),(122:15-122:45,ExpBox False),(122:8-122:45,ExpBox False),(121:3-123:6,ExpBox True),(125:34-125:35,ExpBox False),(125:46-125:50,ExpBox False),(125:60-125:61,ExpBox False),(125:20-125:63,ExpBox False),(125:15-125:63,ExpBox False),(126:16-126:17,ExpBox False),(126:29-126:31,ExpBox False),(126:41-126:42,ExpBox False),(126:15-126:45,ExpBox False),(126:8-126:45,ExpBox False),(125:3-127:6,ExpBox True),(129:7-129:74,ExpBox False),(129:3-129:74,ExpBox True),(133:21-133:29,ExpBox False),(133:33-133:34,ExpBox False),(133:20-133:35,ExpBox False),(133:37-133:38,ExpBox False),(133:40-133:44,ExpBox False),(133:15-133:44,ExpBox False),(134:16-134:17,ExpBox False),(134:29-134:31,ExpBox False),(134:41-134:42,ExpBox False),(134:15-134:45,ExpBox False),(134:8-134:45,ExpBox False),(133:3-135:6,ExpBox True),(138:14-138:50,ExpBox False),(138:10-138:50,ExpBox True),(76:1-138:50,TopLevelBox ["step"]),(57:21-57:22,ExpBox False),(57:14-57:22,ExpBox False),(58:20-58:21,ExpBox False),(58:11-58:21,ExpBox False),(58:11-58:21,BinBox CondBinBox True),(58:11-58:21,BinBox CondBinBox False),(59:13-59:16,ExpBox False),(60:27-60:28,ExpBox False),(60:22-60:28,ExpBox False),(61:20-61:22,ExpBox False),(61:15-61:22,ExpBox False),(59:8-62:13,ExpBox True),(63:28-63:29,ExpBox False),(63:21-63:30,ExpBox False),(63:14-63:30,ExpBox True),(58:8-63:30,ExpBox False),(57:3-64:6,ExpBox False),(56:1-64:6,TopLevelBox ["eval"]),(281:31-281:33,ExpBox False),(281:35-281:37,ExpBox False),(281:39-281:42,ExpBox False),(281:24-281:43,ExpBox False),(281:18-281:44,ExpBox False),(281:46-281:48,ExpBox False),(281:11-281:48,ExpBox False),(282:31-282:33,ExpBox False),(282:26-282:33,ExpBox True),(283:26-283:32,ExpBox True),(281:6-283:32,ExpBox False),(280:1-283:32,TopLevelBox ["absapply"]),(314:41-314:48,ExpBox False),(314:50-314:51,ExpBox False),(314:53-314:56,ExpBox False),(314:34-314:57,ExpBox False),(314:29-314:57,ExpBox False),(315:29-315:30,ExpBox False),(315:22-315:30,ExpBox False),(314:17-316:20,ExpBox False),(314:1-316:20,TopLevelBox ["mainEval"]),(334:23-334:30,ExpBox False),(334:32-334:33,ExpBox False),(334:45-334:46,ExpBox False),(334:35-334:47,ExpBox False),(334:16-334:48,ExpBox False),(334:11-334:48,ExpBox False),(334:1-334:48,TopLevelBox ["test"]),(350:12-350:46,ExpBox False),(350:7-350:46,ExpBox False),(350:1-350:46,TopLevelBox ["et1"]),(337:33-337:34,ExpBox False),(337:23-337:34,ExpBox False),(338:27-338:34,ExpBox False),(338:36-338:37,ExpBox False),(338:39-338:42,ExpBox False),(338:20-338:43,ExpBox False),(338:15-338:43,ExpBox False),(337:12-338:43,ExpBox False),(337:1-338:43,TopLevelBox ["testF"]),(341:37-341:44,ExpBox False),(342:46-342:52,ExpBox False),(342:38-342:52,ExpBox False),(342:62-342:65,ExpBox False),(342:54-342:65,ExpBox False),(342:75-342:78,ExpBox False),(342:67-342:78,ExpBox False),(342:37-342:79,ExpBox False),(343:47-343:48,ExpBox False),(343:37-343:49,ExpBox False),(341:30-343:50,ExpBox False),(341:24-343:51,ExpBox False),(343:53-343:55,ExpBox False),(341:17-343:55,ExpBox False),(344:37-344:37,ExpBox False),(344:39-344:39,ExpBox False),(344:36-344:40,ExpBox False),(344:30-344:40,ExpBox True),(345:32-345:32,ExpBox False),(345:27-345:32,ExpBox True),(341:12-345:32,ExpBox False),(341:1-345:32,TopLevelBox ["testA"]),(49:34-49:36,ExpBox False),(49:47-49:49,ExpBox False),(49:59-49:62,ExpBox False),(49:19-49:64,ExpBox False),(49:14-49:64,ExpBox False),(50:26-50:28,ExpBox False),(49:9-50:28,ExpBox False),(48:1-50:28,TopLevelBox ["callback"]),(165:23-165:24,ExpBox False),(165:19-165:25,ExpBox False),(165:13-165:26,ExpBox False),(165:30-165:32,ExpBox False),(165:12-165:33,ExpBox False),(165:5-165:33,ExpBox True),(167:24-167:25,ExpBox False),(167:20-167:26,ExpBox False),(167:13-167:27,ExpBox False),(167:31-167:33,ExpBox False),(167:12-167:34,ExpBox False),(167:5-167:34,ExpBox True),(169:24-169:24,ExpBox False),(169:26-169:26,ExpBox False),(169:28-169:28,ExpBox False),(169:20-169:29,ExpBox False),(169:13-169:30,ExpBox False),(169:34-169:36,ExpBox False),(169:12-169:37,ExpBox False),(169:5-169:37,ExpBox True),(183:25-183:27,ExpBox False),(183:29-183:32,ExpBox False),(183:41-183:42,ExpBox False),(183:35-183:42,ExpBox False),(183:50-183:51,ExpBox False),(183:44-183:51,ExpBox False),(183:58-183:58,ExpBox False),(183:53-183:58,ExpBox False),(183:34-183:59,ExpBox False),(183:16-183:59,ExpBox False),(185:33-185:34,ExpBox False),(185:36-185:37,ExpBox False),(185:39-185:40,ExpBox False),(185:26-185:41,ExpBox False),(185:43-185:44,ExpBox False),(185:46-185:47,ExpBox False),(185:49-185:50,ExpBox False),(185:21-185:50,ExpBox True),(186:28-186:80,ExpBox False),(187:34-187:36,ExpBox False),(187:29-187:36,ExpBox False),(186:27-187:37,ExpBox False),(186:21-187:37,ExpBox True),(183:11-187:37,ExpBox False),(182:9-187:37,LocalBox ["doPrimOp","call"]),(173:19-173:21,ExpBox False),(173:23-173:26,ExpBox False),(173:37-173:43,ExpBox False),(173:29-173:43,ExpBox False),(173:53-173:56,ExpBox False),(173:45-173:56,ExpBox False),(173:66-173:69,ExpBox False),(173:58-173:69,ExpBox False),(173:28-173:70,ExpBox False),(173:10-173:70,ExpBox False),(176:34-176:35,ExpBox False),(176:37-176:38,ExpBox False),(176:40-176:41,ExpBox False),(176:27-176:42,ExpBox False),(176:44-176:45,ExpBox False),(176:47-176:48,ExpBox False),(176:50-176:51,ExpBox False),(176:22-176:51,ExpBox False),(176:16-176:51,LocalBox ["doPrimOp","res"]),(178:45-178:47,ExpBox False),(178:37-178:48,ExpBox False),(178:33-178:49,ExpBox False),(178:24-178:50,ExpBox False),(178:54-178:56,ExpBox False),(178:23-178:57,ExpBox False),(175:12-178:57,ExpBox True),(179:39-179:42,ExpBox False),(179:33-179:43,ExpBox False),(179:29-179:44,ExpBox False),(179:20-179:45,ExpBox False),(179:49-179:51,ExpBox False),(179:19-179:52,ExpBox False),(179:12-179:52,ExpBox True),(173:5-179:52,ExpBox True),(190:23-190:24,ExpBox False),(190:19-190:25,ExpBox False),(190:13-190:26,ExpBox False),(190:30-190:32,ExpBox False),(190:12-190:33,ExpBox False),(190:5-190:33,ExpBox True),(192:24-192:25,ExpBox False),(192:20-192:26,ExpBox False),(192:13-192:27,ExpBox False),(192:31-192:33,ExpBox False),(192:12-192:34,ExpBox False),(192:5-192:34,ExpBox True),(194:23-194:25,ExpBox False),(194:19-194:26,ExpBox False),(194:13-194:27,ExpBox False),(194:31-194:33,ExpBox False),(194:12-194:34,ExpBox False),(194:5-194:34,ExpBox True),(199:23-199:24,ExpBox False),(199:26-199:27,ExpBox False),(199:19-199:28,ExpBox False),(199:13-199:29,ExpBox False),(199:33-199:35,ExpBox False),(199:12-199:36,ExpBox False),(199:5-199:36,ExpBox True),(201:24-201:25,ExpBox False),(201:27-201:28,ExpBox False),(201:20-201:29,ExpBox False),(201:13-201:30,ExpBox False),(201:34-201:36,ExpBox False),(201:12-201:37,ExpBox False),(201:5-201:37,ExpBox True),(203:24-203:25,ExpBox False),(203:27-203:28,ExpBox False),(203:20-203:29,ExpBox False),(203:13-203:30,ExpBox False),(203:34-203:36,ExpBox False),(203:12-203:37,ExpBox False),(203:5-203:37,ExpBox True),(205:24-205:25,ExpBox False),(205:27-205:28,ExpBox False),(205:20-205:29,ExpBox False),(205:13-205:30,ExpBox False),(205:34-205:36,ExpBox False),(205:12-205:37,ExpBox False),(205:5-205:37,ExpBox True),(207:17-207:19,ExpBox False),(207:21-207:21,ExpBox False),(207:13-207:22,ExpBox False),(207:26-207:28,ExpBox False),(207:12-207:29,ExpBox False),(207:5-207:29,ExpBox True),(213:26-213:27,ExpBox False),(213:29-213:30,ExpBox False),(213:22-213:31,ExpBox False),(213:13-213:32,ExpBox False),(213:36-213:38,ExpBox False),(213:12-213:39,ExpBox False),(213:5-213:39,ExpBox True),(215:25-215:25,ExpBox False),(215:27-215:27,ExpBox False),(215:29-215:29,ExpBox False),(215:24-215:30,ExpBox False),(215:39-215:39,ExpBox False),(215:41-215:41,ExpBox False),(215:43-215:43,ExpBox False),(215:32-215:44,ExpBox False),(215:20-215:45,ExpBox False),(215:13-215:45,ExpBox False),(215:49-215:51,ExpBox False),(215:12-215:52,ExpBox False),(215:5-215:52,ExpBox True),(218:25-218:26,ExpBox False),(218:28-218:29,ExpBox False),(218:31-218:32,ExpBox False),(218:24-218:33,ExpBox False),(218:36-218:37,ExpBox False),(218:39-218:40,ExpBox False),(218:42-218:43,ExpBox False),(218:35-218:44,ExpBox False),(218:53-218:53,ExpBox False),(218:55-218:55,ExpBox False),(218:57-218:57,ExpBox False),(218:46-218:58,ExpBox False),(218:60-218:61,ExpBox False),(218:63-218:64,ExpBox False),(218:20-218:65,ExpBox False),(218:13-218:65,ExpBox False),(218:69-218:71,ExpBox False),(218:12-218:72,ExpBox False),(218:5-218:72,ExpBox True),(220:17-220:18,ExpBox False),(220:20-220:21,ExpBox False),(220:23-220:24,ExpBox False),(220:13-220:25,ExpBox False),(220:29-220:31,ExpBox False),(220:12-220:32,ExpBox False),(220:5-220:32,ExpBox True),(222:25-222:25,ExpBox False),(222:27-222:27,ExpBox False),(222:21-222:28,ExpBox False),(222:13-222:28,ExpBox False),(222:32-222:34,ExpBox False),(222:12-222:35,ExpBox False),(222:5-222:35,ExpBox True),(224:25-224:25,ExpBox False),(224:27-224:28,ExpBox False),(224:30-224:31,ExpBox False),(224:33-224:34,ExpBox False),(224:21-224:35,ExpBox False),(224:13-224:35,ExpBox False),(224:39-224:41,ExpBox False),(224:12-224:42,ExpBox False),(224:5-224:42,ExpBox True),(230:15-230:15,ExpBox False),(230:17-230:17,ExpBox False),(230:12-230:17,ExpBox False),(230:6-230:17,LocalBox ["doPrimOp","res"]),(228:5-228:7,ExpBox False),(228:23-228:25,ExpBox False),(228:29-228:31,ExpBox False),(228:22-228:32,ExpBox False),(228:15-228:32,ExpBox False),(228:5-228:32,ExpBox True),(248:29-248:34,ExpBox False),(248:15-248:34,ExpBox False),(248:7-248:34,LocalBox ["doPrimOp","types"]),(244:22-244:26,ExpBox False),(244:15-244:26,ExpBox False),(244:7-244:26,LocalBox ["doPrimOp","len"]),(245:16-245:18,ExpBox False),(245:23-245:23,ExpBox False),(245:16-245:23,ExpBox False),(245:16-245:23,BinBox CondBinBox True),(245:16-245:23,BinBox CondBinBox False),(245:30-245:32,ExpBox True),(245:39-245:40,ExpBox True),(245:12-245:41,ExpBox False),(245:7-245:41,LocalBox ["doPrimOp","s"]),(246:18-246:20,ExpBox False),(246:25-246:25,ExpBox False),(246:18-246:25,ExpBox False),(246:18-246:25,BinBox CondBinBox True),(246:18-246:25,BinBox CondBinBox False),(246:32-246:36,ExpBox True),(246:43-246:46,ExpBox True),(246:14-246:47,ExpBox False),(246:7-246:47,LocalBox ["doPrimOp","are"]),(247:18-247:20,ExpBox False),(247:25-247:25,ExpBox False),(247:18-247:25,ExpBox False),(247:18-247:25,BinBox CondBinBox True),(247:18-247:25,BinBox CondBinBox False),(247:32-247:33,ExpBox True),(247:40-247:45,ExpBox True),(247:14-247:46,ExpBox False),(247:7-247:46,LocalBox ["doPrimOp","the"]),(233:10-233:73,ExpBox False),(234:16-234:17,ExpBox False),(234:11-234:17,ExpBox False),(234:22-234:31,ExpBox False),(235:16-235:17,ExpBox False),(235:11-235:17,ExpBox False),(235:22-235:30,ExpBox False),(235:48-235:52,ExpBox False),(235:40-235:53,ExpBox False),(235:35-235:53,ExpBox False),(235:58-235:68,ExpBox False),(235:73-235:73,ExpBox False),(236:23-236:29,ExpBox False),(236:34-236:36,ExpBox False),(236:41-236:47,ExpBox False),(236:52-236:52,ExpBox False),(236:57-236:64,ExpBox False),(237:11-237:18,ExpBox False),(237:49-237:53,ExpBox False),(237:38-237:39,ExpBox False),(237:33-237:39,ExpBox False),(237:31-237:55,ExpBox False),(237:23-237:55,ExpBox False),(237:61-237:68,ExpBox False),(238:11-238:45,ExpBox False),(238:50-238:50,ExpBox False),(238:55-238:70,ExpBox False),(239:19-239:21,ExpBox False),(239:26-239:34,ExpBox False),(241:51-241:55,ExpBox False),(241:43-241:56,ExpBox False),(241:58-241:61,ExpBox False),(241:37-241:62,ExpBox False),(241:29-241:62,ExpBox False),(240:21-240:23,ExpBox False),(240:33-240:35,ExpBox False),(240:28-240:35,ExpBox False),(240:40-240:42,ExpBox False),(240:28-240:42,ExpBox False),(240:21-240:42,ExpBox False),(240:19-241:64,ExpBox False),(240:11-241:64,ExpBox False),(241:70-241:78,ExpBox False),(242:14-242:63,ExpBox False),(241:70-242:63,ExpBox False),(240:11-242:63,ExpBox False),(239:26-242:63,ExpBox False),(239:19-242:63,ExpBox False),(238:55-242:63,ExpBox False),(238:50-242:63,ExpBox False),(238:11-242:63,ExpBox False),(237:61-242:63,ExpBox False),(237:23-242:63,ExpBox False),(237:11-242:63,ExpBox False),(236:57-242:63,ExpBox False),(236:52-242:63,ExpBox False),(236:41-242:63,ExpBox False),(236:34-242:63,ExpBox False),(236:23-242:63,ExpBox False),(235:73-242:63,ExpBox False),(235:58-242:63,ExpBox False),(235:35-242:63,ExpBox False),(235:22-242:63,ExpBox False),(235:11-242:63,ExpBox False),(234:22-242:63,ExpBox False),(234:11-242:63,ExpBox False),(233:9-242:64,ExpBox False),(233:5-242:64,ExpBox True),(164:1-248:34,TopLevelBox ["doPrimOp"]),(153:9-153:81,ExpBox False),(153:5-153:81,ExpBox True),(154:35-154:40,ExpBox False),(154:42-154:43,ExpBox False),(154:45-154:47,ExpBox False),(154:26-154:47,ExpBox True),(152:1-154:47,TopLevelBox ["doPureOp"]),(263:50-263:52,ExpBox False),(263:44-263:52,ExpBox False),(263:18-263:22,ExpBox False),(263:16-263:54,ExpBox False),(263:7-263:54,LocalBox ["doAllOp","lights"]),(259:24-259:24,ExpBox False),(259:26-259:26,ExpBox False),(259:28-259:28,ExpBox False),(259:17-259:29,ExpBox False),(259:31-259:36,ExpBox False),(259:38-259:40,ExpBox False),(259:42-259:44,ExpBox False),(259:47-259:49,ExpBox False),(259:54-259:55,ExpBox False),(259:59-259:63,ExpBox False),(259:53-259:64,ExpBox False),(259:46-259:65,ExpBox False),(259:67-259:69,ExpBox False),(259:71-259:72,ExpBox False),(259:74-259:76,ExpBox False),(259:10-259:76,ExpBox False),(260:17-260:19,ExpBox False),(260:10-260:19,ExpBox False),(259:5-261:8,ExpBox True),(265:34-265:39,ExpBox False),(265:41-265:42,ExpBox False),(265:44-265:46,ExpBox False),(265:25-265:46,ExpBox True),(255:1-265:46,TopLevelBox ["doAllOp"]),(21:17-21:18,ExpBox False),(21:10-21:18,ExpBox False),(21:3-21:18,TopLevelBox ["tick"]),(23:34-23:37,TopLevelBox ["showsPrec"]),(23:34-23:37,TopLevelBox ["showList"]),(45:28-45:31,TopLevelBox ["showsPrec"]),(45:28-45:31,TopLevelBox ["showList"]),(297:10-297:16,ExpBox False),(297:3-297:16,TopLevelBox ["doOp"]),(299:25-299:25,ExpBox False),(299:30-299:30,ExpBox False),(299:25-299:30,ExpBox False),(299:25-299:30,BinBox CondBinBox True),(299:25-299:30,BinBox CondBinBox False),(300:35-300:51,ExpBox False),(300:27-300:51,ExpBox True),(301:36-301:37,ExpBox False),(301:40-301:40,ExpBox False),(301:42-301:42,ExpBox False),(301:39-301:43,ExpBox False),(301:27-301:43,ExpBox True),(299:22-301:43,ExpBox False),(299:14-301:44,ExpBox False),(299:10-301:44,ExpBox False),(299:3-301:44,TopLevelBox ["tick"]),(298:10-298:13,ExpBox False),(298:3-298:13,TopLevelBox ["err"]),(290:42-290:42,ExpBox False),(290:39-290:42,ExpBox False),(291:63-291:63,ExpBox False),(291:60-291:64,ExpBox False),(291:66-291:67,ExpBox False),(291:53-291:67,ExpBox True),(292:61-292:61,ExpBox False),(292:53-292:61,ExpBox True),(290:34-292:61,ExpBox False),(290:26-292:62,ExpBox False),(290:22-292:62,ExpBox False),(290:5-292:62,TopLevelBox [">>="]),(293:41-293:41,ExpBox False),(293:43-293:43,ExpBox False),(293:32-293:43,ExpBox False),(293:24-293:44,ExpBox False),(293:20-293:44,ExpBox False),(293:5-293:44,TopLevelBox ["return"]),(294:40-294:40,ExpBox False),(294:32-294:40,ExpBox False),(294:24-294:41,ExpBox False),(294:20-294:41,ExpBox False),(294:5-294:41,TopLevelBox ["fail"]),(37:36-37:39,ExpBox False),(37:41-37:42,ExpBox False),(37:44-37:46,ExpBox False),(37:27-37:46,ExpBox False),(35:22-38:25,ExpBox False),(35:3-38:25,TopLevelBox ["doOp"]),(39:18-39:18,ExpBox False),(39:12-39:18,ExpBox False),(39:3-39:18,TopLevelBox ["err"]),(31:12-31:19,ExpBox False),(31:3-31:19,TopLevelBox ["doOp"]),(32:18-32:18,ExpBox False),(32:12-32:18,ExpBox False),(32:3-32:18,TopLevelBox ["err"]),(26:22-26:22,ExpBox False),(26:20-26:22,ExpBox False),(26:5-26:22,TopLevelBox [">>="]),(27:20-27:23,ExpBox False),(27:5-27:23,TopLevelBox ["return"]),(28:26-28:26,ExpBox False),(28:20-28:26,ExpBox False),(28:5-28:26,TopLevelBox ["fail"])]
\ No newline at end of file
diff --git a/testsuite/tests/hpc/raytrace/tixs/.hpc/Geometry.mix b/testsuite/tests/hpc/raytrace/tixs/.hpc/Geometry.mix
new file mode 100644
index 0000000000000000000000000000000000000000..5307f9849164a77e1646fa9f13cce4ff532fd063
--- /dev/null
+++ b/testsuite/tests/hpc/raytrace/tixs/.hpc/Geometry.mix
@@ -0,0 +1 @@
+Mix "./Geometry.hs" 2011-09-06 12:02:04 UTC 1504513891 8 [(311:12-311:12,ExpBox False),(311:16-311:16,ExpBox False),(311:12-311:16,ExpBox False),(311:12-311:16,BinBox GuardBinBox True),(311:12-311:16,BinBox GuardBinBox False),(311:20-311:20,ExpBox True),(312:12-312:12,ExpBox False),(312:16-312:16,ExpBox False),(312:12-312:16,ExpBox False),(312:12-312:16,BinBox GuardBinBox True),(312:12-312:16,BinBox GuardBinBox False),(312:20-312:20,ExpBox True),(313:12-313:15,ExpBox False),(313:12-313:15,BinBox GuardBinBox True),(313:12-313:15,BinBox GuardBinBox False),(313:20-313:20,ExpBox True),(311:1-313:20,TopLevelBox ["clampf"]),(299:7-299:12,ExpBox False),(299:1-299:12,TopLevelBox ["inf"]),(298:11-298:17,ExpBox False),(298:1-298:17,TopLevelBox ["epsilon"]),(302:13-302:13,ExpBox False),(302:17-302:23,ExpBox False),(302:13-302:23,ExpBox False),(302:13-302:23,BinBox GuardBinBox True),(302:13-302:23,BinBox GuardBinBox False),(302:28-302:28,ExpBox True),(303:13-303:13,ExpBox False),(303:18-303:24,ExpBox False),(303:17-303:24,ExpBox False),(303:13-303:24,ExpBox False),(303:13-303:24,BinBox GuardBinBox True),(303:13-303:24,BinBox GuardBinBox False),(303:28-303:28,ExpBox True),(304:13-304:21,ExpBox False),(304:13-304:21,BinBox GuardBinBox True),(304:13-304:21,BinBox GuardBinBox False),(304:28-304:34,ExpBox True),(302:1-304:34,TopLevelBox ["nonZero"]),(307:18-307:18,ExpBox False),(307:20-307:20,ExpBox False),(307:17-307:21,ExpBox False),(307:13-307:21,ExpBox False),(307:25-307:31,ExpBox False),(307:13-307:31,ExpBox False),(307:1-307:31,TopLevelBox ["eqEps"]),(308:8-308:12,ExpBox False),(308:1-308:12,TopLevelBox ["near"]),(290:29-290:29,ExpBox False),(290:38-290:38,ExpBox False),(290:29-290:38,ExpBox False),(290:43-290:43,ExpBox False),(290:52-290:52,ExpBox False),(290:43-290:52,ExpBox False),(290:57-290:57,ExpBox False),(290:66-290:66,ExpBox False),(290:57-290:66,ExpBox False),(290:43-290:66,ExpBox False),(290:29-290:66,ExpBox False),(290:1-290:66,TopLevelBox ["nearC"]),(287:31-287:31,ExpBox False),(287:33-287:33,ExpBox False),(287:30-287:34,ExpBox False),(287:37-287:37,ExpBox False),(287:39-287:39,ExpBox False),(287:36-287:40,ExpBox False),(287:43-287:43,ExpBox False),(287:45-287:45,ExpBox False),(287:42-287:46,ExpBox False),(287:28-287:46,ExpBox False),(287:1-287:46,TopLevelBox ["multSC"]),(284:33-284:33,ExpBox False),(284:35-284:35,ExpBox False),(284:32-284:36,ExpBox False),(284:39-284:39,ExpBox False),(284:41-284:41,ExpBox False),(284:38-284:42,ExpBox False),(284:45-284:45,ExpBox False),(284:47-284:47,ExpBox False),(284:44-284:48,ExpBox False),(284:30-284:48,ExpBox False),(284:1-284:48,TopLevelBox ["multCC"]),(278:32-278:32,ExpBox False),(278:34-278:34,ExpBox False),(278:31-278:35,ExpBox False),(278:38-278:38,ExpBox False),(278:40-278:40,ExpBox False),(278:37-278:41,ExpBox False),(278:44-278:44,ExpBox False),(278:46-278:46,ExpBox False),(278:43-278:47,ExpBox False),(278:29-278:47,ExpBox False),(278:1-278:47,TopLevelBox ["subCC"]),(275:32-275:32,ExpBox False),(275:34-275:34,ExpBox False),(275:31-275:35,ExpBox False),(275:38-275:38,ExpBox False),(275:40-275:40,ExpBox False),(275:37-275:41,ExpBox False),(275:44-275:44,ExpBox False),(275:46-275:46,ExpBox False),(275:43-275:47,ExpBox False),(275:29-275:47,ExpBox False),(275:1-275:47,TopLevelBox ["addCC"]),(272:11-272:11,ExpBox False),(272:13-272:13,ExpBox False),(272:15-272:15,ExpBox False),(272:9-272:15,ExpBox False),(272:1-272:15,TopLevelBox ["black"]),(281:15-281:19,ExpBox False),(281:21-281:25,ExpBox False),(281:9-281:25,ExpBox False),(281:1-281:25,TopLevelBox ["sumCC"]),(270:11-270:11,ExpBox False),(270:13-270:13,ExpBox False),(270:15-270:15,ExpBox False),(270:9-270:15,ExpBox False),(270:1-270:15,TopLevelBox ["white"]),(239:47-239:49,ExpBox False),(239:52-239:54,ExpBox False),(239:57-239:59,ExpBox False),(239:62-239:64,ExpBox False),(239:44-239:65,ExpBox False),(240:47-240:49,ExpBox False),(240:52-240:54,ExpBox False),(240:57-240:59,ExpBox False),(240:62-240:64,ExpBox False),(240:44-240:65,ExpBox False),(241:47-241:49,ExpBox False),(241:52-241:54,ExpBox False),(241:57-241:59,ExpBox False),(241:62-241:64,ExpBox False),(241:44-241:65,ExpBox False),(242:47-242:49,ExpBox False),(242:52-242:54,ExpBox False),(242:57-242:59,ExpBox False),(242:62-242:64,ExpBox False),(242:44-242:65,ExpBox False),(239:41-242:66,ExpBox False),(236:1-242:66,TopLevelBox ["transposeM"]),(222:25-222:25,ExpBox False),(222:27-222:27,ExpBox False),(222:24-222:28,ExpBox False),(222:31-222:31,ExpBox False),(222:33-222:33,ExpBox False),(222:30-222:34,ExpBox False),(222:37-222:37,ExpBox False),(222:39-222:39,ExpBox False),(222:36-222:40,ExpBox False),(222:22-222:40,ExpBox False),(222:1-222:40,TopLevelBox ["multSV"]),(210:8-210:8,ExpBox False),(210:12-210:12,ExpBox False),(210:8-210:12,ExpBox False),(210:1-210:12,TopLevelBox ["sq"]),(214:28-214:28,ExpBox False),(214:25-214:28,ExpBox False),(214:35-214:35,ExpBox False),(214:32-214:35,ExpBox False),(214:25-214:35,ExpBox False),(214:42-214:42,ExpBox False),(214:39-214:42,ExpBox False),(214:25-214:42,ExpBox False),(214:1-214:42,TopLevelBox ["distFrom0Sq"]),(218:33-218:33,ExpBox False),(218:20-218:34,ExpBox False),(218:15-218:34,ExpBox False),(218:1-218:34,TopLevelBox ["distFrom0"]),(200:27-200:27,ExpBox False),(200:24-200:27,ExpBox False),(200:34-200:34,ExpBox False),(200:31-200:34,ExpBox False),(200:24-200:34,ExpBox False),(200:41-200:41,ExpBox False),(200:38-200:41,ExpBox False),(200:23-200:42,ExpBox False),(200:18-200:42,ExpBox False),(200:11-200:42,LocalBox ["normalize","norm"]),(198:16-198:19,ExpBox False),(198:24-198:24,ExpBox False),(198:16-198:24,ExpBox False),(198:16-198:24,BinBox GuardBinBox True),(198:16-198:24,BinBox GuardBinBox False),(198:36-198:36,ExpBox False),(198:38-198:41,ExpBox False),(198:35-198:42,ExpBox False),(198:44-198:44,ExpBox False),(198:28-198:44,ExpBox True),(199:16-199:24,ExpBox False),(199:16-199:24,BinBox GuardBinBox True),(199:16-199:24,BinBox GuardBinBox False),(199:34-199:51,ExpBox False),(199:28-199:51,ExpBox True),(197:1-200:42,TopLevelBox ["normalize"]),(192:27-192:27,ExpBox False),(192:24-192:27,ExpBox False),(192:34-192:34,ExpBox False),(192:31-192:34,ExpBox False),(192:24-192:34,ExpBox False),(192:41-192:41,ExpBox False),(192:38-192:41,ExpBox False),(192:23-192:42,ExpBox False),(192:18-192:42,ExpBox False),(192:1-192:42,TopLevelBox ["norm"]),(188:10-188:11,ExpBox False),(188:15-188:16,ExpBox False),(188:9-188:17,ExpBox False),(188:20-188:21,ExpBox False),(188:25-188:26,ExpBox False),(188:19-188:27,ExpBox False),(188:30-188:31,ExpBox False),(188:35-188:36,ExpBox False),(188:29-188:37,ExpBox False),(188:7-188:37,ExpBox False),(187:1-188:37,TopLevelBox ["subPP"]),(206:26-206:27,ExpBox False),(206:29-206:30,ExpBox False),(206:20-206:30,ExpBox False),(204:18-204:18,ExpBox False),(204:15-204:18,ExpBox False),(204:25-204:25,ExpBox False),(204:22-204:25,ExpBox False),(204:15-204:25,ExpBox False),(204:32-204:32,ExpBox False),(204:29-204:32,ExpBox False),(204:15-204:32,ExpBox False),(204:1-206:30,TopLevelBox ["dist2"]),(184:11-184:12,ExpBox False),(184:9-184:13,ExpBox False),(184:17-184:18,ExpBox False),(184:15-184:19,ExpBox False),(184:23-184:24,ExpBox False),(184:21-184:25,ExpBox False),(184:7-184:25,ExpBox False),(183:1-184:25,TopLevelBox ["negV"]),(180:10-180:11,ExpBox False),(180:15-180:16,ExpBox False),(180:9-180:17,ExpBox False),(180:20-180:21,ExpBox False),(180:25-180:26,ExpBox False),(180:19-180:27,ExpBox False),(180:30-180:31,ExpBox False),(180:35-180:36,ExpBox False),(180:29-180:37,ExpBox False),(180:7-180:37,ExpBox False),(179:1-180:37,TopLevelBox ["subVV"]),(176:10-176:11,ExpBox False),(176:15-176:16,ExpBox False),(176:9-176:17,ExpBox False),(176:20-176:21,ExpBox False),(176:25-176:26,ExpBox False),(176:19-176:27,ExpBox False),(176:30-176:31,ExpBox False),(176:35-176:36,ExpBox False),(176:29-176:37,ExpBox False),(176:7-176:37,ExpBox False),(175:1-176:37,TopLevelBox ["addPV"]),(293:25-293:25,ExpBox False),(293:36-293:36,ExpBox False),(293:47-293:47,ExpBox False),(293:35-293:48,ExpBox False),(293:25-293:48,ExpBox False),(293:1-293:48,TopLevelBox ["offsetToPoint"]),(172:10-172:11,ExpBox False),(172:15-172:16,ExpBox False),(172:9-172:17,ExpBox False),(172:20-172:21,ExpBox False),(172:25-172:26,ExpBox False),(172:19-172:27,ExpBox False),(172:30-172:31,ExpBox False),(172:35-172:36,ExpBox False),(172:29-172:37,ExpBox False),(172:7-172:37,ExpBox False),(171:1-172:37,TopLevelBox ["addVV"]),(168:40-168:41,ExpBox False),(168:45-168:46,ExpBox False),(168:40-168:46,ExpBox False),(168:50-168:51,ExpBox False),(168:55-168:56,ExpBox False),(168:50-168:56,ExpBox False),(168:40-168:56,ExpBox False),(168:60-168:61,ExpBox False),(168:65-168:66,ExpBox False),(168:60-168:66,ExpBox False),(168:40-168:66,ExpBox False),(168:70-168:71,ExpBox False),(168:75-168:76,ExpBox False),(168:70-168:76,ExpBox False),(168:40-168:76,ExpBox False),(168:1-168:76,TopLevelBox ["dot4"]),(260:18-260:18,ExpBox False),(260:20-260:21,ExpBox False),(260:12-260:22,ExpBox False),(261:18-261:18,ExpBox False),(261:20-261:21,ExpBox False),(261:12-261:22,ExpBox False),(262:18-262:18,ExpBox False),(262:20-262:21,ExpBox False),(262:12-262:22,ExpBox False),(263:18-263:18,ExpBox False),(263:20-263:21,ExpBox False),(263:12-263:22,ExpBox False),(260:10-263:22,ExpBox False),(259:1-263:22,TopLevelBox ["multMQ"]),(232:23-232:24,ExpBox False),(232:12-232:24,ExpBox False),(232:6-232:24,LocalBox ["multMM","m2'"]),(227:18-227:20,ExpBox False),(227:22-227:23,ExpBox False),(227:10-227:24,ExpBox False),(228:18-228:20,ExpBox False),(228:22-228:23,ExpBox False),(228:10-228:24,ExpBox False),(229:18-229:20,ExpBox False),(229:22-229:23,ExpBox False),(229:10-229:24,ExpBox False),(230:18-230:20,ExpBox False),(230:22-230:23,ExpBox False),(230:10-230:24,ExpBox False),(227:8-230:24,ExpBox False),(226:1-232:24,TopLevelBox ["multMM"]),(157:8-157:9,ExpBox False),(157:13-157:14,ExpBox False),(157:8-157:14,ExpBox False),(157:18-157:19,ExpBox False),(157:23-157:24,ExpBox False),(157:18-157:24,ExpBox False),(157:7-157:25,ExpBox False),(157:28-157:29,ExpBox False),(157:33-157:34,ExpBox False),(157:28-157:34,ExpBox False),(157:38-157:39,ExpBox False),(157:43-157:44,ExpBox False),(157:38-157:44,ExpBox False),(157:27-157:45,ExpBox False),(157:48-157:49,ExpBox False),(157:53-157:54,ExpBox False),(157:48-157:54,ExpBox False),(157:58-157:59,ExpBox False),(157:63-157:64,ExpBox False),(157:58-157:64,ExpBox False),(157:47-157:65,ExpBox False),(157:5-157:65,ExpBox False),(156:1-157:65,TopLevelBox ["cross"]),(153:33-153:34,ExpBox False),(153:38-153:39,ExpBox False),(153:33-153:39,ExpBox False),(153:43-153:44,ExpBox False),(153:48-153:49,ExpBox False),(153:43-153:49,ExpBox False),(153:33-153:49,ExpBox False),(153:53-153:54,ExpBox False),(153:58-153:59,ExpBox False),(153:53-153:59,ExpBox False),(153:33-153:59,ExpBox False),(153:1-153:59,TopLevelBox ["dot"]),(149:32-149:32,ExpBox False),(149:34-149:34,ExpBox False),(149:36-149:36,ExpBox False),(149:30-149:36,ExpBox False),(149:1-149:36,TopLevelBox ["quad_to_vector"]),(145:31-145:31,ExpBox False),(145:33-145:33,ExpBox False),(145:35-145:35,ExpBox False),(145:29-145:35,ExpBox False),(145:1-145:35,TopLevelBox ["quad_to_point"]),(141:29-141:29,ExpBox False),(141:31-141:31,ExpBox False),(141:33-141:33,ExpBox False),(141:35-141:35,ExpBox False),(141:27-141:35,ExpBox False),(141:1-141:35,TopLevelBox ["point_to_quad"]),(253:36-253:36,ExpBox False),(253:53-253:53,ExpBox False),(253:38-253:54,ExpBox False),(253:28-253:55,ExpBox False),(253:14-253:55,ExpBox False),(253:1-253:55,TopLevelBox ["multMP"]),(137:30-137:30,ExpBox False),(137:32-137:32,ExpBox False),(137:34-137:34,ExpBox False),(137:36-137:36,ExpBox False),(137:28-137:36,ExpBox False),(137:1-137:36,TopLevelBox ["vector_to_quad"]),(249:37-249:37,ExpBox False),(249:55-249:55,ExpBox False),(249:39-249:56,ExpBox False),(249:29-249:57,ExpBox False),(249:14-249:57,ExpBox False),(249:1-249:57,TopLevelBox ["multMV"]),(267:27-267:27,ExpBox False),(267:29-267:29,ExpBox False),(267:20-267:29,ExpBox False),(267:39-267:39,ExpBox False),(267:41-267:41,ExpBox False),(267:32-267:41,ExpBox False),(267:19-267:42,ExpBox False),(267:1-267:42,TopLevelBox ["multMR"]),(133:32-133:32,ExpBox False),(133:34-133:34,ExpBox False),(133:36-133:36,ExpBox False),(133:30-133:36,ExpBox False),(133:1-133:36,TopLevelBox ["vector_to_point"]),(130:31-130:31,ExpBox False),(130:33-130:33,ExpBox False),(130:35-130:35,ExpBox False),(130:29-130:35,ExpBox False),(130:1-130:35,TopLevelBox ["point_to_vector"]),(127:29-127:29,ExpBox False),(127:38-127:38,ExpBox False),(127:29-127:38,ExpBox False),(127:43-127:43,ExpBox False),(127:52-127:52,ExpBox False),(127:43-127:52,ExpBox False),(127:57-127:57,ExpBox False),(127:66-127:66,ExpBox False),(127:57-127:66,ExpBox False),(127:43-127:66,ExpBox False),(127:29-127:66,ExpBox False),(127:1-127:66,TopLevelBox ["nearV"]),(124:18-124:18,ExpBox False),(124:20-124:20,ExpBox False),(124:22-124:22,ExpBox False),(124:16-124:22,ExpBox False),(124:1-124:22,TopLevelBox ["vector"]),(163:14-163:14,ExpBox False),(163:19-163:19,ExpBox False),(163:14-163:19,ExpBox False),(163:14-163:19,BinBox GuardBinBox True),(163:14-163:19,BinBox GuardBinBox False),(163:44-163:44,ExpBox False),(163:46-163:46,ExpBox False),(163:50-163:50,ExpBox False),(163:48-163:51,ExpBox False),(163:36-163:52,ExpBox False),(163:26-163:52,ExpBox True),(164:14-164:22,ExpBox False),(164:14-164:22,BinBox GuardBinBox True),(164:14-164:22,BinBox GuardBinBox False),(164:46-164:46,ExpBox False),(164:44-164:47,ExpBox False),(164:49-164:49,ExpBox False),(164:51-164:51,ExpBox False),(164:36-164:52,ExpBox False),(164:26-164:52,ExpBox True),(163:9-164:52,LocalBox ["tangents","v1"]),(162:6-162:7,ExpBox False),(162:10-162:10,ExpBox False),(162:20-162:21,ExpBox False),(162:10-162:21,ExpBox False),(162:5-162:22,ExpBox False),(161:1-164:52,TopLevelBox ["tangents"]),(121:17-121:17,ExpBox False),(121:19-121:19,ExpBox False),(121:21-121:21,ExpBox False),(121:15-121:21,ExpBox False),(121:1-121:21,TopLevelBox ["point"]),(118:24-118:24,ExpBox False),(118:1-118:24,TopLevelBox ["zComponent"]),(116:24-116:24,ExpBox False),(116:1-116:24,TopLevelBox ["yComponent"]),(114:24-114:24,ExpBox False),(114:1-114:24,TopLevelBox ["xComponent"]),(111:20-111:20,ExpBox False),(111:1-111:20,TopLevelBox ["zCoord"]),(109:20-109:20,ExpBox False),(109:1-109:20,TopLevelBox ["yCoord"]),(107:20-107:20,ExpBox False),(107:1-107:20,TopLevelBox ["xCoord"]),(104:22-104:22,ExpBox False),(104:24-104:24,ExpBox False),(104:26-104:26,ExpBox False),(104:21-104:27,ExpBox False),(104:1-104:27,TopLevelBox ["uncolor"]),(102:17-102:17,ExpBox False),(102:19-102:19,ExpBox False),(102:21-102:21,ExpBox False),(102:15-102:21,ExpBox False),(102:1-102:21,TopLevelBox ["color"]),(100:16-100:16,ExpBox False),(100:19-100:19,ExpBox False),(100:22-100:22,ExpBox False),(100:15-100:23,ExpBox False),(100:1-100:23,TopLevelBox ["coord"]),(95:10-95:12,ExpBox False),(95:14-95:16,ExpBox False),(95:18-95:20,ExpBox False),(95:22-95:24,ExpBox False),(95:7-95:25,ExpBox False),(96:10-96:12,ExpBox False),(96:14-96:16,ExpBox False),(96:18-96:20,ExpBox False),(96:22-96:24,ExpBox False),(96:7-96:25,ExpBox False),(97:10-97:12,ExpBox False),(97:14-97:16,ExpBox False),(97:18-97:20,ExpBox False),(97:22-97:24,ExpBox False),(97:7-97:25,ExpBox False),(98:10-98:12,ExpBox False),(98:14-98:16,ExpBox False),(98:18-98:20,ExpBox False),(98:22-98:24,ExpBox False),(98:7-98:25,ExpBox False),(95:5-98:25,ExpBox False),(91:1-98:25,TopLevelBox ["matrix"]),(70:15-70:18,TopLevelBox ["showsPrec"]),(70:15-70:18,TopLevelBox ["showList"]),(72:15-72:18,TopLevelBox ["showsPrec"]),(72:15-72:18,TopLevelBox ["showList"]),(72:21-72:22,TopLevelBox ["=="]),(72:21-72:22,TopLevelBox ["/="]),(77:15-77:18,TopLevelBox ["showsPrec"]),(77:15-77:18,TopLevelBox ["showList"]),(77:21-77:22,TopLevelBox ["=="]),(77:21-77:22,TopLevelBox ["/="]),(80:15-80:18,TopLevelBox ["showsPrec"]),(80:15-80:18,TopLevelBox ["showList"]),(83:15-83:18,TopLevelBox ["showsPrec"]),(83:15-83:18,TopLevelBox ["showList"]),(74:15-74:18,TopLevelBox ["showsPrec"]),(74:15-74:18,TopLevelBox ["showList"])]
\ No newline at end of file
diff --git a/testsuite/tests/hpc/raytrace/tixs/.hpc/Illumination.mix b/testsuite/tests/hpc/raytrace/tixs/.hpc/Illumination.mix
new file mode 100644
index 0000000000000000000000000000000000000000..f66f21198c05a8a0ad69565c34334e1200047023
--- /dev/null
+++ b/testsuite/tests/hpc/raytrace/tixs/.hpc/Illumination.mix
@@ -0,0 +1 @@
+Mix "./Illumination.hs" 2011-09-06 12:02:04 UTC 615204115 8 [(226:33-226:35,ExpBox False),(226:37-226:37,ExpBox False),(226:10-226:37,ExpBox False),(227:38-227:42,ExpBox True),(228:38-228:42,ExpBox True),(229:38-229:42,ExpBox True),(230:38-230:42,ExpBox True),(231:38-231:38,ExpBox False),(231:42-231:44,ExpBox False),(231:38-231:44,ExpBox True),(226:5-231:44,ExpBox False),(225:1-231:44,TopLevelBox ["intersectWithin"]),(217:33-217:35,ExpBox False),(217:37-217:37,ExpBox False),(217:10-217:37,ExpBox False),(218:38-218:42,ExpBox True),(219:38-219:42,ExpBox True),(220:38-220:42,ExpBox True),(221:38-221:42,ExpBox True),(222:38-222:41,ExpBox True),(217:5-222:41,ExpBox False),(216:1-222:41,TopLevelBox ["intersects"]),(207:33-207:35,ExpBox False),(207:37-207:37,ExpBox False),(207:10-207:37,ExpBox False),(208:41-208:47,ExpBox True),(209:41-209:47,ExpBox True),(210:41-210:47,ExpBox True),(211:41-211:47,ExpBox True),(213:33-213:33,ExpBox False),(213:35-213:36,ExpBox False),(213:25-213:36,ExpBox False),(214:33-214:35,ExpBox False),(214:37-214:37,ExpBox False),(214:19-214:37,ExpBox False),(214:40-214:40,ExpBox False),(214:43-214:46,ExpBox False),(214:18-214:47,ExpBox False),(213:9-214:47,ExpBox True),(207:5-214:47,ExpBox False),(206:1-214:47,TopLevelBox ["castRay"]),(202:24-202:26,ExpBox False),(202:31-202:32,ExpBox False),(202:45-202:47,ExpBox False),(202:39-202:48,ExpBox False),(202:36-202:48,ExpBox False),(202:30-202:49,ExpBox False),(202:23-202:50,ExpBox False),(202:61-202:65,ExpBox False),(202:23-202:65,ExpBox False),(202:1-202:65,TopLevelBox ["attenuate"]),(179:5-179:7,ExpBox False),(179:15-179:19,ExpBox False),(179:5-179:19,ExpBox False),(179:23-179:23,ExpBox False),(179:5-179:23,ExpBox False),(179:5-179:23,BinBox GuardBinBox True),(179:5-179:23,BinBox GuardBinBox False),(179:27-179:33,ExpBox True),(180:17-180:19,ExpBox False),(180:30-180:35,ExpBox False),(180:46-180:48,ExpBox False),(180:29-180:49,ExpBox False),(180:17-180:49,ExpBox False),(180:51-180:53,ExpBox False),(180:16-180:54,ExpBox False),(180:56-180:58,ExpBox False),(180:5-180:58,ExpBox False),(180:5-180:58,BinBox GuardBinBox True),(180:5-180:58,BinBox GuardBinBox False),(180:62-180:68,ExpBox True),(181:5-181:13,ExpBox False),(181:5-181:13,BinBox GuardBinBox True),(181:5-181:13,BinBox GuardBinBox False),(181:37-181:39,ExpBox False),(181:41-181:45,ExpBox False),(181:36-181:46,ExpBox False),(181:31-181:46,ExpBox True),(186:19-186:20,ExpBox False),(186:30-186:32,ExpBox False),(186:19-186:32,ExpBox False),(186:13-186:32,LocalBox ["unobscure","vec"]),(187:29-187:31,ExpBox False),(187:33-187:37,ExpBox False),(187:19-187:37,ExpBox False),(187:13-187:37,LocalBox ["unobscure","is"]),(183:5-183:7,ExpBox False),(183:15-183:19,ExpBox False),(183:5-183:19,ExpBox False),(183:23-183:23,ExpBox False),(183:5-183:23,ExpBox False),(183:5-183:23,BinBox GuardBinBox True),(183:5-183:23,BinBox GuardBinBox False),(183:31-183:37,ExpBox True),(184:22-184:24,ExpBox False),(184:35-184:40,ExpBox False),(184:62-184:64,ExpBox False),(184:51-184:65,ExpBox False),(184:34-184:66,ExpBox False),(184:22-184:66,ExpBox False),(184:69-184:71,ExpBox False),(184:21-184:72,ExpBox False),(184:74-184:76,ExpBox False),(184:5-184:76,ExpBox False),(184:5-184:76,BinBox GuardBinBox True),(184:5-184:76,BinBox GuardBinBox False),(184:80-184:86,ExpBox True),(185:5-185:13,ExpBox False),(185:5-185:13,BinBox GuardBinBox True),(185:5-185:13,BinBox GuardBinBox False),(185:37-185:39,ExpBox False),(185:41-185:42,ExpBox False),(185:36-185:43,ExpBox False),(185:31-185:43,ExpBox True),(198:32-198:34,ExpBox False),(198:44-198:46,ExpBox False),(198:31-198:47,ExpBox False),(198:21-198:47,ExpBox False),(198:13-198:47,LocalBox ["unobscure","qsp"]),(197:32-197:33,ExpBox False),(197:43-197:45,ExpBox False),(197:31-197:46,ExpBox False),(197:21-197:46,ExpBox False),(197:13-197:46,LocalBox ["unobscure","asp"]),(194:21-194:23,ExpBox False),(194:33-194:34,ExpBox False),(194:21-194:34,ExpBox False),(194:13-194:34,LocalBox ["unobscure","vec'"]),(193:21-193:23,ExpBox False),(193:33-193:35,ExpBox False),(193:21-193:35,ExpBox False),(193:13-193:35,LocalBox ["unobscure","vec"]),(195:37-195:39,ExpBox False),(195:27-195:39,ExpBox False),(195:58-195:61,ExpBox False),(195:47-195:62,ExpBox False),(195:26-195:63,ExpBox False),(195:21-195:63,ExpBox False),(195:13-195:63,LocalBox ["unobscure","angle"]),(199:31-199:33,ExpBox False),(199:38-199:40,ExpBox False),(199:48-199:50,ExpBox False),(199:37-199:51,ExpBox False),(199:56-199:58,ExpBox False),(199:36-199:59,ExpBox False),(199:70-199:74,ExpBox False),(199:35-199:75,ExpBox False),(199:21-199:75,ExpBox False),(199:13-199:75,LocalBox ["unobscure","is"]),(189:5-189:7,ExpBox False),(189:15-189:19,ExpBox False),(189:5-189:19,ExpBox False),(189:23-189:23,ExpBox False),(189:5-189:23,ExpBox False),(189:5-189:23,BinBox GuardBinBox True),(189:5-189:23,BinBox GuardBinBox False),(189:75-189:81,ExpBox True),(190:22-190:24,ExpBox False),(190:35-190:40,ExpBox False),(190:62-190:64,ExpBox False),(190:51-190:65,ExpBox False),(190:34-190:66,ExpBox False),(190:22-190:66,ExpBox False),(190:69-190:71,ExpBox False),(190:21-190:72,ExpBox False),(190:74-190:76,ExpBox False),(190:5-190:76,ExpBox False),(190:5-190:76,BinBox GuardBinBox True),(190:5-190:76,BinBox GuardBinBox False),(190:80-190:86,ExpBox True),(191:5-191:9,ExpBox False),(191:13-191:18,ExpBox False),(191:5-191:18,ExpBox False),(191:5-191:18,BinBox GuardBinBox True),(191:5-191:18,BinBox GuardBinBox False),(191:75-191:81,ExpBox True),(192:5-192:13,ExpBox False),(192:5-192:13,BinBox GuardBinBox True),(192:5-192:13,BinBox GuardBinBox False),(192:81-192:83,ExpBox False),(192:86-192:87,ExpBox False),(192:80-192:88,ExpBox False),(192:75-192:88,ExpBox True),(177:1-199:75,TopLevelBox ["unobscure"]),(174:61-174:63,ExpBox False),(174:65-174:67,ExpBox False),(174:69-174:73,ExpBox False),(174:50-174:74,ExpBox False),(174:76-174:81,ExpBox False),(174:45-174:82,ExpBox False),(174:35-174:82,ExpBox False),(174:1-174:82,TopLevelBox ["unobscured"]),(169:46-169:46,ExpBox False),(169:48-169:48,ExpBox False),(169:38-169:49,ExpBox False),(169:51-169:51,ExpBox False),(169:32-169:51,ExpBox True),(170:56-170:56,ExpBox False),(170:58-170:58,ExpBox False),(170:48-170:59,ExpBox False),(170:61-170:61,ExpBox False),(170:37-170:61,ExpBox True),(171:60-171:60,ExpBox False),(171:62-171:62,ExpBox False),(171:52-171:63,ExpBox False),(171:73-171:73,ExpBox False),(171:75-171:75,ExpBox False),(171:65-171:76,ExpBox False),(171:78-171:78,ExpBox False),(171:80-171:80,ExpBox False),(171:82-171:82,ExpBox False),(171:42-171:82,ExpBox True),(169:1-171:82,TopLevelBox ["transformLight"]),(167:20-167:20,ExpBox False),(167:22-167:22,ExpBox False),(167:24-167:24,ExpBox False),(167:13-167:25,ExpBox False),(167:34-167:34,ExpBox False),(167:36-167:36,ExpBox False),(167:38-167:38,ExpBox False),(167:27-167:39,ExpBox False),(167:41-167:43,ExpBox False),(167:45-167:50,ExpBox False),(167:52-167:54,ExpBox False),(167:3-167:54,ExpBox False),(166:1-167:54,TopLevelBox ["spotlight"]),(165:21-165:21,ExpBox False),(165:23-165:23,ExpBox False),(165:25-165:25,ExpBox False),(165:14-165:26,ExpBox False),(165:28-165:32,ExpBox False),(165:3-165:32,ExpBox False),(164:1-165:32,TopLevelBox ["pointlight"]),(163:30-163:30,ExpBox False),(163:28-163:31,ExpBox False),(163:35-163:35,ExpBox False),(163:33-163:36,ExpBox False),(163:40-163:40,ExpBox False),(163:38-163:41,ExpBox False),(163:20-163:42,ExpBox False),(163:9-163:43,ExpBox False),(163:45-163:49,ExpBox False),(163:3-163:49,ExpBox False),(162:1-163:49,TopLevelBox ["light"]),(152:31-152:31,ExpBox False),(152:24-152:31,ExpBox False),(152:35-152:37,ExpBox False),(152:23-152:38,ExpBox False),(152:17-152:38,ExpBox False),(152:1-152:38,TopLevelBox ["scalePixel'"]),(148:14-148:28,ExpBox False),(148:38-148:40,ExpBox False),(148:33-148:40,ExpBox False),(148:45-148:47,ExpBox False),(148:57-148:58,ExpBox False),(148:52-148:58,ExpBox False),(148:63-148:71,ExpBox False),(148:52-148:71,ExpBox False),(148:45-148:71,ExpBox False),(148:33-148:71,ExpBox False),(148:14-148:71,ExpBox False),(148:5-148:71,LocalBox ["showBitmap'","header"]),(146:20-146:22,ExpBox False),(145:38-145:44,ExpBox False),(145:46-145:47,ExpBox False),(145:34-145:47,ExpBox False),(144:37-144:37,ExpBox False),(144:25-144:37,ExpBox False),(144:51-144:51,ExpBox False),(144:39-144:51,ExpBox False),(144:65-144:65,ExpBox False),(144:53-144:65,ExpBox False),(144:24-144:66,ExpBox False),(144:21-145:48,ExpBox False),(144:14-145:48,ExpBox False),(144:12-146:24,ExpBox False),(144:5-146:24,ExpBox True),(149:27-149:61,ExpBox False),(149:21-149:61,ExpBox True),(142:1-149:61,TopLevelBox ["showBitmap'"]),(139:35-139:35,ExpBox False),(139:28-139:35,ExpBox False),(139:39-139:41,ExpBox False),(139:27-139:42,ExpBox False),(139:20-139:43,ExpBox False),(139:16-139:43,ExpBox False),(139:1-139:43,TopLevelBox ["scalePixel"]),(135:14-135:28,ExpBox False),(135:38-135:40,ExpBox False),(135:33-135:40,ExpBox False),(135:45-135:47,ExpBox False),(135:57-135:58,ExpBox False),(135:52-135:58,ExpBox False),(135:63-135:71,ExpBox False),(135:52-135:71,ExpBox False),(135:45-135:71,ExpBox False),(135:33-135:71,ExpBox False),(135:14-135:71,ExpBox False),(135:5-135:71,LocalBox ["showBitmap","header"]),(132:5-132:10,ExpBox False),(133:31-133:33,ExpBox False),(133:51-133:57,ExpBox False),(133:59-133:60,ExpBox False),(133:47-133:60,ExpBox False),(132:35-132:35,ExpBox False),(132:24-132:35,ExpBox False),(132:48-132:48,ExpBox False),(132:37-132:48,ExpBox False),(132:61-132:61,ExpBox False),(132:50-132:61,ExpBox False),(132:23-132:62,ExpBox False),(132:22-133:61,ExpBox False),(132:15-133:61,ExpBox False),(132:5-133:61,ExpBox True),(136:26-136:60,ExpBox False),(136:20-136:60,ExpBox True),(130:1-136:60,TopLevelBox ["showBitmap"]),(127:14-127:28,ExpBox False),(127:38-127:40,ExpBox False),(127:33-127:40,ExpBox False),(127:45-127:47,ExpBox False),(127:57-127:58,ExpBox False),(127:52-127:58,ExpBox False),(127:63-127:71,ExpBox False),(127:52-127:71,ExpBox False),(127:45-127:71,ExpBox False),(127:33-127:71,ExpBox False),(127:14-127:71,ExpBox False),(127:5-127:71,LocalBox ["showBitmapA","header"]),(126:36-126:38,ExpBox False),(126:28-126:38,ExpBox False),(125:34-125:34,ExpBox False),(125:23-125:34,ExpBox False),(125:48-125:48,ExpBox False),(125:37-125:48,ExpBox False),(125:62-125:62,ExpBox False),(125:51-125:62,ExpBox False),(125:22-125:63,ExpBox False),(125:5-126:38,LocalBox ["showBitmapA","scaleColor"]),(123:5-123:10,ExpBox False),(123:25-123:34,ExpBox False),(123:43-123:45,ExpBox False),(123:36-123:46,ExpBox False),(123:15-123:46,ExpBox False),(123:5-123:46,ExpBox False),(122:1-127:71,TopLevelBox ["showBitmapA"]),(118:23-118:24,ExpBox False),(118:26-118:28,ExpBox False),(118:16-118:28,ExpBox False),(118:5-118:28,LocalBox ["illum","recCoeff"]),(105:18-105:18,ExpBox False),(105:29-105:29,ExpBox False),(105:37-105:41,ExpBox False),(105:43-105:43,ExpBox False),(105:33-105:43,ExpBox False),(105:28-105:44,ExpBox False),(105:46-105:50,ExpBox False),(105:20-105:51,ExpBox False),(105:12-105:51,ExpBox False),(105:5-105:51,LocalBox ["illum","newV"]),(119:29-119:31,ExpBox False),(119:34-119:36,ExpBox False),(119:38-119:41,ExpBox False),(119:33-119:42,ExpBox False),(119:16-119:42,ExpBox False),(119:5-119:42,LocalBox ["illum","recRay"]),(117:19-117:26,ExpBox False),(117:36-117:40,ExpBox False),(117:19-117:40,ExpBox False),(117:19-117:40,BinBox CondBinBox True),(117:19-117:40,BinBox CondBinBox False),(117:47-117:51,ExpBox True),(117:65-117:72,ExpBox False),(117:74-117:79,ExpBox False),(117:58-117:79,ExpBox True),(117:16-117:79,ExpBox False),(117:5-117:79,LocalBox ["illum","recTerm"]),(104:19-104:21,ExpBox False),(104:11-104:21,ExpBox False),(104:5-104:21,LocalBox ["illum","amb"]),(107:22-107:23,ExpBox False),(107:33-107:35,ExpBox False),(107:37-107:39,ExpBox False),(107:25-107:40,ExpBox False),(107:15-107:40,ExpBox False),(107:5-107:40,LocalBox ["illum","ambTerm"]),(103:15-103:17,ExpBox False),(103:9-103:17,ExpBox False),(103:5-103:17,LocalBox ["illum","d"]),(102:32-102:34,ExpBox False),(102:44-102:46,ExpBox False),(102:36-102:47,ExpBox False),(102:57-102:59,ExpBox False),(102:49-102:60,ExpBox False),(102:62-102:66,ExpBox False),(102:21-102:66,ExpBox False),(102:5-102:66,LocalBox ["illum","visibleLights"]),(108:22-108:23,ExpBox False),(109:36-109:48,ExpBox False),(110:35-110:57,ExpBox False),(110:25-110:57,ExpBox False),(110:20-110:57,LocalBox ["illum","difTerm","lj"]),(108:45-108:49,ExpBox False),(108:51-108:52,ExpBox False),(108:40-108:53,ExpBox False),(108:63-108:71,ExpBox False),(108:73-108:75,ExpBox False),(108:55-108:76,ExpBox False),(108:33-108:76,ExpBox False),(108:32-110:58,ExpBox False),(108:25-110:59,ExpBox False),(108:15-110:59,ExpBox False),(108:5-110:59,LocalBox ["illum","difTerm"]),(112:22-112:23,ExpBox False),(113:36-113:48,ExpBox False),(115:53-115:55,ExpBox False),(115:43-115:55,ExpBox False),(115:20-115:55,LocalBox ["illum","spcTerm","lj"]),(116:36-116:37,ExpBox False),(116:57-116:57,ExpBox False),(116:47-116:57,ExpBox False),(116:35-116:58,ExpBox False),(116:25-116:58,ExpBox False),(116:20-116:58,LocalBox ["illum","spcTerm","hj"]),(112:46-112:50,ExpBox False),(112:52-112:53,ExpBox False),(112:41-112:54,ExpBox False),(112:59-112:59,ExpBox False),(112:40-112:61,ExpBox False),(112:71-112:79,ExpBox False),(112:81-112:83,ExpBox False),(112:63-112:84,ExpBox False),(112:33-112:84,ExpBox False),(112:32-116:59,ExpBox False),(112:25-116:60,ExpBox False),(112:15-116:60,ExpBox False),(112:5-116:60,LocalBox ["illum","spcTerm"]),(100:5-100:11,ExpBox False),(100:21-100:27,ExpBox False),(100:5-100:27,ExpBox False),(100:37-100:43,ExpBox False),(100:5-100:43,ExpBox False),(100:53-100:59,ExpBox False),(100:5-100:59,ExpBox False),(99:1-119:42,TopLevelBox ["illum"]),(93:11-93:13,ExpBox False),(93:5-93:13,ExpBox False),(93:18-93:18,ExpBox False),(93:5-93:18,ExpBox False),(93:5-93:18,BinBox GuardBinBox True),(93:5-93:18,BinBox GuardBinBox False),(93:22-93:26,ExpBox True),(94:5-94:13,ExpBox False),(94:5-94:13,BinBox GuardBinBox True),(94:5-94:13,BinBox GuardBinBox False),(94:35-94:35,ExpBox False),(94:37-94:37,ExpBox False),(94:34-94:38,ExpBox False),(94:48-94:50,ExpBox False),(94:40-94:51,ExpBox False),(94:26-94:51,ExpBox False),(95:34-95:38,ExpBox True),(96:43-96:45,ExpBox False),(96:60-96:62,ExpBox False),(96:53-96:63,ExpBox False),(96:65-96:65,ExpBox False),(96:53-96:65,ExpBox False),(96:42-96:67,ExpBox False),(96:69-96:72,ExpBox False),(96:74-96:74,ExpBox False),(96:36-96:74,ExpBox True),(94:21-96:74,ExpBox True),(92:1-96:74,TopLevelBox ["illumination"]),(88:36-88:38,ExpBox False),(88:28-88:38,ExpBox False),(86:28-86:28,ExpBox False),(86:23-86:29,ExpBox False),(86:33-86:36,ExpBox False),(86:23-86:36,ExpBox False),(86:46-86:46,ExpBox False),(86:41-86:47,ExpBox False),(86:52-86:54,ExpBox False),(86:41-86:54,ExpBox False),(86:64-86:64,ExpBox False),(86:59-86:65,ExpBox False),(86:69-86:71,ExpBox False),(86:59-86:71,ExpBox False),(86:41-86:71,ExpBox False),(86:23-86:71,ExpBox False),(86:9-88:38,LocalBox ["contrast","diffMax"]),(85:15-85:17,ExpBox False),(85:22-85:22,ExpBox False),(85:25-85:25,ExpBox False),(85:21-85:26,ExpBox False),(85:15-85:26,ExpBox False),(85:9-85:26,LocalBox ["contrast","cur"]),(82:27-82:33,ExpBox False),(83:45-83:45,ExpBox False),(83:44-83:45,ExpBox False),(83:48-83:48,ExpBox False),(83:43-83:49,ExpBox False),(83:60-83:60,ExpBox False),(83:59-83:60,ExpBox False),(83:63-83:63,ExpBox False),(83:58-83:64,ExpBox False),(82:43-82:45,ExpBox False),(82:48-82:50,ExpBox False),(82:55-82:55,ExpBox False),(82:59-82:60,ExpBox False),(82:55-82:60,ExpBox False),(82:63-82:63,ExpBox False),(82:67-82:68,ExpBox False),(82:63-82:68,ExpBox False),(82:54-82:69,ExpBox False),(82:47-82:70,ExpBox False),(82:37-82:70,ExpBox False),(82:35-84:35,ExpBox False),(82:23-84:35,ExpBox False),(82:1-88:38,TopLevelBox ["contrast"]),(79:33-79:33,ExpBox False),(79:37-79:37,ExpBox False),(79:32-79:38,ExpBox False),(79:41-79:41,ExpBox False),(79:45-79:45,ExpBox False),(79:40-79:46,ExpBox False),(79:49-79:49,ExpBox False),(79:53-79:53,ExpBox False),(79:48-79:54,ExpBox False),(79:26-79:54,ExpBox False),(79:9-79:54,LocalBox ["avg","divN"]),(78:37-78:38,ExpBox False),(78:29-78:39,ExpBox False),(78:15-78:40,ExpBox False),(78:58-78:59,ExpBox False),(78:51-78:60,ExpBox False),(78:42-78:61,ExpBox False),(78:10-78:61,ExpBox False),(78:1-79:54,TopLevelBox ["avg"]),(68:27-68:28,ExpBox False),(68:14-68:28,ExpBox False),(68:45-68:47,ExpBox False),(68:32-68:47,ExpBox False),(68:14-68:47,ExpBox False),(68:5-68:47,LocalBox ["render","aspect"]),(66:14-66:14,ExpBox False),(66:23-66:25,ExpBox False),(66:27-66:27,ExpBox False),(66:22-66:28,ExpBox False),(66:18-66:28,ExpBox False),(66:14-66:28,ExpBox False),(66:5-66:28,LocalBox ["render","width"]),(67:14-67:18,ExpBox False),(67:35-67:37,ExpBox False),(67:22-67:37,ExpBox False),(67:14-67:37,ExpBox False),(67:5-67:37,LocalBox ["render","delta"]),(69:16-69:20,ExpBox False),(69:24-69:24,ExpBox False),(69:16-69:24,ExpBox False),(69:14-69:24,ExpBox False),(69:5-69:24,LocalBox ["render","left"]),(70:16-70:19,ExpBox False),(70:23-70:28,ExpBox False),(70:16-70:28,ExpBox False),(70:14-70:28,ExpBox False),(70:5-70:28,LocalBox ["render","top"]),(71:25-71:28,ExpBox False),(71:32-71:32,ExpBox False),(71:34-71:38,ExpBox False),(71:32-71:38,ExpBox False),(71:24-71:39,ExpBox False),(71:42-71:44,ExpBox False),(71:48-71:48,ExpBox False),(71:50-71:54,ExpBox False),(71:48-71:54,ExpBox False),(71:41-71:55,ExpBox False),(71:57-71:57,ExpBox False),(71:17-71:57,ExpBox False),(71:5-71:57,LocalBox ["render","pixel"]),(65:21-65:21,ExpBox False),(65:23-65:23,ExpBox False),(65:27-65:27,ExpBox False),(65:25-65:28,ExpBox False),(65:14-65:28,ExpBox False),(65:5-65:28,LocalBox ["render","start"]),(51:41-51:42,ExpBox False),(51:29-51:30,ExpBox False),(51:32-51:32,ExpBox False),(51:14-51:32,ExpBox False),(51:12-51:44,ExpBox False),(51:5-51:44,LocalBox ["render","ls'"]),(50:23-50:24,ExpBox False),(50:26-50:26,ExpBox False),(50:22-50:27,ExpBox False),(50:29-50:31,ExpBox False),(50:12-50:31,ExpBox False),(50:5-50:31,LocalBox ["render","obj'"]),(64:27-64:29,ExpBox False),(64:39-64:41,ExpBox False),(64:52-64:55,ExpBox False),(64:64-64:66,ExpBox False),(64:14-64:67,ExpBox False),(64:5-64:67,LocalBox ["render","cxt"]),(52:26-52:26,ExpBox False),(52:28-52:28,ExpBox False),(52:25-52:29,ExpBox False),(52:33-52:34,ExpBox False),(52:36-52:38,ExpBox False),(52:32-52:39,ExpBox False),(52:24-52:40,ExpBox False),(54:36-54:37,ExpBox False),(54:41-54:43,ExpBox False),(54:40-54:46,ExpBox False),(54:31-54:46,ExpBox False),(55:36-55:38,ExpBox False),(55:41-55:43,ExpBox False),(55:40-55:46,ExpBox False),(55:31-55:46,ExpBox False),(53:39-53:41,ExpBox False),(53:44-53:48,ExpBox False),(53:56-53:56,ExpBox False),(53:58-53:58,ExpBox False),(53:50-53:58,ExpBox False),(53:43-53:59,ExpBox False),(53:26-53:59,ExpBox False),(53:24-55:48,ExpBox False),(52:14-55:48,ExpBox False),(52:5-55:48,LocalBox ["render","pixelA"]),(62:26-62:27,ExpBox False),(62:30-62:32,ExpBox False),(62:29-62:35,ExpBox False),(62:21-62:35,ExpBox False),(61:64-61:66,ExpBox False),(61:69-61:71,ExpBox False),(61:68-61:74,ExpBox False),(61:59-61:74,ExpBox False),(61:31-61:33,ExpBox False),(61:36-61:40,ExpBox False),(61:48-61:48,ExpBox False),(61:50-61:50,ExpBox False),(61:42-61:50,ExpBox False),(61:35-61:51,ExpBox False),(61:18-61:51,ExpBox False),(61:16-61:76,ExpBox False),(61:14-63:14,ExpBox False),(61:5-63:14,LocalBox ["render","pixels"]),(73:30-73:32,ExpBox False),(73:36-73:38,ExpBox False),(75:24-75:28,ExpBox False),(75:23-75:28,ExpBox False),(75:31-75:33,ExpBox False),(75:22-75:34,ExpBox False),(75:38-75:42,ExpBox False),(75:45-75:47,ExpBox False),(75:37-75:48,ExpBox False),(75:52-75:54,ExpBox False),(75:58-75:62,ExpBox False),(75:57-75:62,ExpBox False),(75:51-75:63,ExpBox False),(75:67-75:69,ExpBox False),(75:72-75:76,ExpBox False),(75:66-75:77,ExpBox False),(75:21-75:78,ExpBox False),(74:22-74:24,ExpBox False),(74:27-74:31,ExpBox False),(74:54-74:54,ExpBox False),(74:41-74:54,ExpBox False),(74:58-74:60,ExpBox False),(74:41-74:60,ExpBox False),(74:64-74:65,ExpBox False),(74:40-74:66,ExpBox False),(74:82-74:82,ExpBox False),(74:69-74:82,ExpBox False),(74:86-74:88,ExpBox False),(74:69-74:88,ExpBox False),(74:92-74:93,ExpBox False),(74:68-74:94,ExpBox False),(74:34-74:94,ExpBox False),(74:26-74:95,ExpBox False),(74:9-74:95,ExpBox False),(74:7-76:7,ExpBox False),(73:36-76:7,ExpBox False),(73:30-76:7,ExpBox False),(73:5-76:7,LocalBox ["render","superSample"]),(56:14-56:19,ExpBox False),(58:22-58:22,ExpBox False),(58:27-58:28,ExpBox False),(58:32-58:32,ExpBox False),(58:27-58:32,ExpBox False),(58:21-58:33,ExpBox False),(58:42-58:42,ExpBox False),(58:47-58:49,ExpBox False),(58:53-58:53,ExpBox False),(58:47-58:53,ExpBox False),(58:41-58:54,ExpBox False),(59:26-59:26,ExpBox False),(59:29-59:29,ExpBox False),(59:25-59:30,ExpBox False),(59:20-59:30,LocalBox ["render","antiA","ix"]),(60:25-60:26,ExpBox False),(60:28-60:33,ExpBox False),(60:16-60:33,ExpBox False),(60:16-60:33,BinBox QualBinBox True),(60:16-60:33,BinBox QualBinBox False),(57:17-57:18,ExpBox False),(57:33-57:34,ExpBox False),(57:37-57:42,ExpBox False),(57:46-57:47,ExpBox False),(57:36-57:48,ExpBox False),(57:21-57:48,ExpBox False),(57:16-57:49,ExpBox False),(57:14-60:35,ExpBox False),(56:14-60:35,ExpBox False),(56:5-60:35,LocalBox ["render","antiA"]),(44:24-44:25,ExpBox False),(44:17-44:25,ExpBox False),(44:5-44:25,LocalBox ["render","debugging"]),(32:10-32:18,ExpBox False),(33:26-33:40,ExpBox False),(33:17-33:40,ExpBox False),(34:26-34:28,ExpBox False),(34:21-34:28,ExpBox False),(34:14-34:28,LocalBox ["render","vals"]),(35:36-35:38,ExpBox False),(35:40-35:41,ExpBox False),(35:43-35:48,ExpBox False),(35:24-35:48,ExpBox False),(35:14-35:48,LocalBox ["render","rt_vals"]),(36:20-36:23,ExpBox False),(36:13-36:23,ExpBox False),(36:35-36:41,ExpBox False),(36:28-36:41,ExpBox False),(36:13-36:41,ExpBox False),(36:13-36:41,BinBox CondBinBox True),(36:13-36:41,BinBox CondBinBox False),(37:24-37:35,ExpBox False),(37:44-37:47,ExpBox False),(37:37-37:47,ExpBox False),(37:56-37:62,ExpBox False),(37:49-37:62,ExpBox False),(37:23-37:63,ExpBox False),(37:17-37:63,ExpBox True),(39:59-39:59,ExpBox False),(39:63-39:63,ExpBox False),(39:58-39:64,ExpBox False),(39:54-39:64,ExpBox False),(39:73-39:73,ExpBox False),(39:77-39:77,ExpBox False),(39:72-39:78,ExpBox False),(39:68-39:78,ExpBox False),(39:54-39:78,ExpBox False),(39:44-39:79,ExpBox False),(39:81-39:84,ExpBox False),(39:86-39:92,ExpBox False),(39:35-39:93,ExpBox False),(39:32-39:93,ExpBox False),(39:26-39:93,LocalBox ["render","cmp"]),(40:22-40:26,ExpBox False),(40:33-40:35,ExpBox False),(40:48-40:51,ExpBox False),(40:41-40:51,ExpBox False),(40:55-40:56,ExpBox False),(40:40-40:57,ExpBox False),(40:33-40:57,ExpBox False),(40:33-40:57,BinBox CondBinBox True),(40:33-40:57,BinBox CondBinBox False),(40:64-40:77,ExpBox True),(40:85-40:96,ExpBox False),(40:106-40:108,ExpBox False),(40:101-40:108,ExpBox False),(40:84-40:109,ExpBox True),(40:30-40:109,ExpBox False),(40:22-40:109,ExpBox False),(38:17-41:20,ExpBox True),(36:10-41:20,ExpBox False),(32:5-41:21,ExpBox False),(31:1-76:7,TopLevelBox ["render"]),(159:13-159:16,TopLevelBox ["showsPrec"]),(159:13-159:16,TopLevelBox ["showList"]),(27:18-27:21,TopLevelBox ["showsPrec"]),(27:18-27:21,TopLevelBox ["showList"])]
\ No newline at end of file
diff --git a/testsuite/tests/hpc/raytrace/tixs/.hpc/Intersections.mix b/testsuite/tests/hpc/raytrace/tixs/.hpc/Intersections.mix
new file mode 100644
index 0000000000000000000000000000000000000000..a42b9bdfecafa222dd65b463be6c9e1dd5bb0e83
--- /dev/null
+++ b/testsuite/tests/hpc/raytrace/tixs/.hpc/Intersections.mix
@@ -0,0 +1 @@
+Mix "./Intersections.hs" 2011-09-06 12:02:04 UTC 1674175314 8 [(404:26-404:28,ExpBox False),(404:24-404:29,ExpBox False),(404:31-404:33,ExpBox False),(404:15-404:33,ExpBox False),(404:1-404:33,TopLevelBox ["infInterval"]),(402:14-402:15,ExpBox False),(402:19-402:24,ExpBox False),(402:13-402:25,ExpBox False),(402:29-402:33,ExpBox False),(402:13-402:33,ExpBox False),(402:9-402:33,LocalBox ["intersectRayWithSlab","b"]),(401:14-401:15,ExpBox False),(401:19-401:24,ExpBox False),(401:13-401:25,ExpBox False),(401:29-401:33,ExpBox False),(401:13-401:33,ExpBox False),(401:9-401:33,LocalBox ["intersectRayWithSlab","a"]),(398:5-398:9,ExpBox False),(398:14-398:14,ExpBox False),(398:5-398:14,ExpBox False),(398:5-398:14,BinBox GuardBinBox True),(398:5-398:14,BinBox GuardBinBox False),(398:21-398:26,ExpBox False),(398:30-398:31,ExpBox False),(398:21-398:31,ExpBox False),(398:36-398:41,ExpBox False),(398:45-398:46,ExpBox False),(398:36-398:46,ExpBox False),(398:21-398:46,ExpBox False),(398:21-398:46,BinBox CondBinBox True),(398:21-398:46,BinBox CondBinBox False),(398:53-398:62,ExpBox True),(398:69-398:79,ExpBox True),(398:18-398:79,ExpBox True),(399:5-399:9,ExpBox False),(399:14-399:14,ExpBox False),(399:5-399:14,ExpBox False),(399:5-399:14,BinBox GuardBinBox True),(399:5-399:14,BinBox GuardBinBox False),(399:27-399:27,ExpBox False),(399:29-399:29,ExpBox False),(399:18-399:29,ExpBox True),(400:5-400:13,ExpBox False),(400:5-400:13,BinBox GuardBinBox True),(400:5-400:13,BinBox GuardBinBox False),(400:27-400:27,ExpBox False),(400:29-400:29,ExpBox False),(400:18-400:29,ExpBox True),(397:1-402:33,TopLevelBox ["intersectRayWithSlab"]),(389:34-389:43,ExpBox True),(390:34-390:43,ExpBox True),(392:5-392:5,ExpBox False),(392:9-392:9,ExpBox False),(392:5-392:9,ExpBox False),(392:14-392:14,ExpBox False),(392:18-392:18,ExpBox False),(392:14-392:18,ExpBox False),(392:5-392:18,ExpBox False),(392:5-392:18,BinBox GuardBinBox True),(392:5-392:18,BinBox GuardBinBox False),(392:22-392:31,ExpBox True),(393:5-393:13,ExpBox False),(393:5-393:13,BinBox GuardBinBox True),(393:5-393:13,BinBox GuardBinBox False),(393:27-393:27,ExpBox False),(393:35-393:35,ExpBox False),(393:26-393:36,ExpBox False),(393:39-393:39,ExpBox False),(393:47-393:47,ExpBox False),(393:38-393:48,ExpBox False),(393:17-393:48,ExpBox True),(389:1-393:48,TopLevelBox ["intersectInterval"]),(376:29-376:32,ExpBox True),(377:29-377:33,ExpBox True),(376:1-377:33,TopLevelBox ["isInterval"]),(384:51-384:51,ExpBox False),(384:43-384:52,ExpBox False),(384:66-384:66,ExpBox False),(384:54-384:67,ExpBox False),(384:70-384:71,ExpBox False),(384:74-384:75,ExpBox False),(384:69-384:76,ExpBox False),(384:22-384:76,ExpBox False),(384:9-384:76,LocalBox ["intersectWithBox","z_interval"]),(383:51-383:51,ExpBox False),(383:43-383:52,ExpBox False),(383:66-383:66,ExpBox False),(383:54-383:67,ExpBox False),(383:70-383:71,ExpBox False),(383:74-383:75,ExpBox False),(383:69-383:76,ExpBox False),(383:22-383:76,ExpBox False),(383:9-383:76,LocalBox ["intersectWithBox","y_interval"]),(382:51-382:51,ExpBox False),(382:43-382:52,ExpBox False),(382:66-382:66,ExpBox False),(382:54-382:67,ExpBox False),(382:70-382:71,ExpBox False),(382:74-382:75,ExpBox False),(382:69-382:76,ExpBox False),(382:22-382:76,ExpBox False),(382:9-382:76,LocalBox ["intersectWithBox","x_interval"]),(385:38-385:47,ExpBox False),(386:39-386:48,ExpBox False),(386:50-386:59,ExpBox False),(386:20-386:60,ExpBox False),(385:20-386:60,ExpBox False),(385:9-386:60,LocalBox ["intersectWithBox","interval"]),(381:16-381:23,ExpBox False),(381:5-381:23,ExpBox False),(380:1-386:60,TopLevelBox ["intersectWithBox"]),(359:14-359:14,ExpBox False),(359:11-359:14,ExpBox False),(359:18-359:18,ExpBox False),(359:22-359:22,ExpBox False),(359:18-359:22,ExpBox False),(359:26-359:26,ExpBox False),(359:18-359:26,ExpBox False),(359:11-359:26,ExpBox False),(359:7-359:26,LocalBox ["quadratic","d"]),(360:15-360:15,ExpBox False),(360:24-360:24,ExpBox False),(360:15-360:24,ExpBox False),(360:15-360:24,BinBox CondBinBox True),(360:15-360:24,BinBox CondBinBox False),(360:31-360:31,ExpBox True),(360:38-360:38,ExpBox True),(360:12-360:38,ExpBox False),(360:7-360:38,LocalBox ["quadratic","d'"]),(361:9-361:10,ExpBox False),(361:14-361:14,ExpBox False),(361:9-361:14,ExpBox False),(361:9-361:14,BinBox CondBinBox True),(361:9-361:14,BinBox CondBinBox False),(362:11-362:17,ExpBox True),(364:12-364:12,ExpBox False),(364:16-364:16,ExpBox False),(364:12-364:16,ExpBox False),(364:12-364:16,BinBox CondBinBox True),(364:12-364:16,BinBox CondBinBox False),(364:32-364:32,ExpBox False),(364:30-364:33,ExpBox False),(364:42-364:43,ExpBox False),(364:37-364:43,ExpBox False),(364:29-364:44,ExpBox False),(364:49-364:49,ExpBox False),(364:53-364:53,ExpBox False),(364:48-364:54,ExpBox False),(364:29-364:54,ExpBox False),(365:32-365:32,ExpBox False),(365:30-365:33,ExpBox False),(365:42-365:43,ExpBox False),(365:37-365:43,ExpBox False),(365:29-365:44,ExpBox False),(365:49-365:49,ExpBox False),(365:53-365:53,ExpBox False),(365:48-365:54,ExpBox False),(365:29-365:54,ExpBox False),(364:28-365:55,ExpBox False),(364:23-365:55,ExpBox True),(366:32-366:32,ExpBox False),(366:30-366:33,ExpBox False),(366:42-366:43,ExpBox False),(366:37-366:43,ExpBox False),(366:29-366:44,ExpBox False),(366:49-366:49,ExpBox False),(366:53-366:53,ExpBox False),(366:48-366:54,ExpBox False),(366:29-366:54,ExpBox False),(367:32-367:32,ExpBox False),(367:30-367:33,ExpBox False),(367:42-367:43,ExpBox False),(367:37-367:43,ExpBox False),(367:29-367:44,ExpBox False),(367:49-367:49,ExpBox False),(367:53-367:53,ExpBox False),(367:48-367:54,ExpBox False),(367:29-367:54,ExpBox False),(366:28-367:55,ExpBox False),(366:23-367:55,ExpBox True),(364:9-367:55,ExpBox True),(359:3-367:55,ExpBox False),(357:1-367:55,TopLevelBox ["quadratic"]),(348:23-348:23,ExpBox True),(349:27-349:27,ExpBox False),(349:23-349:27,ExpBox True),(348:9-349:27,LocalBox ["intersectConeSide","xor"]),(345:24-345:24,ExpBox False),(345:13-345:24,ExpBox False),(345:9-345:24,LocalBox ["intersectConeSide","c"]),(344:24-344:24,ExpBox False),(344:13-344:24,ExpBox False),(344:9-344:24,LocalBox ["intersectConeSide","b"]),(343:24-343:24,ExpBox False),(343:13-343:24,ExpBox False),(343:9-343:24,LocalBox ["intersectConeSide","a"]),(342:20-342:20,ExpBox False),(342:13-342:20,ExpBox False),(342:9-342:20,LocalBox ["intersectConeSide","z"]),(341:20-341:20,ExpBox False),(341:13-341:20,ExpBox False),(341:9-341:20,LocalBox ["intersectConeSide","y"]),(340:20-340:20,ExpBox False),(340:13-340:20,ExpBox False),(340:9-340:20,LocalBox ["intersectConeSide","x"]),(335:24-335:24,ExpBox False),(335:28-335:28,ExpBox False),(335:32-335:32,ExpBox False),(335:28-335:32,ExpBox False),(335:24-335:32,ExpBox False),(335:19-335:32,LocalBox ["intersectConeSide","g","z0"]),(334:24-334:24,ExpBox False),(334:28-334:28,ExpBox False),(334:32-334:32,ExpBox False),(334:28-334:32,ExpBox False),(334:24-334:32,ExpBox False),(334:19-334:32,LocalBox ["intersectConeSide","g","y0"]),(333:24-333:24,ExpBox False),(333:28-333:28,ExpBox False),(333:32-333:32,ExpBox False),(333:28-333:32,ExpBox False),(333:24-333:32,ExpBox False),(333:19-333:32,LocalBox ["intersectConeSide","g","x0"]),(336:31-336:32,ExpBox False),(336:34-336:35,ExpBox False),(336:37-336:38,ExpBox False),(336:24-336:38,ExpBox False),(336:19-336:38,LocalBox ["intersectConeSide","g","p0"]),(337:24-337:32,ExpBox False),(337:43-337:44,ExpBox False),(337:48-337:49,ExpBox False),(337:46-337:50,ExpBox False),(337:52-337:53,ExpBox False),(337:36-337:53,ExpBox False),(337:24-337:53,ExpBox False),(337:19-337:53,LocalBox ["intersectConeSide","g","v0"]),(338:39-338:40,ExpBox False),(338:30-338:40,ExpBox False),(332:34-332:34,ExpBox False),(332:36-332:36,ExpBox False),(332:38-332:38,ExpBox False),(332:28-332:38,ExpBox False),(332:19-332:38,LocalBox ["intersectConeSide","g","origin"]),(331:16-331:16,ExpBox False),(331:26-331:31,ExpBox False),(331:33-331:34,ExpBox False),(331:36-331:37,ExpBox False),(331:20-331:37,ExpBox False),(331:41-331:48,ExpBox False),(331:51-331:52,ExpBox False),(331:55-331:61,ExpBox False),(331:40-331:62,ExpBox False),(331:19-331:63,ExpBox False),(331:15-331:64,ExpBox False),(331:9-338:40,LocalBox ["intersectConeSide","g"]),(315:17-315:17,ExpBox False),(315:14-315:17,ExpBox False),(315:24-315:24,ExpBox False),(315:21-315:24,ExpBox False),(315:14-315:24,ExpBox False),(315:31-315:31,ExpBox False),(315:28-315:31,ExpBox False),(315:14-315:31,ExpBox False),(315:9-315:31,LocalBox ["intersectConeSide","c3"]),(314:14-314:14,ExpBox False),(314:19-314:19,ExpBox False),(314:23-314:23,ExpBox False),(314:19-314:23,ExpBox False),(314:27-314:27,ExpBox False),(314:31-314:31,ExpBox False),(314:27-314:31,ExpBox False),(314:19-314:31,ExpBox False),(314:35-314:35,ExpBox False),(314:39-314:39,ExpBox False),(314:35-314:39,ExpBox False),(314:18-314:40,ExpBox False),(314:14-314:40,ExpBox False),(314:9-314:40,LocalBox ["intersectConeSide","c2"]),(313:17-313:17,ExpBox False),(313:14-313:17,ExpBox False),(313:24-313:24,ExpBox False),(313:21-313:24,ExpBox False),(313:14-313:24,ExpBox False),(313:31-313:31,ExpBox False),(313:28-313:31,ExpBox False),(313:14-313:31,ExpBox False),(313:9-313:31,LocalBox ["intersectConeSide","c1"]),(316:24-316:25,ExpBox False),(316:27-316:28,ExpBox False),(316:30-316:31,ExpBox False),(316:14-316:31,ExpBox False),(317:20-317:29,ExpBox True),(325:22-325:22,ExpBox False),(325:26-325:27,ExpBox False),(325:31-325:31,ExpBox False),(325:26-325:31,ExpBox False),(325:22-325:31,ExpBox False),(325:17-325:31,LocalBox ["intersectConeSide","y2"]),(324:22-324:22,ExpBox False),(324:26-324:27,ExpBox False),(324:31-324:31,ExpBox False),(324:26-324:31,ExpBox False),(324:22-324:31,ExpBox False),(324:17-324:31,LocalBox ["intersectConeSide","y1"]),(326:20-326:21,ExpBox False),(326:30-326:30,ExpBox False),(326:20-326:30,ExpBox False),(326:20-326:30,BinBox CondBinBox True),(326:20-326:30,BinBox CondBinBox False),(326:67-326:68,ExpBox False),(326:64-326:69,ExpBox False),(326:74-326:75,ExpBox False),(326:71-326:76,ExpBox False),(326:54-326:76,ExpBox True),(327:25-327:26,ExpBox False),(327:35-327:35,ExpBox False),(327:25-327:35,ExpBox False),(327:25-327:35,BinBox CondBinBox True),(327:25-327:35,BinBox CondBinBox False),(327:67-327:68,ExpBox False),(327:64-327:69,ExpBox False),(327:74-327:75,ExpBox False),(327:71-327:76,ExpBox False),(327:54-327:76,ExpBox True),(328:26-328:27,ExpBox False),(328:31-328:31,ExpBox False),(328:25-328:32,ExpBox False),(328:41-328:42,ExpBox False),(328:46-328:46,ExpBox False),(328:40-328:47,ExpBox False),(328:25-328:47,ExpBox False),(328:25-328:47,BinBox CondBinBox True),(328:25-328:47,BinBox CondBinBox False),(328:67-328:68,ExpBox False),(328:64-328:69,ExpBox False),(328:74-328:75,ExpBox False),(328:71-328:76,ExpBox False),(328:54-328:76,ExpBox True),(329:67-329:68,ExpBox False),(329:64-329:69,ExpBox False),(329:74-329:75,ExpBox False),(329:71-329:76,ExpBox False),(329:54-329:76,ExpBox True),(328:22-329:76,ExpBox True),(327:22-329:76,ExpBox True),(324:13-329:76,ExpBox True),(313:5-329:76,ExpBox False),(307:1-349:27,TopLevelBox ["intersectConeSide"]),(292:24-292:24,ExpBox False),(292:13-292:24,ExpBox False),(292:9-292:24,LocalBox ["intersectCylSide","c"]),(291:24-291:24,ExpBox False),(291:13-291:24,ExpBox False),(291:9-291:24,LocalBox ["intersectCylSide","b"]),(290:24-290:24,ExpBox False),(290:13-290:24,ExpBox False),(290:9-290:24,LocalBox ["intersectCylSide","a"]),(289:20-289:20,ExpBox False),(289:13-289:20,ExpBox False),(289:9-289:20,LocalBox ["intersectCylSide","z"]),(288:20-288:20,ExpBox False),(288:13-288:20,ExpBox False),(288:9-288:20,LocalBox ["intersectCylSide","y"]),(287:20-287:20,ExpBox False),(287:13-287:20,ExpBox False),(287:9-287:20,LocalBox ["intersectCylSide","x"]),(282:24-282:24,ExpBox False),(282:28-282:28,ExpBox False),(282:32-282:32,ExpBox False),(282:28-282:32,ExpBox False),(282:24-282:32,ExpBox False),(282:19-282:32,LocalBox ["intersectCylSide","g","z0"]),(281:24-281:24,ExpBox False),(281:28-281:28,ExpBox False),(281:32-281:32,ExpBox False),(281:28-281:32,ExpBox False),(281:24-281:32,ExpBox False),(281:19-281:32,LocalBox ["intersectCylSide","g","y0"]),(280:24-280:24,ExpBox False),(280:28-280:28,ExpBox False),(280:32-280:32,ExpBox False),(280:28-280:32,ExpBox False),(280:24-280:32,ExpBox False),(280:19-280:32,LocalBox ["intersectCylSide","g","x0"]),(283:31-283:32,ExpBox False),(283:34-283:35,ExpBox False),(283:37-283:38,ExpBox False),(283:24-283:38,ExpBox False),(283:19-283:38,LocalBox ["intersectCylSide","g","p0"]),(284:31-284:32,ExpBox False),(284:34-284:34,ExpBox False),(284:36-284:37,ExpBox False),(284:24-284:37,ExpBox False),(284:19-284:37,LocalBox ["intersectCylSide","g","v0"]),(285:39-285:40,ExpBox False),(285:30-285:40,ExpBox False),(279:34-279:34,ExpBox False),(279:36-279:36,ExpBox False),(279:38-279:38,ExpBox False),(279:28-279:38,ExpBox False),(279:19-279:38,LocalBox ["intersectCylSide","g","origin"]),(278:16-278:16,ExpBox False),(278:32-278:37,ExpBox False),(278:39-278:40,ExpBox False),(278:42-278:43,ExpBox False),(278:20-278:43,ExpBox False),(278:47-278:58,ExpBox False),(278:61-278:62,ExpBox False),(278:65-278:71,ExpBox False),(278:46-278:72,ExpBox False),(278:19-278:73,ExpBox False),(278:15-278:74,ExpBox False),(278:9-285:40,LocalBox ["intersectCylSide","g"]),(277:19-277:19,ExpBox False),(277:16-277:19,ExpBox False),(277:26-277:26,ExpBox False),(277:23-277:26,ExpBox False),(277:16-277:26,ExpBox False),(277:9-277:26,LocalBox ["intersectCylSide","sqxy"]),(263:12-263:12,ExpBox False),(263:9-263:12,ExpBox False),(263:19-263:19,ExpBox False),(263:16-263:19,ExpBox False),(263:8-263:20,ExpBox False),(263:29-263:29,ExpBox False),(263:8-263:29,ExpBox False),(263:8-263:29,BinBox CondBinBox True),(263:8-263:29,BinBox CondBinBox False),(266:13-266:16,ExpBox False),(266:25-266:27,ExpBox False),(266:13-266:27,ExpBox False),(266:32-266:35,ExpBox False),(266:39-266:41,ExpBox False),(266:32-266:41,ExpBox False),(266:12-266:42,ExpBox False),(266:12-266:42,BinBox CondBinBox True),(266:12-266:42,BinBox CondBinBox False),(266:49-266:57,ExpBox True),(266:64-266:73,ExpBox True),(266:9-266:73,ExpBox True),(271:21-271:21,ExpBox False),(271:18-271:21,ExpBox False),(271:28-271:28,ExpBox False),(271:25-271:28,ExpBox False),(271:18-271:28,ExpBox False),(271:32-271:32,ExpBox False),(271:18-271:32,ExpBox False),(271:13-271:32,LocalBox ["intersectCylSide","c3"]),(270:18-270:18,ExpBox False),(270:23-270:23,ExpBox False),(270:27-270:27,ExpBox False),(270:23-270:27,ExpBox False),(270:31-270:31,ExpBox False),(270:35-270:35,ExpBox False),(270:31-270:35,ExpBox False),(270:22-270:36,ExpBox False),(270:18-270:36,ExpBox False),(270:13-270:36,LocalBox ["intersectCylSide","c2"]),(269:21-269:21,ExpBox False),(269:18-269:21,ExpBox False),(269:28-269:28,ExpBox False),(269:25-269:28,ExpBox False),(269:18-269:28,ExpBox False),(269:13-269:28,LocalBox ["intersectCylSide","c1"]),(273:24-273:25,ExpBox False),(273:27-273:28,ExpBox False),(273:30-273:31,ExpBox False),(273:14-273:31,ExpBox False),(274:20-274:29,ExpBox True),(275:39-275:40,ExpBox False),(275:36-275:41,ExpBox False),(275:46-275:47,ExpBox False),(275:43-275:48,ExpBox False),(275:26-275:48,ExpBox True),(269:9-275:48,ExpBox True),(263:5-275:48,ExpBox False),(259:1-292:24,TopLevelBox ["intersectCylSide"]),(232:38-232:44,ExpBox True),(233:38-233:44,ExpBox True),(234:38-234:44,ExpBox True),(242:13-242:13,ExpBox False),(242:22-242:22,ExpBox False),(242:13-242:22,ExpBox False),(242:13-242:22,BinBox GuardBinBox True),(242:13-242:22,BinBox GuardBinBox False),(242:32-242:33,ExpBox False),(242:37-242:37,ExpBox False),(242:40-242:40,ExpBox False),(242:44-242:50,ExpBox False),(242:40-242:50,ExpBox False),(242:36-242:51,ExpBox False),(242:31-242:52,ExpBox False),(242:26-242:52,ExpBox True),(243:13-243:13,ExpBox False),(243:22-243:22,ExpBox False),(243:13-243:22,ExpBox False),(243:13-243:22,BinBox GuardBinBox True),(243:13-243:22,BinBox GuardBinBox False),(243:31-243:34,ExpBox False),(243:26-243:34,ExpBox True),(244:13-244:21,ExpBox False),(244:13-244:21,BinBox GuardBinBox True),(244:13-244:21,BinBox GuardBinBox False),(244:26-244:32,ExpBox True),(240:9-244:32,LocalBox ["intersectSlabIval","checkInterval"]),(239:17-239:18,ExpBox False),(239:22-239:23,ExpBox False),(239:17-239:23,ExpBox False),(239:17-239:23,BinBox CondBinBox True),(239:17-239:23,BinBox CondBinBox False),(239:30-239:32,ExpBox True),(239:39-239:41,ExpBox True),(239:14-239:41,ExpBox False),(239:9-239:41,LocalBox ["intersectSlabIval","mv"]),(238:17-238:18,ExpBox False),(238:22-238:23,ExpBox False),(238:17-238:23,ExpBox False),(238:17-238:23,BinBox CondBinBox True),(238:17-238:23,BinBox CondBinBox False),(238:30-238:32,ExpBox True),(238:39-238:41,ExpBox True),(238:14-238:41,ExpBox False),(238:9-238:41,LocalBox ["intersectSlabIval","nu"]),(237:20-237:21,ExpBox False),(237:24-237:25,ExpBox False),(237:19-237:26,ExpBox False),(237:5-237:26,ExpBox True),(232:1-244:32,TopLevelBox ["intersectSlabIval"]),(227:5-227:5,ExpBox False),(227:14-227:14,ExpBox False),(227:5-227:14,ExpBox False),(227:5-227:14,BinBox GuardBinBox True),(227:5-227:14,BinBox GuardBinBox False),(227:22-227:22,ExpBox False),(227:27-227:27,ExpBox False),(227:21-227:28,ExpBox False),(227:34-227:34,ExpBox False),(227:39-227:39,ExpBox False),(227:33-227:40,ExpBox False),(227:21-227:40,ExpBox False),(227:21-227:40,BinBox CondBinBox True),(227:21-227:40,BinBox CondBinBox False),(228:30-228:30,ExpBox False),(228:34-228:36,ExpBox False),(228:33-228:36,ExpBox False),(228:29-228:37,ExpBox False),(228:41-228:41,ExpBox False),(228:44-228:46,ExpBox False),(228:40-228:47,ExpBox False),(228:28-228:48,ExpBox False),(228:23-228:48,ExpBox True),(228:55-228:61,ExpBox True),(227:18-228:61,ExpBox True),(229:5-229:5,ExpBox False),(229:9-229:9,ExpBox False),(229:5-229:9,ExpBox False),(229:5-229:9,BinBox GuardBinBox True),(229:5-229:9,BinBox GuardBinBox False),(229:25-229:25,ExpBox False),(229:31-229:31,ExpBox False),(229:29-229:32,ExpBox False),(229:34-229:34,ExpBox False),(229:29-229:34,ExpBox False),(229:24-229:35,ExpBox False),(229:39-229:39,ExpBox False),(229:43-229:43,ExpBox False),(229:45-229:45,ExpBox False),(229:42-229:46,ExpBox False),(229:48-229:48,ExpBox False),(229:42-229:48,ExpBox False),(229:38-229:49,ExpBox False),(229:23-229:50,ExpBox False),(229:18-229:50,ExpBox True),(230:5-230:13,ExpBox False),(230:5-230:13,BinBox GuardBinBox True),(230:5-230:13,BinBox GuardBinBox False),(230:25-230:25,ExpBox False),(230:29-230:29,ExpBox False),(230:31-230:31,ExpBox False),(230:28-230:32,ExpBox False),(230:34-230:34,ExpBox False),(230:28-230:34,ExpBox False),(230:24-230:35,ExpBox False),(230:39-230:39,ExpBox False),(230:45-230:45,ExpBox False),(230:43-230:46,ExpBox False),(230:48-230:48,ExpBox False),(230:43-230:48,ExpBox False),(230:38-230:49,ExpBox False),(230:23-230:50,ExpBox False),(230:18-230:50,ExpBox True),(226:1-230:50,TopLevelBox ["intersectCubeSlab"]),(224:24-224:24,ExpBox False),(224:13-224:24,ExpBox False),(224:9-224:24,LocalBox ["intersectCube","c"]),(223:24-223:24,ExpBox False),(223:13-223:24,ExpBox False),(223:9-223:24,LocalBox ["intersectCube","b"]),(222:24-222:24,ExpBox False),(222:13-222:24,ExpBox False),(222:9-222:24,LocalBox ["intersectCube","a"]),(221:20-221:20,ExpBox False),(221:13-221:20,ExpBox False),(221:9-221:20,LocalBox ["intersectCube","z"]),(220:20-220:20,ExpBox False),(220:13-220:20,ExpBox False),(220:9-220:20,LocalBox ["intersectCube","y"]),(219:20-219:20,ExpBox False),(219:13-219:20,ExpBox False),(219:9-219:20,LocalBox ["intersectCube","x"]),(218:26-218:26,ExpBox False),(218:28-218:28,ExpBox False),(218:30-218:30,ExpBox False),(218:19-218:30,ExpBox False),(218:9-218:30,LocalBox ["intersectCube","vectorZ"]),(217:26-217:26,ExpBox False),(217:28-217:28,ExpBox False),(217:30-217:30,ExpBox False),(217:19-217:30,ExpBox False),(217:9-217:30,LocalBox ["intersectCube","vectorY"]),(216:26-216:26,ExpBox False),(216:28-216:28,ExpBox False),(216:30-216:30,ExpBox False),(216:19-216:30,ExpBox False),(216:9-216:30,LocalBox ["intersectCube","vectorX"]),(215:18-215:27,ExpBox False),(215:30-215:36,ExpBox False),(215:39-215:45,ExpBox False),(215:17-215:46,ExpBox False),(215:9-215:46,LocalBox ["intersectCube","face5"]),(214:18-214:24,ExpBox False),(214:30-214:36,ExpBox False),(214:39-214:45,ExpBox False),(214:17-214:46,ExpBox False),(214:9-214:46,LocalBox ["intersectCube","face4"]),(213:18-213:26,ExpBox False),(213:30-213:36,ExpBox False),(213:39-213:45,ExpBox False),(213:17-213:46,ExpBox False),(213:9-213:46,LocalBox ["intersectCube","face3"]),(212:18-212:25,ExpBox False),(212:30-212:36,ExpBox False),(212:39-212:45,ExpBox False),(212:17-212:46,ExpBox False),(212:9-212:46,LocalBox ["intersectCube","face2"]),(211:18-211:25,ExpBox False),(211:30-211:36,ExpBox False),(211:39-211:45,ExpBox False),(211:17-211:46,ExpBox False),(211:9-211:46,LocalBox ["intersectCube","face1"]),(210:18-210:26,ExpBox False),(210:30-210:36,ExpBox False),(210:39-210:45,ExpBox False),(210:17-210:46,ExpBox False),(210:9-210:46,LocalBox ["intersectCube","face0"]),(209:36-209:38,ExpBox False),(209:40-209:40,ExpBox False),(209:22-209:40,ExpBox False),(209:17-209:40,LocalBox ["intersectCube","g","p0"]),(208:14-208:14,ExpBox False),(208:25-208:26,ExpBox False),(208:28-208:29,ExpBox False),(208:31-208:32,ExpBox False),(208:18-208:32,ExpBox False),(208:36-208:36,ExpBox False),(208:39-208:40,ExpBox False),(208:43-208:49,ExpBox False),(208:35-208:50,ExpBox False),(208:17-208:51,ExpBox False),(208:13-208:52,ExpBox False),(207:9-209:40,LocalBox ["intersectCube","g"]),(202:47-202:51,ExpBox False),(202:53-202:57,ExpBox False),(202:59-202:59,ExpBox False),(202:61-202:61,ExpBox False),(202:28-202:62,ExpBox False),(203:47-203:51,ExpBox False),(203:53-203:57,ExpBox False),(203:59-203:59,ExpBox False),(203:61-203:61,ExpBox False),(203:28-203:62,ExpBox False),(204:47-204:51,ExpBox False),(204:53-204:57,ExpBox False),(204:59-204:59,ExpBox False),(204:61-204:61,ExpBox False),(204:28-204:62,ExpBox False),(203:9-204:63,ExpBox False),(202:10-204:63,ExpBox False),(205:16-205:25,ExpBox True),(206:35-206:36,ExpBox False),(206:32-206:37,ExpBox False),(206:42-206:43,ExpBox False),(206:39-206:44,ExpBox False),(206:22-206:44,ExpBox True),(202:5-206:44,ExpBox False),(196:1-224:24,TopLevelBox ["intersectCube"]),(180:26-180:26,ExpBox False),(180:15-180:26,ExpBox False),(180:11-180:26,LocalBox ["intersectSphere","c"]),(179:26-179:26,ExpBox False),(179:15-179:26,ExpBox False),(179:11-179:26,LocalBox ["intersectSphere","b"]),(178:26-178:26,ExpBox False),(178:15-178:26,ExpBox False),(178:11-178:26,LocalBox ["intersectSphere","a"]),(177:22-177:22,ExpBox False),(177:15-177:22,ExpBox False),(177:11-177:22,LocalBox ["intersectSphere","z"]),(176:22-176:22,ExpBox False),(176:15-176:22,ExpBox False),(176:11-176:22,LocalBox ["intersectSphere","y"]),(175:22-175:22,ExpBox False),(175:15-175:22,ExpBox False),(175:11-175:22,LocalBox ["intersectSphere","x"]),(185:26-185:26,ExpBox False),(185:30-185:30,ExpBox False),(185:34-185:34,ExpBox False),(185:30-185:34,ExpBox False),(185:26-185:34,ExpBox False),(185:21-185:34,LocalBox ["intersectSphere","g","z0"]),(184:26-184:26,ExpBox False),(184:30-184:30,ExpBox False),(184:34-184:34,ExpBox False),(184:30-184:34,ExpBox False),(184:26-184:34,ExpBox False),(184:21-184:34,LocalBox ["intersectSphere","g","y0"]),(183:26-183:26,ExpBox False),(183:30-183:30,ExpBox False),(183:34-183:34,ExpBox False),(183:30-183:34,ExpBox False),(183:26-183:34,ExpBox False),(183:21-183:34,LocalBox ["intersectSphere","g","x0"]),(186:33-186:34,ExpBox False),(186:36-186:37,ExpBox False),(186:39-186:40,ExpBox False),(186:26-186:40,ExpBox False),(186:21-186:40,LocalBox ["intersectSphere","g","p0"]),(187:33-187:34,ExpBox False),(187:36-187:37,ExpBox False),(187:39-187:40,ExpBox False),(187:26-187:40,ExpBox False),(187:21-187:40,LocalBox ["intersectSphere","g","v0"]),(188:41-188:42,ExpBox False),(188:32-188:42,ExpBox False),(182:36-182:36,ExpBox False),(182:38-182:38,ExpBox False),(182:40-182:40,ExpBox False),(182:30-182:40,ExpBox False),(182:21-182:40,LocalBox ["intersectSphere","g","origin"]),(181:18-181:18,ExpBox False),(181:32-181:37,ExpBox False),(181:39-181:40,ExpBox False),(181:42-181:43,ExpBox False),(181:22-181:43,ExpBox False),(181:47-181:56,ExpBox False),(181:59-181:60,ExpBox False),(181:63-181:69,ExpBox False),(181:46-181:70,ExpBox False),(181:21-181:71,ExpBox False),(181:17-181:72,ExpBox False),(181:11-188:42,LocalBox ["intersectSphere","g"]),(170:17-170:17,ExpBox False),(170:14-170:17,ExpBox False),(170:24-170:24,ExpBox False),(170:21-170:24,ExpBox False),(170:14-170:24,ExpBox False),(170:31-170:31,ExpBox False),(170:28-170:31,ExpBox False),(170:14-170:31,ExpBox False),(170:35-170:35,ExpBox False),(170:14-170:35,ExpBox False),(170:9-170:35,LocalBox ["intersectSphere","c3"]),(169:14-169:14,ExpBox False),(169:19-169:19,ExpBox False),(169:23-169:23,ExpBox False),(169:19-169:23,ExpBox False),(169:27-169:27,ExpBox False),(169:31-169:31,ExpBox False),(169:27-169:31,ExpBox False),(169:19-169:31,ExpBox False),(169:35-169:35,ExpBox False),(169:39-169:39,ExpBox False),(169:35-169:39,ExpBox False),(169:18-169:40,ExpBox False),(169:14-169:40,ExpBox False),(169:9-169:40,LocalBox ["intersectSphere","c2"]),(168:17-168:17,ExpBox False),(168:14-168:17,ExpBox False),(168:24-168:24,ExpBox False),(168:21-168:24,ExpBox False),(168:14-168:24,ExpBox False),(168:31-168:31,ExpBox False),(168:28-168:31,ExpBox False),(168:14-168:31,ExpBox False),(168:9-168:31,LocalBox ["intersectSphere","c1"]),(172:24-172:25,ExpBox False),(172:27-172:28,ExpBox False),(172:30-172:31,ExpBox False),(172:14-172:31,ExpBox False),(173:20-173:29,ExpBox True),(174:39-174:40,ExpBox False),(174:36-174:41,ExpBox False),(174:46-174:47,ExpBox False),(174:43-174:48,ExpBox False),(174:26-174:48,ExpBox True),(168:5-174:48,ExpBox False),(162:1-188:42,TopLevelBox ["intersectSphere"]),(154:24-154:24,ExpBox False),(154:13-154:24,ExpBox False),(154:9-154:24,LocalBox ["intersectXZPlane","c"]),(153:24-153:24,ExpBox False),(153:13-153:24,ExpBox False),(153:9-153:24,LocalBox ["intersectXZPlane","b"]),(152:24-152:24,ExpBox False),(152:13-152:24,ExpBox False),(152:9-152:24,LocalBox ["intersectXZPlane","a"]),(151:20-151:20,ExpBox False),(151:13-151:20,ExpBox False),(151:9-151:20,LocalBox ["intersectXZPlane","z"]),(150:20-150:20,ExpBox False),(150:13-150:20,ExpBox False),(150:9-150:20,LocalBox ["intersectXZPlane","y"]),(149:20-149:20,ExpBox False),(149:13-149:20,ExpBox False),(149:9-149:20,LocalBox ["intersectXZPlane","x"]),(147:21-147:21,ExpBox False),(147:23-147:23,ExpBox False),(147:25-147:25,ExpBox False),(147:14-147:25,ExpBox False),(147:9-147:25,LocalBox ["intersectXZPlane","v1"]),(146:21-146:21,ExpBox False),(146:23-146:23,ExpBox False),(146:25-146:25,ExpBox False),(146:14-146:25,ExpBox False),(146:9-146:25,LocalBox ["intersectXZPlane","v0"]),(142:15-142:21,ExpBox False),(142:23-142:23,ExpBox False),(142:14-142:24,ExpBox False),(142:28-142:28,ExpBox False),(142:14-142:28,ExpBox False),(142:9-142:28,LocalBox ["intersectXZPlane","t0"]),(143:14-143:14,ExpBox False),(143:18-143:18,ExpBox False),(143:22-143:23,ExpBox False),(143:18-143:23,ExpBox False),(143:14-143:23,ExpBox False),(143:9-143:23,LocalBox ["intersectXZPlane","x0"]),(144:14-144:14,ExpBox False),(144:18-144:18,ExpBox False),(144:22-144:23,ExpBox False),(144:18-144:23,ExpBox False),(144:14-144:23,ExpBox False),(144:9-144:23,LocalBox ["intersectXZPlane","z0"]),(145:20-145:21,ExpBox False),(145:23-145:23,ExpBox False),(145:25-145:26,ExpBox False),(145:14-145:26,ExpBox False),(145:9-145:26,LocalBox ["intersectXZPlane","p0"]),(127:5-127:5,ExpBox False),(127:14-127:14,ExpBox False),(127:5-127:14,ExpBox False),(127:5-127:14,BinBox GuardBinBox True),(127:5-127:14,BinBox GuardBinBox False),(129:8-129:8,ExpBox False),(129:17-129:23,ExpBox False),(129:8-129:23,ExpBox False),(129:28-129:28,ExpBox False),(129:32-129:38,ExpBox False),(129:28-129:38,ExpBox False),(129:8-129:38,ExpBox False),(129:8-129:38,BinBox CondBinBox True),(129:8-129:38,BinBox CondBinBox False),(129:45-129:53,ExpBox True),(129:60-129:69,ExpBox True),(129:5-129:69,ExpBox True),(136:5-136:5,ExpBox False),(136:9-136:9,ExpBox False),(136:5-136:9,ExpBox False),(136:5-136:9,BinBox GuardBinBox True),(136:5-136:9,BinBox GuardBinBox False),(137:6-137:10,ExpBox False),(137:23-137:24,ExpBox False),(137:35-137:36,ExpBox False),(137:38-137:39,ExpBox False),(137:41-137:42,ExpBox False),(137:28-137:42,ExpBox False),(137:46-137:46,ExpBox False),(137:49-137:50,ExpBox False),(137:53-137:59,ExpBox False),(137:45-137:60,ExpBox False),(137:27-137:61,ExpBox False),(137:22-137:62,ExpBox False),(137:14-137:62,ExpBox False),(137:13-137:63,ExpBox False),(137:66-137:69,ExpBox False),(137:5-137:70,ExpBox True),(139:5-139:13,ExpBox False),(139:5-139:13,BinBox GuardBinBox True),(139:5-139:13,BinBox GuardBinBox False),(140:6-140:9,ExpBox False),(140:22-140:23,ExpBox False),(140:34-140:35,ExpBox False),(140:37-140:38,ExpBox False),(140:40-140:41,ExpBox False),(140:27-140:41,ExpBox False),(140:45-140:45,ExpBox False),(140:48-140:49,ExpBox False),(140:52-140:58,ExpBox False),(140:44-140:59,ExpBox False),(140:26-140:60,ExpBox False),(140:21-140:61,ExpBox False),(140:14-140:61,ExpBox False),(140:13-140:62,ExpBox False),(140:66-140:70,ExpBox False),(140:5-140:71,ExpBox True),(126:1-154:24,TopLevelBox ["intersectXZPlane"]),(123:47-123:55,ExpBox False),(123:57-123:59,ExpBox False),(123:61-123:63,ExpBox False),(123:65-123:71,ExpBox False),(123:30-123:71,ExpBox False),(123:1-123:71,TopLevelBox ["intersectPlane"]),(97:22-97:22,ExpBox False),(97:24-97:25,ExpBox False),(97:15-97:25,ExpBox False),(97:9-97:25,LocalBox ["transformSurface","v1'"]),(96:22-96:22,ExpBox False),(96:24-96:25,ExpBox False),(96:15-96:25,ExpBox False),(96:9-96:25,LocalBox ["transformSurface","v0'"]),(95:22-95:22,ExpBox False),(95:24-95:25,ExpBox False),(95:15-95:25,ExpBox False),(95:9-95:25,LocalBox ["transformSurface","p0'"]),(94:12-94:14,ExpBox False),(94:16-94:18,ExpBox False),(94:20-94:22,ExpBox False),(94:5-94:22,ExpBox True),(103:22-103:22,ExpBox False),(103:24-103:25,ExpBox False),(103:15-103:25,ExpBox False),(103:9-103:25,LocalBox ["transformSurface","v1'"]),(102:22-102:22,ExpBox False),(102:24-102:25,ExpBox False),(102:15-102:25,ExpBox False),(102:9-102:25,LocalBox ["transformSurface","v0'"]),(101:22-101:22,ExpBox False),(101:24-101:25,ExpBox False),(101:15-101:25,ExpBox False),(101:9-101:25,LocalBox ["transformSurface","p0'"]),(100:15-100:17,ExpBox False),(100:19-100:21,ExpBox False),(100:23-100:25,ExpBox False),(100:5-100:25,ExpBox True),(110:22-110:22,ExpBox False),(110:24-110:25,ExpBox False),(110:15-110:25,ExpBox False),(110:9-110:25,LocalBox ["transformSurface","v1'"]),(109:22-109:22,ExpBox False),(109:24-109:25,ExpBox False),(109:15-109:25,ExpBox False),(109:9-109:25,LocalBox ["transformSurface","v0'"]),(108:22-108:22,ExpBox False),(108:24-108:25,ExpBox False),(108:15-108:25,ExpBox False),(108:9-108:25,LocalBox ["transformSurface","p0'"]),(107:17-107:19,ExpBox False),(107:21-107:23,ExpBox False),(107:25-107:27,ExpBox False),(107:5-107:27,ExpBox True),(116:22-116:22,ExpBox False),(116:24-116:25,ExpBox False),(116:15-116:25,ExpBox False),(116:9-116:25,LocalBox ["transformSurface","v1'"]),(115:22-115:22,ExpBox False),(115:24-115:25,ExpBox False),(115:15-115:25,ExpBox False),(115:9-115:25,LocalBox ["transformSurface","v0'"]),(114:22-114:22,ExpBox False),(114:24-114:25,ExpBox False),(114:15-114:25,ExpBox False),(114:9-114:25,LocalBox ["transformSurface","p0'"]),(113:11-113:13,ExpBox False),(113:15-113:17,ExpBox False),(113:19-113:21,ExpBox False),(113:5-113:21,ExpBox True),(93:1-116:25,TopLevelBox ["transformSurface"]),(85:12-85:13,ExpBox False),(85:15-85:16,ExpBox False),(85:18-85:19,ExpBox False),(85:5-85:19,ExpBox True),(87:15-87:16,ExpBox False),(87:18-87:19,ExpBox False),(87:21-87:22,ExpBox False),(87:5-87:22,ExpBox True),(89:17-89:18,ExpBox False),(89:20-89:21,ExpBox False),(89:23-89:24,ExpBox False),(89:5-89:24,ExpBox True),(91:11-91:12,ExpBox False),(91:14-91:15,ExpBox False),(91:17-91:18,ExpBox False),(91:5-91:18,ExpBox True),(84:1-91:18,TopLevelBox ["negateSurface"]),(82:34-82:34,ExpBox False),(82:37-82:37,ExpBox False),(82:55-82:55,ExpBox False),(82:41-82:55,ExpBox False),(82:58-82:58,ExpBox False),(82:40-82:59,ExpBox False),(82:33-82:60,ExpBox False),(82:9-82:60,LocalBox ["negateSurfaces","negSurf"]),(81:23-81:29,ExpBox False),(81:18-81:29,ExpBox False),(81:1-82:60,TopLevelBox ["negateSurfaces"]),(256:23-256:41,ExpBox False),(256:45-256:58,ExpBox False),(257:40-257:53,ExpBox False),(257:55-257:57,ExpBox False),(257:59-257:61,ExpBox False),(257:63-257:69,ExpBox False),(257:23-257:69,ExpBox False),(256:45-257:69,ExpBox False),(256:23-257:69,ExpBox False),(256:9-257:69,LocalBox ["intersectCylinder","isectBottom"]),(255:40-255:50,ExpBox False),(255:52-255:54,ExpBox False),(255:56-255:58,ExpBox False),(255:60-255:66,ExpBox False),(255:23-255:66,ExpBox False),(255:9-255:66,LocalBox ["intersectCylinder","isectTop"]),(254:40-254:42,ExpBox False),(254:44-254:50,ExpBox False),(254:23-254:50,ExpBox False),(254:9-254:50,LocalBox ["intersectCylinder","isectSide"]),(253:5-253:13,ExpBox False),(253:36-253:43,ExpBox False),(253:5-253:43,ExpBox False),(253:66-253:76,ExpBox False),(253:5-253:76,ExpBox False),(252:1-257:69,TopLevelBox ["intersectCylinder"]),(304:23-304:41,ExpBox False),(304:45-304:58,ExpBox False),(305:40-305:47,ExpBox False),(305:49-305:51,ExpBox False),(305:53-305:55,ExpBox False),(305:57-305:63,ExpBox False),(305:23-305:63,ExpBox False),(304:45-305:63,ExpBox False),(304:23-305:63,ExpBox False),(304:9-305:63,LocalBox ["intersectCone","isectBottom"]),(303:40-303:47,ExpBox False),(303:49-303:51,ExpBox False),(303:53-303:55,ExpBox False),(303:57-303:63,ExpBox False),(303:23-303:63,ExpBox False),(303:9-303:63,LocalBox ["intersectCone","isectTop"]),(302:41-302:43,ExpBox False),(302:45-302:51,ExpBox False),(302:23-302:51,ExpBox False),(302:9-302:51,LocalBox ["intersectCone","isectSide"]),(301:5-301:13,ExpBox False),(301:36-301:43,ExpBox False),(301:5-301:43,ExpBox False),(301:66-301:76,ExpBox False),(301:5-301:76,ExpBox False),(300:1-305:63,TopLevelBox ["intersectCone"]),(44:28-44:30,ExpBox False),(44:32-44:32,ExpBox False),(44:14-44:32,ExpBox False),(44:9-44:32,LocalBox ["intersections","js"]),(43:28-43:30,ExpBox False),(43:32-43:32,ExpBox False),(43:14-43:32,ExpBox False),(43:9-43:32,LocalBox ["intersections","is"]),(42:20-42:21,ExpBox False),(42:23-42:24,ExpBox False),(42:5-42:24,ExpBox True),(49:28-49:30,ExpBox False),(49:32-49:32,ExpBox False),(49:14-49:32,ExpBox False),(49:9-49:32,LocalBox ["intersections","js"]),(48:28-48:30,ExpBox False),(48:32-48:32,ExpBox False),(48:14-48:32,ExpBox False),(48:9-48:32,LocalBox ["intersections","is"]),(47:24-47:25,ExpBox False),(47:27-47:28,ExpBox False),(47:5-47:28,ExpBox True),(54:28-54:30,ExpBox False),(54:32-54:32,ExpBox False),(54:14-54:32,ExpBox False),(54:9-54:32,LocalBox ["intersections","js"]),(53:28-53:30,ExpBox False),(53:32-53:32,ExpBox False),(53:14-53:32,ExpBox False),(53:9-53:32,LocalBox ["intersections","is"]),(52:25-52:26,ExpBox False),(52:44-52:45,ExpBox False),(52:28-52:46,ExpBox False),(52:5-52:46,ExpBox True),(59:36-59:36,ExpBox False),(59:39-59:39,ExpBox False),(59:60-59:60,ExpBox False),(59:62-59:62,ExpBox False),(59:43-59:62,ExpBox False),(59:65-59:66,ExpBox False),(59:42-59:67,ExpBox False),(59:35-59:68,ExpBox False),(59:9-59:68,LocalBox ["intersections","xform"]),(58:29-58:30,ExpBox False),(58:41-58:43,ExpBox False),(58:28-58:44,ExpBox False),(58:46-58:46,ExpBox False),(58:14-58:46,ExpBox False),(58:9-58:46,LocalBox ["intersections","is"]),(57:17-57:17,ExpBox False),(57:10-57:18,ExpBox False),(57:20-57:21,ExpBox False),(57:5-57:21,ExpBox True),(62:22-62:24,ExpBox False),(62:26-62:28,ExpBox False),(62:5-62:28,ExpBox False),(62:5-62:28,BinBox GuardBinBox True),(62:5-62:28,BinBox GuardBinBox False),(62:46-62:48,ExpBox False),(62:50-62:50,ExpBox False),(62:32-62:50,ExpBox True),(63:5-63:13,ExpBox False),(63:5-63:13,BinBox GuardBinBox True),(63:5-63:13,BinBox GuardBinBox False),(63:17-63:26,ExpBox True),(66:20-66:22,ExpBox False),(66:24-66:24,ExpBox False),(66:5-66:24,ExpBox True),(69:21-69:23,ExpBox False),(69:25-69:25,ExpBox False),(69:5-69:25,ExpBox True),(72:19-72:21,ExpBox False),(72:23-72:23,ExpBox False),(72:5-72:23,ExpBox True),(75:23-75:25,ExpBox False),(75:27-75:27,ExpBox False),(75:5-75:27,ExpBox True),(78:19-78:21,ExpBox False),(78:23-78:23,ExpBox False),(78:5-78:23,ExpBox True),(41:1-78:23,TopLevelBox ["intersections"]),(27:36-27:40,ExpBox False),(27:45-27:45,ExpBox False),(27:48-27:51,ExpBox False),(27:54-27:62,ExpBox False),(27:44-27:63,ExpBox False),(27:43-27:64,ExpBox False),(27:67-27:70,ExpBox False),(27:35-27:71,ExpBox True),(28:43-28:47,ExpBox True),(30:5-30:5,ExpBox False),(30:14-30:14,ExpBox False),(30:5-30:14,ExpBox False),(30:19-30:19,ExpBox False),(30:23-30:23,ExpBox False),(30:19-30:23,ExpBox False),(30:5-30:23,ExpBox False),(30:5-30:23,BinBox GuardBinBox True),(30:5-30:23,BinBox GuardBinBox False),(31:21-31:25,ExpBox False),(31:28-31:30,ExpBox False),(31:33-31:38,ExpBox False),(31:20-31:39,ExpBox False),(31:5-31:39,ExpBox True),(32:5-32:13,ExpBox False),(32:5-32:13,BinBox GuardBinBox True),(32:5-32:13,BinBox GuardBinBox False),(33:6-33:10,ExpBox False),(33:14-33:14,ExpBox False),(33:17-33:20,ExpBox False),(33:23-33:31,ExpBox False),(33:13-33:32,ExpBox False),(33:36-33:37,ExpBox False),(33:13-33:37,ExpBox False),(33:40-33:45,ExpBox False),(33:5-33:46,ExpBox True),(35:5-35:5,ExpBox False),(35:14-35:14,ExpBox False),(35:5-35:14,ExpBox False),(35:19-35:19,ExpBox False),(35:23-35:23,ExpBox False),(35:19-35:23,ExpBox False),(35:5-35:23,ExpBox False),(35:5-35:23,BinBox GuardBinBox True),(35:5-35:23,BinBox GuardBinBox False),(37:21-37:24,ExpBox False),(37:27-37:29,ExpBox False),(37:32-37:37,ExpBox False),(37:20-37:38,ExpBox False),(37:5-37:38,ExpBox True),(38:5-38:13,ExpBox False),(38:5-38:13,BinBox GuardBinBox True),(38:5-38:13,BinBox GuardBinBox False),(39:5-39:9,ExpBox True),(27:1-39:9,TopLevelBox ["clampIntervals"]),(25:28-25:30,ExpBox False),(25:32-25:32,ExpBox False),(25:14-25:32,ExpBox False),(25:9-25:32,LocalBox ["intersectRayWithObject","is"]),(24:20-24:21,ExpBox False),(24:5-24:21,ExpBox False),(23:1-25:32,TopLevelBox ["intersectRayWithObject"])]
\ No newline at end of file
diff --git a/testsuite/tests/hpc/raytrace/tixs/.hpc/Interval.mix b/testsuite/tests/hpc/raytrace/tixs/.hpc/Interval.mix
new file mode 100644
index 0000000000000000000000000000000000000000..5f1d32a64e9089489fd8b3dfa2be94502d838f63
--- /dev/null
+++ b/testsuite/tests/hpc/raytrace/tixs/.hpc/Interval.mix
@@ -0,0 +1 @@
+Mix "./Interval.hs" 2011-06-30 14:14:25 UTC 238116040 8 [(94:10-94:11,ExpBox False),(94:6-94:11,ExpBox False),(94:57-94:58,ExpBox False),(94:17-94:17,ExpBox False),(94:24-94:30,ExpBox False),(94:20-94:30,ExpBox False),(94:33-94:33,ExpBox False),(94:16-94:34,ExpBox False),(94:14-94:60,ExpBox False),(94:67-94:68,ExpBox False),(94:63-94:68,ExpBox False),(94:5-94:69,ExpBox False),(93:1-94:69,TopLevelBox ["complementIntervals"]),(62:13-62:17,ExpBox True),(63:27-63:27,ExpBox False),(63:32-63:32,ExpBox False),(63:27-63:32,ExpBox False),(63:42-63:42,ExpBox False),(63:44-63:45,ExpBox False),(63:37-63:45,ExpBox False),(63:27-63:45,ExpBox True),(62:1-63:45,TopLevelBox ["bad'"]),(58:20-58:21,ExpBox False),(58:26-58:27,ExpBox False),(58:20-58:27,ExpBox True),(60:27-60:28,ExpBox False),(60:22-60:28,ExpBox False),(59:25-59:26,ExpBox False),(59:28-59:29,ExpBox False),(59:20-59:29,ExpBox False),(59:34-59:35,ExpBox False),(59:40-59:41,ExpBox False),(59:34-59:41,ExpBox False),(59:20-59:41,ExpBox True),(58:1-60:28,TopLevelBox ["bad"]),(54:5-54:5,ExpBox False),(54:14-54:14,ExpBox False),(54:5-54:14,ExpBox False),(54:5-54:14,BinBox GuardBinBox True),(54:5-54:14,BinBox GuardBinBox False),(54:18-54:19,ExpBox True),(55:5-55:5,ExpBox False),(55:14-55:14,ExpBox False),(55:5-55:14,ExpBox False),(55:5-55:14,BinBox GuardBinBox True),(55:5-55:14,BinBox GuardBinBox False),(55:18-55:19,ExpBox True),(56:5-56:13,ExpBox False),(56:5-56:13,BinBox GuardBinBox True),(56:5-56:13,BinBox GuardBinBox False),(56:18-56:19,ExpBox True),(53:1-56:19,TopLevelBox ["cmpI"]),(44:19-44:19,ExpBox False),(44:22-44:26,ExpBox False),(44:29-44:29,ExpBox False),(44:18-44:30,ExpBox False),(44:1-44:30,TopLevelBox ["mkExit"]),(43:19-43:19,ExpBox False),(43:22-43:25,ExpBox False),(43:29-43:29,ExpBox False),(43:18-43:30,ExpBox False),(43:1-43:30,TopLevelBox ["mkEntry"]),(46:20-46:24,ExpBox False),(46:36-46:37,ExpBox False),(46:28-46:37,ExpBox False),(46:47-46:48,ExpBox False),(46:40-46:48,ExpBox False),(46:27-46:49,ExpBox False),(46:52-46:56,ExpBox False),(46:19-46:57,ExpBox False),(46:1-46:57,TopLevelBox ["entryexit"]),(48:35-48:36,ExpBox False),(48:40-48:41,ExpBox False),(48:35-48:41,ExpBox False),(48:35-48:41,BinBox GuardBinBox True),(48:35-48:41,BinBox GuardBinBox False),(48:57-48:58,ExpBox False),(48:60-48:61,ExpBox False),(48:47-48:61,ExpBox True),(49:35-49:43,ExpBox False),(49:35-49:43,BinBox GuardBinBox True),(49:35-49:43,BinBox GuardBinBox False),(49:57-49:58,ExpBox False),(49:60-49:61,ExpBox False),(49:47-49:61,ExpBox True),(48:1-49:61,TopLevelBox ["arrange"]),(47:20-47:23,ExpBox False),(47:34-47:35,ExpBox False),(47:27-47:35,ExpBox False),(47:46-47:47,ExpBox False),(47:38-47:47,ExpBox False),(47:26-47:48,ExpBox False),(47:51-47:54,ExpBox False),(47:19-47:55,ExpBox False),(47:1-47:55,TopLevelBox ["exitentry"]),(41:29-41:33,ExpBox False),(41:25-41:33,ExpBox False),(41:1-41:33,TopLevelBox ["isExit"]),(40:25-40:29,ExpBox False),(40:1-40:29,TopLevelBox ["isEntry"]),(68:30-68:38,ExpBox False),(68:30-68:38,BinBox GuardBinBox True),(68:30-68:38,BinBox GuardBinBox False),(68:42-68:43,ExpBox True),(69:30-69:38,ExpBox False),(69:30-69:38,BinBox GuardBinBox True),(69:30-69:38,BinBox GuardBinBox False),(69:42-69:43,ExpBox True),(70:30-70:38,ExpBox False),(70:30-70:38,BinBox GuardBinBox True),(70:30-70:38,BinBox GuardBinBox False),(70:42-70:43,ExpBox True),(71:30-71:38,ExpBox False),(71:30-71:38,BinBox GuardBinBox True),(71:30-71:38,BinBox GuardBinBox False),(71:42-71:43,ExpBox True),(73:23-73:23,ExpBox False),(73:25-73:25,ExpBox False),(73:18-73:25,ExpBox False),(74:30-74:30,ExpBox False),(74:22-74:30,ExpBox False),(74:43-74:43,ExpBox False),(74:35-74:43,ExpBox False),(74:22-74:43,ExpBox False),(74:22-74:43,BinBox CondBinBox True),(74:22-74:43,BinBox CondBinBox False),(74:50-74:50,ExpBox False),(74:67-74:69,ExpBox False),(74:71-74:73,ExpBox False),(74:54-74:73,ExpBox False),(74:50-74:73,ExpBox True),(75:63-75:65,ExpBox False),(75:67-75:69,ExpBox False),(75:50-75:69,ExpBox True),(74:19-75:69,ExpBox True),(76:30-76:30,ExpBox False),(76:22-76:30,ExpBox False),(76:22-76:30,BinBox CondBinBox True),(76:22-76:30,BinBox CondBinBox False),(76:37-76:37,ExpBox False),(76:54-76:56,ExpBox False),(76:58-76:59,ExpBox False),(76:41-76:59,ExpBox False),(76:37-76:59,ExpBox True),(77:54-77:56,ExpBox False),(77:58-77:59,ExpBox False),(77:41-77:59,ExpBox True),(76:19-77:59,ExpBox True),(78:30-78:30,ExpBox False),(78:22-78:30,ExpBox False),(78:22-78:30,BinBox CondBinBox True),(78:22-78:30,BinBox CondBinBox False),(78:37-78:37,ExpBox False),(78:54-78:55,ExpBox False),(78:57-78:59,ExpBox False),(78:41-78:59,ExpBox False),(78:37-78:59,ExpBox True),(79:54-79:55,ExpBox False),(79:57-79:59,ExpBox False),(79:41-79:59,ExpBox True),(78:19-79:59,ExpBox True),(73:13-79:59,ExpBox True),(68:9-79:59,LocalBox ["unionIntervals","uniIntervals"]),(67:6-67:16,ExpBox False),(67:21-67:31,ExpBox False),(67:6-67:31,ExpBox False),(67:47-67:48,ExpBox False),(67:50-67:51,ExpBox False),(67:34-67:51,ExpBox False),(67:54-67:62,ExpBox False),(67:67-67:75,ExpBox False),(67:54-67:75,ExpBox False),(67:5-67:76,ExpBox False),(66:1-79:59,TopLevelBox ["unionIntervals"]),(85:35-85:36,ExpBox False),(85:15-85:36,ExpBox False),(85:9-85:36,LocalBox ["intersectIntervals","js'"]),(84:35-84:36,ExpBox False),(84:15-84:36,ExpBox False),(84:9-84:36,LocalBox ["intersectIntervals","is'"]),(83:41-83:43,ExpBox False),(83:45-83:47,ExpBox False),(83:25-83:48,ExpBox False),(83:5-83:48,ExpBox False),(82:1-85:36,TopLevelBox ["intersectIntervals"]),(90:35-90:36,ExpBox False),(90:15-90:36,ExpBox False),(90:9-90:36,LocalBox ["differenceIntervals","is'"]),(89:41-89:43,ExpBox False),(89:45-89:46,ExpBox False),(89:25-89:47,ExpBox False),(89:5-89:47,ExpBox False),(88:1-90:36,TopLevelBox ["differenceIntervals"]),(38:24-38:25,ExpBox False),(38:32-38:32,ExpBox False),(38:34-38:35,ExpBox False),(38:28-38:35,ExpBox False),(38:38-38:39,ExpBox False),(38:23-38:40,ExpBox False),(38:1-38:40,TopLevelBox ["mapI"]),(36:14-36:17,ExpBox False),(36:20-36:21,ExpBox False),(36:24-36:27,ExpBox False),(36:13-36:28,ExpBox False),(36:1-36:28,TopLevelBox ["openIList"]),(35:15-35:19,ExpBox False),(35:22-35:23,ExpBox False),(35:26-35:30,ExpBox False),(35:14-35:31,ExpBox False),(35:1-35:31,TopLevelBox ["emptyIList"])]
\ No newline at end of file
diff --git a/testsuite/tests/hpc/raytrace/tixs/.hpc/Main.mix b/testsuite/tests/hpc/raytrace/tixs/.hpc/Main.mix
new file mode 100644
index 0000000000000000000000000000000000000000..f1d37648a3ffc37c50e2658c26dad8eca62e6aef
--- /dev/null
+++ b/testsuite/tests/hpc/raytrace/tixs/.hpc/Main.mix
@@ -0,0 +1 @@
+Mix "Main.hs" 2011-09-06 12:02:04 UTC 1310345646 8 [(13:29-13:40,ExpBox False),(13:20-13:40,ExpBox False),(14:32-14:34,ExpBox False),(14:22-14:35,ExpBox False),(14:13-14:35,ExpBox False),(13:8-15:11,ExpBox False),(13:1-15:11,TopLevelBox ["main"])]
\ No newline at end of file
diff --git a/testsuite/tests/hpc/raytrace/tixs/.hpc/Misc.mix b/testsuite/tests/hpc/raytrace/tixs/.hpc/Misc.mix
new file mode 100644
index 0000000000000000000000000000000000000000..166bd90684544f7a25435d538f58f77afb567260
--- /dev/null
+++ b/testsuite/tests/hpc/raytrace/tixs/.hpc/Misc.mix
@@ -0,0 +1 @@
+Mix "./Misc.hs" 2011-06-30 14:14:25 UTC 1840720397 8 [(10:20-10:20,ExpBox False),(10:24-10:28,ExpBox False),(10:37-10:37,ExpBox False),(10:32-10:37,ExpBox False),(10:42-10:45,ExpBox False),(10:32-10:45,ExpBox False),(10:24-10:45,ExpBox False),(10:19-10:46,ExpBox False),(10:48-10:48,ExpBox False),(10:13-10:48,ExpBox False),(10:1-10:48,TopLevelBox ["debug"])]
\ No newline at end of file
diff --git a/testsuite/tests/hpc/raytrace/tixs/.hpc/Parse.mix b/testsuite/tests/hpc/raytrace/tixs/.hpc/Parse.mix
new file mode 100644
index 0000000000000000000000000000000000000000..e5def3ccb726f3a7133411f0097a59eb5ef1d82a
--- /dev/null
+++ b/testsuite/tests/hpc/raytrace/tixs/.hpc/Parse.mix
@@ -0,0 +1 @@
+Mix "./Parse.hs" 2011-09-06 12:02:04 UTC 501961473 8 [(105:24-105:26,ExpBox False),(105:17-105:26,ExpBox False),(106:34-106:41,ExpBox False),(106:26-106:42,ExpBox False),(106:17-106:42,ExpBox False),(107:24-107:25,ExpBox False),(107:17-107:25,ExpBox False),(105:13-108:15,ExpBox False),(104:9-108:15,LocalBox ["whiteSpace","oneLineComment"]),(103:40-103:50,ExpBox False),(103:33-103:51,ExpBox False),(103:23-103:51,ExpBox False),(103:9-103:51,LocalBox ["whiteSpace","simpleSpace"]),(102:25-102:35,ExpBox False),(102:41-102:54,ExpBox False),(102:25-102:54,ExpBox False),(102:60-102:61,ExpBox False),(102:24-102:62,ExpBox False),(102:15-102:62,ExpBox False),(102:1-108:15,TopLevelBox ["whiteSpace"]),(100:21-100:21,ExpBox False),(100:24-100:33,ExpBox False),(100:43-100:43,ExpBox False),(100:36-100:43,ExpBox False),(100:12-100:46,ExpBox False),(100:1-100:46,TopLevelBox ["lexeme"]),(98:30-98:33,ExpBox False),(98:22-98:34,ExpBox False),(98:15-98:34,ExpBox False),(98:1-98:34,TopLevelBox ["symbol"]),(96:30-96:32,ExpBox False),(96:22-96:33,ExpBox False),(96:43-96:45,ExpBox False),(96:35-96:46,ExpBox False),(96:48-96:48,ExpBox False),(96:14-96:48,ExpBox False),(96:1-96:48,TopLevelBox ["brackets"]),(95:30-95:32,ExpBox False),(95:22-95:33,ExpBox False),(95:43-95:45,ExpBox False),(95:35-95:46,ExpBox False),(95:48-95:48,ExpBox False),(95:14-95:48,ExpBox False),(95:1-95:48,TopLevelBox ["braces"]),(89:18-89:19,ExpBox False),(89:29-89:31,ExpBox False),(89:21-89:32,ExpBox False),(89:11-89:32,ExpBox False),(89:1-89:32,TopLevelBox ["optSign"]),(86:17-86:21,ExpBox False),(86:11-86:21,ExpBox False),(86:1-86:21,TopLevelBox ["decimal"]),(79:13-79:15,ExpBox False),(80:19-80:22,ExpBox False),(80:13-80:22,ExpBox False),(81:13-81:19,ExpBox False),(82:13-82:19,ExpBox False),(83:16-83:16,ExpBox False),(83:18-83:18,ExpBox False),(83:23-83:23,ExpBox False),(83:18-83:23,ExpBox False),(83:15-83:24,ExpBox False),(83:8-83:24,ExpBox False),(80:3-84:6,ExpBox False),(79:13-84:6,ExpBox False),(79:1-84:6,TopLevelBox ["exponent'"]),(64:10-64:15,ExpBox False),(65:13-65:19,ExpBox False),(66:13-66:19,ExpBox False),(67:24-67:26,ExpBox False),(67:17-67:26,ExpBox False),(68:22-68:28,ExpBox False),(69:29-69:30,ExpBox False),(69:32-69:40,ExpBox False),(69:22-69:40,ExpBox False),(70:38-70:38,ExpBox False),(70:43-70:43,ExpBox False),(70:48-70:50,ExpBox False),(70:55-70:55,ExpBox False),(70:60-70:60,ExpBox False),(70:55-70:60,ExpBox False),(70:48-70:60,ExpBox False),(70:43-70:60,ExpBox False),(70:37-70:61,ExpBox False),(70:31-70:62,ExpBox False),(70:24-70:63,ExpBox False),(70:17-70:63,ExpBox False),(67:12-71:15,ExpBox False),(72:22-72:30,ExpBox False),(73:38-73:38,ExpBox False),(73:43-73:43,ExpBox False),(73:48-73:51,ExpBox False),(73:56-73:56,ExpBox False),(73:48-73:56,ExpBox False),(73:43-73:56,ExpBox False),(73:37-73:57,ExpBox False),(73:31-73:58,ExpBox False),(73:24-73:59,ExpBox False),(73:17-73:59,ExpBox False),(72:12-74:15,ExpBox False),(75:37-75:37,ExpBox False),(75:42-75:42,ExpBox False),(75:36-75:43,ExpBox False),(75:30-75:44,ExpBox False),(75:24-75:45,ExpBox False),(75:17-75:45,ExpBox False),(75:12-75:47,ExpBox False),(72:12-75:47,ExpBox False),(67:12-75:47,ExpBox False),(65:3-76:6,ExpBox False),(64:10-76:6,ExpBox False),(64:1-76:6,TopLevelBox ["number"]),(55:15-55:33,ExpBox False),(56:15-56:79,ExpBox False),(57:15-57:59,ExpBox False),(58:15-58:50,ExpBox False),(59:15-59:68,ExpBox False),(58:15-59:68,ExpBox False),(57:15-59:68,ExpBox False),(56:15-59:68,ExpBox False),(55:15-59:68,ExpBox False),(55:1-59:68,TopLevelBox ["test_number"]),(51:13-51:18,ExpBox False),(51:36-51:38,ExpBox False),(51:30-51:39,ExpBox False),(51:47-51:49,ExpBox False),(51:41-51:50,ExpBox False),(51:82-51:82,ExpBox False),(51:74-51:82,ExpBox False),(51:87-51:87,ExpBox False),(51:92-51:94,ExpBox False),(51:87-51:94,ExpBox False),(51:74-51:94,ExpBox False),(51:67-51:95,ExpBox False),(51:58-51:96,ExpBox False),(51:52-51:97,ExpBox False),(51:22-51:97,ExpBox False),(51:13-51:97,ExpBox False),(51:1-51:97,TopLevelBox ["gmlString"]),(44:9-44:14,ExpBox False),(45:13-45:18,ExpBox False),(46:46-46:46,ExpBox False),(46:35-46:46,ExpBox False),(46:51-46:51,ExpBox False),(46:56-46:58,ExpBox False),(46:51-46:58,ExpBox False),(46:63-46:63,ExpBox False),(46:68-46:70,ExpBox False),(46:63-46:70,ExpBox False),(46:51-46:70,ExpBox False),(46:35-46:70,ExpBox False),(46:28-46:71,ExpBox False),(46:19-46:72,ExpBox False),(46:14-46:72,ExpBox False),(47:16-47:16,ExpBox False),(47:18-47:19,ExpBox False),(47:15-47:20,ExpBox False),(47:8-47:20,ExpBox False),(45:3-48:6,ExpBox False),(44:9-48:6,ExpBox False),(44:1-48:6,TopLevelBox ["ident"]),(37:14-37:18,ExpBox False),(38:21-38:22,ExpBox False),(38:24-38:30,ExpBox False),(38:13-38:31,ExpBox False),(39:22-39:27,ExpBox False),(39:22-39:27,BinBox CondBinBox True),(39:22-39:27,BinBox CondBinBox False),(39:48-39:49,ExpBox False),(39:41-39:50,ExpBox False),(39:34-39:50,ExpBox True),(39:69-39:70,ExpBox False),(39:64-39:71,ExpBox False),(39:57-39:71,ExpBox True),(39:19-39:71,ExpBox True),(40:22-40:27,ExpBox False),(40:22-40:27,BinBox CondBinBox True),(40:22-40:27,BinBox CondBinBox False),(40:41-40:76,ExpBox False),(40:81-40:82,ExpBox False),(40:40-40:83,ExpBox False),(40:34-40:83,ExpBox True),(40:97-40:97,ExpBox False),(40:90-40:97,ExpBox True),(40:19-40:97,ExpBox True),(38:8-40:97,ExpBox False),(37:3-41:6,ExpBox False),(36:1-41:6,TopLevelBox ["pident"]),(27:28-27:36,ExpBox False),(27:19-27:36,ExpBox False),(27:63-27:64,ExpBox False),(27:56-27:65,ExpBox False),(27:49-27:65,ExpBox False),(27:8-27:67,ExpBox False),(28:28-28:36,ExpBox False),(28:19-28:36,ExpBox False),(28:64-28:65,ExpBox False),(28:56-28:66,ExpBox False),(28:49-28:66,ExpBox False),(28:8-28:68,ExpBox False),(29:19-29:27,ExpBox False),(29:65-29:65,ExpBox False),(29:56-29:66,ExpBox False),(29:49-29:66,ExpBox False),(29:8-29:68,ExpBox False),(29:74-29:81,ExpBox False),(29:7-29:82,ExpBox False),(30:25-30:29,ExpBox False),(30:18-30:29,ExpBox False),(30:56-30:56,ExpBox False),(30:49-30:56,ExpBox False),(30:8-30:58,ExpBox False),(30:74-30:85,ExpBox False),(30:7-30:86,ExpBox False),(31:18-31:20,ExpBox False),(31:13-31:20,ExpBox False),(32:25-32:28,ExpBox False),(32:18-32:28,ExpBox False),(32:56-32:56,ExpBox False),(32:49-32:56,ExpBox False),(31:8-32:58,ExpBox False),(32:64-32:83,ExpBox False),(31:7-32:84,ExpBox False),(33:18-33:23,ExpBox False),(33:56-33:56,ExpBox False),(33:49-33:56,ExpBox False),(33:8-33:58,ExpBox False),(33:64-33:71,ExpBox False),(33:7-33:72,ExpBox False),(31:7-33:72,ExpBox False),(30:7-33:72,ExpBox False),(29:7-33:72,ExpBox False),(28:8-33:72,ExpBox False),(27:8-33:72,ExpBox False),(26:1-33:72,TopLevelBox ["token"]),(23:18-23:22,ExpBox False),(23:13-23:22,ExpBox False),(23:28-23:43,ExpBox False),(23:13-23:43,ExpBox False),(23:1-23:43,TopLevelBox ["tokenList"]),(16:8-16:17,ExpBox False),(17:14-17:22,ExpBox False),(18:8-18:10,ExpBox False),(19:15-19:16,ExpBox False),(19:8-19:16,ExpBox False),(16:3-20:6,ExpBox False),(15:1-20:6,TopLevelBox ["program"]),(114:27-114:33,ExpBox False),(114:35-114:43,ExpBox False),(114:45-114:46,ExpBox False),(114:20-114:47,ExpBox False),(115:39-115:41,ExpBox False),(115:33-115:42,ExpBox False),(115:27-115:42,ExpBox True),(116:27-116:27,ExpBox True),(114:15-116:27,ExpBox False),(114:1-116:27,TopLevelBox ["rayParse"]),(120:27-120:33,ExpBox False),(120:35-120:38,ExpBox False),(120:13-120:38,ExpBox False),(121:13-121:13,ExpBox False),(122:32-122:34,ExpBox False),(122:26-122:35,ExpBox False),(122:20-122:35,ExpBox True),(123:27-123:27,ExpBox False),(123:20-123:27,ExpBox True),(121:8-123:27,ExpBox False),(120:3-124:6,ExpBox False),(119:1-124:6,TopLevelBox ["rayParseF"]),(127:22-127:28,ExpBox False),(127:30-127:31,ExpBox False),(127:33-127:34,ExpBox False),(127:15-127:35,ExpBox False),(128:28-128:30,ExpBox False),(128:22-128:30,ExpBox True),(129:28-129:28,ExpBox False),(129:22-129:28,ExpBox True),(127:10-129:28,ExpBox False),(127:1-129:28,TopLevelBox ["run"]),(133:27-133:33,ExpBox False),(133:35-133:46,ExpBox False),(133:13-133:46,ExpBox False),(134:13-134:13,ExpBox False),(135:26-135:28,ExpBox False),(135:20-135:28,ExpBox True),(136:26-136:26,ExpBox False),(136:20-136:26,ExpBox True),(134:8-136:26,ExpBox False),(133:3-137:6,ExpBox False),(132:1-137:6,TopLevelBox ["runF"])]
\ No newline at end of file
diff --git a/testsuite/tests/hpc/raytrace/tixs/.hpc/Primitives.mix b/testsuite/tests/hpc/raytrace/tixs/.hpc/Primitives.mix
new file mode 100644
index 0000000000000000000000000000000000000000..83967bb174aa89cc627474d907eeba4c3cc3f817
--- /dev/null
+++ b/testsuite/tests/hpc/raytrace/tixs/.hpc/Primitives.mix
@@ -0,0 +1 @@
+Mix "./Primitives.hs" 2011-06-30 14:14:25 UTC 3702571582 8 [(24:16-24:16,ExpBox False),(24:11-24:16,ExpBox False),(24:20-24:22,ExpBox False),(24:11-24:22,ExpBox False),(24:26-24:27,ExpBox False),(24:11-24:27,ExpBox False),(24:1-24:27,TopLevelBox ["asinD"]),(21:16-21:16,ExpBox False),(21:11-21:16,ExpBox False),(21:20-21:22,ExpBox False),(21:11-21:22,ExpBox False),(21:26-21:27,ExpBox False),(21:11-21:27,ExpBox False),(21:1-21:27,TopLevelBox ["acosD"]),(18:8-18:10,ExpBox False),(18:1-18:10,TopLevelBox ["addf"]),(15:8-15:10,ExpBox False),(15:1-15:10,TopLevelBox ["addi"]),(12:13-12:13,ExpBox False),(12:17-12:18,ExpBox False),(12:13-12:18,ExpBox False),(12:22-12:24,ExpBox False),(12:13-12:24,ExpBox False),(12:1-12:24,TopLevelBox ["deg2rad"]),(9:13-9:13,ExpBox False),(9:17-9:19,ExpBox False),(9:13-9:19,ExpBox False),(9:23-9:24,ExpBox False),(9:13-9:24,ExpBox False),(9:1-9:24,TopLevelBox ["rad2deg"])]
\ No newline at end of file
diff --git a/testsuite/tests/hpc/raytrace/tixs/.hpc/Surface.mix b/testsuite/tests/hpc/raytrace/tixs/.hpc/Surface.mix
new file mode 100644
index 0000000000000000000000000000000000000000..f392502829099e8d69240b65da68440c2ded08df
--- /dev/null
+++ b/testsuite/tests/hpc/raytrace/tixs/.hpc/Surface.mix
@@ -0,0 +1 @@
+Mix "./Surface.hs" 2011-06-30 14:14:25 UTC 1778761563 8 [(115:21-115:21,ExpBox False),(115:25-115:25,ExpBox False),(115:21-115:25,ExpBox False),(115:21-115:25,BinBox CondBinBox True),(115:21-115:25,BinBox CondBinBox False),(115:32-115:32,ExpBox True),(115:39-115:39,ExpBox False),(115:43-115:43,ExpBox False),(115:47-115:48,ExpBox False),(115:43-115:48,ExpBox False),(115:39-115:48,ExpBox True),(115:18-115:48,ExpBox False),(115:1-115:48,TopLevelBox ["adjustRadian"]),(110:20-110:21,ExpBox False),(110:13-110:21,ExpBox False),(110:9-110:21,LocalBox ["planarUV","z"]),(109:20-109:21,ExpBox False),(109:13-109:21,ExpBox False),(109:9-109:21,LocalBox ["planarUV","y"]),(108:20-108:21,ExpBox False),(108:13-108:21,ExpBox False),(108:9-108:21,LocalBox ["planarUV","x"]),(94:10-94:13,ExpBox False),(95:24-95:24,ExpBox False),(95:27-95:27,ExpBox False),(95:30-95:30,ExpBox False),(95:23-95:31,ExpBox True),(97:24-97:24,ExpBox False),(97:27-97:27,ExpBox False),(97:30-97:30,ExpBox False),(97:23-97:31,ExpBox True),(98:24-98:24,ExpBox False),(98:27-98:27,ExpBox False),(98:30-98:30,ExpBox False),(98:23-98:31,ExpBox True),(99:24-99:24,ExpBox False),(99:27-99:27,ExpBox False),(99:30-99:30,ExpBox False),(99:23-99:31,ExpBox True),(100:24-100:24,ExpBox False),(100:27-100:27,ExpBox False),(100:30-100:30,ExpBox False),(100:23-100:31,ExpBox True),(101:24-101:24,ExpBox False),(101:27-101:27,ExpBox False),(101:30-101:30,ExpBox False),(101:23-101:31,ExpBox True),(102:24-102:24,ExpBox False),(102:27-102:27,ExpBox False),(102:30-102:30,ExpBox False),(102:23-102:31,ExpBox True),(104:24-104:24,ExpBox False),(104:28-104:28,ExpBox False),(104:32-104:32,ExpBox False),(104:27-104:33,ExpBox False),(104:37-104:37,ExpBox False),(104:27-104:37,ExpBox False),(104:41-104:41,ExpBox False),(104:45-104:45,ExpBox False),(104:40-104:46,ExpBox False),(104:50-104:50,ExpBox False),(104:40-104:50,ExpBox False),(104:23-104:51,ExpBox True),(105:24-105:24,ExpBox False),(105:28-105:28,ExpBox False),(105:32-105:32,ExpBox False),(105:27-105:33,ExpBox False),(105:37-105:37,ExpBox False),(105:27-105:37,ExpBox False),(105:41-105:41,ExpBox False),(105:45-105:45,ExpBox False),(105:40-105:46,ExpBox False),(105:50-105:50,ExpBox False),(105:40-105:50,ExpBox False),(105:23-105:51,ExpBox True),(107:24-107:24,ExpBox False),(107:28-107:28,ExpBox False),(107:32-107:32,ExpBox False),(107:27-107:33,ExpBox False),(107:37-107:37,ExpBox False),(107:27-107:37,ExpBox False),(107:41-107:41,ExpBox False),(107:45-107:45,ExpBox False),(107:40-107:46,ExpBox False),(107:50-107:50,ExpBox False),(107:40-107:50,ExpBox False),(107:23-107:51,ExpBox True),(94:5-107:51,ExpBox False),(93:1-110:21,TopLevelBox ["planarUV"]),(45:36-45:36,ExpBox False),(45:26-45:36,ExpBox True),(46:26-46:26,ExpBox True),(45:1-46:26,TopLevelBox ["evalSurface"]),(56:31-56:31,ExpBox False),(56:33-56:34,ExpBox False),(56:22-56:34,ExpBox False),(55:16-55:24,ExpBox False),(55:34-55:35,ExpBox False),(55:37-55:38,ExpBox False),(55:28-55:38,ExpBox False),(55:16-55:38,ExpBox False),(55:9-55:38,LocalBox ["surface","norm"]),(54:6-54:9,ExpBox False),(54:24-54:25,ExpBox False),(54:27-54:28,ExpBox False),(54:30-54:30,ExpBox False),(54:32-54:32,ExpBox False),(54:12-54:32,ExpBox False),(54:5-54:33,ExpBox True),(69:16-69:24,ExpBox False),(69:34-69:35,ExpBox False),(69:37-69:38,ExpBox False),(69:28-69:38,ExpBox False),(69:16-69:38,ExpBox False),(69:9-69:38,LocalBox ["surface","norm"]),(62:20-62:21,ExpBox False),(62:13-62:21,ExpBox False),(62:9-62:21,LocalBox ["surface","z"]),(61:20-61:21,ExpBox False),(61:13-61:21,ExpBox False),(61:9-61:21,LocalBox ["surface","y"]),(63:19-63:19,ExpBox False),(63:26-63:26,ExpBox False),(63:23-63:26,ExpBox False),(63:18-63:27,ExpBox False),(63:13-63:27,ExpBox False),(63:9-63:27,LocalBox ["surface","k"]),(68:28-68:28,ExpBox False),(68:32-68:32,ExpBox False),(68:27-68:33,ExpBox False),(68:37-68:37,ExpBox False),(68:26-68:38,ExpBox False),(68:19-68:38,ExpBox False),(68:9-68:38,LocalBox ["surface","v"]),(60:20-60:21,ExpBox False),(60:13-60:21,ExpBox False),(60:9-60:21,LocalBox ["surface","x"]),(64:38-64:38,ExpBox False),(64:42-64:42,ExpBox False),(64:37-64:43,ExpBox False),(64:46-64:46,ExpBox False),(64:50-64:50,ExpBox False),(64:45-64:51,ExpBox False),(64:30-64:52,ExpBox False),(64:17-64:52,ExpBox False),(64:9-64:52,LocalBox ["surface","theta"]),(67:13-67:15,ExpBox False),(67:27-67:31,ExpBox False),(67:36-67:36,ExpBox False),(67:40-67:41,ExpBox False),(67:35-67:42,ExpBox False),(67:26-67:43,ExpBox False),(67:19-67:43,ExpBox False),(67:13-67:43,ExpBox False),(67:9-67:43,LocalBox ["surface","u"]),(59:6-59:9,ExpBox False),(59:24-59:25,ExpBox False),(59:27-59:27,ExpBox False),(59:29-59:29,ExpBox False),(59:31-59:31,ExpBox False),(59:12-59:31,ExpBox False),(59:5-59:32,ExpBox True),(80:16-80:24,ExpBox False),(80:34-80:35,ExpBox False),(80:37-80:38,ExpBox False),(80:28-80:38,ExpBox False),(80:16-80:38,ExpBox False),(80:9-80:38,LocalBox ["surface","norm"]),(77:20-77:21,ExpBox False),(77:13-77:21,ExpBox False),(77:9-77:21,LocalBox ["surface","z"]),(76:20-76:21,ExpBox False),(76:13-76:21,ExpBox False),(76:9-76:21,LocalBox ["surface","y"]),(79:13-79:13,ExpBox False),(79:9-79:13,LocalBox ["surface","v"]),(75:20-75:21,ExpBox False),(75:13-75:21,ExpBox False),(75:9-75:21,LocalBox ["surface","x"]),(78:13-78:18,ExpBox False),(78:42-78:42,ExpBox False),(78:44-78:44,ExpBox False),(78:35-78:45,ExpBox False),(78:22-78:45,ExpBox False),(78:50-78:50,ExpBox False),(78:54-78:55,ExpBox False),(78:49-78:56,ExpBox False),(78:22-78:56,ExpBox False),(78:13-78:56,ExpBox False),(78:9-78:56,LocalBox ["surface","u"]),(74:6-74:9,ExpBox False),(74:24-74:25,ExpBox False),(74:27-74:27,ExpBox False),(74:29-74:29,ExpBox False),(74:31-74:31,ExpBox False),(74:12-74:31,ExpBox False),(74:5-74:32,ExpBox True),(91:16-91:24,ExpBox False),(91:34-91:35,ExpBox False),(91:37-91:38,ExpBox False),(91:28-91:38,ExpBox False),(91:16-91:38,ExpBox False),(91:9-91:38,LocalBox ["surface","norm"]),(88:20-88:21,ExpBox False),(88:13-88:21,ExpBox False),(88:9-88:21,LocalBox ["surface","z"]),(87:20-87:21,ExpBox False),(87:13-87:21,ExpBox False),(87:9-87:21,LocalBox ["surface","y"]),(90:13-90:13,ExpBox False),(90:9-90:13,LocalBox ["surface","v"]),(86:20-86:21,ExpBox False),(86:13-86:21,ExpBox False),(86:9-86:21,LocalBox ["surface","x"]),(89:13-89:18,ExpBox False),(89:43-89:43,ExpBox False),(89:47-89:47,ExpBox False),(89:42-89:48,ExpBox False),(89:51-89:51,ExpBox False),(89:55-89:55,ExpBox False),(89:50-89:56,ExpBox False),(89:35-89:57,ExpBox False),(89:22-89:57,ExpBox False),(89:62-89:62,ExpBox False),(89:66-89:67,ExpBox False),(89:61-89:68,ExpBox False),(89:22-89:68,ExpBox False),(89:13-89:68,ExpBox False),(89:9-89:68,LocalBox ["surface","u"]),(85:6-85:9,ExpBox False),(85:24-85:25,ExpBox False),(85:27-85:27,ExpBox False),(85:29-85:29,ExpBox False),(85:31-85:31,ExpBox False),(85:12-85:31,ExpBox False),(85:5-85:32,ExpBox True),(53:1-91:38,TopLevelBox ["surface"]),(37:28-37:28,ExpBox False),(37:31-37:31,ExpBox False),(37:34-37:34,ExpBox False),(37:37-37:37,ExpBox False),(37:27-37:38,ExpBox False),(37:1-37:38,TopLevelBox ["chgColor"]),(34:10-34:14,ExpBox False),(34:17-34:19,ExpBox False),(34:22-34:24,ExpBox False),(34:27-34:29,ExpBox False),(34:9-34:30,ExpBox False),(34:1-34:30,TopLevelBox ["shiny"]),(33:10-33:14,ExpBox False),(33:17-33:19,ExpBox False),(33:22-33:24,ExpBox False),(33:27-33:29,ExpBox False),(33:9-33:30,ExpBox False),(33:1-33:30,TopLevelBox ["matte"]),(31:17-31:17,ExpBox False),(31:20-31:20,ExpBox False),(31:23-31:23,ExpBox False),(31:26-31:26,ExpBox False),(31:16-31:27,ExpBox False),(31:1-31:27,TopLevelBox ["prop"]),(27:10-27:15,ExpBox False),(27:1-27:15,TopLevelBox ["sconst"]),(25:8-25:11,ExpBox False),(25:1-25:11,TopLevelBox ["sfun"]),(40:21-40:38,ExpBox True),(42:21-42:38,ExpBox True),(40:3-42:38,TopLevelBox ["show"])]
\ No newline at end of file
diff --git a/testsuite/tests/hpc/raytrace/tixs/Makefile b/testsuite/tests/hpc/raytrace/tixs/Makefile
new file mode 100644
index 0000000000000000000000000000000000000000..009a9fceeaafbe7361fde6e358828dfdef81b59a
--- /dev/null
+++ b/testsuite/tests/hpc/raytrace/tixs/Makefile
@@ -0,0 +1,10 @@
+TOP=../../../../../testsuite
+include $(TOP)/mk/boilerplate.mk
+include $(TOP)/mk/test.mk
+
+build-tix:
+	rm -Rf .hpc *.o Main
+	'$(TEST_HC)' -fhpc -i.. --make Main.hs
+	./Main
+	mv Main.tix hpc_sample.tix
+
diff --git a/testsuite/tests/hpc/raytrace/tixs/hpc_markup_multi_001.stdout b/testsuite/tests/hpc/raytrace/tixs/hpc_markup_multi_001.stdout
new file mode 100644
index 0000000000000000000000000000000000000000..10ec4a0d26e3b5b5932b69cbfdd6519e6fa5a36c
--- /dev/null
+++ b/testsuite/tests/hpc/raytrace/tixs/hpc_markup_multi_001.stdout
@@ -0,0 +1,5 @@
+Writing: Geometry.hs.html
+Writing: hpc_index.html
+Writing: hpc_index_fun.html
+Writing: hpc_index_alt.html
+Writing: hpc_index_exp.html
diff --git a/testsuite/tests/hpc/raytrace/tixs/hpc_markup_multi_002.stdout b/testsuite/tests/hpc/raytrace/tixs/hpc_markup_multi_002.stdout
new file mode 100644
index 0000000000000000000000000000000000000000..434e661fa7480713c2529b468fd9f22e05d08b27
--- /dev/null
+++ b/testsuite/tests/hpc/raytrace/tixs/hpc_markup_multi_002.stdout
@@ -0,0 +1,16 @@
+Writing: Main.hs.html
+Writing: Parse.hs.html
+Writing: Eval.hs.html
+Writing: Data.hs.html
+Writing: CSG.hs.html
+Writing: Surface.hs.html
+Writing: Illumination.hs.html
+Writing: Primitives.hs.html
+Writing: Misc.hs.html
+Writing: Construct.hs.html
+Writing: Intersections.hs.html
+Writing: Interval.hs.html
+Writing: hpc_index.html
+Writing: hpc_index_fun.html
+Writing: hpc_index_alt.html
+Writing: hpc_index_exp.html
diff --git a/testsuite/tests/hpc/raytrace/tixs/hpc_markup_multi_003.stdout b/testsuite/tests/hpc/raytrace/tixs/hpc_markup_multi_003.stdout
new file mode 100644
index 0000000000000000000000000000000000000000..5e5e11e3773061f851ba74fc7872a70727606b59
--- /dev/null
+++ b/testsuite/tests/hpc/raytrace/tixs/hpc_markup_multi_003.stdout
@@ -0,0 +1,17 @@
+Writing: Main.hs.html
+Writing: Parse.hs.html
+Writing: Eval.hs.html
+Writing: Data.hs.html
+Writing: Geometry.hs.html
+Writing: CSG.hs.html
+Writing: Surface.hs.html
+Writing: Illumination.hs.html
+Writing: Primitives.hs.html
+Writing: Misc.hs.html
+Writing: Construct.hs.html
+Writing: Intersections.hs.html
+Writing: Interval.hs.html
+Writing: hpc_index.html
+Writing: hpc_index_fun.html
+Writing: hpc_index_alt.html
+Writing: hpc_index_exp.html
diff --git a/testsuite/tests/hpc/raytrace/tixs/hpc_raytrace.stdout b/testsuite/tests/hpc/raytrace/tixs/hpc_raytrace.stdout
new file mode 100644
index 0000000000000000000000000000000000000000..91d0243ca0d3849c8a33dfdfbad26a0a8bfff087
--- /dev/null
+++ b/testsuite/tests/hpc/raytrace/tixs/hpc_raytrace.stdout
@@ -0,0 +1,2955 @@
+"GOOD MATCH"
+
+
+ 48% expressions used (2292/4715)
+ 21% boolean coverage (18/83)
+      21% guards (12/55), 17 always True, 8 always False, 18 unevaluated
+      22% 'if' conditions (6/27), 3 always True, 3 always False, 15 unevaluated
+       0% qualifiers (0/1), 1 unevaluated
+ 38% alternatives used (124/322)
+ 40% local declarations used (89/218)
+ 49% top-level declarations used (146/295)
+
+
+-----<module CSG>-----
+100% expressions used (0/0)
+100% boolean coverage (0/0)
+     100% guards (0/0)
+     100% 'if' conditions (0/0)
+     100% qualifiers (0/0)
+100% alternatives used (0/0)
+100% local declarations used (0/0)
+100% top-level declarations used (0/0)
+-----<module Construct>-----
+ 60% expressions used (381/635)
+100% boolean coverage (0/0)
+     100% guards (0/0)
+     100% 'if' conditions (0/0)
+     100% qualifiers (0/0)
+ 41% alternatives used (5/12)
+100% local declarations used (5/5)
+ 41% top-level declarations used (17/41)
+-----<module Data>-----
+ 39% expressions used (254/646)
+  0% boolean coverage (0/4)
+       0% guards (0/4), 1 always True, 3 unevaluated
+     100% 'if' conditions (0/0)
+     100% qualifiers (0/0)
+  3% alternatives used (2/51)
+  0% local declarations used (0/2)
+ 22% top-level declarations used (10/45)
+-----<module Eval>-----
+ 57% expressions used (361/628)
+ 20% boolean coverage (1/5)
+     100% guards (0/0)
+      20% 'if' conditions (1/5), 1 always False, 3 unevaluated
+     100% qualifiers (0/0)
+ 59% alternatives used (40/67)
+ 36% local declarations used (4/11)
+ 62% top-level declarations used (22/35)
+-----<module Geometry>-----
+ 70% expressions used (300/427)
+ 10% boolean coverage (1/10)
+      10% guards (1/10), 3 always True, 1 always False, 5 unevaluated
+     100% 'if' conditions (0/0)
+     100% qualifiers (0/0)
+ 40% alternatives used (4/10)
+ 66% local declarations used (2/3)
+ 58% top-level declarations used (42/72)
+-----<module Illumination>-----
+ 44% expressions used (299/678)
+ 18% boolean coverage (3/16)
+      16% guards (2/12), 2 always True, 1 always False, 7 unevaluated
+      33% 'if' conditions (1/3), 1 always True, 1 always False
+       0% qualifiers (0/1), 1 unevaluated
+ 38% alternatives used (16/42)
+ 57% local declarations used (27/47)
+ 45% top-level declarations used (11/24)
+-----<module Intersections>-----
+ 38% expressions used (382/1001)
+ 33% boolean coverage (11/33)
+      40% guards (8/20), 8 always True, 3 always False, 1 unevaluated
+      23% 'if' conditions (3/13), 10 unevaluated
+     100% qualifiers (0/0)
+ 42% alternatives used (35/83)
+ 36% local declarations used (44/120)
+ 63% top-level declarations used (14/22)
+-----<module Interval>-----
+ 41% expressions used (69/165)
+  8% boolean coverage (1/12)
+      11% guards (1/9), 3 always True, 3 always False, 2 unevaluated
+       0% 'if' conditions (0/3), 2 always True, 1 unevaluated
+     100% qualifiers (0/0)
+ 39% alternatives used (9/23)
+ 25% local declarations used (1/4)
+ 47% top-level declarations used (8/17)
+-----<module Main>-----
+100% expressions used (6/6)
+100% boolean coverage (0/0)
+     100% guards (0/0)
+     100% 'if' conditions (0/0)
+     100% qualifiers (0/0)
+100% alternatives used (0/0)
+100% local declarations used (0/0)
+100% top-level declarations used (1/1)
+-----<module Misc>-----
+  0% expressions used (0/10)
+100% boolean coverage (0/0)
+     100% guards (0/0)
+     100% 'if' conditions (0/0)
+     100% qualifiers (0/0)
+100% alternatives used (0/0)
+100% local declarations used (0/0)
+  0% top-level declarations used (0/1)
+-----<module Parse>-----
+ 72% expressions used (192/264)
+ 50% boolean coverage (1/2)
+     100% guards (0/0)
+      50% 'if' conditions (1/2), 1 always False
+     100% qualifiers (0/0)
+ 42% alternatives used (6/14)
+100% local declarations used (2/2)
+ 80% top-level declarations used (16/20)
+-----<module Primitives>-----
+ 20% expressions used (5/24)
+100% boolean coverage (0/0)
+     100% guards (0/0)
+     100% 'if' conditions (0/0)
+     100% qualifiers (0/0)
+100% alternatives used (0/0)
+100% local declarations used (0/0)
+ 16% top-level declarations used (1/6)
+-----<module Surface>-----
+ 18% expressions used (43/231)
+  0% boolean coverage (0/1)
+     100% guards (0/0)
+       0% 'if' conditions (0/1), 1 unevaluated
+     100% qualifiers (0/0)
+ 35% alternatives used (7/20)
+ 16% local declarations used (4/24)
+ 36% top-level declarations used (4/11)
+
+
+Writing: Main.hs.html
+<html><style type="text/css">
+span.lineno { color: white; background: #aaaaaa; border-right: solid white 12px }
+span.nottickedoff { background: yellow}
+span.istickedoff { background: white }
+span.tickonlyfalse { margin: -1px; border: 1px solid #f20913; background: #f20913 }
+span.tickonlytrue  { margin: -1px; border: 1px solid #60de51; background: #60de51 }
+span.funcount { font-size: small; color: orange; z-index: 2; position: absolute; right: 20 }
+span.decl { font-weight: bold }
+span.spaces    { background: white }
+</style>
+<pre>
+<span class="lineno">    1 </span>-- Copyright (c) 2000 Galois Connections, Inc.
+<span class="lineno">    2 </span>-- All rights reserved.  This software is distributed as
+<span class="lineno">    3 </span>-- free software under the license in the file &quot;LICENSE&quot;,
+<span class="lineno">    4 </span>-- which is included in the distribution.
+<span class="lineno">    5 </span>
+<span class="lineno">    6 </span>-- Modified to read sample input directly from a file.
+<span class="lineno">    7 </span>
+<span class="lineno">    8 </span>module Main where
+<span class="lineno">    9 </span>
+<span class="lineno">   10 </span>import System
+<span class="lineno">   11 </span>
+<span class="lineno">   12 </span>import Parse
+<span class="lineno">   13 </span>import Eval
+<span class="lineno">   14 </span>
+<span class="lineno">   15 </span><span class="decl"><span class="istickedoff">main = do { str &lt;- readFile &quot;galois.gml&quot;</span>
+<span class="lineno">   16 </span><span class="spaces">          </span><span class="istickedoff">; mainEval (rayParse str)</span>
+<span class="lineno">   17 </span><span class="spaces">          </span><span class="istickedoff">}</span></span>
+
+</pre>
+</html>
+Writing: Parse.hs.html
+<html><style type="text/css">
+span.lineno { color: white; background: #aaaaaa; border-right: solid white 12px }
+span.nottickedoff { background: yellow}
+span.istickedoff { background: white }
+span.tickonlyfalse { margin: -1px; border: 1px solid #f20913; background: #f20913 }
+span.tickonlytrue  { margin: -1px; border: 1px solid #60de51; background: #60de51 }
+span.funcount { font-size: small; color: orange; z-index: 2; position: absolute; right: 20 }
+span.decl { font-weight: bold }
+span.spaces    { background: white }
+</style>
+<pre>
+<span class="lineno">    1 </span>-- Copyright (c) 2000 Galois Connections, Inc.
+<span class="lineno">    2 </span>-- All rights reserved.  This software is distributed as
+<span class="lineno">    3 </span>-- free software under the license in the file &quot;LICENSE&quot;,
+<span class="lineno">    4 </span>-- which is included in the distribution.
+<span class="lineno">    5 </span>
+<span class="lineno">    6 </span>module Parse where
+<span class="lineno">    7 </span>
+<span class="lineno">    8 </span>import Char
+<span class="lineno">    9 </span>import Text.ParserCombinators.Parsec hiding (token)
+<span class="lineno">   10 </span>
+<span class="lineno">   11 </span>import Data
+<span class="lineno">   12 </span>
+<span class="lineno">   13 </span>
+<span class="lineno">   14 </span>program :: Parser Code
+<span class="lineno">   15 </span><span class="decl"><span class="istickedoff">program =</span>
+<span class="lineno">   16 </span><span class="spaces">  </span><span class="istickedoff">do { whiteSpace</span>
+<span class="lineno">   17 </span><span class="spaces">     </span><span class="istickedoff">; ts &lt;- tokenList</span>
+<span class="lineno">   18 </span><span class="spaces">     </span><span class="istickedoff">; eof</span>
+<span class="lineno">   19 </span><span class="spaces">     </span><span class="istickedoff">; return ts</span>
+<span class="lineno">   20 </span><span class="spaces">     </span><span class="istickedoff">}</span></span>
+<span class="lineno">   21 </span>
+<span class="lineno">   22 </span>tokenList :: Parser Code
+<span class="lineno">   23 </span><span class="decl"><span class="istickedoff">tokenList = many token &lt;?&gt; <span class="nottickedoff">&quot;list of tokens&quot;</span></span></span>
+<span class="lineno">   24 </span>
+<span class="lineno">   25 </span>token :: Parser GMLToken
+<span class="lineno">   26 </span><span class="decl"><span class="istickedoff">token =</span>
+<span class="lineno">   27 </span><span class="spaces">       </span><span class="istickedoff">do { ts &lt;- braces   tokenList          ; return (TBody ts) } </span>
+<span class="lineno">   28 </span><span class="spaces">  </span><span class="istickedoff">&lt;|&gt;  do { ts &lt;- brackets tokenList          ; return (TArray ts) }</span>
+<span class="lineno">   29 </span><span class="spaces">  </span><span class="istickedoff">&lt;|&gt; (do { s  &lt;- gmlString                   ; return (TString <span class="nottickedoff">s</span>) } &lt;?&gt; <span class="nottickedoff">&quot;string&quot;</span>)</span>
+<span class="lineno">   30 </span><span class="spaces">  </span><span class="istickedoff">&lt;|&gt; (do { t &lt;- pident False                 ; return t }           &lt;?&gt; <span class="nottickedoff">&quot;identifier&quot;</span>)</span>
+<span class="lineno">   31 </span><span class="spaces">  </span><span class="istickedoff">&lt;|&gt; (do { char '/'   -- No whitespace after slash</span>
+<span class="lineno">   32 </span><span class="spaces">          </span><span class="istickedoff">; t &lt;- pident True                  ; return t } &lt;?&gt; <span class="nottickedoff">&quot;binding identifier&quot;</span>)</span>
+<span class="lineno">   33 </span><span class="spaces">  </span><span class="istickedoff">&lt;|&gt; (do { n &lt;- number                       ; return n } &lt;?&gt; <span class="nottickedoff">&quot;number&quot;</span>)</span></span>
+<span class="lineno">   34 </span>
+<span class="lineno">   35 </span>pident :: Bool -&gt; Parser GMLToken
+<span class="lineno">   36 </span><span class="decl"><span class="istickedoff">pident rebind =</span>
+<span class="lineno">   37 </span><span class="spaces">  </span><span class="istickedoff">do { id &lt;- ident</span>
+<span class="lineno">   38 </span><span class="spaces">     </span><span class="istickedoff">; case (lookup id opTable) of</span>
+<span class="lineno">   39 </span><span class="spaces">       </span><span class="istickedoff">Nothing -&gt; if rebind then return (TBind id) else return (TId id)</span>
+<span class="lineno">   40 </span><span class="spaces">       </span><span class="istickedoff">Just t  -&gt; if <span class="tickonlyfalse">rebind</span> then <span class="nottickedoff">error (&quot;Attempted rebinding of identifier &quot; ++ id)</span> else return t</span>
+<span class="lineno">   41 </span><span class="spaces">     </span><span class="istickedoff">}</span></span>
+<span class="lineno">   42 </span>
+<span class="lineno">   43 </span>ident :: Parser String
+<span class="lineno">   44 </span><span class="decl"><span class="istickedoff">ident = lexeme $</span>
+<span class="lineno">   45 </span><span class="spaces">  </span><span class="istickedoff">do { l &lt;- letter</span>
+<span class="lineno">   46 </span><span class="spaces">     </span><span class="istickedoff">; ls &lt;- many (satisfy (\x -&gt; isAlphaNum x || x == '-' || x == '_'))</span>
+<span class="lineno">   47 </span><span class="spaces">     </span><span class="istickedoff">; return (l:ls)</span>
+<span class="lineno">   48 </span><span class="spaces">     </span><span class="istickedoff">}</span></span>
+<span class="lineno">   49 </span>
+<span class="lineno">   50 </span>gmlString :: Parser String
+<span class="lineno">   51 </span><span class="decl"><span class="istickedoff">gmlString = lexeme $ between (char '&quot;') (char '&quot;') (many (satisfy (\x -&gt; isPrint x &amp;&amp; x /= '&quot;')))</span></span>
+<span class="lineno">   52 </span>
+<span class="lineno">   53 </span>-- Tests for numbers
+<span class="lineno">   54 </span>-- Hugs breaks on big exponents (&gt; ~40)
+<span class="lineno">   55 </span><span class="decl"><span class="nottickedoff">test_number = &quot;1234 -1234 1 -0 0&quot; ++</span>
+<span class="lineno">   56 </span><span class="spaces">              </span><span class="nottickedoff">&quot; 1234.5678 -1234.5678 1234.5678e12 1234.5678e-12 -1234.5678e-12&quot; ++</span>
+<span class="lineno">   57 </span><span class="spaces">              </span><span class="nottickedoff">&quot; -1234.5678e12 -1234.5678E-12 -1234.5678E12&quot; ++</span>
+<span class="lineno">   58 </span><span class="spaces">              </span><span class="nottickedoff">&quot; 1234e11 1234E33 -1234e33 1234e-33&quot; ++</span>
+<span class="lineno">   59 </span><span class="spaces">              </span><span class="nottickedoff">&quot; 123e 123.4e 123ee 123.4ee 123E 123.4E 123EE 123.4EE&quot;</span></span>
+<span class="lineno">   60 </span>              
+<span class="lineno">   61 </span>
+<span class="lineno">   62 </span>-- Always int or real
+<span class="lineno">   63 </span>number :: Parser GMLToken
+<span class="lineno">   64 </span><span class="decl"><span class="istickedoff">number = lexeme $</span>
+<span class="lineno">   65 </span><span class="spaces">  </span><span class="istickedoff">do { s &lt;- optSign</span>
+<span class="lineno">   66 </span><span class="spaces">     </span><span class="istickedoff">; n &lt;- decimal</span>
+<span class="lineno">   67 </span><span class="spaces">     </span><span class="istickedoff">;     do { string &quot;.&quot;</span>
+<span class="lineno">   68 </span><span class="spaces">              </span><span class="istickedoff">; m &lt;- decimal</span>
+<span class="lineno">   69 </span><span class="spaces">              </span><span class="istickedoff">; e &lt;- option &quot;&quot; exponent'</span>
+<span class="lineno">   70 </span><span class="spaces">              </span><span class="istickedoff">; return (TReal (read (s ++ n ++ &quot;.&quot; ++ m ++ e)))  -- FIXME: Handle error conditions</span>
+<span class="lineno">   71 </span><span class="spaces">              </span><span class="istickedoff">}</span>
+<span class="lineno">   72 </span><span class="spaces">       </span><span class="istickedoff">&lt;|&gt; do { e &lt;- exponent'</span>
+<span class="lineno">   73 </span><span class="spaces">              </span><span class="istickedoff">; <span class="nottickedoff">return (TReal (read (s ++ n ++ &quot;.0&quot; ++ e)))</span></span>
+<span class="lineno">   74 </span><span class="spaces">              </span><span class="istickedoff">}</span>
+<span class="lineno">   75 </span><span class="spaces">       </span><span class="istickedoff">&lt;|&gt; do { return (TInt (read (s ++ n))) }</span>
+<span class="lineno">   76 </span><span class="spaces">     </span><span class="istickedoff">}</span></span>
+<span class="lineno">   77 </span>
+<span class="lineno">   78 </span>exponent' :: Parser String
+<span class="lineno">   79 </span><span class="decl"><span class="istickedoff">exponent' = try $</span>
+<span class="lineno">   80 </span><span class="spaces">  </span><span class="istickedoff">do { e &lt;- oneOf &quot;eE&quot;</span>
+<span class="lineno">   81 </span><span class="spaces">     </span><span class="istickedoff">; s &lt;- <span class="nottickedoff">optSign</span></span>
+<span class="lineno">   82 </span><span class="spaces">     </span><span class="istickedoff">; n &lt;- <span class="nottickedoff">decimal</span></span>
+<span class="lineno">   83 </span><span class="spaces">     </span><span class="istickedoff">; <span class="nottickedoff">return (e:s ++ n)</span></span>
+<span class="lineno">   84 </span><span class="spaces">     </span><span class="istickedoff">}</span></span>
+<span class="lineno">   85 </span>
+<span class="lineno">   86 </span><span class="decl"><span class="istickedoff">decimal = many1 digit</span></span>
+<span class="lineno">   87 </span>
+<span class="lineno">   88 </span>optSign :: Parser String
+<span class="lineno">   89 </span><span class="decl"><span class="istickedoff">optSign = option &quot;&quot; (string &quot;-&quot;)</span></span>
+<span class="lineno">   90 </span>
+<span class="lineno">   91 </span>
+<span class="lineno">   92 </span>------------------------------------------------------
+<span class="lineno">   93 </span>-- Library for tokenizing.
+<span class="lineno">   94 </span>
+<span class="lineno">   95 </span><span class="decl"><span class="istickedoff">braces   p = between (symbol &quot;{&quot;) (symbol &quot;}&quot;) p</span></span>
+<span class="lineno">   96 </span><span class="decl"><span class="istickedoff">brackets p = between (symbol &quot;[&quot;) (symbol &quot;]&quot;) p</span></span>
+<span class="lineno">   97 </span>
+<span class="lineno">   98 </span><span class="decl"><span class="istickedoff">symbol name = lexeme (string name)</span></span>
+<span class="lineno">   99 </span>
+<span class="lineno">  100 </span><span class="decl"><span class="istickedoff">lexeme p = do{ x &lt;- p; whiteSpace; return x  }</span></span>
+<span class="lineno">  101 </span>
+<span class="lineno">  102 </span><span class="decl"><span class="istickedoff">whiteSpace  = skipMany (simpleSpace &lt;|&gt; oneLineComment &lt;?&gt; <span class="nottickedoff">&quot;&quot;</span>)</span>
+<span class="lineno">  103 </span><span class="spaces">  </span><span class="istickedoff">where simpleSpace = skipMany1 (oneOf &quot; \t\n\r\v&quot;)    </span>
+<span class="lineno">  104 </span><span class="spaces">        </span><span class="istickedoff">oneLineComment =</span>
+<span class="lineno">  105 </span><span class="spaces">            </span><span class="istickedoff">do{ string &quot;%&quot;</span>
+<span class="lineno">  106 </span><span class="spaces">              </span><span class="istickedoff">; skipMany (noneOf &quot;\n\r\v&quot;)</span>
+<span class="lineno">  107 </span><span class="spaces">              </span><span class="istickedoff">; return ()</span>
+<span class="lineno">  108 </span><span class="spaces">              </span><span class="istickedoff">}</span></span>
+<span class="lineno">  109 </span>
+<span class="lineno">  110 </span>
+<span class="lineno">  111 </span>------------------------------------------------------------------------------
+<span class="lineno">  112 </span>
+<span class="lineno">  113 </span>rayParse :: String -&gt; Code
+<span class="lineno">  114 </span><span class="decl"><span class="istickedoff">rayParse is = case (parse program <span class="nottickedoff">&quot;&lt;stdin&gt;&quot;</span> is) of</span>
+<span class="lineno">  115 </span><span class="spaces">              </span><span class="istickedoff">Left err -&gt; <span class="nottickedoff">error (show err)</span></span>
+<span class="lineno">  116 </span><span class="spaces">              </span><span class="istickedoff">Right x  -&gt; x</span></span>
+<span class="lineno">  117 </span>
+<span class="lineno">  118 </span>rayParseF :: String -&gt; IO Code
+<span class="lineno">  119 </span><span class="decl"><span class="nottickedoff">rayParseF file =</span>
+<span class="lineno">  120 </span><span class="spaces">  </span><span class="nottickedoff">do { r &lt;- parseFromFile program file</span>
+<span class="lineno">  121 </span><span class="spaces">     </span><span class="nottickedoff">; case r of</span>
+<span class="lineno">  122 </span><span class="spaces">       </span><span class="nottickedoff">Left err -&gt; error (show err)</span>
+<span class="lineno">  123 </span><span class="spaces">       </span><span class="nottickedoff">Right x  -&gt; return x</span>
+<span class="lineno">  124 </span><span class="spaces">     </span><span class="nottickedoff">}</span></span>
+<span class="lineno">  125 </span>
+<span class="lineno">  126 </span>run :: String -&gt; IO ()
+<span class="lineno">  127 </span><span class="decl"><span class="nottickedoff">run is = case (parse program &quot;&quot; is) of</span>
+<span class="lineno">  128 </span><span class="spaces">         </span><span class="nottickedoff">Left err -&gt; print err</span>
+<span class="lineno">  129 </span><span class="spaces">         </span><span class="nottickedoff">Right x  -&gt; print x</span></span>
+<span class="lineno">  130 </span>
+<span class="lineno">  131 </span>runF :: IO ()
+<span class="lineno">  132 </span><span class="decl"><span class="nottickedoff">runF =</span>
+<span class="lineno">  133 </span><span class="spaces">  </span><span class="nottickedoff">do { r &lt;- parseFromFile program &quot;simple.gml&quot;</span>
+<span class="lineno">  134 </span><span class="spaces">     </span><span class="nottickedoff">; case r of</span>
+<span class="lineno">  135 </span><span class="spaces">       </span><span class="nottickedoff">Left err -&gt; print err</span>
+<span class="lineno">  136 </span><span class="spaces">       </span><span class="nottickedoff">Right x  -&gt; print x</span>
+<span class="lineno">  137 </span><span class="spaces">     </span><span class="nottickedoff">}</span></span>
+
+</pre>
+</html>
+Writing: Data.hs.html
+<html><style type="text/css">
+span.lineno { color: white; background: #aaaaaa; border-right: solid white 12px }
+span.nottickedoff { background: yellow}
+span.istickedoff { background: white }
+span.tickonlyfalse { margin: -1px; border: 1px solid #f20913; background: #f20913 }
+span.tickonlytrue  { margin: -1px; border: 1px solid #60de51; background: #60de51 }
+span.funcount { font-size: small; color: orange; z-index: 2; position: absolute; right: 20 }
+span.decl { font-weight: bold }
+span.spaces    { background: white }
+</style>
+<pre>
+<span class="lineno">    1 </span>-- Copyright (c) 2000 Galois Connections, Inc.
+<span class="lineno">    2 </span>-- All rights reserved.  This software is distributed as
+<span class="lineno">    3 </span>-- free software under the license in the file &quot;LICENSE&quot;,
+<span class="lineno">    4 </span>-- which is included in the distribution.
+<span class="lineno">    5 </span>
+<span class="lineno">    6 </span>module Data where
+<span class="lineno">    7 </span>
+<span class="lineno">    8 </span>import Array
+<span class="lineno">    9 </span>
+<span class="lineno">   10 </span>import CSG      
+<span class="lineno">   11 </span>import Geometry
+<span class="lineno">   12 </span>import Illumination
+<span class="lineno">   13 </span>import Primitives
+<span class="lineno">   14 </span>import Surface
+<span class="lineno">   15 </span>
+<span class="lineno">   16 </span>import Debug.Trace
+<span class="lineno">   17 </span>
+<span class="lineno">   18 </span>-- Now the parsed (expresssion) language
+<span class="lineno">   19 </span>
+<span class="lineno">   20 </span>type Name = String
+<span class="lineno">   21 </span>
+<span class="lineno">   22 </span>type Code = [GMLToken]
+<span class="lineno">   23 </span>
+<span class="lineno">   24 </span>data GMLToken
+<span class="lineno">   25 </span>    -- All these can occur in parsed code
+<span class="lineno">   26 </span>        = TOp     GMLOp
+<span class="lineno">   27 </span>        | TId     Name
+<span class="lineno">   28 </span>        | TBind   Name
+<span class="lineno">   29 </span>        | TBool   Bool
+<span class="lineno">   30 </span>        | TInt    Int
+<span class="lineno">   31 </span>        | TReal   Double
+<span class="lineno">   32 </span>        | TString String
+<span class="lineno">   33 </span>        | TBody   Code
+<span class="lineno">   34 </span>        | TArray  Code
+<span class="lineno">   35 </span>        | TApply
+<span class="lineno">   36 </span>        | TIf
+<span class="lineno">   37 </span>         -- These can occur in optimized/transformed code
+<span class="lineno">   38 </span>         -- NONE (yet!)
+<span class="lineno">   39 </span>
+<span class="lineno">   40 </span>
+<span class="lineno">   41 </span>instance Show GMLToken where
+<span class="lineno">   42 </span>   <span class="decl"><span class="nottickedoff">showsPrec p (TOp op)     = shows op</span>
+<span class="lineno">   43 </span><span class="spaces">   </span><span class="nottickedoff">showsPrec p (TId id)     = showString id</span>
+<span class="lineno">   44 </span><span class="spaces">   </span><span class="nottickedoff">showsPrec p (TBind id)   = showString ('/' : id)</span>
+<span class="lineno">   45 </span><span class="spaces">   </span><span class="nottickedoff">showsPrec p (TBool bool) = shows bool</span>
+<span class="lineno">   46 </span><span class="spaces">   </span><span class="nottickedoff">showsPrec p (TInt i)     = shows i</span>
+<span class="lineno">   47 </span><span class="spaces">   </span><span class="nottickedoff">showsPrec p (TReal d)    = shows d</span>
+<span class="lineno">   48 </span><span class="spaces">   </span><span class="nottickedoff">showsPrec p (TString s)  = shows s</span>
+<span class="lineno">   49 </span><span class="spaces">   </span><span class="nottickedoff">showsPrec p (TBody code) = shows code</span>
+<span class="lineno">   50 </span><span class="spaces">   </span><span class="nottickedoff">showsPrec p (TArray code) = showString &quot;[ &quot; </span>
+<span class="lineno">   51 </span><span class="spaces">                            </span><span class="nottickedoff">. foldr (\ a b -&gt; a . showChar ' ' . b) id (map shows code) </span>
+<span class="lineno">   52 </span><span class="spaces">                            </span><span class="nottickedoff">. showString &quot;]&quot;</span>
+<span class="lineno">   53 </span><span class="spaces">   </span><span class="nottickedoff">showsPrec p (TApply)     = showString &quot;apply&quot; </span>
+<span class="lineno">   54 </span><span class="spaces">   </span><span class="nottickedoff">showsPrec p (TIf)        = showString &quot;if&quot;</span></span> 
+<span class="lineno">   55 </span>
+<span class="lineno">   56 </span>   <span class="decl"><span class="nottickedoff">showList  code = showString &quot;{ &quot; </span>
+<span class="lineno">   57 </span><span class="spaces">                  </span><span class="nottickedoff">. foldr (\ a b -&gt; a . showChar ' ' . b) id (map shows code) </span>
+<span class="lineno">   58 </span><span class="spaces">                  </span><span class="nottickedoff">. showString &quot;}&quot;</span></span>
+<span class="lineno">   59 </span>
+<span class="lineno">   60 </span>
+<span class="lineno">   61 </span>-- Now the value language, used inside the interpreter
+<span class="lineno">   62 </span>
+<span class="lineno">   63 </span>type Stack = [GMLValue]
+<span class="lineno">   64 </span>
+<span class="lineno">   65 </span>data GMLValue
+<span class="lineno">   66 </span>        = VBool    !Bool
+<span class="lineno">   67 </span>        | VInt     !Int
+<span class="lineno">   68 </span>        | VReal    !Double
+<span class="lineno">   69 </span>        | VString  String
+<span class="lineno">   70 </span>        | VClosure Env Code
+<span class="lineno">   71 </span>        | VArray   (Array Int GMLValue)               -- FIXME: Haskell array
+<span class="lineno">   72 </span>        -- uses the interpreter version of point
+<span class="lineno">   73 </span>        | VPoint   { xPoint :: !Double
+<span class="lineno">   74 </span>                   , yPoint :: !Double 
+<span class="lineno">   75 </span>                   , zPoint :: !Double 
+<span class="lineno">   76 </span>                   } 
+<span class="lineno">   77 </span>        -- these are abstract to the interpreter
+<span class="lineno">   78 </span>        | VObject  Object
+<span class="lineno">   79 </span>        | VLight   Light 
+<span class="lineno">   80 </span>        -- This is an abstract object, used by the abstract interpreter
+<span class="lineno">   81 </span>        | VAbsObj  AbsObj
+<span class="lineno">   82 </span>
+<span class="lineno">   83 </span>
+<span class="lineno">   84 </span>-- There are only *3* basic abstract values,
+<span class="lineno">   85 </span>-- and the combinators also.
+<span class="lineno">   86 </span>
+<span class="lineno">   87 </span>data AbsObj 
+<span class="lineno">   88 </span>    = AbsFACE 
+<span class="lineno">   89 </span>    | AbsU 
+<span class="lineno">   90 </span>    | AbsV
+<span class="lineno">   91 </span>      deriving (<span class="decl"><span class="nottickedoff"><span class="decl"><span class="nottickedoff">Show</span></span></span></span>)
+<span class="lineno">   92 </span>
+<span class="lineno">   93 </span>instance Show GMLValue where
+<span class="lineno">   94 </span>   <span class="decl"><span class="nottickedoff">showsPrec p value = showString (showStkEle value)</span></span>
+<span class="lineno">   95 </span>
+<span class="lineno">   96 </span>showStkEle :: GMLValue -&gt; String
+<span class="lineno">   97 </span><span class="decl"><span class="nottickedoff">showStkEle (VBool b)      = show b ++ &quot; :: Bool&quot;</span>
+<span class="lineno">   98 </span><span class="spaces"></span><span class="nottickedoff">showStkEle (VInt i)       = show i ++ &quot; :: Int&quot;</span>
+<span class="lineno">   99 </span><span class="spaces"></span><span class="nottickedoff">showStkEle (VReal r)      = show r ++ &quot; :: Real&quot;</span>
+<span class="lineno">  100 </span><span class="spaces"></span><span class="nottickedoff">showStkEle (VString s)    = show s ++ &quot; :: String&quot;</span>
+<span class="lineno">  101 </span><span class="spaces"></span><span class="nottickedoff">showStkEle (VClosure {})  = &quot;&lt;closure&gt; :: Closure&quot;</span>
+<span class="lineno">  102 </span><span class="spaces"></span><span class="nottickedoff">showStkEle (VArray arr)   </span>
+<span class="lineno">  103 </span><span class="spaces">     </span><span class="nottickedoff">= &quot;&lt;array (&quot; ++  show (succ (snd (bounds arr))) ++ &quot; elements)&gt; :: Array&quot;</span>
+<span class="lineno">  104 </span><span class="spaces"></span><span class="nottickedoff">showStkEle (VPoint x y z) = &quot;(&quot; ++ show x </span>
+<span class="lineno">  105 </span><span class="spaces">                         </span><span class="nottickedoff">++ &quot;,&quot; ++ show y</span>
+<span class="lineno">  106 </span><span class="spaces">                         </span><span class="nottickedoff">++ &quot;,&quot; ++ show z</span>
+<span class="lineno">  107 </span><span class="spaces">                         </span><span class="nottickedoff">++ &quot;) :: Point&quot;</span>
+<span class="lineno">  108 </span><span class="spaces"></span><span class="nottickedoff">showStkEle (VObject {})   = &quot;&lt;Object&gt; :: Object&quot;</span>
+<span class="lineno">  109 </span><span class="spaces"></span><span class="nottickedoff">showStkEle (VLight {})    = &quot;&lt;Light&gt; :: Object&quot;</span>
+<span class="lineno">  110 </span><span class="spaces"></span><span class="nottickedoff">showStkEle (VAbsObj vobs) = &quot;{{ &quot; ++ show vobs ++ &quot;}} :: AbsObj&quot;</span></span>
+<span class="lineno">  111 </span>
+<span class="lineno">  112 </span>-- An abstract environment
+<span class="lineno">  113 </span>
+<span class="lineno">  114 </span>newtype Env = Env [(Name, GMLValue)] deriving <span class="decl"><span class="nottickedoff"><span class="decl"><span class="nottickedoff">Show</span></span></span></span>
+<span class="lineno">  115 </span>
+<span class="lineno">  116 </span>emptyEnv :: Env
+<span class="lineno">  117 </span><span class="decl"><span class="nottickedoff">emptyEnv = Env []</span></span>
+<span class="lineno">  118 </span>
+<span class="lineno">  119 </span>extendEnv :: Env -&gt; Name -&gt; GMLValue -&gt; Env
+<span class="lineno">  120 </span><span class="decl"><span class="istickedoff">extendEnv (Env e) n v = Env ((n, v):e)</span></span>
+<span class="lineno">  121 </span>
+<span class="lineno">  122 </span>lookupEnv :: Env -&gt; Name -&gt; Maybe GMLValue
+<span class="lineno">  123 </span><span class="decl"><span class="istickedoff">lookupEnv (Env e) n = lookup n e</span></span>
+<span class="lineno">  124 </span>
+<span class="lineno">  125 </span>-- All primitive operators
+<span class="lineno">  126 </span>-- 
+<span class="lineno">  127 </span>-- There is no Op_apply, Op_false, Op_true and Op_if
+<span class="lineno">  128 </span>-- (because they appear explcitly in the rules).
+<span class="lineno">  129 </span>
+<span class="lineno">  130 </span>data GMLOp
+<span class="lineno">  131 </span>   = Op_acos
+<span class="lineno">  132 </span>   | Op_addi
+<span class="lineno">  133 </span>   | Op_addf
+<span class="lineno">  134 </span>   | Op_asin
+<span class="lineno">  135 </span>   | Op_clampf
+<span class="lineno">  136 </span>   | Op_cone
+<span class="lineno">  137 </span>   | Op_cos
+<span class="lineno">  138 </span>   | Op_cube
+<span class="lineno">  139 </span>   | Op_cylinder
+<span class="lineno">  140 </span>   | Op_difference
+<span class="lineno">  141 </span>   | Op_divi
+<span class="lineno">  142 </span>   | Op_divf
+<span class="lineno">  143 </span>   | Op_eqi
+<span class="lineno">  144 </span>   | Op_eqf
+<span class="lineno">  145 </span>   | Op_floor
+<span class="lineno">  146 </span>   | Op_frac
+<span class="lineno">  147 </span>   | Op_get
+<span class="lineno">  148 </span>   | Op_getx
+<span class="lineno">  149 </span>   | Op_gety
+<span class="lineno">  150 </span>   | Op_getz
+<span class="lineno">  151 </span>   | Op_intersect
+<span class="lineno">  152 </span>   | Op_length
+<span class="lineno">  153 </span>   | Op_lessi
+<span class="lineno">  154 </span>   | Op_lessf
+<span class="lineno">  155 </span>   | Op_light
+<span class="lineno">  156 </span>   | Op_modi
+<span class="lineno">  157 </span>   | Op_muli
+<span class="lineno">  158 </span>   | Op_mulf
+<span class="lineno">  159 </span>   | Op_negi
+<span class="lineno">  160 </span>   | Op_negf
+<span class="lineno">  161 </span>   | Op_plane
+<span class="lineno">  162 </span>   | Op_point
+<span class="lineno">  163 </span>   | Op_pointlight
+<span class="lineno">  164 </span>   | Op_real
+<span class="lineno">  165 </span>   | Op_render
+<span class="lineno">  166 </span>   | Op_rotatex
+<span class="lineno">  167 </span>   | Op_rotatey
+<span class="lineno">  168 </span>   | Op_rotatez
+<span class="lineno">  169 </span>   | Op_scale
+<span class="lineno">  170 </span>   | Op_sin
+<span class="lineno">  171 </span>   | Op_sphere
+<span class="lineno">  172 </span>   | Op_spotlight
+<span class="lineno">  173 </span>   | Op_sqrt
+<span class="lineno">  174 </span>   | Op_subi
+<span class="lineno">  175 </span>   | Op_subf
+<span class="lineno">  176 </span>   | Op_trace       -- non standard, for debugging GML programs
+<span class="lineno">  177 </span>   | Op_translate
+<span class="lineno">  178 </span>   | Op_union
+<span class="lineno">  179 </span>   | Op_uscale
+<span class="lineno">  180 </span>    deriving (<span class="decl"><span class="nottickedoff"><span class="decl"><span class="nottickedoff">Eq</span></span></span></span>,<span class="nottickedoff"><span class="decl"><span class="nottickedoff">Ord</span></span></span>,<span class="decl"><span class="nottickedoff"><span class="decl"><span class="istickedoff"><span class="decl"><span class="istickedoff">Ix</span></span></span></span></span></span>,<span class="decl"><span class="istickedoff"><span class="decl"><span class="istickedoff">Bounded</span></span></span></span>)
+<span class="lineno">  181 </span>
+<span class="lineno">  182 </span>instance Show GMLOp where
+<span class="lineno">  183 </span>   <span class="decl"><span class="nottickedoff">showsPrec _ op = showString (opNameTable ! op)</span></span>
+<span class="lineno">  184 </span>
+<span class="lineno">  185 </span>
+<span class="lineno">  186 </span>------------------------------------------------------------------------------
+<span class="lineno">  187 </span>
+<span class="lineno">  188 </span>-- And how we use the op codes (there names, there interface)
+<span class="lineno">  189 </span>
+<span class="lineno">  190 </span>-- These keywords include, &quot;apply&quot;, &quot;if&quot;, &quot;true&quot; and &quot;false&quot;,
+<span class="lineno">  191 </span>-- they are not parsed as operators, but are
+<span class="lineno">  192 </span>-- captured by the parser as a special case.
+<span class="lineno">  193 </span>
+<span class="lineno">  194 </span>keyWords :: [String]
+<span class="lineno">  195 </span><span class="decl"><span class="nottickedoff">keyWords = [ kwd | (kwd,_,_) &lt;- opcodes ]</span></span>
+<span class="lineno">  196 </span>
+<span class="lineno">  197 </span>-- Lookup has to look from the start (or else...)
+<span class="lineno">  198 </span>opTable :: [(Name,GMLToken)]
+<span class="lineno">  199 </span><span class="decl"><span class="istickedoff">opTable = [ (kwd,op) | (kwd,op,_) &lt;- opcodes ]</span></span>
+<span class="lineno">  200 </span>
+<span class="lineno">  201 </span>opNameTable :: Array GMLOp Name
+<span class="lineno">  202 </span><span class="decl"><span class="nottickedoff">opNameTable = array (minBound,maxBound) </span>
+<span class="lineno">  203 </span><span class="spaces">                  </span><span class="nottickedoff">[ (op,name) | (name,TOp op,_) &lt;- opcodes ]</span></span>
+<span class="lineno">  204 </span>
+<span class="lineno">  205 </span><span class="decl"><span class="nottickedoff">undef = error &quot;undefined function&quot;</span></span>
+<span class="lineno">  206 </span><span class="decl"><span class="nottickedoff">image = error &quot;undefined function: talk to image group&quot;</span></span>
+<span class="lineno">  207 </span>
+<span class="lineno">  208 </span>-- typically, its best to have *one* opcode table,
+<span class="lineno">  209 </span>-- so that mis-alignments do not happen.
+<span class="lineno">  210 </span>
+<span class="lineno">  211 </span>opcodes :: [(String,GMLToken,PrimOp)]
+<span class="lineno">  212 </span><span class="decl"><span class="istickedoff">opcodes =</span>
+<span class="lineno">  213 </span><span class="spaces"> </span><span class="istickedoff">[ (&quot;apply&quot;,      TApply,           <span class="nottickedoff">error &quot;incorrect use of apply&quot;</span>)</span>
+<span class="lineno">  214 </span><span class="spaces"> </span><span class="istickedoff">, (&quot;if&quot;,         TIf,                   <span class="nottickedoff">error &quot;incorrect use of if&quot;</span>)</span>
+<span class="lineno">  215 </span><span class="spaces"> </span><span class="istickedoff">, (&quot;false&quot;,      TBool <span class="nottickedoff">False</span>,        <span class="nottickedoff">error &quot;incorrect use of false&quot;</span>)</span>
+<span class="lineno">  216 </span><span class="spaces"> </span><span class="istickedoff">, (&quot;true&quot;,       TBool <span class="nottickedoff">True</span>,            <span class="nottickedoff">error &quot;incorrect use of true&quot;</span>)</span>
+<span class="lineno">  217 </span><span class="spaces"> </span><span class="istickedoff">] ++ map (\ (a,b,c) -&gt; (a,TOp b,c))</span>
+<span class="lineno">  218 </span><span class="spaces">   </span><span class="istickedoff">-- These are just invocation, any coersions need to occur between here</span>
+<span class="lineno">  219 </span><span class="spaces">   </span><span class="istickedoff">-- and before arriving at the application code (like deg -&gt; rad).</span>
+<span class="lineno">  220 </span><span class="spaces"> </span><span class="istickedoff">[ (&quot;acos&quot;,       Op_acos,   <span class="nottickedoff">Real_Real (rad2deg . acos)</span>)</span>
+<span class="lineno">  221 </span><span class="spaces"> </span><span class="istickedoff">, (&quot;addi&quot;,       Op_addi,   <span class="nottickedoff">Int_Int_Int (+)</span>)</span>
+<span class="lineno">  222 </span><span class="spaces"> </span><span class="istickedoff">, (&quot;addf&quot;,       Op_addf,   Real_Real_Real (+))</span>
+<span class="lineno">  223 </span><span class="spaces"> </span><span class="istickedoff">, (&quot;asin&quot;,       Op_asin,   <span class="nottickedoff">Real_Real (rad2deg . asin)</span>)</span>
+<span class="lineno">  224 </span><span class="spaces"> </span><span class="istickedoff">, (&quot;clampf&quot;,     Op_clampf,       <span class="nottickedoff">Real_Real clampf</span>)</span>
+<span class="lineno">  225 </span><span class="spaces"> </span><span class="istickedoff">, (&quot;cone&quot;,       Op_cone,   <span class="nottickedoff">Surface_Obj cone</span>)</span>
+<span class="lineno">  226 </span><span class="spaces"> </span><span class="istickedoff">, (&quot;cos&quot;,        Op_cos,     <span class="nottickedoff">Real_Real (cos . deg2rad)</span>)</span>
+<span class="lineno">  227 </span><span class="spaces"> </span><span class="istickedoff">, (&quot;cube&quot;,       Op_cube,   Surface_Obj cube)</span>
+<span class="lineno">  228 </span><span class="spaces"> </span><span class="istickedoff">, (&quot;cylinder&quot;,   Op_cylinder,   <span class="nottickedoff">Surface_Obj cylinder</span>)</span>
+<span class="lineno">  229 </span><span class="spaces"> </span><span class="istickedoff">, (&quot;difference&quot;, Op_difference, <span class="nottickedoff">Obj_Obj_Obj difference</span>)</span>
+<span class="lineno">  230 </span><span class="spaces"> </span><span class="istickedoff">, (&quot;divi&quot;,       Op_divi,   <span class="nottickedoff">Int_Int_Int (ourQuot)</span>)</span>
+<span class="lineno">  231 </span><span class="spaces"> </span><span class="istickedoff">, (&quot;divf&quot;,       Op_divf,   Real_Real_Real (/))</span>
+<span class="lineno">  232 </span><span class="spaces"> </span><span class="istickedoff">, (&quot;eqi&quot;,        Op_eqi,     Int_Int_Bool (==))</span>
+<span class="lineno">  233 </span><span class="spaces"> </span><span class="istickedoff">, (&quot;eqf&quot;,        Op_eqf,     <span class="nottickedoff">Real_Real_Bool (==)</span>)</span>
+<span class="lineno">  234 </span><span class="spaces"> </span><span class="istickedoff">, (&quot;floor&quot;,      Op_floor,         Real_Int floor)</span>
+<span class="lineno">  235 </span><span class="spaces"> </span><span class="istickedoff">, (&quot;frac&quot;,       Op_frac,   Real_Real (snd . properFraction))</span>
+<span class="lineno">  236 </span><span class="spaces"> </span><span class="istickedoff">, (&quot;get&quot;,        Op_get,     Arr_Int_Value ixGet)</span>
+<span class="lineno">  237 </span><span class="spaces"> </span><span class="istickedoff">, (&quot;getx&quot;,       Op_getx,   <span class="nottickedoff">Point_Real (\ x y z -&gt; x)</span>)</span>
+<span class="lineno">  238 </span><span class="spaces"> </span><span class="istickedoff">, (&quot;gety&quot;,       Op_gety,   <span class="nottickedoff">Point_Real (\ x y z -&gt; y)</span>)</span>
+<span class="lineno">  239 </span><span class="spaces"> </span><span class="istickedoff">, (&quot;getz&quot;,       Op_getz,   <span class="nottickedoff">Point_Real (\ x y z -&gt; z)</span>)</span>
+<span class="lineno">  240 </span><span class="spaces"> </span><span class="istickedoff">, (&quot;intersect&quot;,  Op_intersect,  <span class="nottickedoff">Obj_Obj_Obj intersect</span>)</span>
+<span class="lineno">  241 </span><span class="spaces"> </span><span class="istickedoff">, (&quot;length&quot;,     Op_length,       <span class="nottickedoff">Arr_Int (succ . snd . bounds)</span>)</span>
+<span class="lineno">  242 </span><span class="spaces"> </span><span class="istickedoff">, (&quot;lessi&quot;,      Op_lessi,         <span class="nottickedoff">Int_Int_Bool (&lt;)</span>)</span>
+<span class="lineno">  243 </span><span class="spaces"> </span><span class="istickedoff">, (&quot;lessf&quot;,      Op_lessf,         Real_Real_Bool (&lt;))</span>
+<span class="lineno">  244 </span><span class="spaces"> </span><span class="istickedoff">, (&quot;light&quot;,      Op_light,         Point_Color_Light light)</span>
+<span class="lineno">  245 </span><span class="spaces"> </span><span class="istickedoff">, (&quot;modi&quot;,       Op_modi,   Int_Int_Int (ourRem))</span>
+<span class="lineno">  246 </span><span class="spaces"> </span><span class="istickedoff">, (&quot;muli&quot;,       Op_muli,   <span class="nottickedoff">Int_Int_Int (*)</span>)</span>
+<span class="lineno">  247 </span><span class="spaces"> </span><span class="istickedoff">, (&quot;mulf&quot;,       Op_mulf,   Real_Real_Real (*))</span>
+<span class="lineno">  248 </span><span class="spaces"> </span><span class="istickedoff">, (&quot;negi&quot;,       Op_negi,   <span class="nottickedoff">Int_Int negate</span>)</span>
+<span class="lineno">  249 </span><span class="spaces"> </span><span class="istickedoff">, (&quot;negf&quot;,       Op_negf,   <span class="nottickedoff">Real_Real negate</span>)</span>
+<span class="lineno">  250 </span><span class="spaces"> </span><span class="istickedoff">, (&quot;plane&quot;,      Op_plane,         Surface_Obj plane)</span>
+<span class="lineno">  251 </span><span class="spaces"> </span><span class="istickedoff">, (&quot;point&quot;,      Op_point,         Real_Real_Real_Point VPoint)</span>
+<span class="lineno">  252 </span><span class="spaces"> </span><span class="istickedoff">, (&quot;pointlight&quot;, Op_pointlight, <span class="nottickedoff">Point_Color_Light pointlight</span>)</span>
+<span class="lineno">  253 </span><span class="spaces"> </span><span class="istickedoff">, (&quot;real&quot;,       Op_real,   Int_Real fromIntegral)</span>
+<span class="lineno">  254 </span><span class="spaces"> </span><span class="istickedoff">, (&quot;render&quot;,     Op_render,       Render $ render eye)</span>
+<span class="lineno">  255 </span><span class="spaces"> </span><span class="istickedoff">, (&quot;rotatex&quot;,    Op_rotatex,     Obj_Real_Obj (\ o d -&gt; rotateX (deg2rad d) o))</span>
+<span class="lineno">  256 </span><span class="spaces"> </span><span class="istickedoff">, (&quot;rotatey&quot;,    Op_rotatey,     Obj_Real_Obj (\ o d -&gt; rotateY (deg2rad d) o)) </span>
+<span class="lineno">  257 </span><span class="spaces"> </span><span class="istickedoff">, (&quot;rotatez&quot;,    Op_rotatez,     <span class="nottickedoff">Obj_Real_Obj (\ o d -&gt; rotateZ (deg2rad d) o)</span>)</span>
+<span class="lineno">  258 </span><span class="spaces"> </span><span class="istickedoff">, (&quot;scale&quot;,      Op_scale,         <span class="nottickedoff">Obj_Real_Real_Real_Obj (\ o x y z -&gt; scale (x,y,z) o)</span>)</span>
+<span class="lineno">  259 </span><span class="spaces"> </span><span class="istickedoff">, (&quot;sin&quot;,        Op_sin,     <span class="nottickedoff">Real_Real (sin . deg2rad)</span>)</span>
+<span class="lineno">  260 </span><span class="spaces"> </span><span class="istickedoff">, (&quot;sphere&quot;,     Op_sphere,       <span class="nottickedoff">Surface_Obj sphere'</span>) -- see comment at end of file</span>
+<span class="lineno">  261 </span><span class="spaces"> </span><span class="istickedoff">, (&quot;spotlight&quot;,  Op_spotlight,  <span class="nottickedoff">Point_Point_Color_Real_Real_Light mySpotlight</span>)</span>
+<span class="lineno">  262 </span><span class="spaces"> </span><span class="istickedoff">, (&quot;sqrt&quot;,       Op_sqrt,   <span class="nottickedoff">Real_Real ourSqrt</span>)</span>
+<span class="lineno">  263 </span><span class="spaces"> </span><span class="istickedoff">, (&quot;subi&quot;,       Op_subi,   <span class="nottickedoff">Int_Int_Int (-)</span>)</span>
+<span class="lineno">  264 </span><span class="spaces"> </span><span class="istickedoff">, (&quot;subf&quot;,       Op_subf,   <span class="nottickedoff">Real_Real_Real (-)</span>)</span>
+<span class="lineno">  265 </span><span class="spaces"> </span><span class="istickedoff">, (&quot;trace&quot;,      Op_trace,      <span class="nottickedoff">Value_String_Value mytrace</span>)</span>
+<span class="lineno">  266 </span><span class="spaces"> </span><span class="istickedoff">, (&quot;translate&quot;,  Op_translate,  Obj_Real_Real_Real_Obj (\ o x y z -&gt; translate (x,y,z) o))</span>
+<span class="lineno">  267 </span><span class="spaces"> </span><span class="istickedoff">, (&quot;union&quot;,      Op_union,         Obj_Obj_Obj union)</span>
+<span class="lineno">  268 </span><span class="spaces"> </span><span class="istickedoff">, (&quot;uscale&quot;,     Op_uscale,       Obj_Real_Obj (\ o r -&gt; uscale r o))</span>
+<span class="lineno">  269 </span><span class="spaces"> </span><span class="istickedoff">]</span></span>
+<span class="lineno">  270 </span>
+<span class="lineno">  271 </span>-- This enumerate all possible ways of calling the fixed primitives
+<span class="lineno">  272 </span>
+<span class="lineno">  273 </span>-- The datatype captures the type at the *interp* level,
+<span class="lineno">  274 </span>-- the type of the functional is mirrored on this (using Haskell types).
+<span class="lineno">  275 </span>
+<span class="lineno">  276 </span>data PrimOp
+<span class="lineno">  277 </span>
+<span class="lineno">  278 </span>    -- 1 argument 
+<span class="lineno">  279 </span>    = Int_Int         (Int -&gt; Int)
+<span class="lineno">  280 </span>    | Real_Real       (Double -&gt; Double)
+<span class="lineno">  281 </span>    | Point_Real      (Double -&gt; Double -&gt; Double -&gt; Double)
+<span class="lineno">  282 </span>    | Surface_Obj     (SurfaceFn Color Double -&gt; Object)
+<span class="lineno">  283 </span>    | Real_Int        (Double -&gt; Int)
+<span class="lineno">  284 </span>    | Int_Real        (Int -&gt; Double)
+<span class="lineno">  285 </span>    | Arr_Int         (Array Int GMLValue -&gt; Int)
+<span class="lineno">  286 </span>
+<span class="lineno">  287 </span>    -- 2 arguments 
+<span class="lineno">  288 </span>    | Int_Int_Int     (Int -&gt; Int -&gt; Int)
+<span class="lineno">  289 </span>    | Int_Int_Bool    (Int -&gt; Int -&gt; Bool)
+<span class="lineno">  290 </span>    | Real_Real_Real  (Double -&gt; Double -&gt; Double)
+<span class="lineno">  291 </span>    | Real_Real_Bool  (Double -&gt; Double -&gt; Bool)
+<span class="lineno">  292 </span>    | Arr_Int_Value   (Array Int GMLValue -&gt; Int -&gt; GMLValue)
+<span class="lineno">  293 </span>
+<span class="lineno">  294 </span>    -- Many arguments, typically image mangling
+<span class="lineno">  295 </span>
+<span class="lineno">  296 </span>    | Obj_Obj_Obj            (Object -&gt; Object -&gt; Object)
+<span class="lineno">  297 </span>    | Point_Color_Light      (Coords -&gt; Color -&gt; Light)
+<span class="lineno">  298 </span>    | Real_Real_Real_Point   (Double -&gt; Double -&gt; Double -&gt; GMLValue)
+<span class="lineno">  299 </span>    | Obj_Real_Obj           (Object -&gt; Double -&gt; Object)
+<span class="lineno">  300 </span>    | Obj_Real_Real_Real_Obj (Object -&gt; Double -&gt; Double -&gt; Double -&gt; Object)
+<span class="lineno">  301 </span>    | Value_String_Value     (GMLValue -&gt; String -&gt; GMLValue)
+<span class="lineno">  302 </span>
+<span class="lineno">  303 </span>    | Point_Point_Color_Real_Real_Light 
+<span class="lineno">  304 </span>                             (Coords -&gt; Coords -&gt; Color -&gt; Radian -&gt; Radian -&gt; Light)
+<span class="lineno">  305 </span>    -- And finally render
+<span class="lineno">  306 </span>    | Render                 (Color -&gt; [Light] -&gt; Object -&gt; Int -&gt; Double -&gt; Int -&gt; Int -&gt; String -&gt; IO ())
+<span class="lineno">  307 </span>
+<span class="lineno">  308 </span>data Type 
+<span class="lineno">  309 </span>    = TyBool 
+<span class="lineno">  310 </span>    | TyInt 
+<span class="lineno">  311 </span>    | TyReal 
+<span class="lineno">  312 </span>    | TyString 
+<span class="lineno">  313 </span>    | TyCode 
+<span class="lineno">  314 </span>    | TyArray 
+<span class="lineno">  315 </span>    | TyPoint 
+<span class="lineno">  316 </span>    | TyObject 
+<span class="lineno">  317 </span>    | TyLight
+<span class="lineno">  318 </span>    | TyAlpha
+<span class="lineno">  319 </span>    | TyAbsObj
+<span class="lineno">  320 </span>      deriving (<span class="decl"><span class="nottickedoff"><span class="decl"><span class="nottickedoff">Eq</span></span></span></span>,<span class="nottickedoff"><span class="decl"><span class="nottickedoff">Ord</span></span></span>,<span class="decl"><span class="nottickedoff"><span class="decl"><span class="nottickedoff"><span class="decl"><span class="nottickedoff">Ix</span></span></span></span></span></span>,<span class="decl"><span class="nottickedoff"><span class="decl"><span class="nottickedoff">Bounded</span></span></span></span>)
+<span class="lineno">  321 </span>
+<span class="lineno">  322 </span><span class="decl"><span class="nottickedoff">typeTable = </span>
+<span class="lineno">  323 </span><span class="spaces">  </span><span class="nottickedoff">[ ( TyBool,   &quot;Bool&quot;)</span>
+<span class="lineno">  324 </span><span class="spaces">  </span><span class="nottickedoff">, ( TyInt,    &quot;Int&quot;)</span>
+<span class="lineno">  325 </span><span class="spaces">  </span><span class="nottickedoff">, ( TyReal,   &quot;Real&quot;)</span>
+<span class="lineno">  326 </span><span class="spaces">  </span><span class="nottickedoff">, ( TyString, &quot;String&quot;)</span>
+<span class="lineno">  327 </span><span class="spaces">  </span><span class="nottickedoff">, ( TyCode,   &quot;Code&quot;)</span>
+<span class="lineno">  328 </span><span class="spaces">  </span><span class="nottickedoff">, ( TyArray,  &quot;Array&quot;)</span>
+<span class="lineno">  329 </span><span class="spaces">  </span><span class="nottickedoff">, ( TyPoint,  &quot;Point&quot;)</span>
+<span class="lineno">  330 </span><span class="spaces">  </span><span class="nottickedoff">, ( TyObject, &quot;Object&quot;)</span>
+<span class="lineno">  331 </span><span class="spaces">  </span><span class="nottickedoff">, ( TyLight,  &quot;Light&quot;)</span>
+<span class="lineno">  332 </span><span class="spaces">  </span><span class="nottickedoff">, ( TyAlpha,  &quot;&lt;anything&gt;&quot;)</span>
+<span class="lineno">  333 </span><span class="spaces">  </span><span class="nottickedoff">, ( TyAbsObj, &quot;&lt;abs&gt;&quot;)</span>
+<span class="lineno">  334 </span><span class="spaces">  </span><span class="nottickedoff">]</span></span>
+<span class="lineno">  335 </span>
+<span class="lineno">  336 </span><span class="decl"><span class="nottickedoff">typeNames = array (minBound,maxBound) typeTable</span></span>
+<span class="lineno">  337 </span>
+<span class="lineno">  338 </span>instance Show Type where
+<span class="lineno">  339 </span>   <span class="decl"><span class="nottickedoff">showsPrec _ op = showString (typeNames ! op)</span></span>
+<span class="lineno">  340 </span>
+<span class="lineno">  341 </span>getPrimOpType :: PrimOp -&gt; [Type]
+<span class="lineno">  342 </span><span class="decl"><span class="nottickedoff">getPrimOpType (Int_Int         _) = [TyInt]</span>
+<span class="lineno">  343 </span><span class="spaces"></span><span class="nottickedoff">getPrimOpType (Real_Real       _) = [TyReal]</span>
+<span class="lineno">  344 </span><span class="spaces"></span><span class="nottickedoff">getPrimOpType (Point_Real      _) = [TyPoint]</span>
+<span class="lineno">  345 </span><span class="spaces"></span><span class="nottickedoff">getPrimOpType (Surface_Obj     _) = [TyCode]</span>
+<span class="lineno">  346 </span><span class="spaces"></span><span class="nottickedoff">getPrimOpType (Real_Int        _) = [TyReal]</span>
+<span class="lineno">  347 </span><span class="spaces"></span><span class="nottickedoff">getPrimOpType (Int_Real        _) = [TyInt]</span>
+<span class="lineno">  348 </span><span class="spaces"></span><span class="nottickedoff">getPrimOpType (Arr_Int         _) = [TyArray]</span>
+<span class="lineno">  349 </span><span class="spaces"></span><span class="nottickedoff">getPrimOpType (Int_Int_Int     _) = [TyInt,TyInt]</span>
+<span class="lineno">  350 </span><span class="spaces"></span><span class="nottickedoff">getPrimOpType (Int_Int_Bool    _) = [TyInt,TyInt]</span>
+<span class="lineno">  351 </span><span class="spaces"></span><span class="nottickedoff">getPrimOpType (Real_Real_Real  _) = [TyReal,TyReal]</span>
+<span class="lineno">  352 </span><span class="spaces"></span><span class="nottickedoff">getPrimOpType (Real_Real_Bool  _) = [TyReal,TyReal]</span>
+<span class="lineno">  353 </span><span class="spaces"></span><span class="nottickedoff">getPrimOpType (Arr_Int_Value   _) = [TyArray,TyInt]</span>
+<span class="lineno">  354 </span><span class="spaces"></span><span class="nottickedoff">getPrimOpType (Obj_Obj_Obj            _) = [TyObject,TyObject]</span>
+<span class="lineno">  355 </span><span class="spaces"></span><span class="nottickedoff">getPrimOpType (Point_Color_Light      _) = [TyPoint,TyPoint]</span>
+<span class="lineno">  356 </span><span class="spaces"></span><span class="nottickedoff">getPrimOpType (Real_Real_Real_Point   _) = [TyReal,TyReal,TyReal]</span>
+<span class="lineno">  357 </span><span class="spaces"></span><span class="nottickedoff">getPrimOpType (Obj_Real_Obj           _) = [TyObject,TyReal]</span>
+<span class="lineno">  358 </span><span class="spaces"></span><span class="nottickedoff">getPrimOpType (Obj_Real_Real_Real_Obj _) = [TyObject,TyReal,TyReal,TyReal]</span>
+<span class="lineno">  359 </span><span class="spaces"></span><span class="nottickedoff">getPrimOpType (Value_String_Value     _) = [TyAlpha,TyString]</span>
+<span class="lineno">  360 </span><span class="spaces"></span><span class="nottickedoff">getPrimOpType (Point_Point_Color_Real_Real_Light _) </span>
+<span class="lineno">  361 </span><span class="spaces">                                         </span><span class="nottickedoff">= [TyPoint,TyPoint,TyPoint,TyReal,TyReal]</span>
+<span class="lineno">  362 </span><span class="spaces"></span><span class="nottickedoff">getPrimOpType (Render                 _) = [TyPoint,</span>
+<span class="lineno">  363 </span><span class="spaces">                                            </span><span class="nottickedoff">TyLight,</span>
+<span class="lineno">  364 </span><span class="spaces">                                            </span><span class="nottickedoff">TyObject,</span>
+<span class="lineno">  365 </span><span class="spaces">                                            </span><span class="nottickedoff">TyInt,</span>
+<span class="lineno">  366 </span><span class="spaces">                                            </span><span class="nottickedoff">TyReal,</span>
+<span class="lineno">  367 </span><span class="spaces">                                            </span><span class="nottickedoff">TyReal,</span>
+<span class="lineno">  368 </span><span class="spaces">                                            </span><span class="nottickedoff">TyReal,</span>
+<span class="lineno">  369 </span><span class="spaces">                                            </span><span class="nottickedoff">TyString]</span></span>
+<span class="lineno">  370 </span>
+<span class="lineno">  371 </span>
+<span class="lineno">  372 </span>-- Some primitives with better error message
+<span class="lineno">  373 </span>
+<span class="lineno">  374 </span><span class="decl"><span class="nottickedoff">mytrace v s = trace (s ++&quot; : &quot;++ show v ++ &quot;\n&quot;) v</span></span>
+<span class="lineno">  375 </span>
+<span class="lineno">  376 </span>
+<span class="lineno">  377 </span>ixGet :: Array Int GMLValue -&gt; Int -&gt; GMLValue
+<span class="lineno">  378 </span><span class="decl"><span class="istickedoff">ixGet arr i</span>
+<span class="lineno">  379 </span><span class="spaces">   </span><span class="istickedoff">| <span class="tickonlytrue">inRange (bounds arr) i</span> = arr ! i</span>
+<span class="lineno">  380 </span><span class="spaces">   </span><span class="istickedoff">| <span class="nottickedoff">otherwise</span> = <span class="nottickedoff">error (&quot;failed access with index value &quot; </span></span>
+<span class="lineno">  381 </span><span class="spaces">                     </span><span class="istickedoff"><span class="nottickedoff">++ show i </span></span>
+<span class="lineno">  382 </span><span class="spaces">                     </span><span class="istickedoff"><span class="nottickedoff">++ &quot; (should be between 0 and &quot; </span></span>
+<span class="lineno">  383 </span><span class="spaces">                     </span><span class="istickedoff"><span class="nottickedoff">++ show (snd (bounds arr)) ++ &quot;)&quot;)</span></span></span>
+<span class="lineno">  384 </span>
+<span class="lineno">  385 </span>ourQuot :: Int -&gt; Int -&gt; Int
+<span class="lineno">  386 </span><span class="decl"><span class="nottickedoff">ourQuot _ 0 = error &quot;attempt to use divi to divide by 0&quot;</span>
+<span class="lineno">  387 </span><span class="spaces"></span><span class="nottickedoff">ourQuot a b = a `quot` b</span></span>
+<span class="lineno">  388 </span>
+<span class="lineno">  389 </span>ourRem :: Int -&gt; Int -&gt; Int
+<span class="lineno">  390 </span><span class="decl"><span class="istickedoff">ourRem _ 0 = <span class="nottickedoff">error &quot;attempt to use remi to divide by 0&quot;</span></span>
+<span class="lineno">  391 </span><span class="spaces"></span><span class="istickedoff">ourRem a b = a `rem` b</span></span>
+<span class="lineno">  392 </span>
+<span class="lineno">  393 </span>ourSqrt :: Double -&gt; Double
+<span class="lineno">  394 </span><span class="decl"><span class="nottickedoff">ourSqrt n | n &lt; 0     = error &quot;attempt to use sqrt on a negative number&quot;</span>
+<span class="lineno">  395 </span><span class="spaces">          </span><span class="nottickedoff">| otherwise = sqrt n</span></span>
+<span class="lineno">  396 </span>
+<span class="lineno">  397 </span>
+<span class="lineno">  398 </span><span class="decl"><span class="nottickedoff">mySpotlight p1 p2 col cutoff exp = spotlight p1 p2 col (deg2rad cutoff) exp</span></span>
+<span class="lineno">  399 </span>
+<span class="lineno">  400 </span>-- The problem specification gets the mapping for spheres backwards
+<span class="lineno">  401 </span>-- (it maps the image from right to left).
+<span class="lineno">  402 </span>-- We've fixed that in the raytracing library so that it goes from left
+<span class="lineno">  403 </span>-- to right, but to keep the GML front compatible with the problem
+<span class="lineno">  404 </span>-- statement, we reverse it here.
+<span class="lineno">  405 </span>
+<span class="lineno">  406 </span>sphere' :: SurfaceFn Color Double -&gt; CSG (SurfaceFn Color Double)
+<span class="lineno">  407 </span><span class="decl"><span class="nottickedoff">sphere' (SFun f) = sphere (SFun (\i u v -&gt; f i (1 - u) v))</span>
+<span class="lineno">  408 </span><span class="spaces"></span><span class="nottickedoff">sphere' s = sphere s</span></span>
+
+</pre>
+</html>
+Writing: Illumination.hs.html
+<html><style type="text/css">
+span.lineno { color: white; background: #aaaaaa; border-right: solid white 12px }
+span.nottickedoff { background: yellow}
+span.istickedoff { background: white }
+span.tickonlyfalse { margin: -1px; border: 1px solid #f20913; background: #f20913 }
+span.tickonlytrue  { margin: -1px; border: 1px solid #60de51; background: #60de51 }
+span.funcount { font-size: small; color: orange; z-index: 2; position: absolute; right: 20 }
+span.decl { font-weight: bold }
+span.spaces    { background: white }
+</style>
+<pre>
+<span class="lineno">    1 </span>-- Copyright (c) 2000 Galois Connections, Inc.
+<span class="lineno">    2 </span>-- All rights reserved.  This software is distributed as
+<span class="lineno">    3 </span>-- free software under the license in the file &quot;LICENSE&quot;,
+<span class="lineno">    4 </span>-- which is included in the distribution.
+<span class="lineno">    5 </span>
+<span class="lineno">    6 </span>-- Modified to use stdout (for testing)
+<span class="lineno">    7 </span>
+<span class="lineno">    8 </span>module Illumination
+<span class="lineno">    9 </span>    ( Object
+<span class="lineno">   10 </span>    , Light (..)
+<span class="lineno">   11 </span>    , light, pointlight, spotlight
+<span class="lineno">   12 </span>    , render
+<span class="lineno">   13 </span>    ) where
+<span class="lineno">   14 </span>
+<span class="lineno">   15 </span>import Array
+<span class="lineno">   16 </span>import Char(chr)
+<span class="lineno">   17 </span>import Maybe
+<span class="lineno">   18 </span>
+<span class="lineno">   19 </span>import Geometry
+<span class="lineno">   20 </span>import CSG
+<span class="lineno">   21 </span>import Surface
+<span class="lineno">   22 </span>import Misc
+<span class="lineno">   23 </span>
+<span class="lineno">   24 </span>type Object = CSG (SurfaceFn Color Double)
+<span class="lineno">   25 </span>
+<span class="lineno">   26 </span>data Cxt = Cxt {ambient::Color, lights::[Light], object::Object, depth::Int}
+<span class="lineno">   27 </span>        deriving <span class="decl"><span class="nottickedoff"><span class="decl"><span class="nottickedoff">Show</span></span></span></span>
+<span class="lineno">   28 </span>
+<span class="lineno">   29 </span>render :: (Matrix,Matrix) -&gt; Color -&gt; [Light] -&gt; Object -&gt; Int -&gt;
+<span class="lineno">   30 </span>          Radian -&gt; Int -&gt; Int -&gt; String -&gt; IO ()
+<span class="lineno">   31 </span><span class="decl"><span class="istickedoff">render (m,m') amb ls obj dep fov wid ht file</span>
+<span class="lineno">   32 </span><span class="spaces">  </span><span class="istickedoff">= do { debugging</span>
+<span class="lineno">   33 </span><span class="spaces">       </span><span class="istickedoff">; txt &lt;- readFile &quot;galois.sample&quot;</span>
+<span class="lineno">   34 </span><span class="spaces">       </span><span class="istickedoff">; let vals = read txt</span>
+<span class="lineno">   35 </span><span class="spaces">       </span><span class="istickedoff">; let rt_vals = showBitmap' <span class="nottickedoff">wid</span> <span class="nottickedoff">ht</span> pixels</span>
+<span class="lineno">   36 </span><span class="spaces">       </span><span class="istickedoff">; if <span class="tickonlyfalse">length vals /= length rt_vals</span></span>
+<span class="lineno">   37 </span><span class="spaces">           </span><span class="istickedoff">then <span class="nottickedoff">print (&quot;BAD LENGTH&quot;,length vals,length rt_vals)</span></span>
+<span class="lineno">   38 </span><span class="spaces">           </span><span class="istickedoff">else do {</span>
+<span class="lineno">   39 </span><span class="spaces">                   </span><span class="istickedoff">; let cmp = sum(zipWith (\ a b -&gt; abs (a - b) * abs (a - b)) vals rt_vals)</span>
+<span class="lineno">   40 </span><span class="spaces">                   </span><span class="istickedoff">; print $ if <span class="tickonlytrue">cmp &lt;= (length vals * 16)</span> then (&quot;GOOD MATCH&quot;) else <span class="nottickedoff">(&quot;BAD MATCH:&quot; ++ show cmp)</span></span>
+<span class="lineno">   41 </span><span class="spaces">                   </span><span class="istickedoff">}}</span>
+<span class="lineno">   42 </span><span class="spaces">                   </span><span class="istickedoff"></span>
+<span class="lineno">   43 </span><span class="spaces">  </span><span class="istickedoff">where</span>
+<span class="lineno">   44 </span><span class="spaces">    </span><span class="istickedoff">debugging = return <span class="nottickedoff">()</span></span>
+<span class="lineno">   45 </span><span class="spaces"></span><span class="istickedoff">{-</span>
+<span class="lineno">   46 </span><span class="spaces">                </span><span class="istickedoff">do { putStrLn (show cxt)</span>
+<span class="lineno">   47 </span><span class="spaces">                   </span><span class="istickedoff">; putStrLn (show (width, delta, aspect, left, top))</span>
+<span class="lineno">   48 </span><span class="spaces">                   </span><span class="istickedoff">}</span>
+<span class="lineno">   49 </span><span class="spaces"></span><span class="istickedoff">-}</span>
+<span class="lineno">   50 </span><span class="spaces">    </span><span class="istickedoff">obj' = transform (m',m) obj</span>
+<span class="lineno">   51 </span><span class="spaces">    </span><span class="istickedoff">ls'  = [ transformLight m' l | l &lt;- ls ]</span>
+<span class="lineno">   52 </span><span class="spaces">    </span><span class="istickedoff"><span class="nottickedoff">pixelA = listArray ((1,1), (ht,wid))</span></span>
+<span class="lineno">   53 </span><span class="spaces">                       </span><span class="istickedoff"><span class="nottickedoff">[ illumination cxt (start,pixel i j)</span></span>
+<span class="lineno">   54 </span><span class="spaces">                       </span><span class="istickedoff"><span class="nottickedoff">| j &lt;- take ht  [0.5..]</span></span>
+<span class="lineno">   55 </span><span class="spaces">                       </span><span class="istickedoff"><span class="nottickedoff">, i &lt;- take wid [0.5..] ]</span></span>
+<span class="lineno">   56 </span><span class="spaces">    </span><span class="istickedoff"><span class="nottickedoff">antiA  = pixelA //</span></span>
+<span class="lineno">   57 </span><span class="spaces">             </span><span class="istickedoff"><span class="nottickedoff">[ (ix, superSample ix (pixelA ! ix))</span></span>
+<span class="lineno">   58 </span><span class="spaces">             </span><span class="istickedoff"><span class="nottickedoff">| j &lt;- [2 .. ht - 1], i &lt;- [2 .. wid - 1]</span></span>
+<span class="lineno">   59 </span><span class="spaces">             </span><span class="istickedoff"><span class="nottickedoff">, let ix = (j, i)</span></span>
+<span class="lineno">   60 </span><span class="spaces">             </span><span class="istickedoff"><span class="nottickedoff">, contrast ix pixelA ]</span></span>
+<span class="lineno">   61 </span><span class="spaces">    </span><span class="istickedoff">pixels = [ [ illumination cxt (start,pixel i j) | i&lt;- take wid [0.5..] ]</span>
+<span class="lineno">   62 </span><span class="spaces">             </span><span class="istickedoff">| j &lt;- take ht [0.5..]</span>
+<span class="lineno">   63 </span><span class="spaces">             </span><span class="istickedoff">]</span>
+<span class="lineno">   64 </span><span class="spaces">    </span><span class="istickedoff">cxt    = Cxt {ambient=amb, lights=ls',  object=obj', depth=dep}</span>
+<span class="lineno">   65 </span><span class="spaces">    </span><span class="istickedoff">start  = point  0 0 (-1)</span>
+<span class="lineno">   66 </span><span class="spaces">    </span><span class="istickedoff">width  = 2 * tan (fov/2)</span>
+<span class="lineno">   67 </span><span class="spaces">    </span><span class="istickedoff">delta  = width / fromIntegral wid</span>
+<span class="lineno">   68 </span><span class="spaces">    </span><span class="istickedoff">aspect = fromIntegral ht / fromIntegral wid</span>
+<span class="lineno">   69 </span><span class="spaces">    </span><span class="istickedoff">left   = - width / 2</span>
+<span class="lineno">   70 </span><span class="spaces">    </span><span class="istickedoff">top    = - left * aspect</span>
+<span class="lineno">   71 </span><span class="spaces">    </span><span class="istickedoff">pixel i j = vector (left + i*delta) (top - j*delta) 1</span>
+<span class="lineno">   72 </span><span class="spaces"></span><span class="istickedoff"></span>
+<span class="lineno">   73 </span><span class="spaces">    </span><span class="istickedoff"><span class="nottickedoff">superSample (y, x) col = avg $ col:</span></span>
+<span class="lineno">   74 </span><span class="spaces">      </span><span class="istickedoff"><span class="nottickedoff">[ illumination cxt (start, pixel (fromIntegral x - 0.5 + xd) (fromIntegral y - 0.5 + yd))</span></span>
+<span class="lineno">   75 </span><span class="spaces">      </span><span class="istickedoff"><span class="nottickedoff">| (xd, yd) &lt;- [(-0.333, 0.0), (0.333, 0.0), (0.0, -0.333), (0.0, 0.333)]</span></span>
+<span class="lineno">   76 </span><span class="spaces">      </span><span class="istickedoff"><span class="nottickedoff">]</span></span></span> 
+<span class="lineno">   77 </span>
+<span class="lineno">   78 </span><span class="decl"><span class="nottickedoff">avg cs = divN (fromIntegral (length cs)) (uncolor (sumCC cs))</span>
+<span class="lineno">   79 </span><span class="spaces">  </span><span class="nottickedoff">where divN n (r,g,b) = color (r / n) (g / n) (b / n)</span></span>
+<span class="lineno">   80 </span>
+<span class="lineno">   81 </span>contrast :: (Int, Int) -&gt; Array (Int, Int) Color -&gt; Bool
+<span class="lineno">   82 </span><span class="decl"><span class="nottickedoff">contrast (x, y) arr = any diffMax [ subCC cur (arr ! (x + xd, y + yd))</span>
+<span class="lineno">   83 </span><span class="spaces">                                  </span><span class="nottickedoff">| xd &lt;- [-1, 1], yd &lt;- [-1, 1]</span>
+<span class="lineno">   84 </span><span class="spaces">                                  </span><span class="nottickedoff">]</span>
+<span class="lineno">   85 </span><span class="spaces">  </span><span class="nottickedoff">where cur = arr ! (x, y)</span>
+<span class="lineno">   86 </span><span class="spaces">        </span><span class="nottickedoff">diffMax col = (abs r) &gt; 0.25 || (abs g) &gt;  0.2 || (abs b) &gt; 0.4</span>
+<span class="lineno">   87 </span><span class="spaces">           </span><span class="nottickedoff">where</span>
+<span class="lineno">   88 </span><span class="spaces">                 </span><span class="nottickedoff">(r,g,b) = uncolor col</span></span>
+<span class="lineno">   89 </span>
+<span class="lineno">   90 </span>
+<span class="lineno">   91 </span>illumination :: Cxt -&gt; Ray -&gt; Color
+<span class="lineno">   92 </span><span class="decl"><span class="istickedoff">illumination cxt (r,v)</span>
+<span class="lineno">   93 </span><span class="spaces">  </span><span class="istickedoff">| <span class="tickonlyfalse">depth cxt &lt;= 0</span> = <span class="nottickedoff">black</span></span>
+<span class="lineno">   94 </span><span class="spaces">  </span><span class="istickedoff">| <span class="tickonlytrue">otherwise</span>     = case castRay (r,v) (object cxt) of</span>
+<span class="lineno">   95 </span><span class="spaces">                      </span><span class="istickedoff">Nothing -&gt; black</span>
+<span class="lineno">   96 </span><span class="spaces">                      </span><span class="istickedoff">Just info -&gt; illum (cxt{depth=(depth cxt)-1}) info v</span></span>
+<span class="lineno">   97 </span>
+<span class="lineno">   98 </span>illum :: Cxt -&gt; (Point,Vector,Properties Color Double) -&gt; Vector -&gt; Color
+<span class="lineno">   99 </span><span class="decl"><span class="istickedoff">illum cxt (pos,normV,(col,kd,ks,n)) v</span>
+<span class="lineno">  100 </span><span class="spaces">  </span><span class="istickedoff">= ambTerm `addCC` difTerm `addCC` spcTerm `addCC` recTerm</span>
+<span class="lineno">  101 </span><span class="spaces">  </span><span class="istickedoff">where</span>
+<span class="lineno">  102 </span><span class="spaces">    </span><span class="istickedoff">visibleLights = unobscured pos (object cxt) (lights cxt) normV</span>
+<span class="lineno">  103 </span><span class="spaces">    </span><span class="istickedoff"><span class="nottickedoff">d = depth cxt</span></span>
+<span class="lineno">  104 </span><span class="spaces">    </span><span class="istickedoff">amb = ambient cxt</span>
+<span class="lineno">  105 </span><span class="spaces">    </span><span class="istickedoff">newV = subVV v (multSV (2 * dot normV v) normV)</span>
+<span class="lineno">  106 </span><span class="spaces"></span><span class="istickedoff"></span>
+<span class="lineno">  107 </span><span class="spaces">    </span><span class="istickedoff">ambTerm = multSC kd (multCC amb col)</span>
+<span class="lineno">  108 </span><span class="spaces">    </span><span class="istickedoff">difTerm = multSC kd (sumCC [multSC (dot normV lj) (multCC intensity col)</span>
+<span class="lineno">  109 </span><span class="spaces">               </span><span class="istickedoff">|(loc,intensity) &lt;- visibleLights,</span>
+<span class="lineno">  110 </span><span class="spaces">               </span><span class="istickedoff">let lj = normalize ({- pos `subVV` -} loc)])</span>
+<span class="lineno">  111 </span><span class="spaces">    </span><span class="istickedoff">-- ZZ might want to avoid the phong, when you can...</span>
+<span class="lineno">  112 </span><span class="spaces">    </span><span class="istickedoff">spcTerm = multSC ks (sumCC [multSC ((dot normV hj) ** n ) (multCC intensity col)</span>
+<span class="lineno">  113 </span><span class="spaces">               </span><span class="istickedoff">|(loc,intensity) &lt;- visibleLights,</span>
+<span class="lineno">  114 </span><span class="spaces">               </span><span class="istickedoff">-- ZZ note this is specific to the light at infinity</span>
+<span class="lineno">  115 </span><span class="spaces">               </span><span class="istickedoff">let lj = {- pos `subVV` -} normalize loc,</span>
+<span class="lineno">  116 </span><span class="spaces">               </span><span class="istickedoff">let hj = normalize (lj `subVV` normalize v)])</span>
+<span class="lineno">  117 </span><span class="spaces">    </span><span class="istickedoff">recTerm  = if recCoeff `nearC` black then black else multCC recCoeff recRay</span>
+<span class="lineno">  118 </span><span class="spaces">    </span><span class="istickedoff">recCoeff = multSC ks col</span>
+<span class="lineno">  119 </span><span class="spaces">    </span><span class="istickedoff">recRay   = illumination cxt (pos,newV)</span></span>
+<span class="lineno">  120 </span>
+<span class="lineno">  121 </span>showBitmapA :: Int -&gt; Int -&gt; Array (Int, Int) Color -&gt; String
+<span class="lineno">  122 </span><span class="decl"><span class="nottickedoff">showBitmapA wid ht arr</span>
+<span class="lineno">  123 </span><span class="spaces">  </span><span class="nottickedoff">= header ++ concatMap scaleColor (elems arr)</span>
+<span class="lineno">  124 </span><span class="spaces">  </span><span class="nottickedoff">where</span>
+<span class="lineno">  125 </span><span class="spaces">    </span><span class="nottickedoff">scaleColor col = [scalePixel r, scalePixel g, scalePixel b]</span>
+<span class="lineno">  126 </span><span class="spaces">           </span><span class="nottickedoff">where (r,g,b) = uncolor col</span>
+<span class="lineno">  127 </span><span class="spaces">    </span><span class="nottickedoff">header = &quot;P6\n#Galois\n&quot; ++ show wid ++ &quot; &quot; ++ show ht ++ &quot;\n255\n&quot;</span></span>
+<span class="lineno">  128 </span>
+<span class="lineno">  129 </span>showBitmap :: Int -&gt; Int -&gt;[[Color]] -&gt; String
+<span class="lineno">  130 </span><span class="decl"><span class="nottickedoff">showBitmap wid ht pss</span>
+<span class="lineno">  131 </span><span class="spaces"></span><span class="nottickedoff">-- type of assert  | length pss == ht &amp;&amp; all (\ ps -&gt; length ps == wid) pss</span>
+<span class="lineno">  132 </span><span class="spaces">  </span><span class="nottickedoff">= header ++ concat [[scalePixel r,scalePixel g,scalePixel b] </span>
+<span class="lineno">  133 </span><span class="spaces">                      </span><span class="nottickedoff">| ps &lt;- pss, (r,g,b) &lt;- map uncolor ps]</span>
+<span class="lineno">  134 </span><span class="spaces">  </span><span class="nottickedoff">where</span>
+<span class="lineno">  135 </span><span class="spaces">    </span><span class="nottickedoff">header = &quot;P6\n#Galois\n&quot; ++ show wid ++ &quot; &quot; ++ show ht ++ &quot;\n255\n&quot;</span>
+<span class="lineno">  136 </span><span class="spaces"></span><span class="nottickedoff">showBitmap _ _ _ = error &quot;incorrect length of bitmap string&quot;</span></span>
+<span class="lineno">  137 </span>
+<span class="lineno">  138 </span>scalePixel :: Double -&gt; Char
+<span class="lineno">  139 </span><span class="decl"><span class="nottickedoff">scalePixel p = chr (floor (clampf p * 255))</span></span>
+<span class="lineno">  140 </span>
+<span class="lineno">  141 </span>showBitmap' :: Int -&gt; Int -&gt;[[Color]] -&gt; [Int]
+<span class="lineno">  142 </span><span class="decl"><span class="istickedoff">showBitmap' wid ht pss</span>
+<span class="lineno">  143 </span><span class="spaces"></span><span class="istickedoff">-- type of assert  | length pss == ht &amp;&amp; all (\ ps -&gt; length ps == wid) pss</span>
+<span class="lineno">  144 </span><span class="spaces">  </span><span class="istickedoff">= concat [ concat [  [scalePixel' r,scalePixel' g,scalePixel' b]</span>
+<span class="lineno">  145 </span><span class="spaces">                    </span><span class="istickedoff">| (r,g,b) &lt;- map uncolor ps]</span>
+<span class="lineno">  146 </span><span class="spaces">           </span><span class="istickedoff">| ps &lt;- pss ]</span>
+<span class="lineno">  147 </span><span class="spaces">  </span><span class="istickedoff">where</span>
+<span class="lineno">  148 </span><span class="spaces">    </span><span class="istickedoff"><span class="nottickedoff">header = &quot;P3\n#Galois\n&quot; ++ show wid ++ &quot; &quot; ++ show ht ++ &quot;\n255\n&quot;</span></span>
+<span class="lineno">  149 </span><span class="spaces"></span><span class="istickedoff">showBitmap' _ _ _ = <span class="nottickedoff">error &quot;incorrect length of bitmap string&quot;</span></span></span>
+<span class="lineno">  150 </span>
+<span class="lineno">  151 </span>scalePixel' :: Double -&gt; Int
+<span class="lineno">  152 </span><span class="decl"><span class="istickedoff">scalePixel' p = floor (clampf p * 255)</span></span>
+<span class="lineno">  153 </span>
+<span class="lineno">  154 </span>-- Lights
+<span class="lineno">  155 </span>
+<span class="lineno">  156 </span>data Light = Light Vector Color
+<span class="lineno">  157 </span>           | PointLight Point Color 
+<span class="lineno">  158 </span>           | SpotLight Point Point Color Radian Double
+<span class="lineno">  159 </span>   deriving <span class="decl"><span class="nottickedoff"><span class="decl"><span class="nottickedoff">Show</span></span></span></span>
+<span class="lineno">  160 </span>
+<span class="lineno">  161 </span>light :: Coords -&gt; Color -&gt; Light
+<span class="lineno">  162 </span><span class="decl"><span class="istickedoff">light (x,y,z) color =</span>
+<span class="lineno">  163 </span><span class="spaces">  </span><span class="istickedoff">Light (normalize (vector (-x) (-y) (-z))) color</span></span>
+<span class="lineno">  164 </span><span class="decl"><span class="nottickedoff">pointlight (x,y,z) color =</span>
+<span class="lineno">  165 </span><span class="spaces">  </span><span class="nottickedoff">PointLight (point x y z) color</span></span>
+<span class="lineno">  166 </span><span class="decl"><span class="nottickedoff">spotlight (x,y,z) (p,q,r) col cutoff exp =</span>
+<span class="lineno">  167 </span><span class="spaces">  </span><span class="nottickedoff">SpotLight (point x y z) (point p q r) col cutoff exp</span></span>
+<span class="lineno">  168 </span>
+<span class="lineno">  169 </span><span class="decl"><span class="istickedoff">transformLight m (Light v c) = Light (multMV m v) c</span>
+<span class="lineno">  170 </span><span class="spaces"></span><span class="istickedoff">transformLight m (PointLight p c) = <span class="nottickedoff">PointLight (multMP m p) c</span></span>
+<span class="lineno">  171 </span><span class="spaces"></span><span class="istickedoff">transformLight m (SpotLight p q c r d) = <span class="nottickedoff">SpotLight (multMP m p) (multMP m q) c r d</span></span></span>
+<span class="lineno">  172 </span>
+<span class="lineno">  173 </span>unobscured :: Point -&gt; Object -&gt; [Light] -&gt;  Vector -&gt; [(Vector,Color)]
+<span class="lineno">  174 </span><span class="decl"><span class="istickedoff">unobscured pos obj lights normV = catMaybes (map (unobscure pos obj normV) lights)</span></span>
+<span class="lineno">  175 </span>
+<span class="lineno">  176 </span>unobscure :: Point -&gt; Object -&gt; Vector -&gt;  Light -&gt; Maybe (Vector,Color)
+<span class="lineno">  177 </span><span class="decl"><span class="istickedoff">unobscure pos obj normV (Light vec color)</span>
+<span class="lineno">  178 </span><span class="spaces">  </span><span class="istickedoff">-- ZZ probably want to make this faster</span>
+<span class="lineno">  179 </span><span class="spaces">  </span><span class="istickedoff">| vec `dot` normV &lt; 0 = Nothing</span>
+<span class="lineno">  180 </span><span class="spaces">  </span><span class="istickedoff">| intersects (pos `addPV` (0.0001 `multSV` vec),vec) obj = Nothing</span>
+<span class="lineno">  181 </span><span class="spaces">  </span><span class="istickedoff">| <span class="tickonlytrue">otherwise</span>               = Just (vec,color)</span>
+<span class="lineno">  182 </span><span class="spaces"></span><span class="istickedoff">unobscure pos obj normV (PointLight pp color)</span>
+<span class="lineno">  183 </span><span class="spaces">  </span><span class="istickedoff">| <span class="nottickedoff">vec `dot` normV &lt; 0</span>     = <span class="nottickedoff">Nothing</span></span>
+<span class="lineno">  184 </span><span class="spaces">  </span><span class="istickedoff">| <span class="nottickedoff">intersectWithin (pos `addPV` (0.0001 `multSV` (normalize vec)), vec) obj</span> = <span class="nottickedoff">Nothing</span></span>
+<span class="lineno">  185 </span><span class="spaces">  </span><span class="istickedoff">| <span class="nottickedoff">otherwise</span>               = <span class="nottickedoff">Just (vec,is)</span></span>
+<span class="lineno">  186 </span><span class="spaces">      </span><span class="istickedoff">where <span class="nottickedoff">vec = pp `subPP` pos</span></span>
+<span class="lineno">  187 </span><span class="spaces">            </span><span class="istickedoff"><span class="nottickedoff">is  = attenuate vec color</span></span>
+<span class="lineno">  188 </span><span class="spaces"></span><span class="istickedoff">unobscure org obj normV (SpotLight pos at color cutoff exp)</span>
+<span class="lineno">  189 </span><span class="spaces">  </span><span class="istickedoff">| <span class="nottickedoff">vec `dot` normV &lt; 0</span>                                                 = <span class="nottickedoff">Nothing</span></span>
+<span class="lineno">  190 </span><span class="spaces">  </span><span class="istickedoff">| <span class="nottickedoff">intersectWithin (org `addPV` (0.0001 `multSV` (normalize vec)), vec) obj</span> = <span class="nottickedoff">Nothing</span></span>
+<span class="lineno">  191 </span><span class="spaces">  </span><span class="istickedoff">| <span class="nottickedoff">angle &gt; cutoff</span>                                                      = <span class="nottickedoff">Nothing</span></span>
+<span class="lineno">  192 </span><span class="spaces">  </span><span class="istickedoff">| <span class="nottickedoff">otherwise</span>                                                           = <span class="nottickedoff">Just (vec, is)</span></span>
+<span class="lineno">  193 </span><span class="spaces">      </span><span class="istickedoff">where <span class="nottickedoff">vec   = pos `subPP` org</span></span>
+<span class="lineno">  194 </span><span class="spaces">            </span><span class="istickedoff"><span class="nottickedoff">vec'  = pos `subPP` at</span></span>
+<span class="lineno">  195 </span><span class="spaces">            </span><span class="istickedoff"><span class="nottickedoff">angle = acos (normalize vec `dot` (normalize vec'))</span></span>
+<span class="lineno">  196 </span><span class="spaces"></span><span class="istickedoff"></span>
+<span class="lineno">  197 </span><span class="spaces">            </span><span class="istickedoff"><span class="nottickedoff">asp   = normalize (at `subPP` pos)</span>            </span>
+<span class="lineno">  198 </span><span class="spaces">            </span><span class="istickedoff"><span class="nottickedoff">qsp   = normalize (org `subPP` pos)</span></span>
+<span class="lineno">  199 </span><span class="spaces">            </span><span class="istickedoff"><span class="nottickedoff">is    = attenuate vec (((asp `dot` qsp) ** exp) `multSC` color)</span></span></span>
+<span class="lineno">  200 </span>
+<span class="lineno">  201 </span>attenuate :: Vector -&gt; Color -&gt; Color
+<span class="lineno">  202 </span><span class="decl"><span class="nottickedoff">attenuate vec color = (100 / (99 + sq (norm vec))) `multSC` color</span></span>
+<span class="lineno">  203 </span>
+<span class="lineno">  204 </span>--
+<span class="lineno">  205 </span>
+<span class="lineno">  206 </span><span class="decl"><span class="istickedoff">castRay ray p</span>
+<span class="lineno">  207 </span><span class="spaces">  </span><span class="istickedoff">= case intersectRayWithObject ray p of</span>
+<span class="lineno">  208 </span><span class="spaces">    </span><span class="istickedoff">(True, _, _)                     -&gt; <span class="nottickedoff">Nothing</span> -- eye is inside</span>
+<span class="lineno">  209 </span><span class="spaces">    </span><span class="istickedoff">(False, [], _)                   -&gt; Nothing -- eye is inside</span>
+<span class="lineno">  210 </span><span class="spaces">    </span><span class="istickedoff">(False, (0, b, _) : _, _)        -&gt; <span class="nottickedoff">Nothing</span> -- eye is inside</span>
+<span class="lineno">  211 </span><span class="spaces">    </span><span class="istickedoff">(False, (i, False, _) : _, _)    -&gt; <span class="nottickedoff">Nothing</span> -- eye is inside</span>
+<span class="lineno">  212 </span><span class="spaces">    </span><span class="istickedoff">(False, (t, b, (s, p0)) : _, _)     -&gt;</span>
+<span class="lineno">  213 </span><span class="spaces">        </span><span class="istickedoff">let (v, prop) = surface s p0 in</span>
+<span class="lineno">  214 </span><span class="spaces">            </span><span class="istickedoff">Just (offsetToPoint ray t, v, prop)</span></span>
+<span class="lineno">  215 </span>
+<span class="lineno">  216 </span><span class="decl"><span class="istickedoff">intersects ray p</span>
+<span class="lineno">  217 </span><span class="spaces">  </span><span class="istickedoff">= case intersectRayWithObject ray p of</span>
+<span class="lineno">  218 </span><span class="spaces">    </span><span class="istickedoff">(True, _, _)                  -&gt; <span class="nottickedoff">False</span></span>
+<span class="lineno">  219 </span><span class="spaces">    </span><span class="istickedoff">(False, [], _)                -&gt; False</span>
+<span class="lineno">  220 </span><span class="spaces">    </span><span class="istickedoff">(False, (0, b, _) : _, _)     -&gt; <span class="nottickedoff">False</span></span>
+<span class="lineno">  221 </span><span class="spaces">    </span><span class="istickedoff">(False, (i, False, _) : _, _) -&gt; <span class="nottickedoff">False</span></span>
+<span class="lineno">  222 </span><span class="spaces">    </span><span class="istickedoff">(False, (i, b, _) : _, _)     -&gt; True</span></span>
+<span class="lineno">  223 </span>
+<span class="lineno">  224 </span>intersectWithin :: Ray -&gt; Object -&gt; Bool
+<span class="lineno">  225 </span><span class="decl"><span class="nottickedoff">intersectWithin ray p</span>
+<span class="lineno">  226 </span><span class="spaces">  </span><span class="nottickedoff">= case intersectRayWithObject ray p of</span>
+<span class="lineno">  227 </span><span class="spaces">    </span><span class="nottickedoff">(True, _, _)                  -&gt; False -- eye is inside</span>
+<span class="lineno">  228 </span><span class="spaces">    </span><span class="nottickedoff">(False, [], _)                -&gt; False -- eye is inside</span>
+<span class="lineno">  229 </span><span class="spaces">    </span><span class="nottickedoff">(False, (0, b, _) : _, _)     -&gt; False -- eye is inside</span>
+<span class="lineno">  230 </span><span class="spaces">    </span><span class="nottickedoff">(False, (i, False, _) : _, _) -&gt; False -- eye is inside</span>
+<span class="lineno">  231 </span><span class="spaces">    </span><span class="nottickedoff">(False, (t, b, _) : _, _)     -&gt; t &lt; 1.0</span></span>
+
+</pre>
+</html>
+Writing: Geometry.hs.html
+<html><style type="text/css">
+span.lineno { color: white; background: #aaaaaa; border-right: solid white 12px }
+span.nottickedoff { background: yellow}
+span.istickedoff { background: white }
+span.tickonlyfalse { margin: -1px; border: 1px solid #f20913; background: #f20913 }
+span.tickonlytrue  { margin: -1px; border: 1px solid #60de51; background: #60de51 }
+span.funcount { font-size: small; color: orange; z-index: 2; position: absolute; right: 20 }
+span.decl { font-weight: bold }
+span.spaces    { background: white }
+</style>
+<pre>
+<span class="lineno">    1 </span>-- Copyright (c) 2000 Galois Connections, Inc.
+<span class="lineno">    2 </span>-- All rights reserved.  This software is distributed as
+<span class="lineno">    3 </span>-- free software under the license in the file &quot;LICENSE&quot;,
+<span class="lineno">    4 </span>-- which is included in the distribution.
+<span class="lineno">    5 </span>
+<span class="lineno">    6 </span>module Geometry
+<span class="lineno">    7 </span>    ( Coords
+<span class="lineno">    8 </span>    , Ray
+<span class="lineno">    9 </span>    , Point  -- abstract
+<span class="lineno">   10 </span>    , Vector -- abstract
+<span class="lineno">   11 </span>    , Matrix -- abstract
+<span class="lineno">   12 </span>    , Color  -- abstract
+<span class="lineno">   13 </span>    , Box(..)
+<span class="lineno">   14 </span>    , Radian
+<span class="lineno">   15 </span>    , matrix
+<span class="lineno">   16 </span>    , coord
+<span class="lineno">   17 </span>    , color
+<span class="lineno">   18 </span>    , uncolor
+<span class="lineno">   19 </span>    , xCoord , yCoord , zCoord
+<span class="lineno">   20 </span>    , xComponent , yComponent , zComponent
+<span class="lineno">   21 </span>    , point
+<span class="lineno">   22 </span>    , vector
+<span class="lineno">   23 </span>    , nearV
+<span class="lineno">   24 </span>    , point_to_vector
+<span class="lineno">   25 </span>    , vector_to_point
+<span class="lineno">   26 </span>    , dot
+<span class="lineno">   27 </span>    , cross
+<span class="lineno">   28 </span>    , tangents
+<span class="lineno">   29 </span>    , addVV
+<span class="lineno">   30 </span>    , addPV
+<span class="lineno">   31 </span>    , subVV
+<span class="lineno">   32 </span>    , negV
+<span class="lineno">   33 </span>    , subPP
+<span class="lineno">   34 </span>    , norm
+<span class="lineno">   35 </span>    , normalize
+<span class="lineno">   36 </span>    , dist2
+<span class="lineno">   37 </span>    , sq
+<span class="lineno">   38 </span>    , distFrom0Sq
+<span class="lineno">   39 </span>    , distFrom0
+<span class="lineno">   40 </span>    , multSV
+<span class="lineno">   41 </span>    , multMM
+<span class="lineno">   42 </span>    , transposeM
+<span class="lineno">   43 </span>    , multMV
+<span class="lineno">   44 </span>    , multMP
+<span class="lineno">   45 </span>    , multMQ
+<span class="lineno">   46 </span>    , multMR
+<span class="lineno">   47 </span>    , white
+<span class="lineno">   48 </span>    , black
+<span class="lineno">   49 </span>    , addCC
+<span class="lineno">   50 </span>    , subCC
+<span class="lineno">   51 </span>    , sumCC
+<span class="lineno">   52 </span>    , multCC
+<span class="lineno">   53 </span>    , multSC
+<span class="lineno">   54 </span>    , nearC
+<span class="lineno">   55 </span>    , offsetToPoint
+<span class="lineno">   56 </span>    , epsilon
+<span class="lineno">   57 </span>    , inf
+<span class="lineno">   58 </span>    , nonZero
+<span class="lineno">   59 </span>    , eqEps
+<span class="lineno">   60 </span>    , near
+<span class="lineno">   61 </span>    , clampf
+<span class="lineno">   62 </span>    ) where
+<span class="lineno">   63 </span>
+<span class="lineno">   64 </span>import List 
+<span class="lineno">   65 </span>
+<span class="lineno">   66 </span>type Coords = (Double,Double,Double)
+<span class="lineno">   67 </span>
+<span class="lineno">   68 </span>type Ray = (Point,Vector)    -- origin of ray, and unit vector giving direction
+<span class="lineno">   69 </span>
+<span class="lineno">   70 </span>data Point  = P !Double !Double !Double -- implicit extra arg of 1
+<span class="lineno">   71 </span>    deriving (<span class="decl"><span class="nottickedoff"><span class="decl"><span class="nottickedoff">Show</span></span></span></span>)
+<span class="lineno">   72 </span>data Vector = V !Double !Double !Double -- implicit extra arg of 0
+<span class="lineno">   73 </span>    deriving (<span class="decl"><span class="nottickedoff"><span class="decl"><span class="nottickedoff">Show</span></span></span></span>, <span class="decl"><span class="nottickedoff"><span class="decl"><span class="nottickedoff">Eq</span></span></span></span>)
+<span class="lineno">   74 </span>data Matrix = M !Quad   !Quad   !Quad   !Quad
+<span class="lineno">   75 </span>    deriving (<span class="decl"><span class="nottickedoff"><span class="decl"><span class="nottickedoff">Show</span></span></span></span>)
+<span class="lineno">   76 </span>
+<span class="lineno">   77 </span>data Color  = C !Double !Double !Double
+<span class="lineno">   78 </span>    deriving (<span class="decl"><span class="nottickedoff"><span class="decl"><span class="nottickedoff">Show</span></span></span></span>, <span class="decl"><span class="nottickedoff"><span class="decl"><span class="nottickedoff">Eq</span></span></span></span>)
+<span class="lineno">   79 </span>
+<span class="lineno">   80 </span>data Box = B !Double !Double !Double !Double !Double !Double
+<span class="lineno">   81 </span>    deriving (<span class="decl"><span class="nottickedoff"><span class="decl"><span class="nottickedoff">Show</span></span></span></span>)
+<span class="lineno">   82 </span>
+<span class="lineno">   83 </span>data Quad   = Q !Double !Double !Double !Double
+<span class="lineno">   84 </span>    deriving (<span class="decl"><span class="nottickedoff"><span class="decl"><span class="nottickedoff">Show</span></span></span></span>)
+<span class="lineno">   85 </span>
+<span class="lineno">   86 </span>type Radian = Double
+<span class="lineno">   87 </span>
+<span class="lineno">   88 </span>type Tup4 a = (a,a,a,a)
+<span class="lineno">   89 </span>
+<span class="lineno">   90 </span>--{-# INLINE matrix #-}
+<span class="lineno">   91 </span>matrix :: Tup4 (Tup4 Double) -&gt; Matrix
+<span class="lineno">   92 </span><span class="decl"><span class="istickedoff">matrix ((m11, m12, m13, m14),</span>
+<span class="lineno">   93 </span><span class="spaces">          </span><span class="istickedoff">(m21, m22, m23, m24),</span>
+<span class="lineno">   94 </span><span class="spaces">          </span><span class="istickedoff">(m31, m32, m33, m34),</span>
+<span class="lineno">   95 </span><span class="spaces">          </span><span class="istickedoff">(m41, m42, m43, m44))</span>
+<span class="lineno">   96 </span><span class="spaces">  </span><span class="istickedoff">= M (Q m11 m12 m13 m14)</span>
+<span class="lineno">   97 </span><span class="spaces">      </span><span class="istickedoff">(Q m21 m22 m23 m24)</span>
+<span class="lineno">   98 </span><span class="spaces">      </span><span class="istickedoff">(Q m31 m32 m33 m34)</span>
+<span class="lineno">   99 </span><span class="spaces">      </span><span class="istickedoff">(Q m41 m42 m43 m44)</span></span>
+<span class="lineno">  100 </span>
+<span class="lineno">  101 </span><span class="decl"><span class="nottickedoff">coord x y z = (x, y, z)</span></span>
+<span class="lineno">  102 </span>
+<span class="lineno">  103 </span><span class="decl"><span class="istickedoff">color r g b = C r g b</span></span>
+<span class="lineno">  104 </span>
+<span class="lineno">  105 </span><span class="decl"><span class="istickedoff">uncolor (C r g b) = (r,g,b)</span></span>
+<span class="lineno">  106 </span>
+<span class="lineno">  107 </span>{-# INLINE xCoord #-}
+<span class="lineno">  108 </span><span class="decl"><span class="istickedoff">xCoord (P x y z) = x</span></span>
+<span class="lineno">  109 </span>{-# INLINE yCoord #-}
+<span class="lineno">  110 </span><span class="decl"><span class="istickedoff">yCoord (P x y z) = y</span></span>
+<span class="lineno">  111 </span>{-# INLINE zCoord #-}
+<span class="lineno">  112 </span><span class="decl"><span class="istickedoff">zCoord (P x y z) = z</span></span>
+<span class="lineno">  113 </span>
+<span class="lineno">  114 </span>{-# INLINE xComponent #-}
+<span class="lineno">  115 </span><span class="decl"><span class="istickedoff">xComponent (V x y z) = x</span></span>
+<span class="lineno">  116 </span>{-# INLINE yComponent #-}
+<span class="lineno">  117 </span><span class="decl"><span class="istickedoff">yComponent (V x y z) = y</span></span>
+<span class="lineno">  118 </span>{-# INLINE zComponent #-}
+<span class="lineno">  119 </span><span class="decl"><span class="istickedoff">zComponent (V x y z) = z</span></span>
+<span class="lineno">  120 </span>
+<span class="lineno">  121 </span>point :: Double -&gt; Double -&gt; Double -&gt; Point
+<span class="lineno">  122 </span><span class="decl"><span class="istickedoff">point x y z = P x y z</span></span>
+<span class="lineno">  123 </span>
+<span class="lineno">  124 </span>vector :: Double -&gt; Double -&gt; Double -&gt; Vector
+<span class="lineno">  125 </span><span class="decl"><span class="istickedoff">vector x y z = V x y z</span></span>
+<span class="lineno">  126 </span>
+<span class="lineno">  127 </span>nearV :: Vector -&gt; Vector -&gt; Bool
+<span class="lineno">  128 </span><span class="decl"><span class="nottickedoff">nearV (V a b c) (V d e f) = a `near` d &amp;&amp; b `near` e &amp;&amp; c `near` f</span></span>
+<span class="lineno">  129 </span>
+<span class="lineno">  130 </span>point_to_vector :: Point -&gt; Vector
+<span class="lineno">  131 </span><span class="decl"><span class="nottickedoff">point_to_vector (P x y z) = V x y z</span></span>
+<span class="lineno">  132 </span>
+<span class="lineno">  133 </span>vector_to_point :: Vector -&gt; Point
+<span class="lineno">  134 </span><span class="decl"><span class="nottickedoff">vector_to_point (V x y z)  = P x y z</span></span> 
+<span class="lineno">  135 </span>
+<span class="lineno">  136 </span>{-# INLINE vector_to_quad #-}
+<span class="lineno">  137 </span>vector_to_quad :: Vector -&gt; Quad
+<span class="lineno">  138 </span><span class="decl"><span class="istickedoff">vector_to_quad (V x y z) = Q x y z 0</span></span>
+<span class="lineno">  139 </span>
+<span class="lineno">  140 </span>{-# INLINE point_to_quad #-}
+<span class="lineno">  141 </span>point_to_quad :: Point -&gt; Quad
+<span class="lineno">  142 </span><span class="decl"><span class="istickedoff">point_to_quad (P x y z) = Q x y z 1</span></span>
+<span class="lineno">  143 </span>
+<span class="lineno">  144 </span>{-# INLINE quad_to_point #-}
+<span class="lineno">  145 </span>quad_to_point :: Quad -&gt; Point
+<span class="lineno">  146 </span><span class="decl"><span class="istickedoff">quad_to_point (Q x y z _) = P x y z</span></span>
+<span class="lineno">  147 </span>
+<span class="lineno">  148 </span>{-# INLINE quad_to_vector #-}
+<span class="lineno">  149 </span>quad_to_vector :: Quad -&gt; Vector
+<span class="lineno">  150 </span><span class="decl"><span class="istickedoff">quad_to_vector (Q x y z _) = V x y z</span></span>
+<span class="lineno">  151 </span>
+<span class="lineno">  152 </span>--{-# INLINE dot #-}
+<span class="lineno">  153 </span>dot :: Vector -&gt; Vector -&gt; Double
+<span class="lineno">  154 </span><span class="decl"><span class="istickedoff">dot (V x1 y1 z1) (V x2 y2 z2) = x1 * x2 + y1 * y2 + z1 * z2</span></span>
+<span class="lineno">  155 </span>
+<span class="lineno">  156 </span>cross :: Vector -&gt; Vector -&gt; Vector
+<span class="lineno">  157 </span><span class="decl"><span class="istickedoff">cross (V x1 y1 z1) (V x2 y2 z2)</span>
+<span class="lineno">  158 </span><span class="spaces">  </span><span class="istickedoff">= V (y1 * z2 - z1 * y2) (z1 * x2 - x1 * z2) (x1 * y2 - y1 * x2)</span></span>
+<span class="lineno">  159 </span>
+<span class="lineno">  160 </span>-- assumption: the input vector is a normal
+<span class="lineno">  161 </span>tangents :: Vector -&gt; (Vector, Vector)
+<span class="lineno">  162 </span><span class="decl"><span class="nottickedoff">tangents v@(V x y z)</span>
+<span class="lineno">  163 </span><span class="spaces">  </span><span class="nottickedoff">= (v1, v `cross` v1)</span>
+<span class="lineno">  164 </span><span class="spaces">  </span><span class="nottickedoff">where v1 | x == 0    = normalize (vector 0 z (-y))</span>
+<span class="lineno">  165 </span><span class="spaces">           </span><span class="nottickedoff">| otherwise = normalize (vector (-y) x 0)</span></span>
+<span class="lineno">  166 </span>
+<span class="lineno">  167 </span>{-# INLINE dot4 #-}
+<span class="lineno">  168 </span>dot4 :: Quad -&gt; Quad -&gt; Double
+<span class="lineno">  169 </span><span class="decl"><span class="istickedoff">dot4 (Q x1 y1 z1 w1) (Q x2 y2 z2 w2) = x1 * x2 + y1 * y2 + z1 * z2 + w1 * w2</span></span>
+<span class="lineno">  170 </span>
+<span class="lineno">  171 </span>addVV :: Vector -&gt; Vector -&gt; Vector
+<span class="lineno">  172 </span><span class="decl"><span class="nottickedoff">addVV (V x1 y1 z1) (V x2 y2 z2) </span>
+<span class="lineno">  173 </span><span class="spaces">    </span><span class="nottickedoff">= V (x1 + x2) (y1 + y2) (z1 + z2)</span></span>
+<span class="lineno">  174 </span>
+<span class="lineno">  175 </span>addPV :: Point -&gt; Vector -&gt; Point
+<span class="lineno">  176 </span><span class="decl"><span class="istickedoff">addPV (P x1 y1 z1) (V x2 y2 z2) </span>
+<span class="lineno">  177 </span><span class="spaces">    </span><span class="istickedoff">= P (x1 + x2) (y1 + y2) (z1 + z2)</span></span>
+<span class="lineno">  178 </span>
+<span class="lineno">  179 </span>subVV :: Vector -&gt; Vector -&gt; Vector
+<span class="lineno">  180 </span><span class="decl"><span class="istickedoff">subVV (V x1 y1 z1) (V x2 y2 z2) </span>
+<span class="lineno">  181 </span><span class="spaces">    </span><span class="istickedoff">= V (x1 - x2) (y1 - y2) (z1 - z2)</span></span>
+<span class="lineno">  182 </span>
+<span class="lineno">  183 </span>negV :: Vector -&gt; Vector
+<span class="lineno">  184 </span><span class="decl"><span class="nottickedoff">negV (V x1 y1 z1) </span>
+<span class="lineno">  185 </span><span class="spaces">    </span><span class="nottickedoff">= V (-x1) (-y1) (-z1)</span></span>
+<span class="lineno">  186 </span>
+<span class="lineno">  187 </span>subPP :: Point -&gt; Point -&gt; Vector
+<span class="lineno">  188 </span><span class="decl"><span class="nottickedoff">subPP (P x1 y1 z1) (P x2 y2 z2) </span>
+<span class="lineno">  189 </span><span class="spaces">    </span><span class="nottickedoff">= V (x1 - x2) (y1 - y2) (z1 - z2)</span></span>
+<span class="lineno">  190 </span>
+<span class="lineno">  191 </span>--{-# INLINE norm #-}
+<span class="lineno">  192 </span>norm :: Vector -&gt; Double
+<span class="lineno">  193 </span><span class="decl"><span class="nottickedoff">norm (V x y z) = sqrt (sq x + sq y + sq z)</span></span>
+<span class="lineno">  194 </span>
+<span class="lineno">  195 </span>--{-# INLINE normalize #-}
+<span class="lineno">  196 </span>-- normalize a vector to a unit vector
+<span class="lineno">  197 </span>normalize :: Vector -&gt; Vector
+<span class="lineno">  198 </span><span class="decl"><span class="istickedoff">normalize v@(V x y z)</span>
+<span class="lineno">  199 </span><span class="spaces">             </span><span class="istickedoff">| <span class="tickonlytrue">norm /= 0</span> = multSV (1/norm) v</span>
+<span class="lineno">  200 </span><span class="spaces">             </span><span class="istickedoff">| <span class="nottickedoff">otherwise</span> = <span class="nottickedoff">error &quot;normalize empty!&quot;</span></span>
+<span class="lineno">  201 </span><span class="spaces">    </span><span class="istickedoff">where norm = sqrt (sq x + sq y + sq z)</span></span>
+<span class="lineno">  202 </span>
+<span class="lineno">  203 </span>-- This does computes the distance *squared*
+<span class="lineno">  204 </span>dist2 :: Point -&gt; Point -&gt; Double
+<span class="lineno">  205 </span><span class="decl"><span class="nottickedoff">dist2 us vs = sq x + sq y + sq z</span>
+<span class="lineno">  206 </span><span class="spaces">    </span><span class="nottickedoff">where</span>
+<span class="lineno">  207 </span><span class="spaces">       </span><span class="nottickedoff">(V x y z) = subPP us vs</span></span>
+<span class="lineno">  208 </span>
+<span class="lineno">  209 </span>{-# INLINE sq #-}
+<span class="lineno">  210 </span>sq :: Double -&gt; Double
+<span class="lineno">  211 </span><span class="decl"><span class="istickedoff">sq d = d * d</span></span> 
+<span class="lineno">  212 </span>
+<span class="lineno">  213 </span>{-# INLINE distFrom0Sq #-}
+<span class="lineno">  214 </span>distFrom0Sq :: Point -&gt; Double  -- Distance of point from origin.
+<span class="lineno">  215 </span><span class="decl"><span class="nottickedoff">distFrom0Sq (P x y z) = sq x + sq y + sq z</span></span>
+<span class="lineno">  216 </span>
+<span class="lineno">  217 </span>{-# INLINE distFrom0 #-}
+<span class="lineno">  218 </span>distFrom0 :: Point -&gt; Double  -- Distance of point from origin.
+<span class="lineno">  219 </span><span class="decl"><span class="nottickedoff">distFrom0 p = sqrt (distFrom0Sq p)</span></span>
+<span class="lineno">  220 </span>
+<span class="lineno">  221 </span>--{-# INLINE multSV #-}
+<span class="lineno">  222 </span>multSV :: Double -&gt; Vector -&gt; Vector
+<span class="lineno">  223 </span><span class="decl"><span class="istickedoff">multSV k (V x y z) = V (k*x) (k*y) (k*z)</span></span>
+<span class="lineno">  224 </span>
+<span class="lineno">  225 </span>--{-# INLINE multMM #-}
+<span class="lineno">  226 </span>multMM :: Matrix -&gt; Matrix -&gt; Matrix
+<span class="lineno">  227 </span><span class="decl"><span class="istickedoff">multMM m1@(M q1 q2 q3 q4) m2</span>
+<span class="lineno">  228 </span><span class="spaces">     </span><span class="istickedoff">= M (multMQ m2' q1)</span>
+<span class="lineno">  229 </span><span class="spaces">         </span><span class="istickedoff">(multMQ m2' q2)</span>
+<span class="lineno">  230 </span><span class="spaces">         </span><span class="istickedoff">(multMQ m2' q3)</span>
+<span class="lineno">  231 </span><span class="spaces">         </span><span class="istickedoff">(multMQ m2' q4)</span>
+<span class="lineno">  232 </span><span class="spaces">  </span><span class="istickedoff">where</span>
+<span class="lineno">  233 </span><span class="spaces">     </span><span class="istickedoff">m2' = transposeM m2</span></span>
+<span class="lineno">  234 </span>
+<span class="lineno">  235 </span>{-# INLINE transposeM #-}     
+<span class="lineno">  236 </span>transposeM :: Matrix -&gt; Matrix
+<span class="lineno">  237 </span><span class="decl"><span class="istickedoff">transposeM (M (Q e11  e12  e13  e14)</span>
+<span class="lineno">  238 </span><span class="spaces">              </span><span class="istickedoff">(Q e21  e22  e23  e24)</span>
+<span class="lineno">  239 </span><span class="spaces">              </span><span class="istickedoff">(Q e31  e32  e33  e34)</span>
+<span class="lineno">  240 </span><span class="spaces">              </span><span class="istickedoff">(Q e41  e42  e43  e44)) = (M (Q e11  e21  e31  e41)</span>
+<span class="lineno">  241 </span><span class="spaces">                                           </span><span class="istickedoff">(Q e12  e22  e32  e42)</span>
+<span class="lineno">  242 </span><span class="spaces">                                           </span><span class="istickedoff">(Q e13  e23  e33  e43)</span>
+<span class="lineno">  243 </span><span class="spaces">                                           </span><span class="istickedoff">(Q e14  e24  e34  e44))</span></span>
+<span class="lineno">  244 </span>
+<span class="lineno">  245 </span>
+<span class="lineno">  246 </span>--multMM m1 m2 = [map (dot4 row) (transpose m2) | row &lt;- m1]
+<span class="lineno">  247 </span>
+<span class="lineno">  248 </span>--{-# INLINE multMV #-}
+<span class="lineno">  249 </span>multMV :: Matrix -&gt; Vector -&gt; Vector
+<span class="lineno">  250 </span><span class="decl"><span class="istickedoff">multMV m v = quad_to_vector (multMQ m (vector_to_quad v))</span></span>
+<span class="lineno">  251 </span>
+<span class="lineno">  252 </span>--{-# INLINE multMP #-}
+<span class="lineno">  253 </span>multMP :: Matrix -&gt; Point -&gt; Point
+<span class="lineno">  254 </span><span class="decl"><span class="istickedoff">multMP m p = quad_to_point (multMQ m (point_to_quad p))</span></span>
+<span class="lineno">  255 </span>
+<span class="lineno">  256 </span>-- mat vec = map (dot4 vec) mat
+<span class="lineno">  257 </span>
+<span class="lineno">  258 </span>{-# INLINE multMQ #-}
+<span class="lineno">  259 </span>multMQ :: Matrix -&gt; Quad -&gt; Quad
+<span class="lineno">  260 </span><span class="decl"><span class="istickedoff">multMQ (M q1 q2 q3 q4) q</span>
+<span class="lineno">  261 </span><span class="spaces">       </span><span class="istickedoff">= Q (dot4 q q1)</span>
+<span class="lineno">  262 </span><span class="spaces">           </span><span class="istickedoff">(dot4 q q2)</span>
+<span class="lineno">  263 </span><span class="spaces">           </span><span class="istickedoff">(dot4 q q3)</span>
+<span class="lineno">  264 </span><span class="spaces">           </span><span class="istickedoff">(dot4 q q4)</span></span>
+<span class="lineno">  265 </span>
+<span class="lineno">  266 </span>{-# INLINE multMR #-}
+<span class="lineno">  267 </span>multMR :: Matrix -&gt; Ray -&gt; Ray
+<span class="lineno">  268 </span><span class="decl"><span class="istickedoff">multMR m (r, v) = (multMP m r, multMV m v)</span></span>
+<span class="lineno">  269 </span>
+<span class="lineno">  270 </span>white :: Color
+<span class="lineno">  271 </span><span class="decl"><span class="nottickedoff">white = C 1 1 1</span></span>
+<span class="lineno">  272 </span>black :: Color
+<span class="lineno">  273 </span><span class="decl"><span class="istickedoff">black = C 0 0 0</span></span>
+<span class="lineno">  274 </span>
+<span class="lineno">  275 </span>addCC :: Color -&gt; Color -&gt; Color
+<span class="lineno">  276 </span><span class="decl"><span class="istickedoff">addCC (C a b c) (C d e f) = C (a+d) (b+e) (c+f)</span></span>
+<span class="lineno">  277 </span>
+<span class="lineno">  278 </span>subCC :: Color -&gt; Color -&gt; Color
+<span class="lineno">  279 </span><span class="decl"><span class="nottickedoff">subCC (C a b c) (C d e f) = C (a-d) (b-e) (c-f)</span></span>
+<span class="lineno">  280 </span>
+<span class="lineno">  281 </span>sumCC :: [Color] -&gt; Color
+<span class="lineno">  282 </span><span class="decl"><span class="istickedoff">sumCC = foldr addCC black</span></span>
+<span class="lineno">  283 </span>
+<span class="lineno">  284 </span>multCC :: Color -&gt; Color -&gt; Color
+<span class="lineno">  285 </span><span class="decl"><span class="istickedoff">multCC (C a b c) (C d e f) = C (a*d) (b*e) (c*f)</span></span>
+<span class="lineno">  286 </span>
+<span class="lineno">  287 </span>multSC :: Double -&gt; Color -&gt; Color
+<span class="lineno">  288 </span><span class="decl"><span class="istickedoff">multSC k       (C a b c) = C (a*k) (b*k) (c*k)</span></span>
+<span class="lineno">  289 </span>
+<span class="lineno">  290 </span>nearC :: Color -&gt; Color -&gt; Bool
+<span class="lineno">  291 </span><span class="decl"><span class="istickedoff">nearC (C a b c) (C d e f) = a `near` d &amp;&amp; b `near` e &amp;&amp; c `near` f</span></span>
+<span class="lineno">  292 </span>
+<span class="lineno">  293 </span>offsetToPoint :: Ray -&gt; Double -&gt; Point
+<span class="lineno">  294 </span><span class="decl"><span class="istickedoff">offsetToPoint (r,v) i = r `addPV` (i `multSV` v)</span></span>
+<span class="lineno">  295 </span>
+<span class="lineno">  296 </span>--
+<span class="lineno">  297 </span>
+<span class="lineno">  298 </span>epsilon, inf :: Double      -- aproximate zero and infinity
+<span class="lineno">  299 </span><span class="decl"><span class="istickedoff">epsilon = 1.0e-10</span></span>
+<span class="lineno">  300 </span><span class="decl"><span class="istickedoff">inf = 1.0e20</span></span>
+<span class="lineno">  301 </span>
+<span class="lineno">  302 </span>nonZero :: Double -&gt; Double         -- Use before a division. It makes definitions
+<span class="lineno">  303 </span><span class="decl"><span class="istickedoff">nonZero x | <span class="tickonlytrue">x &gt; epsilon</span>  = x        -- more complete and I bet the errors that get </span>
+<span class="lineno">  304 </span><span class="spaces">          </span><span class="istickedoff">| <span class="nottickedoff">x &lt; -epsilon</span> = <span class="nottickedoff">x</span>        -- introduced will be undetectable if epsilon</span>
+<span class="lineno">  305 </span><span class="spaces">          </span><span class="istickedoff">| <span class="nottickedoff">otherwise</span>    = <span class="nottickedoff">epsilon</span></span></span>  -- is small enough
+<span class="lineno">  306 </span>
+<span class="lineno">  307 </span>
+<span class="lineno">  308 </span><span class="decl"><span class="istickedoff">eqEps x y = abs (x-y) &lt; epsilon</span></span>
+<span class="lineno">  309 </span><span class="decl"><span class="istickedoff">near = eqEps</span></span>
+<span class="lineno">  310 </span>
+<span class="lineno">  311 </span>clampf :: Double -&gt; Double
+<span class="lineno">  312 </span><span class="decl"><span class="istickedoff">clampf p | <span class="tickonlyfalse">p &lt; 0</span> = <span class="nottickedoff">0</span></span>
+<span class="lineno">  313 </span><span class="spaces">         </span><span class="istickedoff">| p &gt; 1 = 1</span>
+<span class="lineno">  314 </span><span class="spaces">         </span><span class="istickedoff">| <span class="tickonlytrue">True</span>  = p</span></span>
+
+</pre>
+</html>
+Writing: CSG.hs.html
+<html><style type="text/css">
+span.lineno { color: white; background: #aaaaaa; border-right: solid white 12px }
+span.nottickedoff { background: yellow}
+span.istickedoff { background: white }
+span.tickonlyfalse { margin: -1px; border: 1px solid #f20913; background: #f20913 }
+span.tickonlytrue  { margin: -1px; border: 1px solid #60de51; background: #60de51 }
+span.funcount { font-size: small; color: orange; z-index: 2; position: absolute; right: 20 }
+span.decl { font-weight: bold }
+span.spaces    { background: white }
+</style>
+<pre>
+<span class="lineno">    1 </span>-- Copyright (c) 2000 Galois Connections, Inc.
+<span class="lineno">    2 </span>-- All rights reserved.  This software is distributed as
+<span class="lineno">    3 </span>-- free software under the license in the file &quot;LICENSE&quot;,
+<span class="lineno">    4 </span>-- which is included in the distribution.
+<span class="lineno">    5 </span>
+<span class="lineno">    6 </span>module CSG(module Construct,
+<span class="lineno">    7 </span>           module Geometry,
+<span class="lineno">    8 </span>           module Intersections,
+<span class="lineno">    9 </span>           module Interval,
+<span class="lineno">   10 </span>           module Misc) where
+<span class="lineno">   11 </span>
+<span class="lineno">   12 </span>import Construct
+<span class="lineno">   13 </span>import Geometry
+<span class="lineno">   14 </span>import Intersections
+<span class="lineno">   15 </span>import Interval
+<span class="lineno">   16 </span>import Misc
+
+</pre>
+</html>
+Writing: Construct.hs.html
+<html><style type="text/css">
+span.lineno { color: white; background: #aaaaaa; border-right: solid white 12px }
+span.nottickedoff { background: yellow}
+span.istickedoff { background: white }
+span.tickonlyfalse { margin: -1px; border: 1px solid #f20913; background: #f20913 }
+span.tickonlytrue  { margin: -1px; border: 1px solid #60de51; background: #60de51 }
+span.funcount { font-size: small; color: orange; z-index: 2; position: absolute; right: 20 }
+span.decl { font-weight: bold }
+span.spaces    { background: white }
+</style>
+<pre>
+<span class="lineno">    1 </span>-- Copyright (c) 2000 Galois Connections, Inc.
+<span class="lineno">    2 </span>-- All rights reserved.  This software is distributed as
+<span class="lineno">    3 </span>-- free software under the license in the file &quot;LICENSE&quot;,
+<span class="lineno">    4 </span>-- which is included in the distribution.
+<span class="lineno">    5 </span>
+<span class="lineno">    6 </span>module Construct
+<span class="lineno">    7 </span>    ( Surface (..)
+<span class="lineno">    8 </span>    , Face (..)
+<span class="lineno">    9 </span>    , CSG (..)
+<span class="lineno">   10 </span>    , Texture
+<span class="lineno">   11 </span>    , Transform
+<span class="lineno">   12 </span>    , union, intersect, difference
+<span class="lineno">   13 </span>    , plane, sphere, cube, cylinder, cone
+<span class="lineno">   14 </span>    , transform
+<span class="lineno">   15 </span>    , translate, translateX, translateY, translateZ
+<span class="lineno">   16 </span>    , scale, scaleX, scaleY, scaleZ, uscale
+<span class="lineno">   17 </span>    , rotateX, rotateY, rotateZ
+<span class="lineno">   18 </span>    , eye, translateEye
+<span class="lineno">   19 </span>    , rotateEyeX, rotateEyeY, rotateEyeZ
+<span class="lineno">   20 </span>    ) where
+<span class="lineno">   21 </span>
+<span class="lineno">   22 </span>import Geometry
+<span class="lineno">   23 </span>
+<span class="lineno">   24 </span>-- In each case, we model the surface by a point and a pair of tangent vectors.
+<span class="lineno">   25 </span>-- This gives us enough information to determine the surface
+<span class="lineno">   26 </span>-- normal at that point, which is all that is required by the current
+<span class="lineno">   27 </span>-- illumination model.  We can't just save the surface normal because
+<span class="lineno">   28 </span>-- that isn't preserved by transformations.
+<span class="lineno">   29 </span>
+<span class="lineno">   30 </span>data Surface
+<span class="lineno">   31 </span>  = Planar Point Vector Vector
+<span class="lineno">   32 </span>  | Spherical Point Vector Vector
+<span class="lineno">   33 </span>  | Cylindrical Point Vector Vector
+<span class="lineno">   34 </span>  | Conic Point Vector Vector
+<span class="lineno">   35 </span>  deriving <span class="decl"><span class="nottickedoff"><span class="decl"><span class="nottickedoff">Show</span></span></span></span>
+<span class="lineno">   36 </span>
+<span class="lineno">   37 </span>data Face
+<span class="lineno">   38 </span>  = PlaneFace
+<span class="lineno">   39 </span>  | SphereFace
+<span class="lineno">   40 </span>  | CubeFront
+<span class="lineno">   41 </span>  | CubeBack
+<span class="lineno">   42 </span>  | CubeLeft
+<span class="lineno">   43 </span>  | CubeRight
+<span class="lineno">   44 </span>  | CubeTop
+<span class="lineno">   45 </span>  | CubeBottom
+<span class="lineno">   46 </span>  | CylinderSide
+<span class="lineno">   47 </span>  | CylinderTop
+<span class="lineno">   48 </span>  | CylinderBottom
+<span class="lineno">   49 </span>  | ConeSide
+<span class="lineno">   50 </span>  | ConeBase
+<span class="lineno">   51 </span>  deriving <span class="decl"><span class="nottickedoff"><span class="decl"><span class="nottickedoff">Show</span></span></span></span>
+<span class="lineno">   52 </span>
+<span class="lineno">   53 </span>data CSG a
+<span class="lineno">   54 </span>  = Plane a
+<span class="lineno">   55 </span>  | Sphere a
+<span class="lineno">   56 </span>  | Cylinder a
+<span class="lineno">   57 </span>  | Cube a
+<span class="lineno">   58 </span>  | Cone a
+<span class="lineno">   59 </span>  | Transform Matrix Matrix (CSG a)
+<span class="lineno">   60 </span>  | Union (CSG a) (CSG a)
+<span class="lineno">   61 </span>  | Intersect (CSG a) (CSG a)
+<span class="lineno">   62 </span>  | Difference (CSG a) (CSG a)
+<span class="lineno">   63 </span>  | Box Box (CSG a)
+<span class="lineno">   64 </span>  deriving (<span class="decl"><span class="nottickedoff"><span class="decl"><span class="nottickedoff">Show</span></span></span></span>)
+<span class="lineno">   65 </span>
+<span class="lineno">   66 </span>-- the data returned for determining surface texture
+<span class="lineno">   67 </span>-- the Face tells which face of a primitive this is
+<span class="lineno">   68 </span>-- the Point is the point of intersection in object coordinates
+<span class="lineno">   69 </span>-- the a is application-specific texture information
+<span class="lineno">   70 </span>type Texture a = (Face, Point, a)
+<span class="lineno">   71 </span>
+<span class="lineno">   72 </span>union, intersect, difference       :: CSG a -&gt; CSG a -&gt; CSG a
+<span class="lineno">   73 </span>
+<span class="lineno">   74 </span><span class="decl"><span class="istickedoff">union p@(Box b1 _) q@(Box b2 _) = <span class="nottickedoff">Box (mergeBox b1 b2) (Union p q)</span></span>
+<span class="lineno">   75 </span><span class="spaces"></span><span class="istickedoff">union p q = Union p q</span></span>
+<span class="lineno">   76 </span>
+<span class="lineno">   77 </span>-- rather pessimistic
+<span class="lineno">   78 </span><span class="decl"><span class="nottickedoff">intersect p@(Box b1 _) q@(Box b2 _) = Box (mergeBox b1 b2) (Intersect p q)</span>
+<span class="lineno">   79 </span><span class="spaces"></span><span class="nottickedoff">intersect p q = Intersect p q</span></span>
+<span class="lineno">   80 </span>
+<span class="lineno">   81 </span><span class="decl"><span class="nottickedoff">difference (Box b1 p) q = Box b1 (Difference p q)</span>
+<span class="lineno">   82 </span><span class="spaces"></span><span class="nottickedoff">-- no need to box again inside</span>
+<span class="lineno">   83 </span><span class="spaces"></span><span class="nottickedoff">-- difference p@(Box b1 _) q = Box b1 (Difference p q)</span>
+<span class="lineno">   84 </span><span class="spaces"></span><span class="nottickedoff">difference p q = Difference p q</span></span>
+<span class="lineno">   85 </span>
+<span class="lineno">   86 </span><span class="decl"><span class="istickedoff">mkBox b p = Box b p</span></span>
+<span class="lineno">   87 </span>
+<span class="lineno">   88 </span>plane, sphere, cube, cylinder, cone     :: a -&gt; CSG a
+<span class="lineno">   89 </span>
+<span class="lineno">   90 </span><span class="decl"><span class="istickedoff">plane = Plane</span></span>
+<span class="lineno">   91 </span><span class="decl"><span class="nottickedoff">sphere s =</span>
+<span class="lineno">   92 </span><span class="spaces">    </span><span class="nottickedoff">mkBox (B (-1 - epsilon) (1 + epsilon)</span>
+<span class="lineno">   93 </span><span class="spaces">             </span><span class="nottickedoff">(-1 - epsilon) (1 + epsilon)</span>
+<span class="lineno">   94 </span><span class="spaces">             </span><span class="nottickedoff">(-1 - epsilon) (1 + epsilon)) (Sphere s)</span></span>
+<span class="lineno">   95 </span><span class="decl"><span class="nottickedoff">cone s =</span>
+<span class="lineno">   96 </span><span class="spaces">    </span><span class="nottickedoff">mkBox (B (-1 - epsilon) (1 + epsilon)</span>
+<span class="lineno">   97 </span><span class="spaces">             </span><span class="nottickedoff">(   - epsilon) (1 + epsilon)</span>
+<span class="lineno">   98 </span><span class="spaces">             </span><span class="nottickedoff">(-1 - epsilon) (1 + epsilon)) (Cone s)</span></span>
+<span class="lineno">   99 </span><span class="decl"><span class="istickedoff">cube s =</span>
+<span class="lineno">  100 </span><span class="spaces">    </span><span class="istickedoff">mkBox (B (- epsilon) (1 + epsilon)</span>
+<span class="lineno">  101 </span><span class="spaces">             </span><span class="istickedoff">(- epsilon) (1 + epsilon)</span>
+<span class="lineno">  102 </span><span class="spaces">             </span><span class="istickedoff">(- epsilon) (1 + epsilon)) (Cube s)</span></span>
+<span class="lineno">  103 </span><span class="decl"><span class="nottickedoff">cylinder s =</span>
+<span class="lineno">  104 </span><span class="spaces">    </span><span class="nottickedoff">mkBox (B (-1 - epsilon) (1 + epsilon)</span>
+<span class="lineno">  105 </span><span class="spaces">             </span><span class="nottickedoff">(   - epsilon) (1 + epsilon)</span>
+<span class="lineno">  106 </span><span class="spaces">             </span><span class="nottickedoff">(-1 - epsilon) (1 + epsilon)) (Cylinder s)</span></span>
+<span class="lineno">  107 </span>
+<span class="lineno">  108 </span>----------------------------
+<span class="lineno">  109 </span>-- Object transformations
+<span class="lineno">  110 </span>----------------------------
+<span class="lineno">  111 </span>
+<span class="lineno">  112 </span>type Transform = (Matrix, Matrix)
+<span class="lineno">  113 </span>
+<span class="lineno">  114 </span>transform :: Transform -&gt; CSG a -&gt; CSG a
+<span class="lineno">  115 </span>
+<span class="lineno">  116 </span><span class="decl"><span class="istickedoff">transform (m, m')   (Transform mp mp' p) = Transform  (multMM m mp)       (multMM mp' m') p</span>
+<span class="lineno">  117 </span><span class="spaces"></span><span class="istickedoff">transform mm'       (Union p q)          = Union      (transform mm' p)   (transform mm' q)</span>
+<span class="lineno">  118 </span><span class="spaces"></span><span class="istickedoff">transform mm'       (Intersect p q)      = <span class="nottickedoff">Intersect  (transform mm' p)   (transform mm' q)</span></span>
+<span class="lineno">  119 </span><span class="spaces"></span><span class="istickedoff">transform mm'       (Difference p q)     = <span class="nottickedoff">Difference (transform mm' p)   (transform mm' q)</span></span>
+<span class="lineno">  120 </span><span class="spaces"></span><span class="istickedoff">transform mm'@(m,_) (Box box p)          = Box        (transformBox m box) (transform mm' p)</span>
+<span class="lineno">  121 </span><span class="spaces"></span><span class="istickedoff">transform (m, m')   prim                 = Transform  m m' prim</span></span>
+<span class="lineno">  122 </span>
+<span class="lineno">  123 </span>translate                      :: Coords -&gt; CSG a -&gt; CSG a
+<span class="lineno">  124 </span>translateX, translateY, translateZ      :: Double -&gt; CSG a -&gt; CSG a
+<span class="lineno">  125 </span>
+<span class="lineno">  126 </span><span class="decl"><span class="istickedoff">translate xyz = transform $ transM xyz</span></span>
+<span class="lineno">  127 </span><span class="decl"><span class="nottickedoff">translateX x = translate (x, 0, 0)</span></span>
+<span class="lineno">  128 </span><span class="decl"><span class="nottickedoff">translateY y = translate (0, y, 0)</span></span>
+<span class="lineno">  129 </span><span class="decl"><span class="nottickedoff">translateZ z = translate (0, 0, z)</span></span>
+<span class="lineno">  130 </span>
+<span class="lineno">  131 </span>scale                    :: Coords -&gt; CSG a -&gt; CSG a
+<span class="lineno">  132 </span>scaleX, scaleY, scaleZ, uscale   :: Double -&gt; CSG a -&gt; CSG a
+<span class="lineno">  133 </span>
+<span class="lineno">  134 </span><span class="decl"><span class="istickedoff">scale xyz = transform $ scaleM xyz</span></span>
+<span class="lineno">  135 </span><span class="decl"><span class="nottickedoff">scaleX x = scale (x, 1, 1)</span></span>
+<span class="lineno">  136 </span><span class="decl"><span class="nottickedoff">scaleY y = scale (1, y, 1)</span></span>
+<span class="lineno">  137 </span><span class="decl"><span class="nottickedoff">scaleZ z = scale (1, 1, z)</span></span>
+<span class="lineno">  138 </span><span class="decl"><span class="istickedoff">uscale u = scale (u,u,u)</span></span>
+<span class="lineno">  139 </span>
+<span class="lineno">  140 </span>rotateX, rotateY, rotateZ             :: Radian -&gt; CSG a -&gt; CSG a
+<span class="lineno">  141 </span>
+<span class="lineno">  142 </span><span class="decl"><span class="istickedoff">rotateX a = transform $ rotxM a</span></span>
+<span class="lineno">  143 </span><span class="decl"><span class="istickedoff">rotateY a = transform $ rotyM a</span></span>
+<span class="lineno">  144 </span><span class="decl"><span class="nottickedoff">rotateZ a = transform $ rotzM a</span></span>
+<span class="lineno">  145 </span>
+<span class="lineno">  146 </span><span class="decl"><span class="istickedoff">unit = matrix</span>
+<span class="lineno">  147 </span><span class="spaces">      </span><span class="istickedoff">( ( 1.0, 0.0, 0.0, 0.0 ),</span>
+<span class="lineno">  148 </span><span class="spaces">        </span><span class="istickedoff">( 0.0, 1.0, 0.0, 0.0 ),</span>
+<span class="lineno">  149 </span><span class="spaces">        </span><span class="istickedoff">( 0.0, 0.0, 1.0, 0.0 ),</span>
+<span class="lineno">  150 </span><span class="spaces">        </span><span class="istickedoff">( 0.0, 0.0, 0.0, 1.0 ) )</span></span>
+<span class="lineno">  151 </span>
+<span class="lineno">  152 </span><span class="decl"><span class="istickedoff">transM (x, y, z)</span>
+<span class="lineno">  153 </span><span class="spaces">  </span><span class="istickedoff">= ( matrix</span>
+<span class="lineno">  154 </span><span class="spaces">      </span><span class="istickedoff">( ( 1, 0, 0, x ),</span>
+<span class="lineno">  155 </span><span class="spaces">        </span><span class="istickedoff">( 0, 1, 0, y ),</span>
+<span class="lineno">  156 </span><span class="spaces">        </span><span class="istickedoff">( 0, 0, 1, z ),</span>
+<span class="lineno">  157 </span><span class="spaces">        </span><span class="istickedoff">( 0, 0, 0, 1 ) ),</span>
+<span class="lineno">  158 </span><span class="spaces">      </span><span class="istickedoff">matrix</span>
+<span class="lineno">  159 </span><span class="spaces">      </span><span class="istickedoff">( ( 1, 0, 0, -x ),</span>
+<span class="lineno">  160 </span><span class="spaces">        </span><span class="istickedoff">( 0, 1, 0, -y ),</span>
+<span class="lineno">  161 </span><span class="spaces">        </span><span class="istickedoff">( 0, 0, 1, -z ),</span>
+<span class="lineno">  162 </span><span class="spaces">        </span><span class="istickedoff">( 0, 0, 0,  1 ) ) )</span></span>
+<span class="lineno">  163 </span>
+<span class="lineno">  164 </span><span class="decl"><span class="istickedoff">scaleM (x, y, z)</span>
+<span class="lineno">  165 </span><span class="spaces">  </span><span class="istickedoff">= ( matrix</span>
+<span class="lineno">  166 </span><span class="spaces">      </span><span class="istickedoff">( (   x',    0,    0, 0 ),</span>
+<span class="lineno">  167 </span><span class="spaces">        </span><span class="istickedoff">(    0,   y',    0, 0 ),</span>
+<span class="lineno">  168 </span><span class="spaces">        </span><span class="istickedoff">(    0,    0,   z', 0 ),</span>
+<span class="lineno">  169 </span><span class="spaces">        </span><span class="istickedoff">(    0,    0,    0, 1 ) ),</span>
+<span class="lineno">  170 </span><span class="spaces">      </span><span class="istickedoff">matrix</span>
+<span class="lineno">  171 </span><span class="spaces">      </span><span class="istickedoff">( ( 1/x',    0,    0, 0 ),</span>
+<span class="lineno">  172 </span><span class="spaces">        </span><span class="istickedoff">(    0, 1/y',    0, 0 ),</span>
+<span class="lineno">  173 </span><span class="spaces">        </span><span class="istickedoff">(    0,    0, 1/z', 0 ),</span>
+<span class="lineno">  174 </span><span class="spaces">        </span><span class="istickedoff">(    0,    0,    0, 1 ) ) )</span>
+<span class="lineno">  175 </span><span class="spaces">  </span><span class="istickedoff">where x' = nonZero x</span>
+<span class="lineno">  176 </span><span class="spaces">        </span><span class="istickedoff">y' = nonZero y</span>
+<span class="lineno">  177 </span><span class="spaces">        </span><span class="istickedoff">z' = nonZero z</span></span>
+<span class="lineno">  178 </span>
+<span class="lineno">  179 </span><span class="decl"><span class="istickedoff">rotxM t</span>
+<span class="lineno">  180 </span><span class="spaces">  </span><span class="istickedoff">= ( matrix</span>
+<span class="lineno">  181 </span><span class="spaces">      </span><span class="istickedoff">( (      1,      0,      0, 0 ),</span>
+<span class="lineno">  182 </span><span class="spaces">        </span><span class="istickedoff">(      0,  cos t, -sin t, 0 ),</span>
+<span class="lineno">  183 </span><span class="spaces">        </span><span class="istickedoff">(      0,  sin t,  cos t, 0 ),</span>
+<span class="lineno">  184 </span><span class="spaces">        </span><span class="istickedoff">(      0,      0,      0, 1 ) ),</span>
+<span class="lineno">  185 </span><span class="spaces">      </span><span class="istickedoff">matrix</span>
+<span class="lineno">  186 </span><span class="spaces">      </span><span class="istickedoff">( (      1,      0,      0, 0 ),</span>
+<span class="lineno">  187 </span><span class="spaces">        </span><span class="istickedoff">(      0,  cos t,  sin t, 0 ),</span>
+<span class="lineno">  188 </span><span class="spaces">        </span><span class="istickedoff">(      0, -sin t,  cos t, 0 ),</span>
+<span class="lineno">  189 </span><span class="spaces">        </span><span class="istickedoff">(      0,      0,      0, 1 ) ) )</span></span>
+<span class="lineno">  190 </span>
+<span class="lineno">  191 </span><span class="decl"><span class="istickedoff">rotyM t</span>
+<span class="lineno">  192 </span><span class="spaces">  </span><span class="istickedoff">= ( matrix</span>
+<span class="lineno">  193 </span><span class="spaces">      </span><span class="istickedoff">( (  cos t,      0,  sin t, 0 ),</span>
+<span class="lineno">  194 </span><span class="spaces">        </span><span class="istickedoff">(      0,      1,      0, 0 ),</span>
+<span class="lineno">  195 </span><span class="spaces">        </span><span class="istickedoff">( -sin t,      0,  cos t, 0 ),</span>
+<span class="lineno">  196 </span><span class="spaces">        </span><span class="istickedoff">(      0,      0,      0, 1 ) ),</span>
+<span class="lineno">  197 </span><span class="spaces">      </span><span class="istickedoff">matrix</span>
+<span class="lineno">  198 </span><span class="spaces">      </span><span class="istickedoff">( (  cos t,      0, -sin t, 0 ),</span>
+<span class="lineno">  199 </span><span class="spaces">        </span><span class="istickedoff">(      0,      1,      0, 0 ),</span>
+<span class="lineno">  200 </span><span class="spaces">        </span><span class="istickedoff">(  sin t,      0,  cos t, 0 ),</span>
+<span class="lineno">  201 </span><span class="spaces">        </span><span class="istickedoff">(      0,      0,      0, 1 ) ) )</span></span>
+<span class="lineno">  202 </span>
+<span class="lineno">  203 </span><span class="decl"><span class="nottickedoff">rotzM t</span>
+<span class="lineno">  204 </span><span class="spaces">  </span><span class="nottickedoff">= ( matrix</span>
+<span class="lineno">  205 </span><span class="spaces">      </span><span class="nottickedoff">( (  cos t, -sin t,      0, 0 ),</span>
+<span class="lineno">  206 </span><span class="spaces">        </span><span class="nottickedoff">(  sin t,  cos t,      0, 0 ),</span>
+<span class="lineno">  207 </span><span class="spaces">        </span><span class="nottickedoff">(      0,      0,      1, 0 ),</span>
+<span class="lineno">  208 </span><span class="spaces">        </span><span class="nottickedoff">(      0,      0,      0, 1 ) ),</span>
+<span class="lineno">  209 </span><span class="spaces">      </span><span class="nottickedoff">matrix</span>
+<span class="lineno">  210 </span><span class="spaces">      </span><span class="nottickedoff">( (  cos t,  sin t,      0, 0 ),</span>
+<span class="lineno">  211 </span><span class="spaces">        </span><span class="nottickedoff">( -sin t,  cos t,      0, 0 ),</span>
+<span class="lineno">  212 </span><span class="spaces">        </span><span class="nottickedoff">(      0,      0,      1, 0 ),</span>
+<span class="lineno">  213 </span><span class="spaces">        </span><span class="nottickedoff">(      0,      0,      0, 1 ) ) )</span></span>
+<span class="lineno">  214 </span>
+<span class="lineno">  215 </span>-------------------
+<span class="lineno">  216 </span>-- Eye transformations
+<span class="lineno">  217 </span>
+<span class="lineno">  218 </span>-- These are used to specify placement of the eye.
+<span class="lineno">  219 </span>-- `eye' starts out at (0, 0, -1).
+<span class="lineno">  220 </span>-- These are implemented as inverse transforms of the model.
+<span class="lineno">  221 </span>-------------------
+<span class="lineno">  222 </span>
+<span class="lineno">  223 </span>eye                       :: Transform
+<span class="lineno">  224 </span>translateEye          :: Coords -&gt; Transform -&gt; Transform
+<span class="lineno">  225 </span>rotateEyeX, rotateEyeY, rotateEyeZ      :: Radian -&gt; Transform -&gt; Transform
+<span class="lineno">  226 </span>
+<span class="lineno">  227 </span><span class="decl"><span class="istickedoff">eye = (unit, unit)</span></span>
+<span class="lineno">  228 </span><span class="decl"><span class="nottickedoff">translateEye xyz (eye1, eye2)</span>
+<span class="lineno">  229 </span><span class="spaces">  </span><span class="nottickedoff">= (multMM m1 eye1, multMM eye2 m2)</span>
+<span class="lineno">  230 </span><span class="spaces">  </span><span class="nottickedoff">where (m1, m2) = transM xyz</span></span>
+<span class="lineno">  231 </span><span class="decl"><span class="nottickedoff">rotateEyeX t (eye1, eye2)</span>
+<span class="lineno">  232 </span><span class="spaces">  </span><span class="nottickedoff">= (multMM m1 eye1, multMM eye2 m2)</span>
+<span class="lineno">  233 </span><span class="spaces">  </span><span class="nottickedoff">where (m1, m2) = rotxM t</span></span>
+<span class="lineno">  234 </span><span class="decl"><span class="nottickedoff">rotateEyeY t (eye1, eye2)</span>
+<span class="lineno">  235 </span><span class="spaces">  </span><span class="nottickedoff">= (multMM m1 eye1, multMM eye2 m2)</span>
+<span class="lineno">  236 </span><span class="spaces">  </span><span class="nottickedoff">where (m1, m2) = rotyM t</span></span>
+<span class="lineno">  237 </span><span class="decl"><span class="nottickedoff">rotateEyeZ t (eye1, eye2)</span>
+<span class="lineno">  238 </span><span class="spaces">  </span><span class="nottickedoff">= (multMM m1 eye1, multMM eye2 m2)</span>
+<span class="lineno">  239 </span><span class="spaces">  </span><span class="nottickedoff">where (m1, m2) = rotzM t</span></span>
+<span class="lineno">  240 </span>
+<span class="lineno">  241 </span>-------------------
+<span class="lineno">  242 </span>-- Bounding boxes
+<span class="lineno">  243 </span>-------------------
+<span class="lineno">  244 </span>
+<span class="lineno">  245 </span><span class="decl"><span class="nottickedoff">mergeBox (B x11  x12  y11  y12  z11  z12) (B x21  x22  y21  y22  z21  z22) =</span>
+<span class="lineno">  246 </span><span class="spaces">    </span><span class="nottickedoff">B (x11 `min` x21) (x12 `max` x22)</span>
+<span class="lineno">  247 </span><span class="spaces">      </span><span class="nottickedoff">(y11 `min` y21) (y12 `max` y22)</span>
+<span class="lineno">  248 </span><span class="spaces">      </span><span class="nottickedoff">(z11 `min` z21) (z12 `max` z22)</span></span>
+<span class="lineno">  249 </span>
+<span class="lineno">  250 </span><span class="decl"><span class="istickedoff">transformBox t (B x1  x2  y1  y2  z1  z2)</span>
+<span class="lineno">  251 </span><span class="spaces">  </span><span class="istickedoff">= (B (foldr1 min (map xCoord pts'))</span>
+<span class="lineno">  252 </span><span class="spaces">       </span><span class="istickedoff">(foldr1 max (map xCoord pts'))</span>
+<span class="lineno">  253 </span><span class="spaces">       </span><span class="istickedoff">(foldr1 min (map yCoord pts'))</span>
+<span class="lineno">  254 </span><span class="spaces">       </span><span class="istickedoff">(foldr1 max (map yCoord pts'))</span>
+<span class="lineno">  255 </span><span class="spaces">       </span><span class="istickedoff">(foldr1 min (map zCoord pts'))</span>
+<span class="lineno">  256 </span><span class="spaces">       </span><span class="istickedoff">(foldr1 max (map zCoord pts')))</span>
+<span class="lineno">  257 </span><span class="spaces">  </span><span class="istickedoff">where pts' = map (multMP t) pts</span>
+<span class="lineno">  258 </span><span class="spaces">        </span><span class="istickedoff">pts =  [point x1 y1 z1,</span>
+<span class="lineno">  259 </span><span class="spaces">                </span><span class="istickedoff">point x1 y1 z2,</span>
+<span class="lineno">  260 </span><span class="spaces">                </span><span class="istickedoff">point x1 y2 z1,</span>
+<span class="lineno">  261 </span><span class="spaces">                </span><span class="istickedoff">point x1 y2 z2,</span>
+<span class="lineno">  262 </span><span class="spaces">                </span><span class="istickedoff">point x2 y1 z1,</span>
+<span class="lineno">  263 </span><span class="spaces">                </span><span class="istickedoff">point x2 y1 z2,</span>
+<span class="lineno">  264 </span><span class="spaces">                </span><span class="istickedoff">point x2 y2 z1,</span>
+<span class="lineno">  265 </span><span class="spaces">                </span><span class="istickedoff">point x2 y2 z2]</span></span>
+
+</pre>
+</html>
+Writing: Intersections.hs.html
+<html><style type="text/css">
+span.lineno { color: white; background: #aaaaaa; border-right: solid white 12px }
+span.nottickedoff { background: yellow}
+span.istickedoff { background: white }
+span.tickonlyfalse { margin: -1px; border: 1px solid #f20913; background: #f20913 }
+span.tickonlytrue  { margin: -1px; border: 1px solid #60de51; background: #60de51 }
+span.funcount { font-size: small; color: orange; z-index: 2; position: absolute; right: 20 }
+span.decl { font-weight: bold }
+span.spaces    { background: white }
+</style>
+<pre>
+<span class="lineno">    1 </span>-- Copyright (c) 2000 Galois Connections, Inc.
+<span class="lineno">    2 </span>-- All rights reserved.  This software is distributed as
+<span class="lineno">    3 </span>-- free software under the license in the file &quot;LICENSE&quot;,
+<span class="lineno">    4 </span>-- which is included in the distribution.
+<span class="lineno">    5 </span>
+<span class="lineno">    6 </span>module Intersections 
+<span class="lineno">    7 </span>    ( intersectRayWithObject,
+<span class="lineno">    8 </span>      quadratic
+<span class="lineno">    9 </span>    ) where
+<span class="lineno">   10 </span>
+<span class="lineno">   11 </span>import Maybe(isJust)
+<span class="lineno">   12 </span>
+<span class="lineno">   13 </span>import Construct
+<span class="lineno">   14 </span>import Geometry
+<span class="lineno">   15 </span>import Interval
+<span class="lineno">   16 </span>import Misc
+<span class="lineno">   17 </span>
+<span class="lineno">   18 </span>-- This is factored into two bits.  The main function `intersections'
+<span class="lineno">   19 </span>-- intersects a line with an object.
+<span class="lineno">   20 </span>-- The wrapper call `intersectRayWithObject' coerces this to an intersection
+<span class="lineno">   21 </span>-- with a ray by clamping the result to start at 0.
+<span class="lineno">   22 </span>
+<span class="lineno">   23 </span><span class="decl"><span class="istickedoff">intersectRayWithObject ray p</span>
+<span class="lineno">   24 </span><span class="spaces">  </span><span class="istickedoff">= clampIntervals is</span>
+<span class="lineno">   25 </span><span class="spaces">  </span><span class="istickedoff">where is = intersections ray p</span></span>
+<span class="lineno">   26 </span>
+<span class="lineno">   27 </span><span class="decl"><span class="istickedoff">clampIntervals (True, [], True) = <span class="nottickedoff">(False, [(0, True, undefined)], True)</span></span>
+<span class="lineno">   28 </span><span class="spaces"></span><span class="istickedoff">clampIntervals empty@(False, [], False) = empty</span>
+<span class="lineno">   29 </span><span class="spaces"></span><span class="istickedoff">clampIntervals (True, is@((i, False, p) : is'), isOpen)</span>
+<span class="lineno">   30 </span><span class="spaces">  </span><span class="istickedoff">| <span class="tickonlytrue">i `near` 0 || i &lt; 0</span></span>
+<span class="lineno">   31 </span><span class="spaces">  </span><span class="istickedoff">= clampIntervals (False, is', isOpen)</span>
+<span class="lineno">   32 </span><span class="spaces">  </span><span class="istickedoff">| <span class="nottickedoff">otherwise</span></span>
+<span class="lineno">   33 </span><span class="spaces">  </span><span class="istickedoff">= <span class="nottickedoff">(False, (0, True, undefined) : is, isOpen)</span></span>
+<span class="lineno">   34 </span><span class="spaces"></span><span class="istickedoff">clampIntervals ivals@(False, is@((i, True, p) : is'), isOpen)</span>
+<span class="lineno">   35 </span><span class="spaces">  </span><span class="istickedoff">| i `near` 0 || i &lt; 0</span>
+<span class="lineno">   36 </span><span class="spaces">  </span><span class="istickedoff">-- can unify this with first case...</span>
+<span class="lineno">   37 </span><span class="spaces">  </span><span class="istickedoff">= clampIntervals (True, is', isOpen)</span>
+<span class="lineno">   38 </span><span class="spaces">  </span><span class="istickedoff">| <span class="tickonlytrue">otherwise</span></span>
+<span class="lineno">   39 </span><span class="spaces">  </span><span class="istickedoff">= ivals</span></span>
+<span class="lineno">   40 </span>
+<span class="lineno">   41 </span><span class="decl"><span class="istickedoff">intersections ray (Union p q)</span>
+<span class="lineno">   42 </span><span class="spaces">  </span><span class="istickedoff">= unionIntervals is js</span>
+<span class="lineno">   43 </span><span class="spaces">  </span><span class="istickedoff">where is = intersections ray p</span>
+<span class="lineno">   44 </span><span class="spaces">        </span><span class="istickedoff">js = intersections ray q</span>
+<span class="lineno">   45 </span><span class="spaces"></span><span class="istickedoff"></span>
+<span class="lineno">   46 </span><span class="spaces"></span><span class="istickedoff">intersections ray (Intersect p q)</span>
+<span class="lineno">   47 </span><span class="spaces">  </span><span class="istickedoff">= <span class="nottickedoff">intersectIntervals is js</span></span>
+<span class="lineno">   48 </span><span class="spaces">  </span><span class="istickedoff">where <span class="nottickedoff">is = intersections ray p</span></span>
+<span class="lineno">   49 </span><span class="spaces">        </span><span class="istickedoff"><span class="nottickedoff">js = intersections ray q</span></span>
+<span class="lineno">   50 </span><span class="spaces"></span><span class="istickedoff"></span>
+<span class="lineno">   51 </span><span class="spaces"></span><span class="istickedoff">intersections ray (Difference p q)</span>
+<span class="lineno">   52 </span><span class="spaces">  </span><span class="istickedoff">= <span class="nottickedoff">differenceIntervals is (negateSurfaces js)</span></span>
+<span class="lineno">   53 </span><span class="spaces">  </span><span class="istickedoff">where <span class="nottickedoff">is = intersections ray p</span></span>
+<span class="lineno">   54 </span><span class="spaces">        </span><span class="istickedoff"><span class="nottickedoff">js = intersections ray q</span></span>
+<span class="lineno">   55 </span><span class="spaces"></span><span class="istickedoff"></span>
+<span class="lineno">   56 </span><span class="spaces"></span><span class="istickedoff">intersections ray (Transform m m' p)</span>
+<span class="lineno">   57 </span><span class="spaces">  </span><span class="istickedoff">= mapI (xform m) is</span>
+<span class="lineno">   58 </span><span class="spaces">  </span><span class="istickedoff">where is = intersections (m' `multMR` ray) p</span>
+<span class="lineno">   59 </span><span class="spaces">        </span><span class="istickedoff">xform m (i, b, (s, p0)) = (i, b, (transformSurface m s, p0))</span>
+<span class="lineno">   60 </span><span class="spaces"></span><span class="istickedoff"></span>
+<span class="lineno">   61 </span><span class="spaces"></span><span class="istickedoff">intersections ray (Box box p)</span>
+<span class="lineno">   62 </span><span class="spaces">  </span><span class="istickedoff">| intersectWithBox ray box = intersections ray p</span>
+<span class="lineno">   63 </span><span class="spaces">  </span><span class="istickedoff">| <span class="tickonlytrue">otherwise</span> = emptyIList</span>
+<span class="lineno">   64 </span><span class="spaces"></span><span class="istickedoff"></span>
+<span class="lineno">   65 </span><span class="spaces"></span><span class="istickedoff">intersections ray p@(Plane s)</span>
+<span class="lineno">   66 </span><span class="spaces">  </span><span class="istickedoff">= intersectPlane ray s</span>
+<span class="lineno">   67 </span><span class="spaces"></span><span class="istickedoff"></span>
+<span class="lineno">   68 </span><span class="spaces"></span><span class="istickedoff">intersections ray p@(Sphere s)</span>
+<span class="lineno">   69 </span><span class="spaces">  </span><span class="istickedoff">= <span class="nottickedoff">intersectSphere ray s</span></span>
+<span class="lineno">   70 </span><span class="spaces"></span><span class="istickedoff"></span>
+<span class="lineno">   71 </span><span class="spaces"></span><span class="istickedoff">intersections ray p@(Cube s)</span>
+<span class="lineno">   72 </span><span class="spaces">  </span><span class="istickedoff">= intersectCube ray s</span>
+<span class="lineno">   73 </span><span class="spaces"></span><span class="istickedoff"></span>
+<span class="lineno">   74 </span><span class="spaces"></span><span class="istickedoff">intersections ray p@(Cylinder s)</span>
+<span class="lineno">   75 </span><span class="spaces">  </span><span class="istickedoff">= <span class="nottickedoff">intersectCylinder ray s</span></span>
+<span class="lineno">   76 </span><span class="spaces"></span><span class="istickedoff"></span>
+<span class="lineno">   77 </span><span class="spaces"></span><span class="istickedoff">intersections ray p@(Cone s)</span>
+<span class="lineno">   78 </span><span class="spaces">  </span><span class="istickedoff">= <span class="nottickedoff">intersectCone ray s</span></span></span>
+<span class="lineno">   79 </span>
+<span class="lineno">   80 </span>negateSurfaces :: IList (Surface, Texture a) -&gt; IList (Surface, Texture a)
+<span class="lineno">   81 </span><span class="decl"><span class="nottickedoff">negateSurfaces = mapI negSurf</span>
+<span class="lineno">   82 </span><span class="spaces">  </span><span class="nottickedoff">where negSurf (i, b, (s,t)) = (i, b, (negateSurface s, t))</span></span>
+<span class="lineno">   83 </span>
+<span class="lineno">   84 </span><span class="decl"><span class="nottickedoff">negateSurface (Planar p0 v0 v1)</span>
+<span class="lineno">   85 </span><span class="spaces">  </span><span class="nottickedoff">= Planar p0 v1 v0</span>
+<span class="lineno">   86 </span><span class="spaces"></span><span class="nottickedoff">negateSurface (Spherical p0 v0 v1)</span>
+<span class="lineno">   87 </span><span class="spaces">  </span><span class="nottickedoff">= Spherical p0 v1 v0</span>
+<span class="lineno">   88 </span><span class="spaces"></span><span class="nottickedoff">negateSurface (Cylindrical p0 v0 v1)</span>
+<span class="lineno">   89 </span><span class="spaces">  </span><span class="nottickedoff">= Cylindrical p0 v1 v0</span>
+<span class="lineno">   90 </span><span class="spaces"></span><span class="nottickedoff">negateSurface (Conic p0 v0 v1)</span>
+<span class="lineno">   91 </span><span class="spaces">  </span><span class="nottickedoff">= Conic p0 v1 v0</span></span>
+<span class="lineno">   92 </span>
+<span class="lineno">   93 </span><span class="decl"><span class="istickedoff">transformSurface m (Planar p0 v0 v1)</span>
+<span class="lineno">   94 </span><span class="spaces">  </span><span class="istickedoff">= Planar <span class="nottickedoff">p0'</span> v0' v1'</span>
+<span class="lineno">   95 </span><span class="spaces">  </span><span class="istickedoff">where <span class="nottickedoff">p0' = multMP m p0</span></span>
+<span class="lineno">   96 </span><span class="spaces">        </span><span class="istickedoff">v0' = multMV m v0</span>
+<span class="lineno">   97 </span><span class="spaces">        </span><span class="istickedoff">v1' = multMV m v1</span>
+<span class="lineno">   98 </span><span class="spaces"></span><span class="istickedoff"></span>
+<span class="lineno">   99 </span><span class="spaces"></span><span class="istickedoff">transformSurface m (Spherical p0 v0 v1)</span>
+<span class="lineno">  100 </span><span class="spaces">  </span><span class="istickedoff">= <span class="nottickedoff">Spherical p0' v0' v1'</span></span>
+<span class="lineno">  101 </span><span class="spaces">  </span><span class="istickedoff">where <span class="nottickedoff">p0' = multMP m p0</span></span>
+<span class="lineno">  102 </span><span class="spaces">        </span><span class="istickedoff"><span class="nottickedoff">v0' = multMV m v0</span></span>
+<span class="lineno">  103 </span><span class="spaces">        </span><span class="istickedoff"><span class="nottickedoff">v1' = multMV m v1</span></span>
+<span class="lineno">  104 </span><span class="spaces"></span><span class="istickedoff"></span>
+<span class="lineno">  105 </span><span class="spaces"></span><span class="istickedoff">-- ditto as above</span>
+<span class="lineno">  106 </span><span class="spaces"></span><span class="istickedoff">transformSurface m (Cylindrical p0 v0 v1)</span>
+<span class="lineno">  107 </span><span class="spaces">  </span><span class="istickedoff">= <span class="nottickedoff">Cylindrical p0' v0' v1'</span></span>
+<span class="lineno">  108 </span><span class="spaces">  </span><span class="istickedoff">where <span class="nottickedoff">p0' = multMP m p0</span></span>
+<span class="lineno">  109 </span><span class="spaces">        </span><span class="istickedoff"><span class="nottickedoff">v0' = multMV m v0</span></span>
+<span class="lineno">  110 </span><span class="spaces">        </span><span class="istickedoff"><span class="nottickedoff">v1' = multMV m v1</span></span>
+<span class="lineno">  111 </span><span class="spaces"></span><span class="istickedoff"></span>
+<span class="lineno">  112 </span><span class="spaces"></span><span class="istickedoff">transformSurface m (Conic p0 v0 v1)</span>
+<span class="lineno">  113 </span><span class="spaces">  </span><span class="istickedoff">= <span class="nottickedoff">Conic p0' v0' v1'</span></span>
+<span class="lineno">  114 </span><span class="spaces">  </span><span class="istickedoff">where <span class="nottickedoff">p0' = multMP m p0</span></span>
+<span class="lineno">  115 </span><span class="spaces">        </span><span class="istickedoff"><span class="nottickedoff">v0' = multMV m v0</span></span>
+<span class="lineno">  116 </span><span class="spaces">        </span><span class="istickedoff"><span class="nottickedoff">v1' = multMV m v1</span></span></span>
+<span class="lineno">  117 </span>
+<span class="lineno">  118 </span>--------------------------------
+<span class="lineno">  119 </span>-- Plane
+<span class="lineno">  120 </span>--------------------------------
+<span class="lineno">  121 </span>
+<span class="lineno">  122 </span>intersectPlane :: Ray -&gt; a -&gt; IList (Surface, Texture a)
+<span class="lineno">  123 </span><span class="decl"><span class="istickedoff">intersectPlane ray texture = intersectXZPlane PlaneFace ray 0.0 texture</span></span>
+<span class="lineno">  124 </span>
+<span class="lineno">  125 </span>intersectXZPlane :: Face -&gt; Ray -&gt; Double -&gt; a -&gt; IList (Surface, Texture a)
+<span class="lineno">  126 </span><span class="decl"><span class="istickedoff">intersectXZPlane n (r,v) yoffset texture</span>
+<span class="lineno">  127 </span><span class="spaces">  </span><span class="istickedoff">| <span class="tickonlyfalse">b `near` 0</span></span>
+<span class="lineno">  128 </span><span class="spaces">  </span><span class="istickedoff">= -- the ray is parallel to the plane - it's either all in, or all out</span>
+<span class="lineno">  129 </span><span class="spaces">    </span><span class="istickedoff"><span class="nottickedoff">if y `near` yoffset || y &lt; yoffset then openIList else emptyIList</span></span>
+<span class="lineno">  130 </span><span class="spaces"></span><span class="istickedoff"></span>
+<span class="lineno">  131 </span><span class="spaces">    </span><span class="istickedoff">-- The line intersects the plane. Find t such that</span>
+<span class="lineno">  132 </span><span class="spaces">    </span><span class="istickedoff">-- (x + at, y + bt, z + ct) intersects the X-Z plane.</span>
+<span class="lineno">  133 </span><span class="spaces">    </span><span class="istickedoff">-- t may be negative (the ray starts within the halfspace),</span>
+<span class="lineno">  134 </span><span class="spaces">    </span><span class="istickedoff">-- but we'll catch that later when we clamp the intervals</span>
+<span class="lineno">  135 </span><span class="spaces"></span><span class="istickedoff"></span>
+<span class="lineno">  136 </span><span class="spaces">  </span><span class="istickedoff">| b &lt; 0       -- the ray is pointing downwards</span>
+<span class="lineno">  137 </span><span class="spaces">  </span><span class="istickedoff">= (False, [mkEntry (t0, (Planar <span class="nottickedoff">p0</span> v0 v1, (n, p0, texture)))], <span class="nottickedoff">True</span>)</span>
+<span class="lineno">  138 </span><span class="spaces"></span><span class="istickedoff"></span>
+<span class="lineno">  139 </span><span class="spaces">  </span><span class="istickedoff">| <span class="tickonlytrue">otherwise</span>   -- the ray is pointing upwards</span>
+<span class="lineno">  140 </span><span class="spaces">  </span><span class="istickedoff">= (True,  [mkExit (t0, (<span class="nottickedoff">Planar p0 v0 v1</span>, <span class="nottickedoff">(n, p0, texture)</span>))],  False)</span>
+<span class="lineno">  141 </span><span class="spaces"></span><span class="istickedoff"></span>
+<span class="lineno">  142 </span><span class="spaces">  </span><span class="istickedoff">where t0 = (yoffset-y) / b</span>
+<span class="lineno">  143 </span><span class="spaces">        </span><span class="istickedoff">x0 = x + a * t0</span>
+<span class="lineno">  144 </span><span class="spaces">        </span><span class="istickedoff">z0 = z + c * t0</span>
+<span class="lineno">  145 </span><span class="spaces">        </span><span class="istickedoff">p0 = point x0 0 z0</span>
+<span class="lineno">  146 </span><span class="spaces">        </span><span class="istickedoff">v0 = vector 0 0 1</span>
+<span class="lineno">  147 </span><span class="spaces">        </span><span class="istickedoff">v1 = vector 1 0 0</span>
+<span class="lineno">  148 </span><span class="spaces"></span><span class="istickedoff"></span>
+<span class="lineno">  149 </span><span class="spaces">        </span><span class="istickedoff">x = xCoord r</span>
+<span class="lineno">  150 </span><span class="spaces">        </span><span class="istickedoff">y = yCoord r</span>
+<span class="lineno">  151 </span><span class="spaces">        </span><span class="istickedoff">z = zCoord r</span>
+<span class="lineno">  152 </span><span class="spaces">        </span><span class="istickedoff">a = xComponent v</span>
+<span class="lineno">  153 </span><span class="spaces">        </span><span class="istickedoff">b = yComponent v</span>
+<span class="lineno">  154 </span><span class="spaces">        </span><span class="istickedoff">c = zComponent v</span></span>
+<span class="lineno">  155 </span>
+<span class="lineno">  156 </span>
+<span class="lineno">  157 </span>--------------------------------
+<span class="lineno">  158 </span>-- Sphere
+<span class="lineno">  159 </span>--------------------------------
+<span class="lineno">  160 </span>
+<span class="lineno">  161 </span>intersectSphere :: Ray -&gt; a -&gt; IList (Surface, Texture a)
+<span class="lineno">  162 </span><span class="decl"><span class="nottickedoff">intersectSphere ray@(r, v) texture</span>
+<span class="lineno">  163 </span><span class="spaces">  </span><span class="nottickedoff">= -- Find t such that (x + ta, y + tb, z + tc) intersects the</span>
+<span class="lineno">  164 </span><span class="spaces">    </span><span class="nottickedoff">-- unit sphere, that is, such that:</span>
+<span class="lineno">  165 </span><span class="spaces">    </span><span class="nottickedoff">--   (x + ta)^2 + (y + tb)^2 + (z + tc)^2 = 1</span>
+<span class="lineno">  166 </span><span class="spaces">    </span><span class="nottickedoff">-- This is a quadratic equation in t:</span>
+<span class="lineno">  167 </span><span class="spaces">    </span><span class="nottickedoff">--   t^2(a^2 + b^2 + c^2) + 2t(xa + yb + zc) + (x^2 + y^2 + z^2 - 1) = 0</span>
+<span class="lineno">  168 </span><span class="spaces">    </span><span class="nottickedoff">let c1 = sq a + sq b + sq c</span>
+<span class="lineno">  169 </span><span class="spaces">        </span><span class="nottickedoff">c2 = 2 * (x * a + y * b + z * c)</span>
+<span class="lineno">  170 </span><span class="spaces">        </span><span class="nottickedoff">c3 = sq x + sq y + sq z - 1</span>
+<span class="lineno">  171 </span><span class="spaces">    </span><span class="nottickedoff">in</span>
+<span class="lineno">  172 </span><span class="spaces">        </span><span class="nottickedoff">case quadratic c1 c2 c3 of</span>
+<span class="lineno">  173 </span><span class="spaces">        </span><span class="nottickedoff">Nothing -&gt; emptyIList</span>
+<span class="lineno">  174 </span><span class="spaces">        </span><span class="nottickedoff">Just (t1, t2) -&gt; entryexit (g t1) (g t2)</span>
+<span class="lineno">  175 </span><span class="spaces">    </span><span class="nottickedoff">where x = xCoord r</span>
+<span class="lineno">  176 </span><span class="spaces">          </span><span class="nottickedoff">y = yCoord r</span>
+<span class="lineno">  177 </span><span class="spaces">          </span><span class="nottickedoff">z = zCoord r</span>
+<span class="lineno">  178 </span><span class="spaces">          </span><span class="nottickedoff">a = xComponent v</span>
+<span class="lineno">  179 </span><span class="spaces">          </span><span class="nottickedoff">b = yComponent v</span>
+<span class="lineno">  180 </span><span class="spaces">          </span><span class="nottickedoff">c = zComponent v</span>
+<span class="lineno">  181 </span><span class="spaces">          </span><span class="nottickedoff">g t = (t, (Spherical origin v1 v2, (SphereFace, p0, texture)))</span>
+<span class="lineno">  182 </span><span class="spaces">              </span><span class="nottickedoff">where origin = point 0 0 0</span>
+<span class="lineno">  183 </span><span class="spaces">                    </span><span class="nottickedoff">x0 = x + t * a</span>
+<span class="lineno">  184 </span><span class="spaces">                    </span><span class="nottickedoff">y0 = y + t * b</span>
+<span class="lineno">  185 </span><span class="spaces">                    </span><span class="nottickedoff">z0 = z + t * c</span>
+<span class="lineno">  186 </span><span class="spaces">                    </span><span class="nottickedoff">p0 = point  x0 y0 z0</span>
+<span class="lineno">  187 </span><span class="spaces">                    </span><span class="nottickedoff">v0 = vector x0 y0 z0</span>
+<span class="lineno">  188 </span><span class="spaces">                    </span><span class="nottickedoff">(v1, v2) = tangents v0</span></span>
+<span class="lineno">  189 </span>
+<span class="lineno">  190 </span>
+<span class="lineno">  191 </span>--------------------------------
+<span class="lineno">  192 </span>-- Cube
+<span class="lineno">  193 </span>--------------------------------
+<span class="lineno">  194 </span>
+<span class="lineno">  195 </span>intersectCube :: Ray -&gt; a -&gt; IList (Surface, Texture a)
+<span class="lineno">  196 </span><span class="decl"><span class="istickedoff">intersectCube ray@(r, v) texture</span>
+<span class="lineno">  197 </span><span class="spaces">  </span><span class="istickedoff">= -- The set of t such that (x + at, y + bt, z + ct) lies within</span>
+<span class="lineno">  198 </span><span class="spaces">    </span><span class="istickedoff">-- the unit cube satisfies:</span>
+<span class="lineno">  199 </span><span class="spaces">    </span><span class="istickedoff">--    0 &lt;= x + at &lt;= 1,  0 &lt;= y + bt &lt;= 1,  0 &lt;= z + ct &lt;= 1</span>
+<span class="lineno">  200 </span><span class="spaces">    </span><span class="istickedoff">-- The minimum and maximum such values of t give us the two</span>
+<span class="lineno">  201 </span><span class="spaces">    </span><span class="istickedoff">-- intersection points.</span>
+<span class="lineno">  202 </span><span class="spaces">    </span><span class="istickedoff">case intersectSlabIval (intersectCubeSlab face2 face3 x a)</span>
+<span class="lineno">  203 </span><span class="spaces">        </span><span class="istickedoff">(intersectSlabIval (intersectCubeSlab face5 face4 y b)</span>
+<span class="lineno">  204 </span><span class="spaces">                           </span><span class="istickedoff">(intersectCubeSlab face0 <span class="nottickedoff">face1</span> z c)) of</span>
+<span class="lineno">  205 </span><span class="spaces">    </span><span class="istickedoff">Nothing -&gt; emptyIList</span>
+<span class="lineno">  206 </span><span class="spaces">    </span><span class="istickedoff">Just (t1, t2) -&gt; entryexit (g t1) (g t2)</span>
+<span class="lineno">  207 </span><span class="spaces">  </span><span class="istickedoff">where g ((n, v0, v1), t)</span>
+<span class="lineno">  208 </span><span class="spaces">          </span><span class="istickedoff">= (t, (Planar <span class="nottickedoff">p0</span> v0 v1, (n, p0, texture)))</span>
+<span class="lineno">  209 </span><span class="spaces">          </span><span class="istickedoff">where p0 = offsetToPoint ray t</span>
+<span class="lineno">  210 </span><span class="spaces">        </span><span class="istickedoff">face0 = (CubeFront,  vectorY, vectorX)</span>
+<span class="lineno">  211 </span><span class="spaces">        </span><span class="istickedoff"><span class="nottickedoff">face1 = (CubeBack,   vectorX, vectorY)</span></span>
+<span class="lineno">  212 </span><span class="spaces">        </span><span class="istickedoff">face2 = (CubeLeft,   vectorZ, vectorY)</span>
+<span class="lineno">  213 </span><span class="spaces">        </span><span class="istickedoff">face3 = (<span class="nottickedoff">CubeRight</span>,  <span class="nottickedoff">vectorY</span>, <span class="nottickedoff">vectorZ</span>)</span>
+<span class="lineno">  214 </span><span class="spaces">        </span><span class="istickedoff">face4 = (CubeTop,    vectorZ, vectorX)</span>
+<span class="lineno">  215 </span><span class="spaces">        </span><span class="istickedoff">face5 = (CubeBottom, vectorX, vectorZ)</span>
+<span class="lineno">  216 </span><span class="spaces">        </span><span class="istickedoff">vectorX = vector 1 0 0</span>
+<span class="lineno">  217 </span><span class="spaces">        </span><span class="istickedoff">vectorY = vector 0 1 0</span>
+<span class="lineno">  218 </span><span class="spaces">        </span><span class="istickedoff">vectorZ = vector 0 0 1</span>
+<span class="lineno">  219 </span><span class="spaces">        </span><span class="istickedoff">x = xCoord r</span>
+<span class="lineno">  220 </span><span class="spaces">        </span><span class="istickedoff">y = yCoord r</span>
+<span class="lineno">  221 </span><span class="spaces">        </span><span class="istickedoff">z = zCoord r</span>
+<span class="lineno">  222 </span><span class="spaces">        </span><span class="istickedoff">a = xComponent v</span>
+<span class="lineno">  223 </span><span class="spaces">        </span><span class="istickedoff">b = yComponent v</span>
+<span class="lineno">  224 </span><span class="spaces">        </span><span class="istickedoff">c = zComponent v</span></span>
+<span class="lineno">  225 </span>
+<span class="lineno">  226 </span><span class="decl"><span class="istickedoff">intersectCubeSlab n m w d</span>
+<span class="lineno">  227 </span><span class="spaces">  </span><span class="istickedoff">| <span class="tickonlyfalse">d `near` 0</span> = <span class="nottickedoff">if (0 &lt;= w) &amp;&amp; (w &lt;= 1)</span></span>
+<span class="lineno">  228 </span><span class="spaces">                 </span><span class="istickedoff"><span class="nottickedoff">then Just ((n, -inf), (m, inf)) else Nothing</span></span>
+<span class="lineno">  229 </span><span class="spaces">  </span><span class="istickedoff">| d &gt; 0      = Just ((n,  (-w)/d), (m, (1-w)/d))</span>
+<span class="lineno">  230 </span><span class="spaces">  </span><span class="istickedoff">| <span class="tickonlytrue">otherwise</span>  = Just ((m, (1-w)/d), (n,  (-w)/d))</span></span>
+<span class="lineno">  231 </span>
+<span class="lineno">  232 </span><span class="decl"><span class="istickedoff">intersectSlabIval Nothing Nothing  = <span class="nottickedoff">Nothing</span></span>
+<span class="lineno">  233 </span><span class="spaces"></span><span class="istickedoff">intersectSlabIval Nothing (Just i) = <span class="nottickedoff">Nothing</span></span>
+<span class="lineno">  234 </span><span class="spaces"></span><span class="istickedoff">intersectSlabIval (Just i) Nothing = Nothing</span>
+<span class="lineno">  235 </span><span class="spaces"></span><span class="istickedoff">intersectSlabIval (Just (nu1@(n1, u1), mv1@(m1, v1)))</span>
+<span class="lineno">  236 </span><span class="spaces">                  </span><span class="istickedoff">(Just (nu2@(n2, u2), mv2@(m2, v2)))</span>
+<span class="lineno">  237 </span><span class="spaces">  </span><span class="istickedoff">= checkInterval (nu, mv)</span>
+<span class="lineno">  238 </span><span class="spaces">  </span><span class="istickedoff">where nu = if u1 &lt; u2 then nu2 else nu1</span>
+<span class="lineno">  239 </span><span class="spaces">        </span><span class="istickedoff">mv = if v1 &lt; v2 then mv1 else mv2</span>
+<span class="lineno">  240 </span><span class="spaces">        </span><span class="istickedoff">checkInterval numv@(nu@(_, u), (m, v))</span>
+<span class="lineno">  241 </span><span class="spaces">          </span><span class="istickedoff">-- rounding error may force us to push v out a bit</span>
+<span class="lineno">  242 </span><span class="spaces">          </span><span class="istickedoff">| <span class="tickonlyfalse">u `near` v</span> = <span class="nottickedoff">Just (nu, (m, u + epsilon))</span></span>
+<span class="lineno">  243 </span><span class="spaces">          </span><span class="istickedoff">| u    &lt;   v = Just numv</span>
+<span class="lineno">  244 </span><span class="spaces">          </span><span class="istickedoff">| <span class="tickonlytrue">otherwise</span>  = Nothing</span></span>
+<span class="lineno">  245 </span>
+<span class="lineno">  246 </span>
+<span class="lineno">  247 </span>--------------------------------
+<span class="lineno">  248 </span>-- Cylinder
+<span class="lineno">  249 </span>--------------------------------
+<span class="lineno">  250 </span>
+<span class="lineno">  251 </span>intersectCylinder :: Ray -&gt; a -&gt; IList (Surface, Texture a)
+<span class="lineno">  252 </span><span class="decl"><span class="nottickedoff">intersectCylinder ray texture</span>
+<span class="lineno">  253 </span><span class="spaces">  </span><span class="nottickedoff">= isectSide `intersectIntervals` isectTop `intersectIntervals` isectBottom</span>
+<span class="lineno">  254 </span><span class="spaces">  </span><span class="nottickedoff">where isectSide   = intersectCylSide ray texture</span>
+<span class="lineno">  255 </span><span class="spaces">        </span><span class="nottickedoff">isectTop    = intersectXZPlane CylinderTop ray 1.0 texture</span>
+<span class="lineno">  256 </span><span class="spaces">        </span><span class="nottickedoff">isectBottom = complementIntervals $ negateSurfaces $</span>
+<span class="lineno">  257 </span><span class="spaces">                      </span><span class="nottickedoff">intersectXZPlane CylinderBottom ray 0.0 texture</span></span>
+<span class="lineno">  258 </span>
+<span class="lineno">  259 </span><span class="decl"><span class="nottickedoff">intersectCylSide (r, v) texture</span>
+<span class="lineno">  260 </span><span class="spaces">  </span><span class="nottickedoff">= -- The ray (x + ta, y + tb, z + tc) intersects the sides of the</span>
+<span class="lineno">  261 </span><span class="spaces">    </span><span class="nottickedoff">-- cylinder if:</span>
+<span class="lineno">  262 </span><span class="spaces">    </span><span class="nottickedoff">--    (x + ta)^2 + (z + tc)^2 = 1  and 0 &lt;= y + tb &lt;= 1.</span>
+<span class="lineno">  263 </span><span class="spaces">    </span><span class="nottickedoff">if (sq a + sq c) `near` 0</span>
+<span class="lineno">  264 </span><span class="spaces">    </span><span class="nottickedoff">then -- The ray is parallel to the Y-axis, and does not intersect</span>
+<span class="lineno">  265 </span><span class="spaces">         </span><span class="nottickedoff">-- the cylinder sides.  It's either all in, or all out</span>
+<span class="lineno">  266 </span><span class="spaces">        </span><span class="nottickedoff">if (sqxy `near` 1.0 || sqxy &lt; 1.0) then openIList else emptyIList</span>
+<span class="lineno">  267 </span><span class="spaces">   </span><span class="nottickedoff">else -- Find values of t that solve the quadratic equation</span>
+<span class="lineno">  268 </span><span class="spaces">        </span><span class="nottickedoff">--   (a^2 + c^2)t^2 + 2(ax + cz)t + x^2 + z^2 - 1 = 0</span>
+<span class="lineno">  269 </span><span class="spaces">        </span><span class="nottickedoff">let c1 = sq a + sq c</span>
+<span class="lineno">  270 </span><span class="spaces">            </span><span class="nottickedoff">c2 = 2 * (x * a + z * c)</span>
+<span class="lineno">  271 </span><span class="spaces">            </span><span class="nottickedoff">c3 = sq x + sq z - 1</span>
+<span class="lineno">  272 </span><span class="spaces">        </span><span class="nottickedoff">in</span>
+<span class="lineno">  273 </span><span class="spaces">        </span><span class="nottickedoff">case quadratic c1 c2 c3 of</span>
+<span class="lineno">  274 </span><span class="spaces">        </span><span class="nottickedoff">Nothing -&gt; emptyIList</span>
+<span class="lineno">  275 </span><span class="spaces">        </span><span class="nottickedoff">Just (t1, t2) -&gt; entryexit (g t1) (g t2)</span>
+<span class="lineno">  276 </span><span class="spaces"></span><span class="nottickedoff"></span>
+<span class="lineno">  277 </span><span class="spaces">  </span><span class="nottickedoff">where sqxy = sq x + sq y</span>
+<span class="lineno">  278 </span><span class="spaces">        </span><span class="nottickedoff">g t = (t, (Cylindrical origin v1 v2, (CylinderSide, p0, texture)))</span>
+<span class="lineno">  279 </span><span class="spaces">            </span><span class="nottickedoff">where origin = point 0 0 0</span>
+<span class="lineno">  280 </span><span class="spaces">                  </span><span class="nottickedoff">x0 = x + t * a</span>
+<span class="lineno">  281 </span><span class="spaces">                  </span><span class="nottickedoff">y0 = y + t * b</span>
+<span class="lineno">  282 </span><span class="spaces">                  </span><span class="nottickedoff">z0 = z + t * c</span>
+<span class="lineno">  283 </span><span class="spaces">                  </span><span class="nottickedoff">p0 = point  x0 y0 z0</span>
+<span class="lineno">  284 </span><span class="spaces">                  </span><span class="nottickedoff">v0 = vector x0 0 z0</span>
+<span class="lineno">  285 </span><span class="spaces">                  </span><span class="nottickedoff">(v1, v2) = tangents v0</span>
+<span class="lineno">  286 </span><span class="spaces"></span><span class="nottickedoff"></span>
+<span class="lineno">  287 </span><span class="spaces">        </span><span class="nottickedoff">x = xCoord r</span>
+<span class="lineno">  288 </span><span class="spaces">        </span><span class="nottickedoff">y = yCoord r</span>
+<span class="lineno">  289 </span><span class="spaces">        </span><span class="nottickedoff">z = zCoord r</span>
+<span class="lineno">  290 </span><span class="spaces">        </span><span class="nottickedoff">a = xComponent v</span>
+<span class="lineno">  291 </span><span class="spaces">        </span><span class="nottickedoff">b = yComponent v</span>
+<span class="lineno">  292 </span><span class="spaces">        </span><span class="nottickedoff">c = zComponent v</span></span>
+<span class="lineno">  293 </span>
+<span class="lineno">  294 </span>
+<span class="lineno">  295 </span>-------------------
+<span class="lineno">  296 </span>-- Cone
+<span class="lineno">  297 </span>-------------------
+<span class="lineno">  298 </span>
+<span class="lineno">  299 </span>intersectCone :: Ray -&gt; a -&gt; IList (Surface, Texture a)
+<span class="lineno">  300 </span><span class="decl"><span class="nottickedoff">intersectCone ray texture</span>
+<span class="lineno">  301 </span><span class="spaces">  </span><span class="nottickedoff">= isectSide `intersectIntervals` isectTop `intersectIntervals` isectBottom</span>
+<span class="lineno">  302 </span><span class="spaces">  </span><span class="nottickedoff">where isectSide   = intersectConeSide ray texture</span>
+<span class="lineno">  303 </span><span class="spaces">        </span><span class="nottickedoff">isectTop    = intersectXZPlane ConeBase ray 1.0 texture</span>
+<span class="lineno">  304 </span><span class="spaces">        </span><span class="nottickedoff">isectBottom = complementIntervals $ negateSurfaces $</span>
+<span class="lineno">  305 </span><span class="spaces">                      </span><span class="nottickedoff">intersectXZPlane ConeBase ray 0.0 texture</span></span>
+<span class="lineno">  306 </span>
+<span class="lineno">  307 </span><span class="decl"><span class="nottickedoff">intersectConeSide (r, v) texture</span>
+<span class="lineno">  308 </span><span class="spaces">  </span><span class="nottickedoff">= -- Find the points where the ray intersects the cond side.  At any points of</span>
+<span class="lineno">  309 </span><span class="spaces">    </span><span class="nottickedoff">-- intersection, we must have:</span>
+<span class="lineno">  310 </span><span class="spaces">    </span><span class="nottickedoff">--    (x + ta)^2 + (z + tc)^2 = (y + tb)^2</span>
+<span class="lineno">  311 </span><span class="spaces">    </span><span class="nottickedoff">-- which is the following quadratic equation:</span>
+<span class="lineno">  312 </span><span class="spaces">    </span><span class="nottickedoff">--    t^2(a^2-b^2+c^2) + 2t(xa-yb+cz) + (x^2-y^2+z^2) = 0</span>
+<span class="lineno">  313 </span><span class="spaces">    </span><span class="nottickedoff">let c1 = sq a - sq b + sq c</span>
+<span class="lineno">  314 </span><span class="spaces">        </span><span class="nottickedoff">c2 = 2 * (x * a - y * b + c * z)</span>
+<span class="lineno">  315 </span><span class="spaces">        </span><span class="nottickedoff">c3 = sq x - sq y + sq z</span>
+<span class="lineno">  316 </span><span class="spaces">    </span><span class="nottickedoff">in  case quadratic c1 c2 c3 of</span>
+<span class="lineno">  317 </span><span class="spaces">        </span><span class="nottickedoff">Nothing -&gt; emptyIList</span>
+<span class="lineno">  318 </span><span class="spaces">        </span><span class="nottickedoff">Just (t1, t2) -&gt;</span>
+<span class="lineno">  319 </span><span class="spaces">            </span><span class="nottickedoff">-- If either intersection strikes the middle, then the other</span>
+<span class="lineno">  320 </span><span class="spaces">            </span><span class="nottickedoff">-- can only be off by rounding error, so we make a tangent</span>
+<span class="lineno">  321 </span><span class="spaces">            </span><span class="nottickedoff">-- strike using the &quot;good&quot; value.</span>
+<span class="lineno">  322 </span><span class="spaces">            </span><span class="nottickedoff">-- If the intersections straddle the origin, then it's</span>
+<span class="lineno">  323 </span><span class="spaces">            </span><span class="nottickedoff">-- an exit/entry pair, otherwise it's an entry/exit pair.</span>
+<span class="lineno">  324 </span><span class="spaces">            </span><span class="nottickedoff">let y1 = y + t1 * b</span>
+<span class="lineno">  325 </span><span class="spaces">                </span><span class="nottickedoff">y2 = y + t2 * b</span>
+<span class="lineno">  326 </span><span class="spaces">            </span><span class="nottickedoff">in  if y1 `near` 0                  then entryexit (g t1) (g t1)</span>
+<span class="lineno">  327 </span><span class="spaces">                </span><span class="nottickedoff">else if y2 `near` 0             then entryexit (g t2) (g t2)</span>
+<span class="lineno">  328 </span><span class="spaces">                </span><span class="nottickedoff">else if (y1 &lt; 0) `xor` (y2 &lt; 0) then exitentry (g t1) (g t2)</span>
+<span class="lineno">  329 </span><span class="spaces">                </span><span class="nottickedoff">else                                 entryexit (g t1) (g t2)</span>
+<span class="lineno">  330 </span><span class="spaces"></span><span class="nottickedoff"></span>
+<span class="lineno">  331 </span><span class="spaces">  </span><span class="nottickedoff">where g t = (t, (Conic origin v1 v2, (ConeSide, p0, texture)))</span>
+<span class="lineno">  332 </span><span class="spaces">            </span><span class="nottickedoff">where origin = point 0 0 0</span>
+<span class="lineno">  333 </span><span class="spaces">                  </span><span class="nottickedoff">x0 = x + t * a</span>
+<span class="lineno">  334 </span><span class="spaces">                  </span><span class="nottickedoff">y0 = y + t * b</span>
+<span class="lineno">  335 </span><span class="spaces">                  </span><span class="nottickedoff">z0 = z + t * c</span>
+<span class="lineno">  336 </span><span class="spaces">                  </span><span class="nottickedoff">p0 = point  x0 y0 z0</span>
+<span class="lineno">  337 </span><span class="spaces">                  </span><span class="nottickedoff">v0 = normalize $ vector x0 (-y0) z0</span>
+<span class="lineno">  338 </span><span class="spaces">                  </span><span class="nottickedoff">(v1, v2) = tangents v0</span>
+<span class="lineno">  339 </span><span class="spaces"></span><span class="nottickedoff"></span>
+<span class="lineno">  340 </span><span class="spaces">        </span><span class="nottickedoff">x = xCoord r</span>
+<span class="lineno">  341 </span><span class="spaces">        </span><span class="nottickedoff">y = yCoord r</span>
+<span class="lineno">  342 </span><span class="spaces">        </span><span class="nottickedoff">z = zCoord r</span>
+<span class="lineno">  343 </span><span class="spaces">        </span><span class="nottickedoff">a = xComponent v</span>
+<span class="lineno">  344 </span><span class="spaces">        </span><span class="nottickedoff">b = yComponent v</span>
+<span class="lineno">  345 </span><span class="spaces">        </span><span class="nottickedoff">c = zComponent v</span>
+<span class="lineno">  346 </span><span class="spaces"></span><span class="nottickedoff"></span>
+<span class="lineno">  347 </span><span class="spaces">        </span><span class="nottickedoff">-- beyond me why this isn't defined in the prelude...</span>
+<span class="lineno">  348 </span><span class="spaces">        </span><span class="nottickedoff">xor False b = b</span>
+<span class="lineno">  349 </span><span class="spaces">        </span><span class="nottickedoff">xor True  b = not b</span></span>
+<span class="lineno">  350 </span>
+<span class="lineno">  351 </span>
+<span class="lineno">  352 </span>-------------------
+<span class="lineno">  353 </span>-- Solving quadratics
+<span class="lineno">  354 </span>-------------------
+<span class="lineno">  355 </span>
+<span class="lineno">  356 </span>quadratic :: Double -&gt; Double -&gt; Double -&gt; Maybe (Double, Double)
+<span class="lineno">  357 </span><span class="decl"><span class="nottickedoff">quadratic a b c =</span>
+<span class="lineno">  358 </span><span class="spaces">  </span><span class="nottickedoff">-- Solve the equation ax^2 + bx + c = 0 by using the quadratic formula.</span>
+<span class="lineno">  359 </span><span class="spaces">  </span><span class="nottickedoff">let d = sq b - 4 * a * c</span>
+<span class="lineno">  360 </span><span class="spaces">      </span><span class="nottickedoff">d' = if d `near` 0 then 0 else d</span>
+<span class="lineno">  361 </span><span class="spaces">  </span><span class="nottickedoff">in if d' &lt; 0</span>
+<span class="lineno">  362 </span><span class="spaces">     </span><span class="nottickedoff">then Nothing -- There are no real roots.</span>
+<span class="lineno">  363 </span><span class="spaces">     </span><span class="nottickedoff">else</span>
+<span class="lineno">  364 </span><span class="spaces">        </span><span class="nottickedoff">if a &gt; 0 then Just (((-b) - sqrt d') / (2 * a),</span>
+<span class="lineno">  365 </span><span class="spaces">                            </span><span class="nottickedoff">((-b) + sqrt d') / (2 * a))</span>
+<span class="lineno">  366 </span><span class="spaces">                 </span><span class="nottickedoff">else Just (((-b) + sqrt d') / (2 * a),</span>
+<span class="lineno">  367 </span><span class="spaces">                            </span><span class="nottickedoff">((-b) - sqrt d') / (2 * a))</span></span>
+<span class="lineno">  368 </span>
+<span class="lineno">  369 </span>-------------------
+<span class="lineno">  370 </span>-- Bounding boxes
+<span class="lineno">  371 </span>-------------------
+<span class="lineno">  372 </span>
+<span class="lineno">  373 </span>data MaybeInterval = Interval !Double !Double 
+<span class="lineno">  374 </span>                  | NoInterval
+<span class="lineno">  375 </span>
+<span class="lineno">  376 </span><span class="decl"><span class="istickedoff">isInterval (Interval _ _) = True</span>
+<span class="lineno">  377 </span><span class="spaces"></span><span class="istickedoff">isInterval _              = False</span></span>
+<span class="lineno">  378 </span>
+<span class="lineno">  379 </span>intersectWithBox :: Ray -&gt; Box -&gt; Bool
+<span class="lineno">  380 </span><span class="decl"><span class="istickedoff">intersectWithBox (r, v) (B x1 x2 y1 y2 z1 z2)</span>
+<span class="lineno">  381 </span><span class="spaces">  </span><span class="istickedoff">= isInterval interval</span>
+<span class="lineno">  382 </span><span class="spaces">  </span><span class="istickedoff">where x_interval = intersectRayWithSlab (xCoord r) (xComponent v) (x1, x2)</span>
+<span class="lineno">  383 </span><span class="spaces">        </span><span class="istickedoff">y_interval = intersectRayWithSlab (yCoord r) (yComponent v) (y1, y2)</span>
+<span class="lineno">  384 </span><span class="spaces">        </span><span class="istickedoff">z_interval = intersectRayWithSlab (zCoord r) (zComponent v) (z1, z2)</span>
+<span class="lineno">  385 </span><span class="spaces">        </span><span class="istickedoff">interval = intersectInterval x_interval</span>
+<span class="lineno">  386 </span><span class="spaces">                   </span><span class="istickedoff">(intersectInterval y_interval z_interval)</span></span>
+<span class="lineno">  387 </span>
+<span class="lineno">  388 </span>intersectInterval :: MaybeInterval -&gt; MaybeInterval -&gt; MaybeInterval
+<span class="lineno">  389 </span><span class="decl"><span class="istickedoff">intersectInterval NoInterval _ = <span class="nottickedoff">NoInterval</span></span>
+<span class="lineno">  390 </span><span class="spaces"></span><span class="istickedoff">intersectInterval _ NoInterval = NoInterval</span>
+<span class="lineno">  391 </span><span class="spaces"></span><span class="istickedoff">intersectInterval (Interval a b) (Interval c d)</span>
+<span class="lineno">  392 </span><span class="spaces">  </span><span class="istickedoff">| b &lt; c || d &lt; a = NoInterval</span>
+<span class="lineno">  393 </span><span class="spaces">  </span><span class="istickedoff">| <span class="tickonlytrue">otherwise</span> = Interval (a `max` c) (b `min` d)</span></span>
+<span class="lineno">  394 </span>
+<span class="lineno">  395 </span>{-# INLINE intersectRayWithSlab #-}
+<span class="lineno">  396 </span>intersectRayWithSlab :: Double -&gt; Double -&gt; (Double,Double) -&gt; MaybeInterval
+<span class="lineno">  397 </span><span class="decl"><span class="istickedoff">intersectRayWithSlab xCoord alpha (x1, x2)</span>
+<span class="lineno">  398 </span><span class="spaces">  </span><span class="istickedoff">| alpha == 0 = if xCoord &lt; x1 || xCoord &gt; x2 then NoInterval else infInterval</span>
+<span class="lineno">  399 </span><span class="spaces">  </span><span class="istickedoff">| alpha &gt;  0 = Interval a b</span>
+<span class="lineno">  400 </span><span class="spaces">  </span><span class="istickedoff">| <span class="tickonlytrue">otherwise</span>  = Interval b a </span>
+<span class="lineno">  401 </span><span class="spaces">  </span><span class="istickedoff">where a = (x1 - xCoord) / alpha</span>
+<span class="lineno">  402 </span><span class="spaces">        </span><span class="istickedoff">b = (x2 - xCoord) / alpha</span></span>
+<span class="lineno">  403 </span>
+<span class="lineno">  404 </span><span class="decl"><span class="istickedoff">infInterval = Interval (-inf) inf</span></span>
+
+</pre>
+</html>
+Writing: Misc.hs.html
+<html><style type="text/css">
+span.lineno { color: white; background: #aaaaaa; border-right: solid white 12px }
+span.nottickedoff { background: yellow}
+span.istickedoff { background: white }
+span.tickonlyfalse { margin: -1px; border: 1px solid #f20913; background: #f20913 }
+span.tickonlytrue  { margin: -1px; border: 1px solid #60de51; background: #60de51 }
+span.funcount { font-size: small; color: orange; z-index: 2; position: absolute; right: 20 }
+span.decl { font-weight: bold }
+span.spaces    { background: white }
+</style>
+<pre>
+<span class="lineno">    1 </span>-- Copyright (c) 2000 Galois Connections, Inc.
+<span class="lineno">    2 </span>-- All rights reserved.  This software is distributed as
+<span class="lineno">    3 </span>-- free software under the license in the file &quot;LICENSE&quot;,
+<span class="lineno">    4 </span>-- which is included in the distribution.
+<span class="lineno">    5 </span>
+<span class="lineno">    6 </span>module Misc where
+<span class="lineno">    7 </span>
+<span class="lineno">    8 </span>import Debug.Trace
+<span class="lineno">    9 </span>
+<span class="lineno">   10 </span><span class="decl"><span class="nottickedoff">debug s v = trace (s ++&quot; : &quot;++ show v ++ &quot;\n&quot;) v</span></span>
+<span class="lineno">   11 </span>-- debug s v = v
+
+</pre>
+</html>
+Writing: Interval.hs.html
+<html><style type="text/css">
+span.lineno { color: white; background: #aaaaaa; border-right: solid white 12px }
+span.nottickedoff { background: yellow}
+span.istickedoff { background: white }
+span.tickonlyfalse { margin: -1px; border: 1px solid #f20913; background: #f20913 }
+span.tickonlytrue  { margin: -1px; border: 1px solid #60de51; background: #60de51 }
+span.funcount { font-size: small; color: orange; z-index: 2; position: absolute; right: 20 }
+span.decl { font-weight: bold }
+span.spaces    { background: white }
+</style>
+<pre>
+<span class="lineno">    1 </span>-- Copyright (c) 2000 Galois Connections, Inc.
+<span class="lineno">    2 </span>-- All rights reserved.  This software is distributed as
+<span class="lineno">    3 </span>-- free software under the license in the file &quot;LICENSE&quot;,
+<span class="lineno">    4 </span>-- which is included in the distribution.
+<span class="lineno">    5 </span>
+<span class="lineno">    6 </span>module Interval
+<span class="lineno">    7 </span>    ( IList
+<span class="lineno">    8 </span>    , Intersection
+<span class="lineno">    9 </span>    , emptyIList, openIList
+<span class="lineno">   10 </span>    , mkEntry, mkExit
+<span class="lineno">   11 </span>    , entryexit, exitentry
+<span class="lineno">   12 </span>    , mapI
+<span class="lineno">   13 </span>    , unionIntervals, intersectIntervals, differenceIntervals
+<span class="lineno">   14 </span>    , complementIntervals
+<span class="lineno">   15 </span>    ) where
+<span class="lineno">   16 </span>
+<span class="lineno">   17 </span>import Geometry
+<span class="lineno">   18 </span>
+<span class="lineno">   19 </span>-- The result of a ray trace is represented as a list of surface
+<span class="lineno">   20 </span>-- intersections.  Each intersection is a point along the ray with
+<span class="lineno">   21 </span>-- a flag indicating whether this intersection is an entry or an
+<span class="lineno">   22 </span>-- exit from the solid.  Each intersection also carries unspecified
+<span class="lineno">   23 </span>-- surface data for use by the illumination model.
+<span class="lineno">   24 </span>
+<span class="lineno">   25 </span>-- Just the list of intersections isn't enough, however.  An empty
+<span class="lineno">   26 </span>-- list can denote either a trace that is always within the solid
+<span class="lineno">   27 </span>-- or never in the solid.  To dissambiguate, an extra flag is kept
+<span class="lineno">   28 </span>-- that indicates whether we are starting inside or outside of the
+<span class="lineno">   29 </span>-- solid.  As a convenience, we also keep an additional flag that
+<span class="lineno">   30 </span>-- indicates whether the last intersection ends inside or outside.
+<span class="lineno">   31 </span>
+<span class="lineno">   32 </span>type IList a       = (Bool, [Intersection a], Bool)
+<span class="lineno">   33 </span>type Intersection a     = (Double, Bool, a)
+<span class="lineno">   34 </span>
+<span class="lineno">   35 </span><span class="decl"><span class="istickedoff">emptyIList = (False, [], False)</span></span>
+<span class="lineno">   36 </span><span class="decl"><span class="nottickedoff">openIList = (True, [], True)</span></span>
+<span class="lineno">   37 </span>
+<span class="lineno">   38 </span><span class="decl"><span class="istickedoff">mapI f (b1, is, b2) = (b1, map f is, b2)</span></span>
+<span class="lineno">   39 </span>
+<span class="lineno">   40 </span><span class="decl"><span class="istickedoff">isEntry (_, entry, _) = entry</span></span>
+<span class="lineno">   41 </span><span class="decl"><span class="nottickedoff">isExit  (_, entry, _) = not entry</span></span>
+<span class="lineno">   42 </span>
+<span class="lineno">   43 </span><span class="decl"><span class="istickedoff">mkEntry (t, a) = (t, True,  a)</span></span>
+<span class="lineno">   44 </span><span class="decl"><span class="istickedoff">mkExit  (t, a) = (t, False, a)</span></span>
+<span class="lineno">   45 </span>
+<span class="lineno">   46 </span><span class="decl"><span class="istickedoff">entryexit w1 w2 = (False, [mkEntry w1, mkExit w2], False)</span></span>
+<span class="lineno">   47 </span><span class="decl"><span class="nottickedoff">exitentry w1 w2 = (True, [mkExit w1, mkEntry w2], True)</span></span>
+<span class="lineno">   48 </span><span class="decl"><span class="nottickedoff">arrange   w1@(t1, _) w2@(t2, _) | t1 &lt; t2   = entryexit w1 w2</span>
+<span class="lineno">   49 </span><span class="spaces">                                </span><span class="nottickedoff">| otherwise = entryexit w2 w1</span></span>
+<span class="lineno">   50 </span>
+<span class="lineno">   51 </span>
+<span class="lineno">   52 </span>cmpI :: Intersection a -&gt; Intersection a -&gt; Ordering
+<span class="lineno">   53 </span><span class="decl"><span class="istickedoff">cmpI (i, _, _) (j, _, _)</span>
+<span class="lineno">   54 </span><span class="spaces">  </span><span class="istickedoff">| <span class="tickonlyfalse">i `near` j</span> = <span class="nottickedoff">EQ</span></span>
+<span class="lineno">   55 </span><span class="spaces">  </span><span class="istickedoff">| i   &lt;    j = LT</span>
+<span class="lineno">   56 </span><span class="spaces">  </span><span class="istickedoff">| <span class="tickonlytrue">otherwise</span>  = GT</span></span>
+<span class="lineno">   57 </span>
+<span class="lineno">   58 </span><span class="decl"><span class="nottickedoff">bad (b1, [], b2) = b1 /= b2</span>
+<span class="lineno">   59 </span><span class="spaces"></span><span class="nottickedoff">bad (b1, is, b2) = bad' b1 is || b2 /= b3</span>
+<span class="lineno">   60 </span><span class="spaces">  </span><span class="nottickedoff">where (_, b3, _) = last is</span></span>
+<span class="lineno">   61 </span>
+<span class="lineno">   62 </span><span class="decl"><span class="nottickedoff">bad' b [] = False</span>
+<span class="lineno">   63 </span><span class="spaces"></span><span class="nottickedoff">bad' b ((_, c, _) : is) = b == c || bad' c is</span></span>
+<span class="lineno">   64 </span>
+<span class="lineno">   65 </span>unionIntervals :: IList a -&gt; IList a -&gt; IList a
+<span class="lineno">   66 </span><span class="decl"><span class="istickedoff">unionIntervals (isStartOpen, is, isEndOpen) (jsStartOpen, js, jsEndOpen)</span>
+<span class="lineno">   67 </span><span class="spaces">  </span><span class="istickedoff">= (isStartOpen || jsStartOpen, uniIntervals is js, isEndOpen || jsEndOpen)</span>
+<span class="lineno">   68 </span><span class="spaces">  </span><span class="istickedoff">where uniIntervals is [] | <span class="tickonlyfalse">jsEndOpen</span> = <span class="nottickedoff">[]</span></span>
+<span class="lineno">   69 </span><span class="spaces">                           </span><span class="istickedoff">| <span class="tickonlytrue">otherwise</span> = is</span>
+<span class="lineno">   70 </span><span class="spaces">        </span><span class="istickedoff">uniIntervals [] js | <span class="tickonlyfalse">isEndOpen</span> = <span class="nottickedoff">[]</span></span>
+<span class="lineno">   71 </span><span class="spaces">                           </span><span class="istickedoff">| <span class="tickonlytrue">otherwise</span> = js</span>
+<span class="lineno">   72 </span><span class="spaces">        </span><span class="istickedoff">uniIntervals is@(i : is') js@(j : js')</span>
+<span class="lineno">   73 </span><span class="spaces">          </span><span class="istickedoff">= case cmpI i j of</span>
+<span class="lineno">   74 </span><span class="spaces">            </span><span class="istickedoff">EQ -&gt; <span class="nottickedoff">if isEntry i == isEntry j then i : uniIntervals is' js'</span></span>
+<span class="lineno">   75 </span><span class="spaces">                                            </span><span class="istickedoff"><span class="nottickedoff">else uniIntervals is' js'</span></span>
+<span class="lineno">   76 </span><span class="spaces">            </span><span class="istickedoff">LT -&gt; if <span class="tickonlytrue">isEntry j</span> then i : <span class="nottickedoff">uniIntervals is' js</span></span>
+<span class="lineno">   77 </span><span class="spaces">                               </span><span class="istickedoff">else     <span class="nottickedoff">uniIntervals is' js</span></span>
+<span class="lineno">   78 </span><span class="spaces">            </span><span class="istickedoff">GT -&gt; if <span class="tickonlytrue">isEntry i</span> then j : uniIntervals is js'</span>
+<span class="lineno">   79 </span><span class="spaces">                               </span><span class="istickedoff">else     <span class="nottickedoff">uniIntervals is js'</span></span></span>
+<span class="lineno">   80 </span>
+<span class="lineno">   81 </span>intersectIntervals :: IList a -&gt; IList a -&gt; IList a
+<span class="lineno">   82 </span><span class="decl"><span class="nottickedoff">intersectIntervals is js</span>
+<span class="lineno">   83 </span><span class="spaces">  </span><span class="nottickedoff">= complementIntervals (unionIntervals is' js')</span>
+<span class="lineno">   84 </span><span class="spaces">  </span><span class="nottickedoff">where is' = complementIntervals is</span>
+<span class="lineno">   85 </span><span class="spaces">        </span><span class="nottickedoff">js' = complementIntervals js</span></span>
+<span class="lineno">   86 </span>
+<span class="lineno">   87 </span>differenceIntervals :: IList a -&gt; IList a -&gt; IList a
+<span class="lineno">   88 </span><span class="decl"><span class="nottickedoff">differenceIntervals is js</span>
+<span class="lineno">   89 </span><span class="spaces">  </span><span class="nottickedoff">= complementIntervals (unionIntervals is' js)</span>
+<span class="lineno">   90 </span><span class="spaces">  </span><span class="nottickedoff">where is' = complementIntervals is</span></span>
+<span class="lineno">   91 </span>
+<span class="lineno">   92 </span>complementIntervals :: IList a -&gt; IList a
+<span class="lineno">   93 </span><span class="decl"><span class="nottickedoff">complementIntervals (o1, is, o2)</span>
+<span class="lineno">   94 </span><span class="spaces">  </span><span class="nottickedoff">= (not o1, [ (i, not isentry, a) | (i, isentry, a) &lt;- is ], not o2)</span></span>
+<span class="lineno">   95 </span>
+<span class="lineno">   96 </span>-- tests...
+<span class="lineno">   97 </span>
+<span class="lineno">   98 </span>{-
+<span class="lineno">   99 </span>mkIn, mkOut :: Double -&gt; Intersection a
+<span class="lineno">  100 </span>mkIn x = (x, True, undefined)
+<span class="lineno">  101 </span>mkOut x = (x, False, undefined)
+<span class="lineno">  102 </span>
+<span class="lineno">  103 </span>i1 =  (False, [ mkIn 2, mkOut 7 ], False)
+<span class="lineno">  104 </span>i1' = (True, [ mkOut 2, mkIn 7 ], True)
+<span class="lineno">  105 </span>i2 =  (False, [ mkIn 1, mkOut 3, mkIn 4, mkOut 5, mkIn 6, mkOut 8 ], False)
+<span class="lineno">  106 </span>
+<span class="lineno">  107 </span>t1 = unionIntervals i1 i2
+<span class="lineno">  108 </span>t2 = intersectIntervals i1 i2
+<span class="lineno">  109 </span>t3 = intersectIntervals i2 i1
+<span class="lineno">  110 </span>t4 = complementIntervals i1
+<span class="lineno">  111 </span>t5 = intersectIntervals i2 i1'
+<span class="lineno">  112 </span>t6 = differenceIntervals i2 i1
+<span class="lineno">  113 </span>t7 = differenceIntervals i2 i2
+<span class="lineno">  114 </span>
+<span class="lineno">  115 </span>sh (o1,is,o2) =
+<span class="lineno">  116 </span>    do  if o1 then putStr &quot;...&quot; else return ()
+<span class="lineno">  117 </span>        putStr $ foldr1 (++) (map si is)
+<span class="lineno">  118 </span>        if o2 then putStr &quot;...&quot; else return ()
+<span class="lineno">  119 </span>si (i, True, _, _) = &quot;&lt;&quot; ++ show i
+<span class="lineno">  120 </span>si (i, False, _, _) = &quot; &quot; ++ show i ++ &quot;&gt;&quot;
+<span class="lineno">  121 </span>-}
+
+</pre>
+</html>
+Writing: Surface.hs.html
+<html><style type="text/css">
+span.lineno { color: white; background: #aaaaaa; border-right: solid white 12px }
+span.nottickedoff { background: yellow}
+span.istickedoff { background: white }
+span.tickonlyfalse { margin: -1px; border: 1px solid #f20913; background: #f20913 }
+span.tickonlytrue  { margin: -1px; border: 1px solid #60de51; background: #60de51 }
+span.funcount { font-size: small; color: orange; z-index: 2; position: absolute; right: 20 }
+span.decl { font-weight: bold }
+span.spaces    { background: white }
+</style>
+<pre>
+<span class="lineno">    1 </span>-- Copyright (c) 2000 Galois Connections, Inc.
+<span class="lineno">    2 </span>-- All rights reserved.  This software is distributed as
+<span class="lineno">    3 </span>-- free software under the license in the file &quot;LICENSE&quot;,
+<span class="lineno">    4 </span>-- which is included in the distribution.
+<span class="lineno">    5 </span>
+<span class="lineno">    6 </span>module Surface
+<span class="lineno">    7 </span>    ( SurfaceFn (..)
+<span class="lineno">    8 </span>    , Properties
+<span class="lineno">    9 </span>    , sfun, sconst
+<span class="lineno">   10 </span>    , prop
+<span class="lineno">   11 </span>    , matte, shiny
+<span class="lineno">   12 </span>    , chgColor
+<span class="lineno">   13 </span>    , surface
+<span class="lineno">   14 </span>    ) where
+<span class="lineno">   15 </span>
+<span class="lineno">   16 </span>import Geometry
+<span class="lineno">   17 </span>import CSG
+<span class="lineno">   18 </span>import Misc
+<span class="lineno">   19 </span>
+<span class="lineno">   20 </span>-- the surface gets passed face then u then v.
+<span class="lineno">   21 </span>data SurfaceFn c v = SFun (Int -&gt; Double -&gt; Double -&gt; Properties c v)
+<span class="lineno">   22 </span>                   | SConst (Properties c v)
+<span class="lineno">   23 </span>
+<span class="lineno">   24 </span>sfun :: (Int -&gt; Double -&gt; Double -&gt; Properties c v) -&gt; SurfaceFn c v
+<span class="lineno">   25 </span><span class="decl"><span class="nottickedoff">sfun = SFun</span></span>
+<span class="lineno">   26 </span>sconst :: Properties c v -&gt; SurfaceFn c v
+<span class="lineno">   27 </span><span class="decl"><span class="nottickedoff">sconst = SConst</span></span>
+<span class="lineno">   28 </span>
+<span class="lineno">   29 </span>type Properties c v = (c, v, v, v)
+<span class="lineno">   30 </span>
+<span class="lineno">   31 </span><span class="decl"><span class="istickedoff">prop c d s p = (c, d, s, p)</span></span>
+<span class="lineno">   32 </span>
+<span class="lineno">   33 </span><span class="decl"><span class="nottickedoff">matte = (white, 1.0, 0.0, 1.0)</span></span>
+<span class="lineno">   34 </span><span class="decl"><span class="nottickedoff">shiny = (white, 0.0, 1.0, 1.0)</span></span>
+<span class="lineno">   35 </span>
+<span class="lineno">   36 </span>chgColor :: c -&gt; Properties d v -&gt; Properties c v
+<span class="lineno">   37 </span><span class="decl"><span class="nottickedoff">chgColor c (_, d, s, p) = (c, d, s, p)</span></span>
+<span class="lineno">   38 </span>
+<span class="lineno">   39 </span>instance (Show c, Show v) =&gt; Show (SurfaceFn c v) where
+<span class="lineno">   40 </span>  <span class="decl"><span class="nottickedoff">show (SFun _)   = &quot;Surface function&quot;</span>
+<span class="lineno">   41 </span><span class="spaces">  </span><span class="nottickedoff">-- show (SConst p) = &quot;Surface constant: &quot; ++ show p</span>
+<span class="lineno">   42 </span><span class="spaces">  </span><span class="nottickedoff">show (SConst p) = &quot;Surface constant&quot;</span></span>
+<span class="lineno">   43 </span>
+<span class="lineno">   44 </span>evalSurface :: SurfaceFn Color Double -&gt; Int -&gt; Double -&gt; Double -&gt; Properties Color Double
+<span class="lineno">   45 </span><span class="decl"><span class="istickedoff">evalSurface (SConst p) = <span class="nottickedoff">\_ _ _ -&gt; p</span></span>
+<span class="lineno">   46 </span><span class="spaces"></span><span class="istickedoff">evalSurface (SFun f)   = f</span></span>
+<span class="lineno">   47 </span>
+<span class="lineno">   48 </span>-- calculate surface properties, given the type of
+<span class="lineno">   49 </span>-- surface, and intersection point in object coordinates
+<span class="lineno">   50 </span>
+<span class="lineno">   51 </span>-- surface :: Surface SurfaceFn -&gt; (Int, Point) -&gt; (Vector, Properties)
+<span class="lineno">   52 </span>
+<span class="lineno">   53 </span><span class="decl"><span class="istickedoff">surface (Planar _ v0 v1) (n, p0, fn)</span>
+<span class="lineno">   54 </span><span class="spaces">  </span><span class="istickedoff">= (norm, evalSurface fn <span class="nottickedoff">n'</span> u v)</span>
+<span class="lineno">   55 </span><span class="spaces">  </span><span class="istickedoff">where norm = normalize $ cross v0 v1</span>
+<span class="lineno">   56 </span><span class="spaces">        </span><span class="istickedoff">(n', u, v) = planarUV n p0</span>
+<span class="lineno">   57 </span><span class="spaces"></span><span class="istickedoff"></span>
+<span class="lineno">   58 </span><span class="spaces"></span><span class="istickedoff">surface (Spherical _ v0 v1) (_, p0, fn)</span>
+<span class="lineno">   59 </span><span class="spaces">  </span><span class="istickedoff">= <span class="nottickedoff">(norm, evalSurface fn 0 u v)</span></span>
+<span class="lineno">   60 </span><span class="spaces">  </span><span class="istickedoff">where <span class="nottickedoff">x = xCoord p0</span></span>
+<span class="lineno">   61 </span><span class="spaces">        </span><span class="istickedoff"><span class="nottickedoff">y = yCoord p0</span></span>
+<span class="lineno">   62 </span><span class="spaces">        </span><span class="istickedoff"><span class="nottickedoff">z = zCoord p0</span></span>
+<span class="lineno">   63 </span><span class="spaces">        </span><span class="istickedoff"><span class="nottickedoff">k = sqrt (1 - sq y)</span></span>
+<span class="lineno">   64 </span><span class="spaces">        </span><span class="istickedoff"><span class="nottickedoff">theta = adjustRadian (atan2 (x / k) (z / k))</span></span>
+<span class="lineno">   65 </span><span class="spaces">        </span><span class="istickedoff">-- correct so that the image grows left-to-right</span>
+<span class="lineno">   66 </span><span class="spaces">        </span><span class="istickedoff">-- instead of right-to-left</span>
+<span class="lineno">   67 </span><span class="spaces">        </span><span class="istickedoff"><span class="nottickedoff">u = 1.0 - clampf (theta / (2 * pi))</span></span>
+<span class="lineno">   68 </span><span class="spaces">        </span><span class="istickedoff"><span class="nottickedoff">v =       clampf ((y + 1) / 2)</span></span>
+<span class="lineno">   69 </span><span class="spaces">        </span><span class="istickedoff"><span class="nottickedoff">norm = normalize $ cross v0 v1</span></span>
+<span class="lineno">   70 </span><span class="spaces"></span><span class="istickedoff"></span>
+<span class="lineno">   71 </span><span class="spaces"></span><span class="istickedoff">-- ZZ ignore the (incorrect) surface model, and estimate the normal</span>
+<span class="lineno">   72 </span><span class="spaces"></span><span class="istickedoff">-- from the intersection in object space</span>
+<span class="lineno">   73 </span><span class="spaces"></span><span class="istickedoff">surface (Cylindrical _ v0 v1) (_, p0, fn)</span>
+<span class="lineno">   74 </span><span class="spaces">  </span><span class="istickedoff">= <span class="nottickedoff">(norm, evalSurface fn 0 u v)</span></span>
+<span class="lineno">   75 </span><span class="spaces">  </span><span class="istickedoff">where <span class="nottickedoff">x = xCoord p0</span></span>
+<span class="lineno">   76 </span><span class="spaces">        </span><span class="istickedoff"><span class="nottickedoff">y = yCoord p0</span></span>
+<span class="lineno">   77 </span><span class="spaces">        </span><span class="istickedoff"><span class="nottickedoff">z = zCoord p0</span></span>
+<span class="lineno">   78 </span><span class="spaces">        </span><span class="istickedoff"><span class="nottickedoff">u = clampf $ adjustRadian (atan2 x z) / (2 * pi)</span></span>
+<span class="lineno">   79 </span><span class="spaces">        </span><span class="istickedoff"><span class="nottickedoff">v = y</span></span>
+<span class="lineno">   80 </span><span class="spaces">        </span><span class="istickedoff"><span class="nottickedoff">norm = normalize $ cross v0 v1</span></span>
+<span class="lineno">   81 </span><span class="spaces"></span><span class="istickedoff"></span>
+<span class="lineno">   82 </span><span class="spaces"></span><span class="istickedoff">-- ZZ ignore the (incorrect) surface model, and estimate the normal</span>
+<span class="lineno">   83 </span><span class="spaces"></span><span class="istickedoff">-- from the intersection in object space</span>
+<span class="lineno">   84 </span><span class="spaces"></span><span class="istickedoff">surface (Conic _ v0 v1) (_, p0, fn)</span>
+<span class="lineno">   85 </span><span class="spaces">  </span><span class="istickedoff">= <span class="nottickedoff">(norm, evalSurface fn 0 u v)</span></span>
+<span class="lineno">   86 </span><span class="spaces">  </span><span class="istickedoff">where <span class="nottickedoff">x = xCoord p0</span></span>
+<span class="lineno">   87 </span><span class="spaces">        </span><span class="istickedoff"><span class="nottickedoff">y = yCoord p0</span></span>
+<span class="lineno">   88 </span><span class="spaces">        </span><span class="istickedoff"><span class="nottickedoff">z = zCoord p0</span></span>
+<span class="lineno">   89 </span><span class="spaces">        </span><span class="istickedoff"><span class="nottickedoff">u = clampf $ adjustRadian (atan2 (x / y) (z / y)) / (2 * pi)</span></span>
+<span class="lineno">   90 </span><span class="spaces">        </span><span class="istickedoff"><span class="nottickedoff">v = y</span></span>
+<span class="lineno">   91 </span><span class="spaces">        </span><span class="istickedoff"><span class="nottickedoff">norm = normalize $ cross v0 v1</span></span></span>
+<span class="lineno">   92 </span>
+<span class="lineno">   93 </span><span class="decl"><span class="istickedoff">planarUV face p0</span>
+<span class="lineno">   94 </span><span class="spaces">  </span><span class="istickedoff">= case face of</span>
+<span class="lineno">   95 </span><span class="spaces">    </span><span class="istickedoff">PlaneFace      -&gt; (<span class="nottickedoff">0</span>, x, z)</span>
+<span class="lineno">   96 </span><span class="spaces"></span><span class="istickedoff"></span>
+<span class="lineno">   97 </span><span class="spaces">    </span><span class="istickedoff">CubeFront      -&gt; (<span class="nottickedoff">0</span>, x, y)</span>
+<span class="lineno">   98 </span><span class="spaces">    </span><span class="istickedoff">CubeBack       -&gt; <span class="nottickedoff">(1, x, y)</span></span>
+<span class="lineno">   99 </span><span class="spaces">    </span><span class="istickedoff">CubeLeft       -&gt; (<span class="nottickedoff">2</span>, z, y)</span>
+<span class="lineno">  100 </span><span class="spaces">    </span><span class="istickedoff">CubeRight      -&gt; <span class="nottickedoff">(3, z, y)</span></span>
+<span class="lineno">  101 </span><span class="spaces">    </span><span class="istickedoff">CubeTop        -&gt; (<span class="nottickedoff">4</span>, x, z)</span>
+<span class="lineno">  102 </span><span class="spaces">    </span><span class="istickedoff">CubeBottom     -&gt; (<span class="nottickedoff">5</span>, x, z)</span>
+<span class="lineno">  103 </span><span class="spaces"></span><span class="istickedoff"></span>
+<span class="lineno">  104 </span><span class="spaces">    </span><span class="istickedoff">CylinderTop    -&gt; <span class="nottickedoff">(1, (x + 1) / 2, (z + 1) / 2)</span></span>
+<span class="lineno">  105 </span><span class="spaces">    </span><span class="istickedoff">CylinderBottom -&gt; <span class="nottickedoff">(2, (x + 1) / 2, (z + 1) / 2)</span></span>
+<span class="lineno">  106 </span><span class="spaces"></span><span class="istickedoff"></span>
+<span class="lineno">  107 </span><span class="spaces">    </span><span class="istickedoff">ConeBase       -&gt; <span class="nottickedoff">(1, (x + 1) / 2, (z + 1) / 2)</span></span>
+<span class="lineno">  108 </span><span class="spaces">  </span><span class="istickedoff">where x = xCoord p0</span>
+<span class="lineno">  109 </span><span class="spaces">        </span><span class="istickedoff">y = yCoord p0</span>
+<span class="lineno">  110 </span><span class="spaces">        </span><span class="istickedoff">z = zCoord p0</span></span>
+<span class="lineno">  111 </span>
+<span class="lineno">  112 </span>-- misc
+<span class="lineno">  113 </span>
+<span class="lineno">  114 </span>adjustRadian :: Radian -&gt; Radian
+<span class="lineno">  115 </span><span class="decl"><span class="nottickedoff">adjustRadian r = if r &gt; 0 then r else r + 2 * pi</span></span>
+
+</pre>
+</html>
+Writing: Primitives.hs.html
+<html><style type="text/css">
+span.lineno { color: white; background: #aaaaaa; border-right: solid white 12px }
+span.nottickedoff { background: yellow}
+span.istickedoff { background: white }
+span.tickonlyfalse { margin: -1px; border: 1px solid #f20913; background: #f20913 }
+span.tickonlytrue  { margin: -1px; border: 1px solid #60de51; background: #60de51 }
+span.funcount { font-size: small; color: orange; z-index: 2; position: absolute; right: 20 }
+span.decl { font-weight: bold }
+span.spaces    { background: white }
+</style>
+<pre>
+<span class="lineno">    1 </span>-- Copyright (c) 2000 Galois Connections, Inc.
+<span class="lineno">    2 </span>-- All rights reserved.  This software is distributed as
+<span class="lineno">    3 </span>-- free software under the license in the file &quot;LICENSE&quot;,
+<span class="lineno">    4 </span>-- which is included in the distribution.
+<span class="lineno">    5 </span>
+<span class="lineno">    6 </span>module Primitives where
+<span class="lineno">    7 </span>
+<span class="lineno">    8 </span>rad2deg :: Double -&gt; Double
+<span class="lineno">    9 </span><span class="decl"><span class="nottickedoff">rad2deg r = r * 180 / pi</span></span>
+<span class="lineno">   10 </span>
+<span class="lineno">   11 </span>deg2rad :: Double -&gt; Double
+<span class="lineno">   12 </span><span class="decl"><span class="istickedoff">deg2rad d = d * pi / 180</span></span>
+<span class="lineno">   13 </span>
+<span class="lineno">   14 </span>addi :: Int -&gt; Int -&gt; Int
+<span class="lineno">   15 </span><span class="decl"><span class="nottickedoff">addi = (+)</span></span>
+<span class="lineno">   16 </span>
+<span class="lineno">   17 </span>addf :: Double -&gt; Double -&gt; Double
+<span class="lineno">   18 </span><span class="decl"><span class="nottickedoff">addf = (+)</span></span>
+<span class="lineno">   19 </span>
+<span class="lineno">   20 </span>acosD :: Double -&gt; Double
+<span class="lineno">   21 </span><span class="decl"><span class="nottickedoff">acosD x = acos x * 180 / pi</span></span>
+<span class="lineno">   22 </span>
+<span class="lineno">   23 </span>asinD :: Double -&gt; Double
+<span class="lineno">   24 </span><span class="decl"><span class="nottickedoff">asinD x = asin x * 180 / pi</span></span>
+
+</pre>
+</html>
+Writing: Eval.hs.html
+<html><style type="text/css">
+span.lineno { color: white; background: #aaaaaa; border-right: solid white 12px }
+span.nottickedoff { background: yellow}
+span.istickedoff { background: white }
+span.tickonlyfalse { margin: -1px; border: 1px solid #f20913; background: #f20913 }
+span.tickonlytrue  { margin: -1px; border: 1px solid #60de51; background: #60de51 }
+span.funcount { font-size: small; color: orange; z-index: 2; position: absolute; right: 20 }
+span.decl { font-weight: bold }
+span.spaces    { background: white }
+</style>
+<pre>
+<span class="lineno">    1 </span>-- Copyright (c) 2000 Galois Connections, Inc.
+<span class="lineno">    2 </span>-- All rights reserved.  This software is distributed as
+<span class="lineno">    3 </span>-- free software under the license in the file &quot;LICENSE&quot;,
+<span class="lineno">    4 </span>-- which is included in the distribution.
+<span class="lineno">    5 </span>
+<span class="lineno">    6 </span>module Eval where
+<span class="lineno">    7 </span>
+<span class="lineno">    8 </span>import Array
+<span class="lineno">    9 </span>
+<span class="lineno">   10 </span>import Geometry
+<span class="lineno">   11 </span>import CSG
+<span class="lineno">   12 </span>import Surface
+<span class="lineno">   13 </span>import Data
+<span class="lineno">   14 </span>import Parse (rayParse, rayParseF)
+<span class="lineno">   15 </span>
+<span class="lineno">   16 </span>class Monad m =&gt; MonadEval m where
+<span class="lineno">   17 </span>  doOp :: PrimOp -&gt; GMLOp -&gt; Stack -&gt; m Stack
+<span class="lineno">   18 </span>  tick :: m ()
+<span class="lineno">   19 </span>  err  :: String -&gt; m a
+<span class="lineno">   20 </span>
+<span class="lineno">   21 </span>  <span class="decl"><span class="istickedoff">tick = return <span class="nottickedoff">()</span></span></span>
+<span class="lineno">   22 </span>
+<span class="lineno">   23 </span>newtype Pure a = Pure a deriving <span class="decl"><span class="nottickedoff"><span class="decl"><span class="nottickedoff">Show</span></span></span></span>
+<span class="lineno">   24 </span>
+<span class="lineno">   25 </span>instance Monad Pure where
+<span class="lineno">   26 </span>    <span class="decl"><span class="istickedoff">Pure x &gt;&gt;= k = k x</span></span>
+<span class="lineno">   27 </span>    <span class="decl"><span class="istickedoff">return       = Pure</span></span>
+<span class="lineno">   28 </span>    <span class="decl"><span class="nottickedoff">fail s       = error s</span></span>
+<span class="lineno">   29 </span>
+<span class="lineno">   30 </span>instance MonadEval Pure where
+<span class="lineno">   31 </span>  <span class="decl"><span class="istickedoff">doOp   = doPureOp</span></span> 
+<span class="lineno">   32 </span>  <span class="decl"><span class="nottickedoff">err  s = error s</span></span>
+<span class="lineno">   33 </span>
+<span class="lineno">   34 </span>instance MonadEval IO where
+<span class="lineno">   35 </span>  <span class="decl"><span class="istickedoff">doOp prim op stk = do { -- putStrLn (&quot;Calling &quot; ++ show op</span>
+<span class="lineno">   36 </span><span class="spaces">                          </span><span class="istickedoff">--           ++ &quot; &lt;&lt; &quot; ++ show stk ++ &quot; &gt;&gt;&quot;)</span>
+<span class="lineno">   37 </span><span class="spaces">                          </span><span class="istickedoff">doAllOp  prim op stk</span>
+<span class="lineno">   38 </span><span class="spaces">                        </span><span class="istickedoff">}</span></span>
+<span class="lineno">   39 </span>  <span class="decl"><span class="nottickedoff">err  s = error s</span></span>
+<span class="lineno">   40 </span>
+<span class="lineno">   41 </span>data State
+<span class="lineno">   42 </span>        = State { env   :: Env
+<span class="lineno">   43 </span>                , stack :: Stack
+<span class="lineno">   44 </span>                , code  :: Code
+<span class="lineno">   45 </span>                } deriving <span class="decl"><span class="nottickedoff"><span class="decl"><span class="nottickedoff">Show</span></span></span></span>
+<span class="lineno">   46 </span>
+<span class="lineno">   47 </span>callback :: Env -&gt; Code -&gt; Stack -&gt; Stack
+<span class="lineno">   48 </span><span class="decl"><span class="istickedoff">callback env code stk</span>
+<span class="lineno">   49 </span><span class="spaces">      </span><span class="istickedoff">= case eval (State { env = env, stack = stk, code = code}) of</span>
+<span class="lineno">   50 </span><span class="spaces">             </span><span class="istickedoff">Pure stk -&gt; stk</span></span>
+<span class="lineno">   51 </span>
+<span class="lineno">   52 </span>{-# SPECIALIZE eval ::  State -&gt; Pure Stack #-}
+<span class="lineno">   53 </span>{-# SPECIALIZE eval ::  State -&gt; IO Stack #-}
+<span class="lineno">   54 </span>
+<span class="lineno">   55 </span>eval :: MonadEval m =&gt; State -&gt; m Stack
+<span class="lineno">   56 </span><span class="decl"><span class="istickedoff">eval st =</span>
+<span class="lineno">   57 </span><span class="spaces">  </span><span class="istickedoff">do { () &lt;- return () -- $ unsafePerformIO (print st)   -- Functional debugger</span>
+<span class="lineno">   58 </span><span class="spaces">     </span><span class="istickedoff">; if moreCode st then</span>
+<span class="lineno">   59 </span><span class="spaces">       </span><span class="istickedoff">do { tick             -- tick first, so as to catch loops on new eval.</span>
+<span class="lineno">   60 </span><span class="spaces">            </span><span class="istickedoff">; st' &lt;- step st</span>
+<span class="lineno">   61 </span><span class="spaces">            </span><span class="istickedoff">; eval st'</span>
+<span class="lineno">   62 </span><span class="spaces">            </span><span class="istickedoff">}</span>
+<span class="lineno">   63 </span><span class="spaces">        </span><span class="istickedoff">else return (stack st)</span>
+<span class="lineno">   64 </span><span class="spaces">     </span><span class="istickedoff">}</span></span>
+<span class="lineno">   65 </span>     
+<span class="lineno">   66 </span>moreCode :: State -&gt; Bool
+<span class="lineno">   67 </span><span class="decl"><span class="istickedoff">moreCode (State {code = []}) = False</span>
+<span class="lineno">   68 </span><span class="spaces"></span><span class="istickedoff">moreCode _                   = True</span></span>
+<span class="lineno">   69 </span>
+<span class="lineno">   70 </span>-- Step has a precondition that there *is* code to run
+<span class="lineno">   71 </span>{-# SPECIALIZE step ::  State -&gt; Pure State #-}
+<span class="lineno">   72 </span>{-# SPECIALIZE step ::  State -&gt; IO State #-}
+<span class="lineno">   73 </span>step :: MonadEval m =&gt; State -&gt; m State
+<span class="lineno">   74 </span>
+<span class="lineno">   75 </span>-- Rule 1: Pushing BaseValues
+<span class="lineno">   76 </span><span class="decl"><span class="istickedoff">step st@(State{ stack = stack, code = (TBool b):cs })    </span>
+<span class="lineno">   77 </span><span class="spaces">    </span><span class="istickedoff">= <span class="nottickedoff">return (st { stack = (VBool b):stack,    code = cs })</span></span>
+<span class="lineno">   78 </span><span class="spaces"></span><span class="istickedoff">step st@(State{ stack = stack, code = (TInt i):cs })     </span>
+<span class="lineno">   79 </span><span class="spaces">    </span><span class="istickedoff">= return (st { stack = (VInt i):stack,     code = cs })</span>
+<span class="lineno">   80 </span><span class="spaces"></span><span class="istickedoff">step st@(State{ stack = stack, code = (TReal r):cs })    </span>
+<span class="lineno">   81 </span><span class="spaces">    </span><span class="istickedoff">= return (st { stack = (VReal r):stack,    code = cs })</span>
+<span class="lineno">   82 </span><span class="spaces"></span><span class="istickedoff">step st@(State{ stack = stack, code = (TString s):cs })  </span>
+<span class="lineno">   83 </span><span class="spaces">    </span><span class="istickedoff">= return (st { stack = (VString <span class="nottickedoff">s</span>):stack,  code = cs })</span>
+<span class="lineno">   84 </span><span class="spaces"></span><span class="istickedoff"></span>
+<span class="lineno">   85 </span><span class="spaces"></span><span class="istickedoff">-- Rule 2: Name binding</span>
+<span class="lineno">   86 </span><span class="spaces"></span><span class="istickedoff">step st@(State{ env = env, stack = (v:stack), code = (TBind id):cs }) =</span>
+<span class="lineno">   87 </span><span class="spaces">  </span><span class="istickedoff">return (State { env = extendEnv env id v, stack = stack,  code = cs })</span>
+<span class="lineno">   88 </span><span class="spaces"></span><span class="istickedoff">step st@(State{ env = env, stack = [], code = (TBind id):cs }) =</span>
+<span class="lineno">   89 </span><span class="spaces">  </span><span class="istickedoff"><span class="nottickedoff">err &quot;Attempt to bind the top of an empty stack&quot;</span></span>
+<span class="lineno">   90 </span><span class="spaces"></span><span class="istickedoff"></span>
+<span class="lineno">   91 </span><span class="spaces"></span><span class="istickedoff">-- Rule 3: Name lookup</span>
+<span class="lineno">   92 </span><span class="spaces"></span><span class="istickedoff">step st@(State{ env = env, stack = stack, code = (TId id):cs }) =</span>
+<span class="lineno">   93 </span><span class="spaces">  </span><span class="istickedoff">case (lookupEnv env id) of</span>
+<span class="lineno">   94 </span><span class="spaces">  </span><span class="istickedoff">Just v -&gt; return (st { stack = v:stack,  code = cs })</span>
+<span class="lineno">   95 </span><span class="spaces">  </span><span class="istickedoff">Nothing -&gt; <span class="nottickedoff">err (&quot;Cannot find value for identifier: &quot; ++ id)</span></span>
+<span class="lineno">   96 </span><span class="spaces"></span><span class="istickedoff"></span>
+<span class="lineno">   97 </span><span class="spaces"></span><span class="istickedoff">-- Rule 4: Closure creation</span>
+<span class="lineno">   98 </span><span class="spaces"></span><span class="istickedoff">step st@(State{ env = env, stack = stack, code = (TBody body):cs }) =</span>
+<span class="lineno">   99 </span><span class="spaces">  </span><span class="istickedoff">return (st { stack = (VClosure env body):stack, code = cs })</span>
+<span class="lineno">  100 </span><span class="spaces"></span><span class="istickedoff"></span>
+<span class="lineno">  101 </span><span class="spaces"></span><span class="istickedoff">-- Rule 5: Application</span>
+<span class="lineno">  102 </span><span class="spaces"></span><span class="istickedoff">step st@(State{ env = env, stack = (VClosure env' code'):stack, code = TApply:cs }) =</span>
+<span class="lineno">  103 </span><span class="spaces">  </span><span class="istickedoff">do { stk &lt;- eval (State {env = <span class="nottickedoff">env'</span>, stack = stack, code = code'})</span>
+<span class="lineno">  104 </span><span class="spaces">     </span><span class="istickedoff">; return (st { stack = stk, code = cs })</span>
+<span class="lineno">  105 </span><span class="spaces">     </span><span class="istickedoff">}</span>
+<span class="lineno">  106 </span><span class="spaces"></span><span class="istickedoff">step st@(State{ env = env, stack = [], code = TApply:cs }) =</span>
+<span class="lineno">  107 </span><span class="spaces">  </span><span class="istickedoff"><span class="nottickedoff">err &quot;Application with an empty stack&quot;</span></span>
+<span class="lineno">  108 </span><span class="spaces"></span><span class="istickedoff">step st@(State{ env = env, stack = _:_, code = TApply:cs }) =</span>
+<span class="lineno">  109 </span><span class="spaces">  </span><span class="istickedoff"><span class="nottickedoff">err &quot;Application of a non-closure&quot;</span></span>
+<span class="lineno">  110 </span><span class="spaces"></span><span class="istickedoff"></span>
+<span class="lineno">  111 </span><span class="spaces"></span><span class="istickedoff">-- Rule 6: Arrays</span>
+<span class="lineno">  112 </span><span class="spaces"></span><span class="istickedoff">step st@(State{ env = env, stack = stack, code = TArray code':cs }) =</span>
+<span class="lineno">  113 </span><span class="spaces">  </span><span class="istickedoff">do { stk &lt;- eval (State {env = env, stack = [], code = code'})</span>
+<span class="lineno">  114 </span><span class="spaces">     </span><span class="istickedoff">; let last = length stk-1</span>
+<span class="lineno">  115 </span><span class="spaces">     </span><span class="istickedoff">; let arr = array (0,last) (zip [last,last-1..] stk)</span>
+<span class="lineno">  116 </span><span class="spaces">     </span><span class="istickedoff">; return (st { stack = (VArray arr):stack, code = cs })</span>
+<span class="lineno">  117 </span><span class="spaces">     </span><span class="istickedoff">}</span>
+<span class="lineno">  118 </span><span class="spaces"></span><span class="istickedoff"></span>
+<span class="lineno">  119 </span><span class="spaces"></span><span class="istickedoff">-- Rule 7 &amp; 8: If statement</span>
+<span class="lineno">  120 </span><span class="spaces"></span><span class="istickedoff">step st@(State{ env = env, stack = (VClosure e2 c2):(VClosure e1 c1):(VBool True):stack, code = TIf:cs }) =</span>
+<span class="lineno">  121 </span><span class="spaces">  </span><span class="istickedoff">do { stk &lt;- eval (State {env = e1, stack = stack, code = c1})</span>
+<span class="lineno">  122 </span><span class="spaces">     </span><span class="istickedoff">; return (st { stack = stk, code = cs })</span>
+<span class="lineno">  123 </span><span class="spaces">     </span><span class="istickedoff">}</span>
+<span class="lineno">  124 </span><span class="spaces"></span><span class="istickedoff">step st@(State{ env = env, stack = (VClosure e2 c2):(VClosure e1 c1):(VBool False):stack, code = TIf:cs }) =</span>
+<span class="lineno">  125 </span><span class="spaces">  </span><span class="istickedoff">do { stk &lt;- eval (State {env = e2, stack = stack, code = c2})</span>
+<span class="lineno">  126 </span><span class="spaces">     </span><span class="istickedoff">; return (st { stack = stk, code = cs })</span>
+<span class="lineno">  127 </span><span class="spaces">     </span><span class="istickedoff">}</span>
+<span class="lineno">  128 </span><span class="spaces"></span><span class="istickedoff">step st@(State{ env = env, stack = _, code = TIf:cs }) =</span>
+<span class="lineno">  129 </span><span class="spaces">  </span><span class="istickedoff"><span class="nottickedoff">err &quot;Incorrect use of if (bad and/or inappropriate values on the stack)&quot;</span></span>
+<span class="lineno">  130 </span><span class="spaces"></span><span class="istickedoff"></span>
+<span class="lineno">  131 </span><span class="spaces"></span><span class="istickedoff">-- Rule 9: Operators</span>
+<span class="lineno">  132 </span><span class="spaces"></span><span class="istickedoff">step st@(State{ env = env, stack = stack, code = (TOp op):cs }) =</span>
+<span class="lineno">  133 </span><span class="spaces">  </span><span class="istickedoff">do { stk &lt;- doOp (opFnTable ! op) op stack</span>
+<span class="lineno">  134 </span><span class="spaces">     </span><span class="istickedoff">; return (st { stack = stk, code = cs })</span>
+<span class="lineno">  135 </span><span class="spaces">     </span><span class="istickedoff">}</span>
+<span class="lineno">  136 </span><span class="spaces"></span><span class="istickedoff"></span>
+<span class="lineno">  137 </span><span class="spaces"></span><span class="istickedoff">-- Rule Opps</span>
+<span class="lineno">  138 </span><span class="spaces"></span><span class="istickedoff">step _ = <span class="nottickedoff">err &quot;Tripped on sidewalk while stepping.&quot;</span></span></span>
+<span class="lineno">  139 </span>
+<span class="lineno">  140 </span>
+<span class="lineno">  141 </span>--------------------------------------------------------------------------
+<span class="lineno">  142 </span>-- Operator code
+<span class="lineno">  143 </span>
+<span class="lineno">  144 </span>opFnTable :: Array GMLOp PrimOp
+<span class="lineno">  145 </span><span class="decl"><span class="istickedoff">opFnTable = array (minBound,maxBound) </span>
+<span class="lineno">  146 </span><span class="spaces">                  </span><span class="istickedoff">[ (op,prim) | (_,TOp op,prim) &lt;- opcodes ]</span></span>
+<span class="lineno">  147 </span>
+<span class="lineno">  148 </span>
+<span class="lineno">  149 </span>
+<span class="lineno">  150 </span>
+<span class="lineno">  151 </span>doPureOp :: (MonadEval m) =&gt; PrimOp -&gt; GMLOp -&gt; Stack -&gt; m Stack
+<span class="lineno">  152 </span><span class="decl"><span class="istickedoff">doPureOp _ Op_render _ = </span>
+<span class="lineno">  153 </span><span class="spaces">    </span><span class="istickedoff"><span class="nottickedoff">err (&quot;\nAttempting to call render from inside a purely functional callback.&quot;)</span></span>
+<span class="lineno">  154 </span><span class="spaces"></span><span class="istickedoff">doPureOp primOp op stk = doPrimOp primOp <span class="nottickedoff">op</span> stk</span></span> -- call the purely functional operators
+<span class="lineno">  155 </span>
+<span class="lineno">  156 </span>{-# SPECIALIZE doPrimOp :: PrimOp -&gt; GMLOp -&gt; Stack -&gt; Pure Stack #-}
+<span class="lineno">  157 </span>{-# SPECIALIZE doPrimOp :: PrimOp -&gt; GMLOp -&gt; Stack -&gt; IO Stack #-}
+<span class="lineno">  158 </span>{-# SPECIALIZE doPrimOp :: PrimOp -&gt; GMLOp -&gt; Stack -&gt; Abs Stack #-}
+<span class="lineno">  159 </span>
+<span class="lineno">  160 </span>doPrimOp ::  (MonadEval m) =&gt; PrimOp -&gt; GMLOp -&gt; Stack -&gt; m Stack
+<span class="lineno">  161 </span>
+<span class="lineno">  162 </span>-- 1 argument.
+<span class="lineno">  163 </span>
+<span class="lineno">  164 </span><span class="decl"><span class="istickedoff">doPrimOp (Int_Int fn) _ (VInt i1:stk)</span>
+<span class="lineno">  165 </span><span class="spaces">  </span><span class="istickedoff">= <span class="nottickedoff">return ((VInt (fn i1)) : stk)</span></span>
+<span class="lineno">  166 </span><span class="spaces"></span><span class="istickedoff">doPrimOp (Real_Real fn) _ (VReal r1:stk)</span>
+<span class="lineno">  167 </span><span class="spaces">  </span><span class="istickedoff">= return ((VReal (fn r1)) : stk)</span>
+<span class="lineno">  168 </span><span class="spaces"></span><span class="istickedoff">doPrimOp (Point_Real fn) _ (VPoint x y z:stk)</span>
+<span class="lineno">  169 </span><span class="spaces">  </span><span class="istickedoff">= <span class="nottickedoff">return ((VReal (fn x y z)) : stk)</span></span>
+<span class="lineno">  170 </span><span class="spaces"></span><span class="istickedoff"></span>
+<span class="lineno">  171 </span><span class="spaces"></span><span class="istickedoff">-- This is where the callbacks happen from...</span>
+<span class="lineno">  172 </span><span class="spaces"></span><span class="istickedoff">doPrimOp (Surface_Obj fn) _ (VClosure env code:stk)</span>
+<span class="lineno">  173 </span><span class="spaces">  </span><span class="istickedoff">= case absapply env code [<span class="nottickedoff">VAbsObj AbsFACE</span>,<span class="nottickedoff">VAbsObj AbsU</span>,<span class="nottickedoff">VAbsObj AbsV</span>] of</span>
+<span class="lineno">  174 </span><span class="spaces">      </span><span class="istickedoff">Just [VReal r3,VReal r2,VReal r1,VPoint c1 c2 c3] -&gt; </span>
+<span class="lineno">  175 </span><span class="spaces">           </span><span class="istickedoff"><span class="nottickedoff">let</span></span>
+<span class="lineno">  176 </span><span class="spaces">               </span><span class="istickedoff"><span class="nottickedoff">res = prop (color c1 c2 c3) r1 r2 r3</span></span>
+<span class="lineno">  177 </span><span class="spaces">           </span><span class="istickedoff"><span class="nottickedoff">in</span></span>
+<span class="lineno">  178 </span><span class="spaces">               </span><span class="istickedoff"><span class="nottickedoff">return ((VObject (fn (SConst res))) : stk)</span></span>
+<span class="lineno">  179 </span><span class="spaces">      </span><span class="istickedoff">_ -&gt; return ((VObject (fn (SFun call))) : stk)</span>
+<span class="lineno">  180 </span><span class="spaces">  </span><span class="istickedoff">where </span>
+<span class="lineno">  181 </span><span class="spaces">        </span><span class="istickedoff">-- The most general case</span>
+<span class="lineno">  182 </span><span class="spaces">        </span><span class="istickedoff">call i r1 r2 =</span>
+<span class="lineno">  183 </span><span class="spaces">          </span><span class="istickedoff">case callback env code [VReal r2,VReal r1,<span class="nottickedoff">VInt i</span>] of</span>
+<span class="lineno">  184 </span><span class="spaces">             </span><span class="istickedoff">[VReal r3,VReal r2,VReal r1,VPoint c1 c2 c3] </span>
+<span class="lineno">  185 </span><span class="spaces">                 </span><span class="istickedoff">-&gt; prop (color c1 c2 c3) r1 r2 r3</span>
+<span class="lineno">  186 </span><span class="spaces">             </span><span class="istickedoff">stk -&gt; <span class="nottickedoff">error (&quot;callback failed: incorrectly typed return arguments&quot;</span></span>
+<span class="lineno">  187 </span><span class="spaces">                         </span><span class="istickedoff"><span class="nottickedoff">++ show stk)</span></span>
+<span class="lineno">  188 </span><span class="spaces">       </span><span class="istickedoff"></span>
+<span class="lineno">  189 </span><span class="spaces"></span><span class="istickedoff">doPrimOp (Real_Int fn) _ (VReal r1:stk)</span>
+<span class="lineno">  190 </span><span class="spaces">  </span><span class="istickedoff">= return ((VInt (fn r1)) : stk)</span>
+<span class="lineno">  191 </span><span class="spaces"></span><span class="istickedoff">doPrimOp (Int_Real fn) _ (VInt r1:stk)</span>
+<span class="lineno">  192 </span><span class="spaces">  </span><span class="istickedoff">= return ((VReal (fn r1)) : stk)</span>
+<span class="lineno">  193 </span><span class="spaces"></span><span class="istickedoff">doPrimOp (Arr_Int fn) _ (VArray arr:stk)</span>
+<span class="lineno">  194 </span><span class="spaces">  </span><span class="istickedoff">= <span class="nottickedoff">return ((VInt (fn arr)) : stk)</span></span>
+<span class="lineno">  195 </span><span class="spaces"></span><span class="istickedoff"></span>
+<span class="lineno">  196 </span><span class="spaces"></span><span class="istickedoff">-- 2 arguments.</span>
+<span class="lineno">  197 </span><span class="spaces"></span><span class="istickedoff"></span>
+<span class="lineno">  198 </span><span class="spaces"></span><span class="istickedoff">doPrimOp (Int_Int_Int fn) _ (VInt i2:VInt i1:stk)</span>
+<span class="lineno">  199 </span><span class="spaces">  </span><span class="istickedoff">= return ((VInt (fn i1 i2)) : stk)</span>
+<span class="lineno">  200 </span><span class="spaces"></span><span class="istickedoff">doPrimOp (Int_Int_Bool fn) _ (VInt i2:VInt i1:stk)</span>
+<span class="lineno">  201 </span><span class="spaces">  </span><span class="istickedoff">= return ((VBool (fn i1 i2)) : stk)</span>
+<span class="lineno">  202 </span><span class="spaces"></span><span class="istickedoff">doPrimOp (Real_Real_Real fn) _ (VReal r2:VReal r1:stk)</span>
+<span class="lineno">  203 </span><span class="spaces">  </span><span class="istickedoff">= return ((VReal (fn r1 r2)) : stk)</span>
+<span class="lineno">  204 </span><span class="spaces"></span><span class="istickedoff">doPrimOp (Real_Real_Bool fn) _ (VReal r2:VReal r1:stk)</span>
+<span class="lineno">  205 </span><span class="spaces">  </span><span class="istickedoff">= return ((VBool (fn r1 r2)) : stk)</span>
+<span class="lineno">  206 </span><span class="spaces"></span><span class="istickedoff">doPrimOp (Arr_Int_Value fn) _ (VInt i:VArray arr:stk)</span>
+<span class="lineno">  207 </span><span class="spaces">  </span><span class="istickedoff">= return ((fn arr i) : stk)</span>
+<span class="lineno">  208 </span><span class="spaces"></span><span class="istickedoff"></span>
+<span class="lineno">  209 </span><span class="spaces"></span><span class="istickedoff"></span>
+<span class="lineno">  210 </span><span class="spaces">    </span><span class="istickedoff">-- Many arguments, typically image mangling</span>
+<span class="lineno">  211 </span><span class="spaces"></span><span class="istickedoff"></span>
+<span class="lineno">  212 </span><span class="spaces"></span><span class="istickedoff">doPrimOp (Obj_Obj_Obj fn) _ (VObject o2:VObject o1:stk)</span>
+<span class="lineno">  213 </span><span class="spaces">  </span><span class="istickedoff">= return ((VObject (fn o1 o2)) : <span class="nottickedoff">stk</span>)</span>
+<span class="lineno">  214 </span><span class="spaces"></span><span class="istickedoff">doPrimOp (Point_Color_Light fn) _ (VPoint r g b:VPoint x y z : stk)</span>
+<span class="lineno">  215 </span><span class="spaces">  </span><span class="istickedoff">= return (VLight (fn (x,y,z) (color r g b)) : <span class="nottickedoff">stk</span>)</span>
+<span class="lineno">  216 </span><span class="spaces"></span><span class="istickedoff">doPrimOp (Point_Point_Color_Real_Real_Light fn) _ </span>
+<span class="lineno">  217 </span><span class="spaces">         </span><span class="istickedoff">(VReal r2:VReal r1:VPoint r g b:VPoint x2 y2 z2:VPoint x1 y1 z1 : stk)</span>
+<span class="lineno">  218 </span><span class="spaces">  </span><span class="istickedoff">= <span class="nottickedoff">return (VLight (fn (x1,y1,z1) (x2,y2,z2) (color r g b) r1 r2) : stk)</span></span>
+<span class="lineno">  219 </span><span class="spaces"></span><span class="istickedoff">doPrimOp (Real_Real_Real_Point fn) _ (VReal r3:VReal r2:VReal r1:stk)</span>
+<span class="lineno">  220 </span><span class="spaces">  </span><span class="istickedoff">= return ((fn r1 r2 r3) : stk)</span>
+<span class="lineno">  221 </span><span class="spaces"></span><span class="istickedoff">doPrimOp (Obj_Real_Obj fn) _ (VReal r:VObject o:stk)</span>
+<span class="lineno">  222 </span><span class="spaces">  </span><span class="istickedoff">= return (VObject (fn o r) : <span class="nottickedoff">stk</span>)</span>
+<span class="lineno">  223 </span><span class="spaces"></span><span class="istickedoff">doPrimOp (Obj_Real_Real_Real_Obj fn) _ (VReal r3:VReal r2:VReal r1:VObject o:stk)</span>
+<span class="lineno">  224 </span><span class="spaces">  </span><span class="istickedoff">= return (VObject (fn o r1 r2 r3) : stk)</span>
+<span class="lineno">  225 </span><span class="spaces"></span><span class="istickedoff"></span>
+<span class="lineno">  226 </span><span class="spaces"></span><span class="istickedoff">-- This one is our testing harness</span>
+<span class="lineno">  227 </span><span class="spaces"></span><span class="istickedoff">doPrimOp (Value_String_Value fn) _ (VString s:o:stk)</span>
+<span class="lineno">  228 </span><span class="spaces">  </span><span class="istickedoff">= <span class="nottickedoff">res `seq` return (res : stk)</span></span>
+<span class="lineno">  229 </span><span class="spaces">  </span><span class="istickedoff">where</span>
+<span class="lineno">  230 </span><span class="spaces">     </span><span class="istickedoff"><span class="nottickedoff">res = fn o s</span></span>
+<span class="lineno">  231 </span><span class="spaces"></span><span class="istickedoff"></span>
+<span class="lineno">  232 </span><span class="spaces"></span><span class="istickedoff">doPrimOp primOp op args </span>
+<span class="lineno">  233 </span><span class="spaces">  </span><span class="istickedoff">= <span class="nottickedoff">err (&quot;\n\ntype error when attempting to execute builtin primitive \&quot;&quot; ++</span></span>
+<span class="lineno">  234 </span><span class="spaces">          </span><span class="istickedoff"><span class="nottickedoff">show op ++ &quot;\&quot;\n\n| &quot; ++</span></span>
+<span class="lineno">  235 </span><span class="spaces">          </span><span class="istickedoff"><span class="nottickedoff">show op ++ &quot; takes &quot; ++ show (length types) ++ &quot; argument&quot; ++ s</span></span>
+<span class="lineno">  236 </span><span class="spaces">                   </span><span class="istickedoff"><span class="nottickedoff">++ &quot; with&quot; ++ the ++ &quot; type&quot; ++ s ++ &quot;\n|\n|&quot; ++</span></span>
+<span class="lineno">  237 </span><span class="spaces">          </span><span class="istickedoff"><span class="nottickedoff">&quot;      &quot; ++ unwords [ show ty | ty &lt;- types ]  ++ &quot;\n|\n|&quot; ++ </span></span>
+<span class="lineno">  238 </span><span class="spaces">          </span><span class="istickedoff"><span class="nottickedoff">&quot; currently, the relevent argument&quot; ++ s ++ &quot; on the stack &quot; ++ </span></span>
+<span class="lineno">  239 </span><span class="spaces">                  </span><span class="istickedoff"><span class="nottickedoff">are ++ &quot;\n|\n| &quot; ++ </span></span>
+<span class="lineno">  240 </span><span class="spaces">          </span><span class="istickedoff"><span class="nottickedoff">unwords [ &quot;(&quot; ++ show arg ++ &quot;)&quot; </span></span>
+<span class="lineno">  241 </span><span class="spaces">                  </span><span class="istickedoff"><span class="nottickedoff">| arg &lt;-  reverse (take (length types) args) ]  ++ &quot;\n|\n| &quot;</span></span>
+<span class="lineno">  242 </span><span class="spaces">          </span><span class="istickedoff"><span class="nottickedoff">++ &quot;    (top of stack is on the right hand side)\n\n&quot;)</span></span>
+<span class="lineno">  243 </span><span class="spaces">  </span><span class="istickedoff">where</span>
+<span class="lineno">  244 </span><span class="spaces">      </span><span class="istickedoff"><span class="nottickedoff">len   = length types</span></span>
+<span class="lineno">  245 </span><span class="spaces">      </span><span class="istickedoff"><span class="nottickedoff">s =  (if len /= 1 then &quot;s&quot; else &quot;&quot;)</span></span>
+<span class="lineno">  246 </span><span class="spaces">      </span><span class="istickedoff"><span class="nottickedoff">are =  (if len /= 1 then &quot;are&quot; else &quot;is&quot;)</span></span>
+<span class="lineno">  247 </span><span class="spaces">      </span><span class="istickedoff"><span class="nottickedoff">the =  (if len /= 1 then &quot;&quot; else &quot; the&quot;)</span></span>
+<span class="lineno">  248 </span><span class="spaces">      </span><span class="istickedoff"><span class="nottickedoff">types = getPrimOpType primOp</span></span></span>
+<span class="lineno">  249 </span>
+<span class="lineno">  250 </span>
+<span class="lineno">  251 </span>-- Render is somewhat funny, becauase it can only get called at top level.
+<span class="lineno">  252 </span>-- All other operations are purely functional.
+<span class="lineno">  253 </span>
+<span class="lineno">  254 </span>doAllOp :: PrimOp -&gt; GMLOp -&gt; Stack -&gt; IO Stack
+<span class="lineno">  255 </span><span class="decl"><span class="istickedoff">doAllOp (Render render) Op_render</span>
+<span class="lineno">  256 </span><span class="spaces">                           </span><span class="istickedoff">(VString str:VInt ht:VInt wid:VReal fov</span>
+<span class="lineno">  257 </span><span class="spaces">                           </span><span class="istickedoff">:VInt dep:VObject obj:VArray arr</span>
+<span class="lineno">  258 </span><span class="spaces">                           </span><span class="istickedoff">:VPoint r g b : stk)</span>
+<span class="lineno">  259 </span><span class="spaces">  </span><span class="istickedoff">= do { render (color r g b) lights obj dep (fov * (pi / 180.0)) wid ht <span class="nottickedoff">str</span></span>
+<span class="lineno">  260 </span><span class="spaces">       </span><span class="istickedoff">; return <span class="nottickedoff">stk</span></span>
+<span class="lineno">  261 </span><span class="spaces">       </span><span class="istickedoff">}</span>
+<span class="lineno">  262 </span><span class="spaces">  </span><span class="istickedoff">where</span>
+<span class="lineno">  263 </span><span class="spaces">      </span><span class="istickedoff">lights = [ light | (VLight light) &lt;- elems arr ]</span>
+<span class="lineno">  264 </span><span class="spaces"></span><span class="istickedoff"></span>
+<span class="lineno">  265 </span><span class="spaces"></span><span class="istickedoff">doAllOp primOp op stk = doPrimOp primOp <span class="nottickedoff">op</span> stk</span></span> -- call the purely functional operators
+<span class="lineno">  266 </span>
+<span class="lineno">  267 </span>------------------------------------------------------------------------------
+<span class="lineno">  268 </span>{-
+<span class="lineno">  269 </span> - Abstract evaluation.
+<span class="lineno">  270 </span> -
+<span class="lineno">  271 </span> - The idea is you check for constant code that 
+<span class="lineno">  272 </span> - (1) does not look at its arguments
+<span class="lineno">  273 </span> - (2) gives a fixed result
+<span class="lineno">  274 </span> -
+<span class="lineno">  275 </span> - We run for 100 steps.
+<span class="lineno">  276 </span> -
+<span class="lineno">  277 </span> -}
+<span class="lineno">  278 </span>
+<span class="lineno">  279 </span>absapply :: Env -&gt; Code -&gt; Stack -&gt; Maybe Stack
+<span class="lineno">  280 </span><span class="decl"><span class="istickedoff">absapply env code stk = </span>
+<span class="lineno">  281 </span><span class="spaces">     </span><span class="istickedoff">case runAbs (eval (State env stk code)) 100 of</span>
+<span class="lineno">  282 </span><span class="spaces">       </span><span class="istickedoff">AbsState stk _ -&gt; <span class="nottickedoff">Just stk</span></span>
+<span class="lineno">  283 </span><span class="spaces">       </span><span class="istickedoff">AbsFail m      -&gt; Nothing</span></span>
+<span class="lineno">  284 </span>
+<span class="lineno">  285 </span>newtype Abs a   = Abs { runAbs :: Int -&gt; AbsState a }
+<span class="lineno">  286 </span>data AbsState a = AbsState a !Int
+<span class="lineno">  287 </span>                | AbsFail String
+<span class="lineno">  288 </span>
+<span class="lineno">  289 </span>instance Monad Abs where
+<span class="lineno">  290 </span>    <span class="decl"><span class="istickedoff">(Abs fn) &gt;&gt;= k = Abs (\ s -&gt; case fn s of</span>
+<span class="lineno">  291 </span><span class="spaces">                                   </span><span class="istickedoff">AbsState r s' -&gt; runAbs (k r) s'</span>
+<span class="lineno">  292 </span><span class="spaces">                                   </span><span class="istickedoff">AbsFail m     -&gt; AbsFail <span class="nottickedoff">m</span>)</span></span>
+<span class="lineno">  293 </span>    <span class="decl"><span class="istickedoff">return x     = Abs (\ n -&gt; AbsState x n)</span></span>
+<span class="lineno">  294 </span>    <span class="decl"><span class="istickedoff">fail s       = Abs (\ n -&gt; AbsFail <span class="nottickedoff">s</span>)</span></span>
+<span class="lineno">  295 </span>
+<span class="lineno">  296 </span>instance MonadEval Abs where
+<span class="lineno">  297 </span>  <span class="decl"><span class="istickedoff">doOp = doAbsOp</span></span>
+<span class="lineno">  298 </span>  <span class="decl"><span class="istickedoff">err  = fail</span></span>
+<span class="lineno">  299 </span>  <span class="decl"><span class="istickedoff">tick = Abs (\ n -&gt; if <span class="tickonlyfalse">n &lt;= 0</span></span>
+<span class="lineno">  300 </span><span class="spaces">                     </span><span class="istickedoff">then <span class="nottickedoff">AbsFail &quot;run out of time&quot;</span></span>
+<span class="lineno">  301 </span><span class="spaces">                     </span><span class="istickedoff">else AbsState <span class="nottickedoff">()</span> (n-1))</span></span>
+<span class="lineno">  302 </span>
+<span class="lineno">  303 </span>doAbsOp :: PrimOp -&gt; GMLOp -&gt; Stack -&gt; Abs Stack
+<span class="lineno">  304 </span><span class="decl"><span class="istickedoff">doAbsOp _ Op_point (VReal r3:VReal r2:VReal r1:stk) </span>
+<span class="lineno">  305 </span><span class="spaces">               </span><span class="istickedoff">= <span class="nottickedoff">return ((VPoint r1 r2 r3) : stk)</span></span>
+<span class="lineno">  306 </span><span class="spaces"> </span><span class="istickedoff">-- here, you could have an (AbsPoint :: AbsObj) which you put on the</span>
+<span class="lineno">  307 </span><span class="spaces"> </span><span class="istickedoff">-- stack, with any object in the three fields.</span>
+<span class="lineno">  308 </span><span class="spaces"></span><span class="istickedoff">doAbsOp _ op _ = err <span class="nottickedoff">(&quot;operator not understood (&quot; ++ show op ++ &quot;)&quot;)</span></span></span>
+<span class="lineno">  309 </span>
+<span class="lineno">  310 </span>------------------------------------------------------------------------------
+<span class="lineno">  311 </span>-- Driver
+<span class="lineno">  312 </span>
+<span class="lineno">  313 </span>mainEval :: Code -&gt; IO ()
+<span class="lineno">  314 </span><span class="decl"><span class="istickedoff">mainEval prog = do { stk &lt;- eval (State <span class="nottickedoff">emptyEnv</span> [] prog) </span>
+<span class="lineno">  315 </span><span class="spaces">                   </span><span class="istickedoff">; return <span class="nottickedoff">()</span></span>
+<span class="lineno">  316 </span><span class="spaces">                   </span><span class="istickedoff">}</span></span>
+<span class="lineno">  317 </span>{- 
+<span class="lineno">  318 </span>  * Oops, one of the example actually has something
+<span class="lineno">  319 </span>  * on the stack at the end. 
+<span class="lineno">  320 </span>  * Oh well...
+<span class="lineno">  321 </span>                  ; if null stk
+<span class="lineno">  322 </span>                     then return ()
+<span class="lineno">  323 </span>                    else do { putStrLn done
+<span class="lineno">  324 </span>                             ; print stk
+<span class="lineno">  325 </span>                             }
+<span class="lineno">  326 </span>-}
+<span class="lineno">  327 </span>
+<span class="lineno">  328 </span><span class="decl"><span class="nottickedoff">done = &quot;Items still on stack at (successfull) termination of program&quot;</span></span>
+<span class="lineno">  329 </span>
+<span class="lineno">  330 </span>------------------------------------------------------------------------------
+<span class="lineno">  331 </span>-- testing
+<span class="lineno">  332 </span>
+<span class="lineno">  333 </span>test :: String -&gt; Pure Stack
+<span class="lineno">  334 </span><span class="decl"><span class="nottickedoff">test is = eval (State emptyEnv [] (rayParse is))</span></span>
+<span class="lineno">  335 </span>
+<span class="lineno">  336 </span>testF :: String -&gt; IO Stack
+<span class="lineno">  337 </span><span class="decl"><span class="nottickedoff">testF is = do prog &lt;- rayParseF is</span>
+<span class="lineno">  338 </span><span class="spaces">              </span><span class="nottickedoff">eval (State emptyEnv [] prog)</span></span>
+<span class="lineno">  339 </span>
+<span class="lineno">  340 </span>testA :: String -&gt; Either String (Stack,Int)
+<span class="lineno">  341 </span><span class="decl"><span class="nottickedoff">testA is = case runAbs (eval (State emptyEnv </span>
+<span class="lineno">  342 </span><span class="spaces">                                    </span><span class="nottickedoff">[VAbsObj AbsFACE,VAbsObj AbsU,VAbsObj AbsV]</span>
+<span class="lineno">  343 </span><span class="spaces">                                    </span><span class="nottickedoff">(rayParse is))) 100 of</span>
+<span class="lineno">  344 </span><span class="spaces">             </span><span class="nottickedoff">AbsState a n -&gt; Right (a,n)</span>
+<span class="lineno">  345 </span><span class="spaces">             </span><span class="nottickedoff">AbsFail m -&gt; Left m</span></span>
+<span class="lineno">  346 </span>
+<span class="lineno">  347 </span><span class="decl"><span class="nottickedoff">abstest1 = &quot;1.0 0.0 0.0 point /red { /v /u /face red 1.0 0.0 1.0 } apply&quot;</span></span> 
+<span class="lineno">  348 </span>
+<span class="lineno">  349 </span>-- should be [3:: Int]
+<span class="lineno">  350 </span><span class="decl"><span class="nottickedoff">et1 = test &quot;1 /x { x } /f 2 /x f apply x addi&quot;</span></span>
+<span class="lineno">  351 </span>
+<span class="lineno">  352 </span>
+<span class="lineno">  353 </span>
+<span class="lineno">  354 </span>
+<span class="lineno">  355 </span>
+
+</pre>
+</html>
+Writing: hpc_index.html
+<html><style type="text/css">table.bar { background-color: #f25913; }
+td.bar { background-color: #60de51;  }
+td.invbar { background-color: #f25913;  }
+table.dashboard { border-collapse: collapse  ; border: solid 1px black }
+.dashboard td { border: solid 1px black }
+.dashboard th { border: solid 1px black }
+</style>
+<table class="dashboard" width="100%" border=1>
+<tr><th rowspan=2><a href="hpc_index.html">module</a></th><th colspan=3><a href="hpc_index_fun.html">Top Level Definitions</a></th><th colspan=3><a href="hpc_index_alt.html">Alternatives</a></th><th colspan=3><a href="hpc_index_exp.html">Expressions</a></th></tr><tr><th>%</th><th colspan=2>covered / total</th><th>%</th><th colspan=2>covered / total</th><th>%</th><th colspan=2>covered / total</th></tr><tr>
+<td>&nbsp;&nbsp;<tt>module <a href="CSG.hs.html">CSG</a></tt></td>
+<td align="right">-&nbsp;</td><td>0/0</td><td width=100>&nbsp;</td><td align="right">-&nbsp;</td><td>0/0</td><td width=100>&nbsp;</td><td align="right">-&nbsp;</td><td>0/0</td><td width=100>&nbsp;</td></tr>
+<tr>
+<td>&nbsp;&nbsp;<tt>module <a href="Construct.hs.html">Construct</a></tt></td>
+<td align="right">41%</td><td>17/41</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="41%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">41%</td><td>5/12</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="41%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">60%</td><td>381/635</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="60%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
+<tr>
+<td>&nbsp;&nbsp;<tt>module <a href="Data.hs.html">Data</a></tt></td>
+<td align="right">22%</td><td>10/45</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="22%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">3%</td><td>2/51</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="3%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">39%</td><td>254/646</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="39%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
+<tr>
+<td>&nbsp;&nbsp;<tt>module <a href="Eval.hs.html">Eval</a></tt></td>
+<td align="right">62%</td><td>22/35</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="62%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">59%</td><td>40/67</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="59%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">57%</td><td>361/628</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="57%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
+<tr>
+<td>&nbsp;&nbsp;<tt>module <a href="Geometry.hs.html">Geometry</a></tt></td>
+<td align="right">58%</td><td>42/72</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="58%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">40%</td><td>4/10</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="40%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">70%</td><td>300/427</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="70%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
+<tr>
+<td>&nbsp;&nbsp;<tt>module <a href="Illumination.hs.html">Illumination</a></tt></td>
+<td align="right">45%</td><td>11/24</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="45%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">38%</td><td>16/42</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="38%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">44%</td><td>299/678</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="44%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
+<tr>
+<td>&nbsp;&nbsp;<tt>module <a href="Intersections.hs.html">Intersections</a></tt></td>
+<td align="right">63%</td><td>14/22</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="63%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">42%</td><td>35/83</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="42%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">38%</td><td>382/1001</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="38%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
+<tr>
+<td>&nbsp;&nbsp;<tt>module <a href="Interval.hs.html">Interval</a></tt></td>
+<td align="right">47%</td><td>8/17</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="47%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">39%</td><td>9/23</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="39%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">41%</td><td>69/165</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="41%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
+<tr>
+<td>&nbsp;&nbsp;<tt>module <a href="Main.hs.html">Main</a></tt></td>
+<td align="right">100%</td><td>1/1</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="100%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">-&nbsp;</td><td>0/0</td><td width=100>&nbsp;</td><td align="right">100%</td><td>6/6</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="100%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
+<tr>
+<td>&nbsp;&nbsp;<tt>module <a href="Misc.hs.html">Misc</a></tt></td>
+<td align="right">0%</td><td>0/1</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="100%"><tr><td height=12 class="invbar"></td></tr></table></td></tr></table></td><td align="right">-&nbsp;</td><td>0/0</td><td width=100>&nbsp;</td><td align="right">0%</td><td>0/10</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="100%"><tr><td height=12 class="invbar"></td></tr></table></td></tr></table></td></tr>
+<tr>
+<td>&nbsp;&nbsp;<tt>module <a href="Parse.hs.html">Parse</a></tt></td>
+<td align="right">80%</td><td>16/20</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="80%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">42%</td><td>6/14</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="42%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">72%</td><td>192/264</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="72%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
+<tr>
+<td>&nbsp;&nbsp;<tt>module <a href="Primitives.hs.html">Primitives</a></tt></td>
+<td align="right">16%</td><td>1/6</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="16%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">-&nbsp;</td><td>0/0</td><td width=100>&nbsp;</td><td align="right">20%</td><td>5/24</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="20%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
+<tr>
+<td>&nbsp;&nbsp;<tt>module <a href="Surface.hs.html">Surface</a></tt></td>
+<td align="right">36%</td><td>4/11</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="36%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">35%</td><td>7/20</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="35%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">18%</td><td>43/231</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="18%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
+<tr></tr><tr style="background: #e0e0e0">
+<th align=left>&nbsp;&nbsp;Program Coverage Total</tt></th>
+<td align="right">49%</td><td>146/295</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="49%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">38%</td><td>124/322</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="38%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">48%</td><td>2292/4715</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="48%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
+</table></html>
+Writing: hpc_index_fun.html
+<html><style type="text/css">table.bar { background-color: #f25913; }
+td.bar { background-color: #60de51;  }
+td.invbar { background-color: #f25913;  }
+table.dashboard { border-collapse: collapse  ; border: solid 1px black }
+.dashboard td { border: solid 1px black }
+.dashboard th { border: solid 1px black }
+</style>
+<table class="dashboard" width="100%" border=1>
+<tr><th rowspan=2><a href="hpc_index.html">module</a></th><th colspan=3><a href="hpc_index_fun.html">Top Level Definitions</a></th><th colspan=3><a href="hpc_index_alt.html">Alternatives</a></th><th colspan=3><a href="hpc_index_exp.html">Expressions</a></th></tr><tr><th>%</th><th colspan=2>covered / total</th><th>%</th><th colspan=2>covered / total</th><th>%</th><th colspan=2>covered / total</th></tr><tr>
+<td>&nbsp;&nbsp;<tt>module <a href="Main.hs.html">Main</a></tt></td>
+<td align="right">100%</td><td>1/1</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="100%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">-&nbsp;</td><td>0/0</td><td width=100>&nbsp;</td><td align="right">100%</td><td>6/6</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="100%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
+<tr>
+<td>&nbsp;&nbsp;<tt>module <a href="Parse.hs.html">Parse</a></tt></td>
+<td align="right">80%</td><td>16/20</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="80%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">42%</td><td>6/14</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="42%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">72%</td><td>192/264</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="72%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
+<tr>
+<td>&nbsp;&nbsp;<tt>module <a href="Intersections.hs.html">Intersections</a></tt></td>
+<td align="right">63%</td><td>14/22</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="63%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">42%</td><td>35/83</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="42%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">38%</td><td>382/1001</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="38%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
+<tr>
+<td>&nbsp;&nbsp;<tt>module <a href="Eval.hs.html">Eval</a></tt></td>
+<td align="right">62%</td><td>22/35</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="62%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">59%</td><td>40/67</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="59%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">57%</td><td>361/628</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="57%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
+<tr>
+<td>&nbsp;&nbsp;<tt>module <a href="Geometry.hs.html">Geometry</a></tt></td>
+<td align="right">58%</td><td>42/72</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="58%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">40%</td><td>4/10</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="40%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">70%</td><td>300/427</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="70%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
+<tr>
+<td>&nbsp;&nbsp;<tt>module <a href="Interval.hs.html">Interval</a></tt></td>
+<td align="right">47%</td><td>8/17</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="47%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">39%</td><td>9/23</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="39%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">41%</td><td>69/165</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="41%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
+<tr>
+<td>&nbsp;&nbsp;<tt>module <a href="Illumination.hs.html">Illumination</a></tt></td>
+<td align="right">45%</td><td>11/24</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="45%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">38%</td><td>16/42</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="38%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">44%</td><td>299/678</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="44%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
+<tr>
+<td>&nbsp;&nbsp;<tt>module <a href="Construct.hs.html">Construct</a></tt></td>
+<td align="right">41%</td><td>17/41</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="41%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">41%</td><td>5/12</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="41%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">60%</td><td>381/635</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="60%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
+<tr>
+<td>&nbsp;&nbsp;<tt>module <a href="Surface.hs.html">Surface</a></tt></td>
+<td align="right">36%</td><td>4/11</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="36%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">35%</td><td>7/20</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="35%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">18%</td><td>43/231</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="18%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
+<tr>
+<td>&nbsp;&nbsp;<tt>module <a href="Data.hs.html">Data</a></tt></td>
+<td align="right">22%</td><td>10/45</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="22%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">3%</td><td>2/51</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="3%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">39%</td><td>254/646</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="39%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
+<tr>
+<td>&nbsp;&nbsp;<tt>module <a href="Primitives.hs.html">Primitives</a></tt></td>
+<td align="right">16%</td><td>1/6</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="16%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">-&nbsp;</td><td>0/0</td><td width=100>&nbsp;</td><td align="right">20%</td><td>5/24</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="20%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
+<tr>
+<td>&nbsp;&nbsp;<tt>module <a href="Misc.hs.html">Misc</a></tt></td>
+<td align="right">0%</td><td>0/1</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="100%"><tr><td height=12 class="invbar"></td></tr></table></td></tr></table></td><td align="right">-&nbsp;</td><td>0/0</td><td width=100>&nbsp;</td><td align="right">0%</td><td>0/10</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="100%"><tr><td height=12 class="invbar"></td></tr></table></td></tr></table></td></tr>
+<tr>
+<td>&nbsp;&nbsp;<tt>module <a href="CSG.hs.html">CSG</a></tt></td>
+<td align="right">-&nbsp;</td><td>0/0</td><td width=100>&nbsp;</td><td align="right">-&nbsp;</td><td>0/0</td><td width=100>&nbsp;</td><td align="right">-&nbsp;</td><td>0/0</td><td width=100>&nbsp;</td></tr>
+<tr></tr><tr style="background: #e0e0e0">
+<th align=left>&nbsp;&nbsp;Program Coverage Total</tt></th>
+<td align="right">49%</td><td>146/295</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="49%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">38%</td><td>124/322</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="38%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">48%</td><td>2292/4715</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="48%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
+</table></html>
+Writing: hpc_index_alt.html
+<html><style type="text/css">table.bar { background-color: #f25913; }
+td.bar { background-color: #60de51;  }
+td.invbar { background-color: #f25913;  }
+table.dashboard { border-collapse: collapse  ; border: solid 1px black }
+.dashboard td { border: solid 1px black }
+.dashboard th { border: solid 1px black }
+</style>
+<table class="dashboard" width="100%" border=1>
+<tr><th rowspan=2><a href="hpc_index.html">module</a></th><th colspan=3><a href="hpc_index_fun.html">Top Level Definitions</a></th><th colspan=3><a href="hpc_index_alt.html">Alternatives</a></th><th colspan=3><a href="hpc_index_exp.html">Expressions</a></th></tr><tr><th>%</th><th colspan=2>covered / total</th><th>%</th><th colspan=2>covered / total</th><th>%</th><th colspan=2>covered / total</th></tr><tr>
+<td>&nbsp;&nbsp;<tt>module <a href="Eval.hs.html">Eval</a></tt></td>
+<td align="right">62%</td><td>22/35</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="62%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">59%</td><td>40/67</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="59%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">57%</td><td>361/628</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="57%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
+<tr>
+<td>&nbsp;&nbsp;<tt>module <a href="Parse.hs.html">Parse</a></tt></td>
+<td align="right">80%</td><td>16/20</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="80%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">42%</td><td>6/14</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="42%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">72%</td><td>192/264</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="72%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
+<tr>
+<td>&nbsp;&nbsp;<tt>module <a href="Intersections.hs.html">Intersections</a></tt></td>
+<td align="right">63%</td><td>14/22</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="63%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">42%</td><td>35/83</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="42%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">38%</td><td>382/1001</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="38%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
+<tr>
+<td>&nbsp;&nbsp;<tt>module <a href="Construct.hs.html">Construct</a></tt></td>
+<td align="right">41%</td><td>17/41</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="41%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">41%</td><td>5/12</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="41%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">60%</td><td>381/635</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="60%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
+<tr>
+<td>&nbsp;&nbsp;<tt>module <a href="Geometry.hs.html">Geometry</a></tt></td>
+<td align="right">58%</td><td>42/72</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="58%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">40%</td><td>4/10</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="40%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">70%</td><td>300/427</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="70%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
+<tr>
+<td>&nbsp;&nbsp;<tt>module <a href="Interval.hs.html">Interval</a></tt></td>
+<td align="right">47%</td><td>8/17</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="47%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">39%</td><td>9/23</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="39%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">41%</td><td>69/165</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="41%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
+<tr>
+<td>&nbsp;&nbsp;<tt>module <a href="Illumination.hs.html">Illumination</a></tt></td>
+<td align="right">45%</td><td>11/24</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="45%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">38%</td><td>16/42</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="38%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">44%</td><td>299/678</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="44%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
+<tr>
+<td>&nbsp;&nbsp;<tt>module <a href="Surface.hs.html">Surface</a></tt></td>
+<td align="right">36%</td><td>4/11</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="36%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">35%</td><td>7/20</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="35%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">18%</td><td>43/231</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="18%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
+<tr>
+<td>&nbsp;&nbsp;<tt>module <a href="Data.hs.html">Data</a></tt></td>
+<td align="right">22%</td><td>10/45</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="22%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">3%</td><td>2/51</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="3%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">39%</td><td>254/646</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="39%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
+<tr>
+<td>&nbsp;&nbsp;<tt>module <a href="Main.hs.html">Main</a></tt></td>
+<td align="right">100%</td><td>1/1</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="100%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">-&nbsp;</td><td>0/0</td><td width=100>&nbsp;</td><td align="right">100%</td><td>6/6</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="100%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
+<tr>
+<td>&nbsp;&nbsp;<tt>module <a href="CSG.hs.html">CSG</a></tt></td>
+<td align="right">-&nbsp;</td><td>0/0</td><td width=100>&nbsp;</td><td align="right">-&nbsp;</td><td>0/0</td><td width=100>&nbsp;</td><td align="right">-&nbsp;</td><td>0/0</td><td width=100>&nbsp;</td></tr>
+<tr>
+<td>&nbsp;&nbsp;<tt>module <a href="Misc.hs.html">Misc</a></tt></td>
+<td align="right">0%</td><td>0/1</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="100%"><tr><td height=12 class="invbar"></td></tr></table></td></tr></table></td><td align="right">-&nbsp;</td><td>0/0</td><td width=100>&nbsp;</td><td align="right">0%</td><td>0/10</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="100%"><tr><td height=12 class="invbar"></td></tr></table></td></tr></table></td></tr>
+<tr>
+<td>&nbsp;&nbsp;<tt>module <a href="Primitives.hs.html">Primitives</a></tt></td>
+<td align="right">16%</td><td>1/6</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="16%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">-&nbsp;</td><td>0/0</td><td width=100>&nbsp;</td><td align="right">20%</td><td>5/24</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="20%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
+<tr></tr><tr style="background: #e0e0e0">
+<th align=left>&nbsp;&nbsp;Program Coverage Total</tt></th>
+<td align="right">49%</td><td>146/295</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="49%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">38%</td><td>124/322</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="38%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">48%</td><td>2292/4715</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="48%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
+</table></html>
+Writing: hpc_index_exp.html
+<html><style type="text/css">table.bar { background-color: #f25913; }
+td.bar { background-color: #60de51;  }
+td.invbar { background-color: #f25913;  }
+table.dashboard { border-collapse: collapse  ; border: solid 1px black }
+.dashboard td { border: solid 1px black }
+.dashboard th { border: solid 1px black }
+</style>
+<table class="dashboard" width="100%" border=1>
+<tr><th rowspan=2><a href="hpc_index.html">module</a></th><th colspan=3><a href="hpc_index_fun.html">Top Level Definitions</a></th><th colspan=3><a href="hpc_index_alt.html">Alternatives</a></th><th colspan=3><a href="hpc_index_exp.html">Expressions</a></th></tr><tr><th>%</th><th colspan=2>covered / total</th><th>%</th><th colspan=2>covered / total</th><th>%</th><th colspan=2>covered / total</th></tr><tr>
+<td>&nbsp;&nbsp;<tt>module <a href="Main.hs.html">Main</a></tt></td>
+<td align="right">100%</td><td>1/1</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="100%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">-&nbsp;</td><td>0/0</td><td width=100>&nbsp;</td><td align="right">100%</td><td>6/6</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="100%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
+<tr>
+<td>&nbsp;&nbsp;<tt>module <a href="Parse.hs.html">Parse</a></tt></td>
+<td align="right">80%</td><td>16/20</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="80%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">42%</td><td>6/14</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="42%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">72%</td><td>192/264</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="72%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
+<tr>
+<td>&nbsp;&nbsp;<tt>module <a href="Geometry.hs.html">Geometry</a></tt></td>
+<td align="right">58%</td><td>42/72</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="58%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">40%</td><td>4/10</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="40%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">70%</td><td>300/427</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="70%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
+<tr>
+<td>&nbsp;&nbsp;<tt>module <a href="Construct.hs.html">Construct</a></tt></td>
+<td align="right">41%</td><td>17/41</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="41%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">41%</td><td>5/12</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="41%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">60%</td><td>381/635</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="60%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
+<tr>
+<td>&nbsp;&nbsp;<tt>module <a href="Eval.hs.html">Eval</a></tt></td>
+<td align="right">62%</td><td>22/35</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="62%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">59%</td><td>40/67</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="59%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">57%</td><td>361/628</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="57%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
+<tr>
+<td>&nbsp;&nbsp;<tt>module <a href="Illumination.hs.html">Illumination</a></tt></td>
+<td align="right">45%</td><td>11/24</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="45%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">38%</td><td>16/42</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="38%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">44%</td><td>299/678</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="44%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
+<tr>
+<td>&nbsp;&nbsp;<tt>module <a href="Interval.hs.html">Interval</a></tt></td>
+<td align="right">47%</td><td>8/17</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="47%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">39%</td><td>9/23</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="39%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">41%</td><td>69/165</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="41%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
+<tr>
+<td>&nbsp;&nbsp;<tt>module <a href="Data.hs.html">Data</a></tt></td>
+<td align="right">22%</td><td>10/45</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="22%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">3%</td><td>2/51</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="3%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">39%</td><td>254/646</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="39%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
+<tr>
+<td>&nbsp;&nbsp;<tt>module <a href="Intersections.hs.html">Intersections</a></tt></td>
+<td align="right">63%</td><td>14/22</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="63%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">42%</td><td>35/83</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="42%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">38%</td><td>382/1001</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="38%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
+<tr>
+<td>&nbsp;&nbsp;<tt>module <a href="Primitives.hs.html">Primitives</a></tt></td>
+<td align="right">16%</td><td>1/6</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="16%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">-&nbsp;</td><td>0/0</td><td width=100>&nbsp;</td><td align="right">20%</td><td>5/24</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="20%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
+<tr>
+<td>&nbsp;&nbsp;<tt>module <a href="Surface.hs.html">Surface</a></tt></td>
+<td align="right">36%</td><td>4/11</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="36%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">35%</td><td>7/20</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="35%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">18%</td><td>43/231</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="18%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
+<tr>
+<td>&nbsp;&nbsp;<tt>module <a href="Misc.hs.html">Misc</a></tt></td>
+<td align="right">0%</td><td>0/1</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="100%"><tr><td height=12 class="invbar"></td></tr></table></td></tr></table></td><td align="right">-&nbsp;</td><td>0/0</td><td width=100>&nbsp;</td><td align="right">0%</td><td>0/10</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="100%"><tr><td height=12 class="invbar"></td></tr></table></td></tr></table></td></tr>
+<tr>
+<td>&nbsp;&nbsp;<tt>module <a href="CSG.hs.html">CSG</a></tt></td>
+<td align="right">-&nbsp;</td><td>0/0</td><td width=100>&nbsp;</td><td align="right">-&nbsp;</td><td>0/0</td><td width=100>&nbsp;</td><td align="right">-&nbsp;</td><td>0/0</td><td width=100>&nbsp;</td></tr>
+<tr></tr><tr style="background: #e0e0e0">
+<th align=left>&nbsp;&nbsp;Program Coverage Total</tt></th>
+<td align="right">49%</td><td>146/295</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="49%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">38%</td><td>124/322</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="38%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">48%</td><td>2292/4715</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="48%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
+</table></html>
+
+
diff --git a/testsuite/tests/hpc/raytrace/tixs/hpc_report_multi_001.stdout b/testsuite/tests/hpc/raytrace/tixs/hpc_report_multi_001.stdout
new file mode 100644
index 0000000000000000000000000000000000000000..e74f2e5955d64709219be62f5aac2b98daa6730e
--- /dev/null
+++ b/testsuite/tests/hpc/raytrace/tixs/hpc_report_multi_001.stdout
@@ -0,0 +1,9 @@
+-----<module Geometry>-----
+ 70% expressions used (300/427)
+ 10% boolean coverage (1/10)
+      10% guards (1/10), 3 always True, 1 always False, 5 unevaluated
+     100% 'if' conditions (0/0)
+     100% qualifiers (0/0)
+ 40% alternatives used (4/10)
+ 66% local declarations used (2/3)
+ 58% top-level declarations used (42/72)
diff --git a/testsuite/tests/hpc/raytrace/tixs/hpc_report_multi_002.stdout b/testsuite/tests/hpc/raytrace/tixs/hpc_report_multi_002.stdout
new file mode 100644
index 0000000000000000000000000000000000000000..b9ab872c6cf78d4029e82d9a612d8483b870409a
--- /dev/null
+++ b/testsuite/tests/hpc/raytrace/tixs/hpc_report_multi_002.stdout
@@ -0,0 +1,108 @@
+-----<module CSG>-----
+100% expressions used (0/0)
+100% boolean coverage (0/0)
+     100% guards (0/0)
+     100% 'if' conditions (0/0)
+     100% qualifiers (0/0)
+100% alternatives used (0/0)
+100% local declarations used (0/0)
+100% top-level declarations used (0/0)
+-----<module Construct>-----
+ 60% expressions used (381/635)
+100% boolean coverage (0/0)
+     100% guards (0/0)
+     100% 'if' conditions (0/0)
+     100% qualifiers (0/0)
+ 41% alternatives used (5/12)
+100% local declarations used (5/5)
+ 41% top-level declarations used (17/41)
+-----<module Data>-----
+ 39% expressions used (254/646)
+  0% boolean coverage (0/4)
+       0% guards (0/4), 1 always True, 3 unevaluated
+     100% 'if' conditions (0/0)
+     100% qualifiers (0/0)
+  3% alternatives used (2/51)
+100% local declarations used (0/0)
+ 18% top-level declarations used (10/53)
+-----<module Eval>-----
+ 57% expressions used (361/628)
+ 20% boolean coverage (1/5)
+     100% guards (0/0)
+      20% 'if' conditions (1/5), 1 always False, 3 unevaluated
+     100% qualifiers (0/0)
+ 59% alternatives used (40/67)
+ 36% local declarations used (4/11)
+ 62% top-level declarations used (22/35)
+-----<module Illumination>-----
+ 44% expressions used (299/678)
+ 18% boolean coverage (3/16)
+      16% guards (2/12), 2 always True, 1 always False, 7 unevaluated
+      33% 'if' conditions (1/3), 1 always True, 1 always False
+       0% qualifiers (0/1), 1 unevaluated
+ 38% alternatives used (16/42)
+ 57% local declarations used (27/47)
+ 45% top-level declarations used (11/24)
+-----<module Intersections>-----
+ 38% expressions used (382/1001)
+ 33% boolean coverage (11/33)
+      40% guards (8/20), 8 always True, 3 always False, 1 unevaluated
+      23% 'if' conditions (3/13), 10 unevaluated
+     100% qualifiers (0/0)
+ 42% alternatives used (35/83)
+ 36% local declarations used (44/120)
+ 63% top-level declarations used (14/22)
+-----<module Interval>-----
+ 41% expressions used (69/165)
+  8% boolean coverage (1/12)
+      11% guards (1/9), 3 always True, 3 always False, 2 unevaluated
+       0% 'if' conditions (0/3), 2 always True, 1 unevaluated
+     100% qualifiers (0/0)
+ 39% alternatives used (9/23)
+ 25% local declarations used (1/4)
+ 47% top-level declarations used (8/17)
+-----<module Main>-----
+100% expressions used (6/6)
+100% boolean coverage (0/0)
+     100% guards (0/0)
+     100% 'if' conditions (0/0)
+     100% qualifiers (0/0)
+100% alternatives used (0/0)
+100% local declarations used (0/0)
+100% top-level declarations used (1/1)
+-----<module Misc>-----
+  0% expressions used (0/10)
+100% boolean coverage (0/0)
+     100% guards (0/0)
+     100% 'if' conditions (0/0)
+     100% qualifiers (0/0)
+100% alternatives used (0/0)
+100% local declarations used (0/0)
+  0% top-level declarations used (0/1)
+-----<module Parse>-----
+ 72% expressions used (191/264)
+ 50% boolean coverage (1/2)
+     100% guards (0/0)
+      50% 'if' conditions (1/2), 1 always False
+     100% qualifiers (0/0)
+ 42% alternatives used (6/14)
+100% local declarations used (2/2)
+ 80% top-level declarations used (16/20)
+-----<module Primitives>-----
+ 20% expressions used (5/24)
+100% boolean coverage (0/0)
+     100% guards (0/0)
+     100% 'if' conditions (0/0)
+     100% qualifiers (0/0)
+100% alternatives used (0/0)
+100% local declarations used (0/0)
+ 16% top-level declarations used (1/6)
+-----<module Surface>-----
+ 18% expressions used (43/231)
+  0% boolean coverage (0/1)
+     100% guards (0/0)
+       0% 'if' conditions (0/1), 1 unevaluated
+     100% qualifiers (0/0)
+ 35% alternatives used (7/20)
+ 16% local declarations used (4/24)
+ 36% top-level declarations used (4/11)
diff --git a/testsuite/tests/hpc/raytrace/tixs/hpc_report_multi_003.stdout b/testsuite/tests/hpc/raytrace/tixs/hpc_report_multi_003.stdout
new file mode 100644
index 0000000000000000000000000000000000000000..670778f34c2f5bc0fa1ded9109acdf64c0bc82f3
--- /dev/null
+++ b/testsuite/tests/hpc/raytrace/tixs/hpc_report_multi_003.stdout
@@ -0,0 +1,41 @@
+-----<module Geometry>-----
+ 70% expressions used (300/427)
+ 10% boolean coverage (1/10)
+      10% guards (1/10), 3 always True, 1 always False, 5 unevaluated
+     100% 'if' conditions (0/0)
+     100% qualifiers (0/0)
+ 40% alternatives used (4/10)
+ 66% local declarations used (2/3)
+ 58% top-level declarations used (42/72)
+unused declarations:
+     /=
+     /=
+     ==
+     ==
+     addVV
+     coord
+     dist2
+     distFrom0
+     distFrom0Sq
+     nearV
+     negV
+     norm
+     point_to_vector
+     showList
+     showList
+     showList
+     showList
+     showList
+     showList
+     showsPrec
+     showsPrec
+     showsPrec
+     showsPrec
+     showsPrec
+     showsPrec
+     subCC
+     subPP
+     tangents
+     tangents.v1
+     vector_to_point
+     white
diff --git a/testsuite/tests/hpc/raytrace/tixs/hpc_sample.tix b/testsuite/tests/hpc/raytrace/tixs/hpc_sample.tix
new file mode 100644
index 0000000000000000000000000000000000000000..ea09b324eaf4b9725b08133e24a6a866454a294c
--- /dev/null
+++ b/testsuite/tests/hpc/raytrace/tixs/hpc_sample.tix
@@ -0,0 +1 @@
+Tix [ TixModule "Main" 1310345646 7 [1,1,1,1,1,1,1], TixModule "Parse" 501961473 290 [1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,0,1,1,1,7,1,4138,4304,7,7,4,4,4,4,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,41,41,41,41,41,41,41,41,41,41,41,42,4022,1,0,0,0,0,0,0,0,0,0,0,3980,3899,3899,3899,3899,3978,3980,3980,3980,4022,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,11,11,11,11,11,11,1,1,1,1,1,1,1,1,427,427,119,119,119,119,119,119,119,427,1,1,1,119,118,119,119,1,1,1,1,119,119,119,63,25,38,25,25,25,37,37,38,63,56,0,56,0,0,0,0,55,56,56,119,2,2,1,1,13,16,16,1,1,1,65,65,65,1,1,0,1,1,1,0,1,1,1,92,94,1,0,1,1,1,1,1,25,25,1,0,1,1,4019,4022,1,0,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,0,1,1,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], TixModule "Eval" 1993219040 684 [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,1,1,1,1,49,20,49,1,1,1,269762,3059036,3328798,0,0,0,0,0,0,0,0,176132,176053,176053,176132,176132,176132,176132,176132,369283,369283,369283,369279,369283,369283,369283,369283,1,0,1,1,1,1,1,1,371112,441868,409350,441868,441866,441868,441868,441868,0,0,711560,711560,711560,711560,711557,711556,711559,711560,711560,711560,0,0,0,0,711560,376835,118594,204675,376835,376835,376835,376835,376835,376835,0,65024,65025,65025,65025,65024,65024,65024,65024,65024,65025,0,0,0,0,1,1,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,65,13483,39849,39849,39849,39849,39849,39849,39849,39849,39849,39849,105109,132311,132311,132311,132311,132311,132311,132311,132311,132311,132311,0,0,746105,746105,746105,746094,746105,746107,746105,746104,746105,746105,746105,746107,0,0,3059036,4153,3328782,3328798,3328798,3059036,269762,4086,3059036,3059036,3059033,3059033,3059036,269761,269761,269762,3328798,3328798,3328798,1,2,2,2,2,2,2,0,0,1,2,2,0,1,1,1,1,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32512,32512,32512,32512,32512,32512,32512,32512,0,0,0,0,0,0,53568,53568,53568,53568,53568,53568,0,0,0,0,0,0,0,0,32512,32512,32512,32512,32512,32512,0,0,32512,32512,32512,32512,32512,32512,32512,32512,26812,32512,0,0,0,0,0,32512,32512,1,2,0,0,0,0,0,0,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,2,1,2,2,2,118592,118592,118592,118592,118592,118592,32512,32512,32512,32512,32512,32512,0,0,0,0,0,0,53568,53568,53568,53568,53568,53568,53568,118592,118592,118592,118592,118592,118592,118592,218155,218155,218155,218155,218155,218155,218155,53568,53568,53568,53568,53568,53568,53568,65024,65024,65024,65024,65024,65024,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32515,32515,32515,32515,32513,32515,32515,3,3,3,3,0,3,3,3,3,3,3,3,3,1,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,746104,0,0,746091,0,746091,746091,746091,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,1,13,0,13,13,14,0,1,1,0,0,0,0,1,1,17,17,17,0,17,0,0,0,17,17,17,17,17,1,1,1,1,1,50,54,31,48,46,48,0,6,54,54,54,54,31,31,31,15,15,15,0,2,2,2,2,14,1,14,14,14,14,0,0,0,1,1,0,0,0,7362839,10417773,10417773,1,1,0,0,0], TixModule "Data" 2953926806 707 [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,53568,53568,53568,53568,0,0,0,0,0,0,65024,65024,65024,65024,65024,0,65024,65024,65024,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,65024,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,1,0,0,1,1,0,1,0,0,1,1,0,1,0,0,1,1,49,49,49,20,49,1,1,1,0,0,0,0,1,1,1,0,0,1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,0,0,1,1,1,0,0,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,0,0,1,1,1,0,0,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,0,0,1,1,1,0,0,0,0,0,0,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,0,0,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,1,1,1,0,0,1,1,1,0,0,1,1,1,0,0,1,1,1,0,0,1,1,1,0,0,1,1,1,0,0,1,1,1,3,3,3,3,3,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,53,22,53,1,1,0,0,0,0,711560,711560,711560,711560,441868,409350,441868,371112,441868,441868,441868,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,746155,746155,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], TixModule "Geometry" 1504513891 522 [180000,180000,180000,0,180000,0,180000,180000,180000,4582,175418,4582,175418,175418,0,175418,180000,1,1,1,1,3,3,3,3,0,3,0,0,0,0,0,0,0,0,0,0,0,3,376778,376778,376778,376778,376778,376778,376778,1,1,32512,32512,32512,5785,5785,5785,5785,5785,5785,5785,32512,32512,183672,183672,183672,183672,183672,183672,183672,183672,183672,183672,183672,112863,112863,112863,112863,112863,112863,112863,112863,112863,112863,112863,0,0,0,0,0,0,0,0,0,0,0,151160,151160,151160,151160,151160,151160,151160,151160,151160,151160,151160,1,1,1,1,1,1,1,1,1,0,0,0,0,0,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,229838,229838,229838,229838,229838,229838,229838,229838,229838,229838,229838,419283,419283,419283,419283,0,0,0,0,0,0,0,0,0,0,0,0,0,139761,139761,139761,139761,139761,139761,139761,139761,139761,139761,139761,139761,139761,139761,0,139761,139761,139761,139761,139761,0,0,0,0,0,139761,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,53539,53539,53539,53539,53539,53539,53539,53539,53539,53539,53539,63350,63350,63350,63350,63350,63350,63350,63350,63350,63350,63350,34539,34539,34539,34539,34539,34539,0,0,0,0,0,0,0,0,0,0,0,1323260,1323260,1323260,1323260,1323260,1323260,1323260,1323260,1323260,1323260,1323260,1323260,1323260,1323260,1323260,1323260,330815,330815,330815,330815,330815,330815,330815,330815,330815,330815,330815,330815,330815,330815,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,32512,32512,32512,32512,32512,32512,32512,32512,32512,32512,32512,32512,32512,32512,32512,32512,32512,32512,32512,32512,32512,32512,32512,112863,112863,112863,112863,112863,112863,112863,112863,112863,112863,112863,112863,197872,197872,197872,197872,197872,132895,132895,132895,132895,132895,132895,132895,132895,132895,132895,132895,132895,132895,132895,132895,132895,132895,197872,197872,197872,197872,197872,197872,197872,197872,197872,197872,197872,197872,132847,132847,132847,132847,132847,132847,132847,132847,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,60006,60006,60006,60006,60006,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,26833,26833,26833,26833,26833,159631,159631,248385,248385,159631,159631,188590,188590,253212,253212,187913,187913,60000,60000,60000,60000,60000,32514,32514,32514,32514,32514,0,0,0,0,0,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], TixModule "CSG" 1441175296 0 [], TixModule "Surface" 1778761563 268 [0,0,0,0,0,0,0,0,0,0,0,0,0,28863,28863,28863,4731,4731,4731,31430,31430,31430,32512,0,26784,26784,26784,0,3649,3649,3649,0,0,0,0,0,1082,1082,1082,0,0,0,0,0,945,945,945,0,52,52,52,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32512,32512,0,0,32512,32512,32512,32512,32512,32512,32512,32512,32512,32512,32512,32512,32512,0,32512,32512,32512,32512,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32512,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32512,32512,32512,26812,32512,32512,0,0,0,0,0,0,0], TixModule "Illumination" 615204115 781 [0,0,0,0,0,0,0,0,0,0,0,0,28811,28811,28811,0,26812,0,0,1999,28811,28811,86727,86727,86727,0,1,0,0,32512,32512,32512,28811,28811,28811,32512,32512,32512,32512,86727,86727,0,0,0,0,0,0,0,0,0,0,32512,32512,32512,32512,32512,3701,28811,1,28811,28811,28811,28811,28811,28811,28811,28811,28811,1999,26812,1,26812,26812,0,26812,26812,26812,26812,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32512,28811,28811,32512,32512,32512,32512,32512,32512,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,180000,180000,180000,180000,180000,180000,0,0,0,0,0,0,0,0,0,0,0,0,1,1,200,200,60000,60000,60000,60000,60000,60000,60000,200,200,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32512,32512,32512,32512,26727,26727,26727,26727,26727,26727,26727,26727,26727,26727,26727,26727,26727,26727,26727,26727,32512,32512,32512,5785,26727,5785,26727,26727,26727,32512,32512,32512,32512,32512,32512,32512,32512,32512,32512,32512,0,0,0,28811,28811,28811,32512,32512,32512,32512,32512,32512,32512,26812,26812,26812,26812,26812,26812,26812,26812,26812,26812,32512,32512,32512,32512,32512,32512,26812,26812,26812,26812,26812,26812,26812,26812,26812,26812,26812,26812,26812,26812,26812,26812,26812,26812,32512,32512,32512,32512,32512,32512,32512,32512,32512,32512,32512,32512,86727,86727,86727,86727,0,86727,0,86727,86727,0,86727,86727,86727,86727,86727,86727,54215,32512,26727,26727,26727,26727,32512,32512,28808,32512,86727,86727,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,60000,60000,60000,60000,60000,60000,60000,60000,60000,60000,60000,60000,60000,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,200,1,1,200,60000,60000,60000,60000,60000,60000,60000,200,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,0,1,0,0,0,0,0,0,0,180000,180000,180000,180000,180000,180000,180000,180000,180000,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0], TixModule "Primitives" 3702571582 30 [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,2,2,2,0,0,0,0,0,0], TixModule "Misc" 1840720397 11 [0,0,0,0,0,0,0,0,0,0,0], TixModule "Construct" 2039014732 681 [6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,1,1,1,1,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,1,1,1,1,3,3,3,3,3,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,6,6,6,6,6,6,6,6,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,6,6,6,6,6,6,2,2,2,2,15,3,3,3,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0], TixModule "Intersections" 1674175314 1209 [1,1,1,1,1,317803,317803,317803,317803,317803,317803,317803,317803,317803,317803,317803,317803,346614,346614,346614,28811,317803,28811,28811,28811,21311,21311,21311,28811,1,10594,1,10594,28811,317803,317803,317803,215534,102269,215534,215534,215534,102269,102269,0,102269,102269,102269,346614,0,3,147905,147905,147905,81032,81032,81032,147905,2,67893,2,67893,67893,0,67893,67893,67893,67893,67893,67893,67893,231076,17309,3,115538,115538,115538,115538,115538,115538,108038,115538,115538,115538,115538,115538,115538,115538,115538,115538,115538,115538,115538,115538,115538,115538,115538,115538,115538,115538,115538,115538,115538,115538,115538,115538,115538,115538,115538,115538,115538,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,31374,31374,31374,0,31374,0,0,0,0,0,0,0,0,31374,31374,31374,23819,1,23819,23819,1,1,0,1,31374,31374,31374,31374,14552,16822,14552,16822,31374,31374,31374,31374,31374,22758,8616,22758,8616,31374,31374,31374,31374,31374,31374,34618,51927,51927,51927,0,51927,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,51927,51927,51927,37729,14198,7735,35117,35117,35117,35117,35117,945,35117,35117,35117,35117,35117,35117,35117,37729,14198,14198,0,2019,13566,13566,13566,13566,13566,13566,1082,13566,13566,13566,13566,13566,13566,14198,51927,17309,17309,17309,17309,17309,17309,17309,17309,17309,17309,17309,17309,17309,17309,17309,14065,14065,14065,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,879,879,1,1,1,1890,1890,0,0,0,1074,1074,1,1,1,2164,2164,0,0,0,0,0,1,1,1,5774,5774,5728,5728,5728,5728,11781,0,5728,5728,5728,5728,5728,5728,5728,11781,11781,11781,2164,1074,14065,17309,17309,879,1890,17309,17309,17309,5774,0,17309,17309,17309,17309,17309,1,9754,9754,2027,2027,9754,17309,17309,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,26784,26784,26784,115538,115538,115538,26784,26784,26784,26784,26784,26784,115538,115538,115538,26784,26784,26784,1,1,1,1,1,1,1,1,1,1,115538,115538,115538,115538,115538,115538,26784,26784,26784,26784,26784,26784,26784,26784,26784,26784,26784,26784,26784,26784,26784,26784,26784,115538,115538,115538,0,115538,0,0,0,0,0,0,0,0,0,0,0,0,115538,115538,115538,30000,85538,30000,30000,0,26784,26784,26784,26784,26784,26784,26784,30000,30000,30000,30000,0,30000,85538,85538,0,85538,85538,0,0,0,0,0,0,0,0,85538,85538,85538,85538,85538,85538,115538,26784,115538,115538,26784,115538,115538,32512,32512,32512,32512,32512,32512,32512,32512,0,0,0,0,0,32512,32512,32512,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32512,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,115538,115538,115538,115538,115538,115538,115538,115538,115538,115538,115538,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,127319,127319,32512,32512,32512,32512,32512,127319,127319,132847,132847,132847,132847,132847,132847,32512,125292,132847,132847,115538,115538,115538,17309,3,17309,17309,17309,1,1,0,1,115538,26784,115538,0,0,0,17309,5728,17309,0,0,0,0,0,0,496770,0,0,0,0,0,0,0,0,81027,87565,87565,87565,60838,60838,60838,87565,87565,0,87565,87565,83054,87565,87565,0,0,0,0,0,0,0,0,0,0,0,0,36538,36538,36538,36538,36538,36538,36538,2027,34511,2027,2027,2027,2027,2027,34511,34511,0,34511,205130,115538,115538,115538,115538,115538,115538,115538], TixModule "Interval" 238116040 210 [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9754,9754,9754,0,9754,0,9754,9754,9754,3216,6538,3216,6538,6538,0,6538,9754,87565,87565,87565,87565,87565,39754,39754,39754,39754,39754,9754,9754,9754,2027,2027,9754,2027,9754,9754,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9754,9754,6538,0,6538,0,6538,6538,0,6538,105784,0,105784,0,105784,105784,0,105784,9754,9754,9754,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3216,3216,3216,0,3216,0,0,0,3216,0,0,0,3216,6538,6538,6538,0,6538,6538,6538,6538,6538,0,0,0,6538,9754,122076,115538,115538,115538,115538,115538,115538,81027,81027,81027,115538,115538,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,132847,125292,132847,132847,95120,132847,132847,0,0,0,0,0,1,1,1,1,1]]
diff --git a/testsuite/tests/hpc/raytrace/tixs/hpc_show_multi_001.stdout b/testsuite/tests/hpc/raytrace/tixs/hpc_show_multi_001.stdout
new file mode 100644
index 0000000000000000000000000000000000000000..a3408856ccb3f68c89f5ad7c2113dc054ffa7a89
--- /dev/null
+++ b/testsuite/tests/hpc/raytrace/tixs/hpc_show_multi_001.stdout
@@ -0,0 +1,5400 @@
+    0          1 Main                          13:29-13:40 ExpBox False
+    1          1 Main                          13:20-13:40 ExpBox False
+    2          1 Main                          14:32-14:34 ExpBox False
+    3          1 Main                          14:22-14:35 ExpBox False
+    4          1 Main                          14:13-14:35 ExpBox False
+    5          1 Main                           13:8-15:11 ExpBox False
+    6          1 Main                           13:1-15:11 TopLevelBox ["main"]
+    0          1 Parse                       105:24-105:26 ExpBox False
+    1          1 Parse                       105:17-105:26 ExpBox False
+    2          1 Parse                       106:34-106:41 ExpBox False
+    3          1 Parse                       106:26-106:42 ExpBox False
+    4          1 Parse                       106:17-106:42 ExpBox False
+    5          0 Parse                       107:24-107:25 ExpBox False
+    6          1 Parse                       107:17-107:25 ExpBox False
+    7          1 Parse                       105:13-108:15 ExpBox False
+    8          1 Parse                        104:9-108:15 LocalBox ["whiteSpace","oneLineComment"]
+    9          1 Parse                       103:40-103:50 ExpBox False
+   10          1 Parse                       103:33-103:51 ExpBox False
+   11          1 Parse                       103:23-103:51 ExpBox False
+   12          1 Parse                        103:9-103:51 LocalBox ["whiteSpace","simpleSpace"]
+   13          1 Parse                       102:25-102:35 ExpBox False
+   14          1 Parse                       102:41-102:54 ExpBox False
+   15          1 Parse                       102:25-102:54 ExpBox False
+   16          0 Parse                       102:60-102:61 ExpBox False
+   17          1 Parse                       102:24-102:62 ExpBox False
+   18          1 Parse                       102:15-102:62 ExpBox False
+   19          1 Parse                        102:1-108:15 TopLevelBox ["whiteSpace"]
+   20          7 Parse                       100:21-100:21 ExpBox False
+   21          1 Parse                       100:24-100:33 ExpBox False
+   22       4138 Parse                       100:43-100:43 ExpBox False
+   23       4304 Parse                       100:36-100:43 ExpBox False
+   24          7 Parse                       100:12-100:46 ExpBox False
+   25          7 Parse                        100:1-100:46 TopLevelBox ["lexeme"]
+   26          4 Parse                         98:30-98:33 ExpBox False
+   27          4 Parse                         98:22-98:34 ExpBox False
+   28          4 Parse                         98:15-98:34 ExpBox False
+   29          4 Parse                          98:1-98:34 TopLevelBox ["symbol"]
+   30          1 Parse                         96:30-96:32 ExpBox False
+   31          1 Parse                         96:22-96:33 ExpBox False
+   32          1 Parse                         96:43-96:45 ExpBox False
+   33          1 Parse                         96:35-96:46 ExpBox False
+   34          1 Parse                         96:48-96:48 ExpBox False
+   35          1 Parse                         96:14-96:48 ExpBox False
+   36          1 Parse                          96:1-96:48 TopLevelBox ["brackets"]
+   37          1 Parse                         95:30-95:32 ExpBox False
+   38          1 Parse                         95:22-95:33 ExpBox False
+   39          1 Parse                         95:43-95:45 ExpBox False
+   40          1 Parse                         95:35-95:46 ExpBox False
+   41          1 Parse                         95:48-95:48 ExpBox False
+   42          1 Parse                         95:14-95:48 ExpBox False
+   43          1 Parse                          95:1-95:48 TopLevelBox ["braces"]
+   44          1 Parse                         89:18-89:19 ExpBox False
+   45          1 Parse                         89:29-89:31 ExpBox False
+   46          1 Parse                         89:21-89:32 ExpBox False
+   47          1 Parse                         89:11-89:32 ExpBox False
+   48          1 Parse                          89:1-89:32 TopLevelBox ["optSign"]
+   49          1 Parse                         86:17-86:21 ExpBox False
+   50          1 Parse                         86:11-86:21 ExpBox False
+   51          1 Parse                          86:1-86:21 TopLevelBox ["decimal"]
+   52          1 Parse                         79:13-79:15 ExpBox False
+   53          1 Parse                         80:19-80:22 ExpBox False
+   54          1 Parse                         80:13-80:22 ExpBox False
+   55          0 Parse                         81:13-81:19 ExpBox False
+   56          0 Parse                         82:13-82:19 ExpBox False
+   57          0 Parse                         83:16-83:16 ExpBox False
+   58          0 Parse                         83:18-83:18 ExpBox False
+   59          0 Parse                         83:23-83:23 ExpBox False
+   60          0 Parse                         83:18-83:23 ExpBox False
+   61          0 Parse                         83:15-83:24 ExpBox False
+   62          0 Parse                          83:8-83:24 ExpBox False
+   63          1 Parse                           80:3-84:6 ExpBox False
+   64          1 Parse                          79:13-84:6 ExpBox False
+   65          1 Parse                           79:1-84:6 TopLevelBox ["exponent'"]
+   66          1 Parse                         64:10-64:15 ExpBox False
+   67          1 Parse                         65:13-65:19 ExpBox False
+   68          1 Parse                         66:13-66:19 ExpBox False
+   69          1 Parse                         67:24-67:26 ExpBox False
+   70          1 Parse                         67:17-67:26 ExpBox False
+   71          1 Parse                         68:22-68:28 ExpBox False
+   72          1 Parse                         69:29-69:30 ExpBox False
+   73          1 Parse                         69:32-69:40 ExpBox False
+   74          1 Parse                         69:22-69:40 ExpBox False
+   75         41 Parse                         70:38-70:38 ExpBox False
+   76         41 Parse                         70:43-70:43 ExpBox False
+   77         41 Parse                         70:48-70:50 ExpBox False
+   78         41 Parse                         70:55-70:55 ExpBox False
+   79         41 Parse                         70:60-70:60 ExpBox False
+   80         41 Parse                         70:55-70:60 ExpBox False
+   81         41 Parse                         70:48-70:60 ExpBox False
+   82         41 Parse                         70:43-70:60 ExpBox False
+   83         41 Parse                         70:37-70:61 ExpBox False
+   84         41 Parse                         70:31-70:62 ExpBox False
+   85         41 Parse                         70:24-70:63 ExpBox False
+   86         42 Parse                         70:17-70:63 ExpBox False
+   87       4022 Parse                         67:12-71:15 ExpBox False
+   88          1 Parse                         72:22-72:30 ExpBox False
+   89          0 Parse                         73:38-73:38 ExpBox False
+   90          0 Parse                         73:43-73:43 ExpBox False
+   91          0 Parse                         73:48-73:51 ExpBox False
+   92          0 Parse                         73:56-73:56 ExpBox False
+   93          0 Parse                         73:48-73:56 ExpBox False
+   94          0 Parse                         73:43-73:56 ExpBox False
+   95          0 Parse                         73:37-73:57 ExpBox False
+   96          0 Parse                         73:31-73:58 ExpBox False
+   97          0 Parse                         73:24-73:59 ExpBox False
+   98          0 Parse                         73:17-73:59 ExpBox False
+   99       3980 Parse                         72:12-74:15 ExpBox False
+  100       3899 Parse                         75:37-75:37 ExpBox False
+  101       3899 Parse                         75:42-75:42 ExpBox False
+  102       3899 Parse                         75:36-75:43 ExpBox False
+  103       3899 Parse                         75:30-75:44 ExpBox False
+  104       3978 Parse                         75:24-75:45 ExpBox False
+  105       3980 Parse                         75:17-75:45 ExpBox False
+  106       3980 Parse                         75:12-75:47 ExpBox False
+  107       3980 Parse                         72:12-75:47 ExpBox False
+  108       4022 Parse                         67:12-75:47 ExpBox False
+  109          1 Parse                           65:3-76:6 ExpBox False
+  110          1 Parse                          64:10-76:6 ExpBox False
+  111          1 Parse                           64:1-76:6 TopLevelBox ["number"]
+  112          0 Parse                         55:15-55:33 ExpBox False
+  113          0 Parse                         56:15-56:79 ExpBox False
+  114          0 Parse                         57:15-57:59 ExpBox False
+  115          0 Parse                         58:15-58:50 ExpBox False
+  116          0 Parse                         59:15-59:68 ExpBox False
+  117          0 Parse                         58:15-59:68 ExpBox False
+  118          0 Parse                         57:15-59:68 ExpBox False
+  119          0 Parse                         56:15-59:68 ExpBox False
+  120          0 Parse                         55:15-59:68 ExpBox False
+  121          0 Parse                          55:1-59:68 TopLevelBox ["test_number"]
+  122          1 Parse                         51:13-51:18 ExpBox False
+  123          1 Parse                         51:36-51:38 ExpBox False
+  124          1 Parse                         51:30-51:39 ExpBox False
+  125          1 Parse                         51:47-51:49 ExpBox False
+  126          1 Parse                         51:41-51:50 ExpBox False
+  127         11 Parse                         51:82-51:82 ExpBox False
+  128         11 Parse                         51:74-51:82 ExpBox False
+  129         11 Parse                         51:87-51:87 ExpBox False
+  130         11 Parse                         51:92-51:94 ExpBox False
+  131         11 Parse                         51:87-51:94 ExpBox False
+  132         11 Parse                         51:74-51:94 ExpBox False
+  133          1 Parse                         51:67-51:95 ExpBox False
+  134          1 Parse                         51:58-51:96 ExpBox False
+  135          1 Parse                         51:52-51:97 ExpBox False
+  136          1 Parse                         51:22-51:97 ExpBox False
+  137          1 Parse                         51:13-51:97 ExpBox False
+  138          1 Parse                          51:1-51:97 TopLevelBox ["gmlString"]
+  139          1 Parse                          44:9-44:14 ExpBox False
+  140          1 Parse                         45:13-45:18 ExpBox False
+  141        427 Parse                         46:46-46:46 ExpBox False
+  142        427 Parse                         46:35-46:46 ExpBox False
+  143        119 Parse                         46:51-46:51 ExpBox False
+  144        119 Parse                         46:56-46:58 ExpBox False
+  145        119 Parse                         46:51-46:58 ExpBox False
+  146        119 Parse                         46:63-46:63 ExpBox False
+  147        119 Parse                         46:68-46:70 ExpBox False
+  148        119 Parse                         46:63-46:70 ExpBox False
+  149        119 Parse                         46:51-46:70 ExpBox False
+  150        427 Parse                         46:35-46:70 ExpBox False
+  151          1 Parse                         46:28-46:71 ExpBox False
+  152          1 Parse                         46:19-46:72 ExpBox False
+  153          1 Parse                         46:14-46:72 ExpBox False
+  154        119 Parse                         47:16-47:16 ExpBox False
+  155        118 Parse                         47:18-47:19 ExpBox False
+  156        119 Parse                         47:15-47:20 ExpBox False
+  157        119 Parse                          47:8-47:20 ExpBox False
+  158          1 Parse                           45:3-48:6 ExpBox False
+  159          1 Parse                           44:9-48:6 ExpBox False
+  160          1 Parse                           44:1-48:6 TopLevelBox ["ident"]
+  161          1 Parse                         37:14-37:18 ExpBox False
+  162        119 Parse                         38:21-38:22 ExpBox False
+  163        119 Parse                         38:24-38:30 ExpBox False
+  164        119 Parse                         38:13-38:31 ExpBox False
+  165         63 Parse                         39:22-39:27 ExpBox False
+  166         25 Parse                         39:22-39:27 BinBox CondBinBox True
+  167         38 Parse                         39:22-39:27 BinBox CondBinBox False
+  168         25 Parse                         39:48-39:49 ExpBox False
+  169         25 Parse                         39:41-39:50 ExpBox False
+  170         25 Parse                         39:34-39:50 ExpBox True
+  171         37 Parse                         39:69-39:70 ExpBox False
+  172         37 Parse                         39:64-39:71 ExpBox False
+  173         38 Parse                         39:57-39:71 ExpBox True
+  174         63 Parse                         39:19-39:71 ExpBox True
+  175         56 Parse                         40:22-40:27 ExpBox False
+  176          0 Parse                         40:22-40:27 BinBox CondBinBox True
+  177         56 Parse                         40:22-40:27 BinBox CondBinBox False
+  178          0 Parse                         40:41-40:76 ExpBox False
+  179          0 Parse                         40:81-40:82 ExpBox False
+  180          0 Parse                         40:40-40:83 ExpBox False
+  181          0 Parse                         40:34-40:83 ExpBox True
+  182         55 Parse                         40:97-40:97 ExpBox False
+  183         56 Parse                         40:90-40:97 ExpBox True
+  184         56 Parse                         40:19-40:97 ExpBox True
+  185        119 Parse                          38:8-40:97 ExpBox False
+  186          2 Parse                           37:3-41:6 ExpBox False
+  187          2 Parse                           36:1-41:6 TopLevelBox ["pident"]
+  188          1 Parse                         27:28-27:36 ExpBox False
+  189          1 Parse                         27:19-27:36 ExpBox False
+  190         13 Parse                         27:63-27:64 ExpBox False
+  191         16 Parse                         27:56-27:65 ExpBox False
+  192         16 Parse                         27:49-27:65 ExpBox False
+  193          1 Parse                          27:8-27:67 ExpBox False
+  194          1 Parse                         28:28-28:36 ExpBox False
+  195          1 Parse                         28:19-28:36 ExpBox False
+  196         65 Parse                         28:64-28:65 ExpBox False
+  197         65 Parse                         28:56-28:66 ExpBox False
+  198         65 Parse                         28:49-28:66 ExpBox False
+  199          1 Parse                          28:8-28:68 ExpBox False
+  200          1 Parse                         29:19-29:27 ExpBox False
+  201          0 Parse                         29:65-29:65 ExpBox False
+  202          1 Parse                         29:56-29:66 ExpBox False
+  203          1 Parse                         29:49-29:66 ExpBox False
+  204          1 Parse                          29:8-29:68 ExpBox False
+  205          0 Parse                         29:74-29:81 ExpBox False
+  206          1 Parse                          29:7-29:82 ExpBox False
+  207          1 Parse                         30:25-30:29 ExpBox False
+  208          1 Parse                         30:18-30:29 ExpBox False
+  209         92 Parse                         30:56-30:56 ExpBox False
+  210         94 Parse                         30:49-30:56 ExpBox False
+  211          1 Parse                          30:8-30:58 ExpBox False
+  212          0 Parse                         30:74-30:85 ExpBox False
+  213          1 Parse                          30:7-30:86 ExpBox False
+  214          1 Parse                         31:18-31:20 ExpBox False
+  215          1 Parse                         31:13-31:20 ExpBox False
+  216          1 Parse                         32:25-32:28 ExpBox False
+  217          1 Parse                         32:18-32:28 ExpBox False
+  218         25 Parse                         32:56-32:56 ExpBox False
+  219         25 Parse                         32:49-32:56 ExpBox False
+  220          1 Parse                          31:8-32:58 ExpBox False
+  221          0 Parse                         32:64-32:83 ExpBox False
+  222          1 Parse                          31:7-32:84 ExpBox False
+  223          1 Parse                         33:18-33:23 ExpBox False
+  224       4019 Parse                         33:56-33:56 ExpBox False
+  225       4022 Parse                         33:49-33:56 ExpBox False
+  226          1 Parse                          33:8-33:58 ExpBox False
+  227          0 Parse                         33:64-33:71 ExpBox False
+  228          1 Parse                          33:7-33:72 ExpBox False
+  229          1 Parse                          31:7-33:72 ExpBox False
+  230          1 Parse                          30:7-33:72 ExpBox False
+  231          1 Parse                          29:7-33:72 ExpBox False
+  232          1 Parse                          28:8-33:72 ExpBox False
+  233          1 Parse                          27:8-33:72 ExpBox False
+  234          1 Parse                          26:1-33:72 TopLevelBox ["token"]
+  235          1 Parse                         23:18-23:22 ExpBox False
+  236          1 Parse                         23:13-23:22 ExpBox False
+  237          0 Parse                         23:28-23:43 ExpBox False
+  238          1 Parse                         23:13-23:43 ExpBox False
+  239          1 Parse                          23:1-23:43 TopLevelBox ["tokenList"]
+  240          1 Parse                          16:8-16:17 ExpBox False
+  241          1 Parse                         17:14-17:22 ExpBox False
+  242          1 Parse                          18:8-18:10 ExpBox False
+  243          1 Parse                         19:15-19:16 ExpBox False
+  244          1 Parse                          19:8-19:16 ExpBox False
+  245          1 Parse                           16:3-20:6 ExpBox False
+  246          1 Parse                           15:1-20:6 TopLevelBox ["program"]
+  247          1 Parse                       114:27-114:33 ExpBox False
+  248          0 Parse                       114:35-114:43 ExpBox False
+  249          1 Parse                       114:45-114:46 ExpBox False
+  250          1 Parse                       114:20-114:47 ExpBox False
+  251          0 Parse                       115:39-115:41 ExpBox False
+  252          0 Parse                       115:33-115:42 ExpBox False
+  253          0 Parse                       115:27-115:42 ExpBox True
+  254          1 Parse                       116:27-116:27 ExpBox True
+  255          1 Parse                       114:15-116:27 ExpBox False
+  256          1 Parse                        114:1-116:27 TopLevelBox ["rayParse"]
+  257          0 Parse                       120:27-120:33 ExpBox False
+  258          0 Parse                       120:35-120:38 ExpBox False
+  259          0 Parse                       120:13-120:38 ExpBox False
+  260          0 Parse                       121:13-121:13 ExpBox False
+  261          0 Parse                       122:32-122:34 ExpBox False
+  262          0 Parse                       122:26-122:35 ExpBox False
+  263          0 Parse                       122:20-122:35 ExpBox True
+  264          0 Parse                       123:27-123:27 ExpBox False
+  265          0 Parse                       123:20-123:27 ExpBox True
+  266          0 Parse                        121:8-123:27 ExpBox False
+  267          0 Parse                         120:3-124:6 ExpBox False
+  268          0 Parse                         119:1-124:6 TopLevelBox ["rayParseF"]
+  269          0 Parse                       127:22-127:28 ExpBox False
+  270          0 Parse                       127:30-127:31 ExpBox False
+  271          0 Parse                       127:33-127:34 ExpBox False
+  272          0 Parse                       127:15-127:35 ExpBox False
+  273          0 Parse                       128:28-128:30 ExpBox False
+  274          0 Parse                       128:22-128:30 ExpBox True
+  275          0 Parse                       129:28-129:28 ExpBox False
+  276          0 Parse                       129:22-129:28 ExpBox True
+  277          0 Parse                       127:10-129:28 ExpBox False
+  278          0 Parse                        127:1-129:28 TopLevelBox ["run"]
+  279          0 Parse                       133:27-133:33 ExpBox False
+  280          0 Parse                       133:35-133:46 ExpBox False
+  281          0 Parse                       133:13-133:46 ExpBox False
+  282          0 Parse                       134:13-134:13 ExpBox False
+  283          0 Parse                       135:26-135:28 ExpBox False
+  284          0 Parse                       135:20-135:28 ExpBox True
+  285          0 Parse                       136:26-136:26 ExpBox False
+  286          0 Parse                       136:20-136:26 ExpBox True
+  287          0 Parse                        134:8-136:26 ExpBox False
+  288          0 Parse                         133:3-137:6 ExpBox False
+  289          0 Parse                         132:1-137:6 TopLevelBox ["runF"]
+    0          0 Eval                        347:12-347:73 ExpBox False
+    1          0 Eval                         347:1-347:73 TopLevelBox ["abstest1"]
+    2          0 Eval                         328:8-328:69 ExpBox False
+    3          0 Eval                         328:1-328:69 TopLevelBox ["done"]
+    4          0 Eval                        305:34-305:35 ExpBox False
+    5          0 Eval                        305:37-305:38 ExpBox False
+    6          0 Eval                        305:40-305:41 ExpBox False
+    7          0 Eval                        305:26-305:42 ExpBox False
+    8          0 Eval                        305:46-305:48 ExpBox False
+    9          0 Eval                        305:25-305:49 ExpBox False
+   10          0 Eval                        305:18-305:49 ExpBox True
+   11          0 Eval                        308:23-308:49 ExpBox False
+   12          0 Eval                        308:59-308:60 ExpBox False
+   13          0 Eval                        308:54-308:60 ExpBox False
+   14          0 Eval                        308:65-308:67 ExpBox False
+   15          0 Eval                        308:54-308:67 ExpBox False
+   16          0 Eval                        308:22-308:68 ExpBox False
+   17          2 Eval                        308:18-308:68 ExpBox True
+   18          2 Eval                         304:1-308:68 TopLevelBox ["doAbsOp"]
+   19          1 Eval                        145:20-145:27 ExpBox False
+   20          1 Eval                        145:29-145:36 ExpBox False
+   21          1 Eval                        145:19-145:37 ExpBox False
+   22          1 Eval                        146:52-146:58 ExpBox False
+   23         49 Eval                        146:22-146:23 ExpBox False
+   24         20 Eval                        146:25-146:28 ExpBox False
+   25         49 Eval                        146:21-146:29 ExpBox False
+   26          1 Eval                        146:19-146:60 ExpBox False
+   27          1 Eval                        145:13-146:60 ExpBox False
+   28          1 Eval                         145:1-146:60 TopLevelBox ["opFnTable"]
+   29     269762 Eval                          67:32-67:36 ExpBox True
+   30    3059036 Eval                          68:32-68:35 ExpBox True
+   31    3328798 Eval                           67:1-68:35 TopLevelBox ["moreCode"]
+   32          0 Eval                          77:15-77:16 ExpBox False
+   33          0 Eval                          77:35-77:35 ExpBox False
+   34          0 Eval                          77:28-77:36 ExpBox False
+   35          0 Eval                          77:38-77:42 ExpBox False
+   36          0 Eval                          77:28-77:42 ExpBox False
+   37          0 Eval                          77:55-77:56 ExpBox False
+   38          0 Eval                          77:14-77:59 ExpBox False
+   39          0 Eval                           77:7-77:59 ExpBox True
+   40     176132 Eval                          79:15-79:16 ExpBox False
+   41     176053 Eval                          79:34-79:34 ExpBox False
+   42     176053 Eval                          79:28-79:35 ExpBox False
+   43     176132 Eval                          79:37-79:41 ExpBox False
+   44     176132 Eval                          79:28-79:41 ExpBox False
+   45     176132 Eval                          79:55-79:56 ExpBox False
+   46     176132 Eval                          79:14-79:59 ExpBox False
+   47     176132 Eval                           79:7-79:59 ExpBox True
+   48     369283 Eval                          81:15-81:16 ExpBox False
+   49     369283 Eval                          81:35-81:35 ExpBox False
+   50     369283 Eval                          81:28-81:36 ExpBox False
+   51     369279 Eval                          81:38-81:42 ExpBox False
+   52     369283 Eval                          81:28-81:42 ExpBox False
+   53     369283 Eval                          81:55-81:56 ExpBox False
+   54     369283 Eval                          81:14-81:59 ExpBox False
+   55     369283 Eval                           81:7-81:59 ExpBox True
+   56          1 Eval                          83:15-83:16 ExpBox False
+   57          0 Eval                          83:37-83:37 ExpBox False
+   58          1 Eval                          83:28-83:38 ExpBox False
+   59          1 Eval                          83:40-83:44 ExpBox False
+   60          1 Eval                          83:28-83:44 ExpBox False
+   61          1 Eval                          83:55-83:56 ExpBox False
+   62          1 Eval                          83:14-83:59 ExpBox False
+   63          1 Eval                           83:7-83:59 ExpBox True
+   64     371112 Eval                          87:35-87:37 ExpBox False
+   65     441868 Eval                          87:39-87:40 ExpBox False
+   66     409350 Eval                          87:42-87:42 ExpBox False
+   67     441868 Eval                          87:25-87:42 ExpBox False
+   68     441866 Eval                          87:53-87:57 ExpBox False
+   69     441868 Eval                          87:68-87:69 ExpBox False
+   70     441868 Eval                          87:10-87:72 ExpBox False
+   71     441868 Eval                           87:3-87:72 ExpBox True
+   72          0 Eval                           89:7-89:49 ExpBox False
+   73          0 Eval                           89:3-89:49 ExpBox True
+   74     711560 Eval                          93:19-93:21 ExpBox False
+   75     711560 Eval                          93:23-93:24 ExpBox False
+   76     711560 Eval                           93:8-93:25 ExpBox False
+   77     711560 Eval                          94:21-94:22 ExpBox False
+   78     711557 Eval                          94:34-94:34 ExpBox False
+   79     711556 Eval                          94:36-94:40 ExpBox False
+   80     711559 Eval                          94:34-94:40 ExpBox False
+   81     711560 Eval                          94:51-94:52 ExpBox False
+   82     711560 Eval                          94:20-94:55 ExpBox False
+   83     711560 Eval                          94:13-94:55 ExpBox True
+   84          0 Eval                          95:19-95:54 ExpBox False
+   85          0 Eval                          95:59-95:60 ExpBox False
+   86          0 Eval                          95:18-95:61 ExpBox False
+   87          0 Eval                          95:14-95:61 ExpBox True
+   88     711560 Eval                           93:3-95:61 ExpBox True
+   89     376835 Eval                          99:11-99:12 ExpBox False
+   90     118594 Eval                          99:34-99:36 ExpBox False
+   91     204675 Eval                          99:38-99:41 ExpBox False
+   92     376835 Eval                          99:24-99:42 ExpBox False
+   93     376835 Eval                          99:44-99:48 ExpBox False
+   94     376835 Eval                          99:24-99:48 ExpBox False
+   95     376835 Eval                          99:58-99:59 ExpBox False
+   96     376835 Eval                          99:10-99:62 ExpBox False
+   97     376835 Eval                           99:3-99:62 ExpBox True
+   98          0 Eval                        103:34-103:37 ExpBox False
+   99      65024 Eval                        103:48-103:52 ExpBox False
+  100      65025 Eval                        103:62-103:66 ExpBox False
+  101      65025 Eval                        103:20-103:68 ExpBox False
+  102      65025 Eval                        103:15-103:68 ExpBox False
+  103      65024 Eval                        104:16-104:17 ExpBox False
+  104      65024 Eval                        104:29-104:31 ExpBox False
+  105      65024 Eval                        104:41-104:42 ExpBox False
+  106      65024 Eval                        104:15-104:45 ExpBox False
+  107      65024 Eval                         104:8-104:45 ExpBox False
+  108      65025 Eval                          103:3-105:6 ExpBox True
+  109          0 Eval                         107:7-107:39 ExpBox False
+  110          0 Eval                         107:3-107:39 ExpBox True
+  111          0 Eval                         109:7-109:36 ExpBox False
+  112          0 Eval                         109:3-109:36 ExpBox True
+  113          1 Eval                        113:34-113:36 ExpBox False
+  114          1 Eval                        113:47-113:48 ExpBox False
+  115         65 Eval                        113:58-113:62 ExpBox False
+  116         65 Eval                        113:20-113:64 ExpBox False
+  117         65 Eval                        113:15-113:64 ExpBox False
+  118         65 Eval                        114:26-114:28 ExpBox False
+  119         65 Eval                        114:19-114:28 ExpBox False
+  120         65 Eval                        114:30-114:30 ExpBox False
+  121         65 Eval                        114:19-114:30 ExpBox False
+  122         65 Eval                        114:12-114:30 LocalBox ["step","last"]
+  123         65 Eval                        115:25-115:25 ExpBox False
+  124         65 Eval                        115:27-115:30 ExpBox False
+  125         65 Eval                        115:24-115:31 ExpBox False
+  126         65 Eval                        115:39-115:42 ExpBox False
+  127         65 Eval                        115:44-115:47 ExpBox False
+  128         65 Eval                        115:49-115:49 ExpBox False
+  129         65 Eval                        115:44-115:49 ExpBox False
+  130         65 Eval                        115:38-115:52 ExpBox False
+  131         65 Eval                        115:54-115:56 ExpBox False
+  132         65 Eval                        115:33-115:57 ExpBox False
+  133         65 Eval                        115:18-115:57 ExpBox False
+  134         65 Eval                        115:12-115:57 LocalBox ["step","arr"]
+  135         65 Eval                        116:16-116:17 ExpBox False
+  136         65 Eval                        116:37-116:39 ExpBox False
+  137         65 Eval                        116:29-116:40 ExpBox False
+  138         65 Eval                        116:42-116:46 ExpBox False
+  139         65 Eval                        116:29-116:46 ExpBox False
+  140         65 Eval                        116:56-116:57 ExpBox False
+  141         65 Eval                        116:15-116:60 ExpBox False
+  142         65 Eval                         116:8-116:60 ExpBox False
+  143         65 Eval                          113:3-117:6 ExpBox True
+  144      13483 Eval                        121:34-121:35 ExpBox False
+  145      39849 Eval                        121:46-121:50 ExpBox False
+  146      39849 Eval                        121:60-121:61 ExpBox False
+  147      39849 Eval                        121:20-121:63 ExpBox False
+  148      39849 Eval                        121:15-121:63 ExpBox False
+  149      39849 Eval                        122:16-122:17 ExpBox False
+  150      39849 Eval                        122:29-122:31 ExpBox False
+  151      39849 Eval                        122:41-122:42 ExpBox False
+  152      39849 Eval                        122:15-122:45 ExpBox False
+  153      39849 Eval                         122:8-122:45 ExpBox False
+  154      39849 Eval                          121:3-123:6 ExpBox True
+  155     105109 Eval                        125:34-125:35 ExpBox False
+  156     132311 Eval                        125:46-125:50 ExpBox False
+  157     132311 Eval                        125:60-125:61 ExpBox False
+  158     132311 Eval                        125:20-125:63 ExpBox False
+  159     132311 Eval                        125:15-125:63 ExpBox False
+  160     132311 Eval                        126:16-126:17 ExpBox False
+  161     132311 Eval                        126:29-126:31 ExpBox False
+  162     132311 Eval                        126:41-126:42 ExpBox False
+  163     132311 Eval                        126:15-126:45 ExpBox False
+  164     132311 Eval                         126:8-126:45 ExpBox False
+  165     132311 Eval                          125:3-127:6 ExpBox True
+  166          0 Eval                         129:7-129:74 ExpBox False
+  167          0 Eval                         129:3-129:74 ExpBox True
+  168     746105 Eval                        133:21-133:29 ExpBox False
+  169     746105 Eval                        133:33-133:34 ExpBox False
+  170     746105 Eval                        133:20-133:35 ExpBox False
+  171     746094 Eval                        133:37-133:38 ExpBox False
+  172     746105 Eval                        133:40-133:44 ExpBox False
+  173     746107 Eval                        133:15-133:44 ExpBox False
+  174     746105 Eval                        134:16-134:17 ExpBox False
+  175     746104 Eval                        134:29-134:31 ExpBox False
+  176     746105 Eval                        134:41-134:42 ExpBox False
+  177     746105 Eval                        134:15-134:45 ExpBox False
+  178     746105 Eval                         134:8-134:45 ExpBox False
+  179     746107 Eval                          133:3-135:6 ExpBox True
+  180          0 Eval                        138:14-138:50 ExpBox False
+  181          0 Eval                        138:10-138:50 ExpBox True
+  182    3059036 Eval                          76:1-138:50 TopLevelBox ["step"]
+  183       4153 Eval                          57:21-57:22 ExpBox False
+  184    3328782 Eval                          57:14-57:22 ExpBox False
+  185    3328798 Eval                          58:20-58:21 ExpBox False
+  186    3328798 Eval                          58:11-58:21 ExpBox False
+  187    3059036 Eval                          58:11-58:21 BinBox CondBinBox True
+  188     269762 Eval                          58:11-58:21 BinBox CondBinBox False
+  189       4086 Eval                          59:13-59:16 ExpBox False
+  190    3059036 Eval                          60:27-60:28 ExpBox False
+  191    3059036 Eval                          60:22-60:28 ExpBox False
+  192    3059033 Eval                          61:20-61:22 ExpBox False
+  193    3059033 Eval                          61:15-61:22 ExpBox False
+  194    3059036 Eval                           59:8-62:13 ExpBox True
+  195     269761 Eval                          63:28-63:29 ExpBox False
+  196     269761 Eval                          63:21-63:30 ExpBox False
+  197     269762 Eval                          63:14-63:30 ExpBox True
+  198    3328798 Eval                           58:8-63:30 ExpBox False
+  199    3328798 Eval                            57:3-64:6 ExpBox False
+  200    3328798 Eval                            56:1-64:6 TopLevelBox ["eval"]
+  201          1 Eval                        281:31-281:33 ExpBox False
+  202          2 Eval                        281:35-281:37 ExpBox False
+  203          2 Eval                        281:39-281:42 ExpBox False
+  204          2 Eval                        281:24-281:43 ExpBox False
+  205          2 Eval                        281:18-281:44 ExpBox False
+  206          2 Eval                        281:46-281:48 ExpBox False
+  207          2 Eval                        281:11-281:48 ExpBox False
+  208          0 Eval                        282:31-282:33 ExpBox False
+  209          0 Eval                        282:26-282:33 ExpBox True
+  210          1 Eval                        283:26-283:32 ExpBox True
+  211          2 Eval                         281:6-283:32 ExpBox False
+  212          2 Eval                         280:1-283:32 TopLevelBox ["absapply"]
+  213          0 Eval                        314:41-314:48 ExpBox False
+  214          1 Eval                        314:50-314:51 ExpBox False
+  215          1 Eval                        314:53-314:56 ExpBox False
+  216          1 Eval                        314:34-314:57 ExpBox False
+  217          1 Eval                        314:29-314:57 ExpBox False
+  218          0 Eval                        315:29-315:30 ExpBox False
+  219          1 Eval                        315:22-315:30 ExpBox False
+  220          1 Eval                        314:17-316:20 ExpBox False
+  221          1 Eval                         314:1-316:20 TopLevelBox ["mainEval"]
+  222          0 Eval                        334:23-334:30 ExpBox False
+  223          0 Eval                        334:32-334:33 ExpBox False
+  224          0 Eval                        334:45-334:46 ExpBox False
+  225          0 Eval                        334:35-334:47 ExpBox False
+  226          0 Eval                        334:16-334:48 ExpBox False
+  227          0 Eval                        334:11-334:48 ExpBox False
+  228          0 Eval                         334:1-334:48 TopLevelBox ["test"]
+  229          0 Eval                        350:12-350:46 ExpBox False
+  230          0 Eval                         350:7-350:46 ExpBox False
+  231          0 Eval                         350:1-350:46 TopLevelBox ["et1"]
+  232          0 Eval                        337:33-337:34 ExpBox False
+  233          0 Eval                        337:23-337:34 ExpBox False
+  234          0 Eval                        338:27-338:34 ExpBox False
+  235          0 Eval                        338:36-338:37 ExpBox False
+  236          0 Eval                        338:39-338:42 ExpBox False
+  237          0 Eval                        338:20-338:43 ExpBox False
+  238          0 Eval                        338:15-338:43 ExpBox False
+  239          0 Eval                        337:12-338:43 ExpBox False
+  240          0 Eval                         337:1-338:43 TopLevelBox ["testF"]
+  241          0 Eval                        341:37-341:44 ExpBox False
+  242          0 Eval                        342:46-342:52 ExpBox False
+  243          0 Eval                        342:38-342:52 ExpBox False
+  244          0 Eval                        342:62-342:65 ExpBox False
+  245          0 Eval                        342:54-342:65 ExpBox False
+  246          0 Eval                        342:75-342:78 ExpBox False
+  247          0 Eval                        342:67-342:78 ExpBox False
+  248          0 Eval                        342:37-342:79 ExpBox False
+  249          0 Eval                        343:47-343:48 ExpBox False
+  250          0 Eval                        343:37-343:49 ExpBox False
+  251          0 Eval                        341:30-343:50 ExpBox False
+  252          0 Eval                        341:24-343:51 ExpBox False
+  253          0 Eval                        343:53-343:55 ExpBox False
+  254          0 Eval                        341:17-343:55 ExpBox False
+  255          0 Eval                        344:37-344:37 ExpBox False
+  256          0 Eval                        344:39-344:39 ExpBox False
+  257          0 Eval                        344:36-344:40 ExpBox False
+  258          0 Eval                        344:30-344:40 ExpBox True
+  259          0 Eval                        345:32-345:32 ExpBox False
+  260          0 Eval                        345:27-345:32 ExpBox True
+  261          0 Eval                        341:12-345:32 ExpBox False
+  262          0 Eval                         341:1-345:32 TopLevelBox ["testA"]
+  263      32512 Eval                          49:34-49:36 ExpBox False
+  264      32512 Eval                          49:47-49:49 ExpBox False
+  265      32512 Eval                          49:59-49:62 ExpBox False
+  266      32512 Eval                          49:19-49:64 ExpBox False
+  267      32512 Eval                          49:14-49:64 ExpBox False
+  268      32512 Eval                          50:26-50:28 ExpBox False
+  269      32512 Eval                           49:9-50:28 ExpBox False
+  270      32512 Eval                           48:1-50:28 TopLevelBox ["callback"]
+  271          0 Eval                        165:23-165:24 ExpBox False
+  272          0 Eval                        165:19-165:25 ExpBox False
+  273          0 Eval                        165:13-165:26 ExpBox False
+  274          0 Eval                        165:30-165:32 ExpBox False
+  275          0 Eval                        165:12-165:33 ExpBox False
+  276          0 Eval                         165:5-165:33 ExpBox True
+  277      53568 Eval                        167:24-167:25 ExpBox False
+  278      53568 Eval                        167:20-167:26 ExpBox False
+  279      53568 Eval                        167:13-167:27 ExpBox False
+  280      53568 Eval                        167:31-167:33 ExpBox False
+  281      53568 Eval                        167:12-167:34 ExpBox False
+  282      53568 Eval                         167:5-167:34 ExpBox True
+  283          0 Eval                        169:24-169:24 ExpBox False
+  284          0 Eval                        169:26-169:26 ExpBox False
+  285          0 Eval                        169:28-169:28 ExpBox False
+  286          0 Eval                        169:20-169:29 ExpBox False
+  287          0 Eval                        169:13-169:30 ExpBox False
+  288          0 Eval                        169:34-169:36 ExpBox False
+  289          0 Eval                        169:12-169:37 ExpBox False
+  290          0 Eval                         169:5-169:37 ExpBox True
+  291      32512 Eval                        183:25-183:27 ExpBox False
+  292      32512 Eval                        183:29-183:32 ExpBox False
+  293      32512 Eval                        183:41-183:42 ExpBox False
+  294      32512 Eval                        183:35-183:42 ExpBox False
+  295      32512 Eval                        183:50-183:51 ExpBox False
+  296      32512 Eval                        183:44-183:51 ExpBox False
+  297          0 Eval                        183:58-183:58 ExpBox False
+  298          0 Eval                        183:53-183:58 ExpBox False
+  299      32512 Eval                        183:34-183:59 ExpBox False
+  300      32512 Eval                        183:16-183:59 ExpBox False
+  301      32512 Eval                        185:33-185:34 ExpBox False
+  302      32512 Eval                        185:36-185:37 ExpBox False
+  303      32512 Eval                        185:39-185:40 ExpBox False
+  304      32512 Eval                        185:26-185:41 ExpBox False
+  305      32512 Eval                        185:43-185:44 ExpBox False
+  306      32512 Eval                        185:46-185:47 ExpBox False
+  307      26812 Eval                        185:49-185:50 ExpBox False
+  308      32512 Eval                        185:21-185:50 ExpBox True
+  309          0 Eval                        186:28-186:80 ExpBox False
+  310          0 Eval                        187:34-187:36 ExpBox False
+  311          0 Eval                        187:29-187:36 ExpBox False
+  312          0 Eval                        186:27-187:37 ExpBox False
+  313          0 Eval                        186:21-187:37 ExpBox True
+  314      32512 Eval                        183:11-187:37 ExpBox False
+  315      32512 Eval                         182:9-187:37 LocalBox ["doPrimOp","call"]
+  316          1 Eval                        173:19-173:21 ExpBox False
+  317          2 Eval                        173:23-173:26 ExpBox False
+  318          0 Eval                        173:37-173:43 ExpBox False
+  319          0 Eval                        173:29-173:43 ExpBox False
+  320          0 Eval                        173:53-173:56 ExpBox False
+  321          0 Eval                        173:45-173:56 ExpBox False
+  322          0 Eval                        173:66-173:69 ExpBox False
+  323          0 Eval                        173:58-173:69 ExpBox False
+  324          2 Eval                        173:28-173:70 ExpBox False
+  325          2 Eval                        173:10-173:70 ExpBox False
+  326          0 Eval                        176:34-176:35 ExpBox False
+  327          0 Eval                        176:37-176:38 ExpBox False
+  328          0 Eval                        176:40-176:41 ExpBox False
+  329          0 Eval                        176:27-176:42 ExpBox False
+  330          0 Eval                        176:44-176:45 ExpBox False
+  331          0 Eval                        176:47-176:48 ExpBox False
+  332          0 Eval                        176:50-176:51 ExpBox False
+  333          0 Eval                        176:22-176:51 ExpBox False
+  334          0 Eval                        176:16-176:51 LocalBox ["doPrimOp","res"]
+  335          0 Eval                        178:45-178:47 ExpBox False
+  336          0 Eval                        178:37-178:48 ExpBox False
+  337          0 Eval                        178:33-178:49 ExpBox False
+  338          0 Eval                        178:24-178:50 ExpBox False
+  339          0 Eval                        178:54-178:56 ExpBox False
+  340          0 Eval                        178:23-178:57 ExpBox False
+  341          0 Eval                        175:12-178:57 ExpBox True
+  342          2 Eval                        179:39-179:42 ExpBox False
+  343          2 Eval                        179:33-179:43 ExpBox False
+  344          2 Eval                        179:29-179:44 ExpBox False
+  345          2 Eval                        179:20-179:45 ExpBox False
+  346          1 Eval                        179:49-179:51 ExpBox False
+  347          2 Eval                        179:19-179:52 ExpBox False
+  348          2 Eval                        179:12-179:52 ExpBox True
+  349          2 Eval                         173:5-179:52 ExpBox True
+  350     118592 Eval                        190:23-190:24 ExpBox False
+  351     118592 Eval                        190:19-190:25 ExpBox False
+  352     118592 Eval                        190:13-190:26 ExpBox False
+  353     118592 Eval                        190:30-190:32 ExpBox False
+  354     118592 Eval                        190:12-190:33 ExpBox False
+  355     118592 Eval                         190:5-190:33 ExpBox True
+  356      32512 Eval                        192:24-192:25 ExpBox False
+  357      32512 Eval                        192:20-192:26 ExpBox False
+  358      32512 Eval                        192:13-192:27 ExpBox False
+  359      32512 Eval                        192:31-192:33 ExpBox False
+  360      32512 Eval                        192:12-192:34 ExpBox False
+  361      32512 Eval                         192:5-192:34 ExpBox True
+  362          0 Eval                        194:23-194:25 ExpBox False
+  363          0 Eval                        194:19-194:26 ExpBox False
+  364          0 Eval                        194:13-194:27 ExpBox False
+  365          0 Eval                        194:31-194:33 ExpBox False
+  366          0 Eval                        194:12-194:34 ExpBox False
+  367          0 Eval                         194:5-194:34 ExpBox True
+  368      53568 Eval                        199:23-199:24 ExpBox False
+  369      53568 Eval                        199:26-199:27 ExpBox False
+  370      53568 Eval                        199:19-199:28 ExpBox False
+  371      53568 Eval                        199:13-199:29 ExpBox False
+  372      53568 Eval                        199:33-199:35 ExpBox False
+  373      53568 Eval                        199:12-199:36 ExpBox False
+  374      53568 Eval                         199:5-199:36 ExpBox True
+  375     118592 Eval                        201:24-201:25 ExpBox False
+  376     118592 Eval                        201:27-201:28 ExpBox False
+  377     118592 Eval                        201:20-201:29 ExpBox False
+  378     118592 Eval                        201:13-201:30 ExpBox False
+  379     118592 Eval                        201:34-201:36 ExpBox False
+  380     118592 Eval                        201:12-201:37 ExpBox False
+  381     118592 Eval                         201:5-201:37 ExpBox True
+  382     218155 Eval                        203:24-203:25 ExpBox False
+  383     218155 Eval                        203:27-203:28 ExpBox False
+  384     218155 Eval                        203:20-203:29 ExpBox False
+  385     218155 Eval                        203:13-203:30 ExpBox False
+  386     218155 Eval                        203:34-203:36 ExpBox False
+  387     218155 Eval                        203:12-203:37 ExpBox False
+  388     218155 Eval                         203:5-203:37 ExpBox True
+  389      53568 Eval                        205:24-205:25 ExpBox False
+  390      53568 Eval                        205:27-205:28 ExpBox False
+  391      53568 Eval                        205:20-205:29 ExpBox False
+  392      53568 Eval                        205:13-205:30 ExpBox False
+  393      53568 Eval                        205:34-205:36 ExpBox False
+  394      53568 Eval                        205:12-205:37 ExpBox False
+  395      53568 Eval                         205:5-205:37 ExpBox True
+  396      65024 Eval                        207:17-207:19 ExpBox False
+  397      65024 Eval                        207:21-207:21 ExpBox False
+  398      65024 Eval                        207:13-207:22 ExpBox False
+  399      65024 Eval                        207:26-207:28 ExpBox False
+  400      65024 Eval                        207:12-207:29 ExpBox False
+  401      65024 Eval                         207:5-207:29 ExpBox True
+  402          1 Eval                        213:26-213:27 ExpBox False
+  403          1 Eval                        213:29-213:30 ExpBox False
+  404          1 Eval                        213:22-213:31 ExpBox False
+  405          1 Eval                        213:13-213:32 ExpBox False
+  406          0 Eval                        213:36-213:38 ExpBox False
+  407          1 Eval                        213:12-213:39 ExpBox False
+  408          1 Eval                         213:5-213:39 ExpBox True
+  409          1 Eval                        215:25-215:25 ExpBox False
+  410          1 Eval                        215:27-215:27 ExpBox False
+  411          1 Eval                        215:29-215:29 ExpBox False
+  412          1 Eval                        215:24-215:30 ExpBox False
+  413          1 Eval                        215:39-215:39 ExpBox False
+  414          1 Eval                        215:41-215:41 ExpBox False
+  415          1 Eval                        215:43-215:43 ExpBox False
+  416          1 Eval                        215:32-215:44 ExpBox False
+  417          1 Eval                        215:20-215:45 ExpBox False
+  418          1 Eval                        215:13-215:45 ExpBox False
+  419          0 Eval                        215:49-215:51 ExpBox False
+  420          1 Eval                        215:12-215:52 ExpBox False
+  421          1 Eval                         215:5-215:52 ExpBox True
+  422          0 Eval                        218:25-218:26 ExpBox False
+  423          0 Eval                        218:28-218:29 ExpBox False
+  424          0 Eval                        218:31-218:32 ExpBox False
+  425          0 Eval                        218:24-218:33 ExpBox False
+  426          0 Eval                        218:36-218:37 ExpBox False
+  427          0 Eval                        218:39-218:40 ExpBox False
+  428          0 Eval                        218:42-218:43 ExpBox False
+  429          0 Eval                        218:35-218:44 ExpBox False
+  430          0 Eval                        218:53-218:53 ExpBox False
+  431          0 Eval                        218:55-218:55 ExpBox False
+  432          0 Eval                        218:57-218:57 ExpBox False
+  433          0 Eval                        218:46-218:58 ExpBox False
+  434          0 Eval                        218:60-218:61 ExpBox False
+  435          0 Eval                        218:63-218:64 ExpBox False
+  436          0 Eval                        218:20-218:65 ExpBox False
+  437          0 Eval                        218:13-218:65 ExpBox False
+  438          0 Eval                        218:69-218:71 ExpBox False
+  439          0 Eval                        218:12-218:72 ExpBox False
+  440          0 Eval                         218:5-218:72 ExpBox True
+  441      32515 Eval                        220:17-220:18 ExpBox False
+  442      32515 Eval                        220:20-220:21 ExpBox False
+  443      32515 Eval                        220:23-220:24 ExpBox False
+  444      32515 Eval                        220:13-220:25 ExpBox False
+  445      32513 Eval                        220:29-220:31 ExpBox False
+  446      32515 Eval                        220:12-220:32 ExpBox False
+  447      32515 Eval                         220:5-220:32 ExpBox True
+  448          3 Eval                        222:25-222:25 ExpBox False
+  449          3 Eval                        222:27-222:27 ExpBox False
+  450          3 Eval                        222:21-222:28 ExpBox False
+  451          3 Eval                        222:13-222:28 ExpBox False
+  452          0 Eval                        222:32-222:34 ExpBox False
+  453          3 Eval                        222:12-222:35 ExpBox False
+  454          3 Eval                         222:5-222:35 ExpBox True
+  455          3 Eval                        224:25-224:25 ExpBox False
+  456          3 Eval                        224:27-224:28 ExpBox False
+  457          3 Eval                        224:30-224:31 ExpBox False
+  458          3 Eval                        224:33-224:34 ExpBox False
+  459          3 Eval                        224:21-224:35 ExpBox False
+  460          3 Eval                        224:13-224:35 ExpBox False
+  461          1 Eval                        224:39-224:41 ExpBox False
+  462          3 Eval                        224:12-224:42 ExpBox False
+  463          3 Eval                         224:5-224:42 ExpBox True
+  464          0 Eval                        230:15-230:15 ExpBox False
+  465          0 Eval                        230:17-230:17 ExpBox False
+  466          0 Eval                        230:12-230:17 ExpBox False
+  467          0 Eval                         230:6-230:17 LocalBox ["doPrimOp","res"]
+  468          0 Eval                          228:5-228:7 ExpBox False
+  469          0 Eval                        228:23-228:25 ExpBox False
+  470          0 Eval                        228:29-228:31 ExpBox False
+  471          0 Eval                        228:22-228:32 ExpBox False
+  472          0 Eval                        228:15-228:32 ExpBox False
+  473          0 Eval                         228:5-228:32 ExpBox True
+  474          0 Eval                        248:29-248:34 ExpBox False
+  475          0 Eval                        248:15-248:34 ExpBox False
+  476          0 Eval                         248:7-248:34 LocalBox ["doPrimOp","types"]
+  477          0 Eval                        244:22-244:26 ExpBox False
+  478          0 Eval                        244:15-244:26 ExpBox False
+  479          0 Eval                         244:7-244:26 LocalBox ["doPrimOp","len"]
+  480          0 Eval                        245:16-245:18 ExpBox False
+  481          0 Eval                        245:23-245:23 ExpBox False
+  482          0 Eval                        245:16-245:23 ExpBox False
+  483          0 Eval                        245:16-245:23 BinBox CondBinBox True
+  484          0 Eval                        245:16-245:23 BinBox CondBinBox False
+  485          0 Eval                        245:30-245:32 ExpBox True
+  486          0 Eval                        245:39-245:40 ExpBox True
+  487          0 Eval                        245:12-245:41 ExpBox False
+  488          0 Eval                         245:7-245:41 LocalBox ["doPrimOp","s"]
+  489          0 Eval                        246:18-246:20 ExpBox False
+  490          0 Eval                        246:25-246:25 ExpBox False
+  491          0 Eval                        246:18-246:25 ExpBox False
+  492          0 Eval                        246:18-246:25 BinBox CondBinBox True
+  493          0 Eval                        246:18-246:25 BinBox CondBinBox False
+  494          0 Eval                        246:32-246:36 ExpBox True
+  495          0 Eval                        246:43-246:46 ExpBox True
+  496          0 Eval                        246:14-246:47 ExpBox False
+  497          0 Eval                         246:7-246:47 LocalBox ["doPrimOp","are"]
+  498          0 Eval                        247:18-247:20 ExpBox False
+  499          0 Eval                        247:25-247:25 ExpBox False
+  500          0 Eval                        247:18-247:25 ExpBox False
+  501          0 Eval                        247:18-247:25 BinBox CondBinBox True
+  502          0 Eval                        247:18-247:25 BinBox CondBinBox False
+  503          0 Eval                        247:32-247:33 ExpBox True
+  504          0 Eval                        247:40-247:45 ExpBox True
+  505          0 Eval                        247:14-247:46 ExpBox False
+  506          0 Eval                         247:7-247:46 LocalBox ["doPrimOp","the"]
+  507          0 Eval                        233:10-233:73 ExpBox False
+  508          0 Eval                        234:16-234:17 ExpBox False
+  509          0 Eval                        234:11-234:17 ExpBox False
+  510          0 Eval                        234:22-234:31 ExpBox False
+  511          0 Eval                        235:16-235:17 ExpBox False
+  512          0 Eval                        235:11-235:17 ExpBox False
+  513          0 Eval                        235:22-235:30 ExpBox False
+  514          0 Eval                        235:48-235:52 ExpBox False
+  515          0 Eval                        235:40-235:53 ExpBox False
+  516          0 Eval                        235:35-235:53 ExpBox False
+  517          0 Eval                        235:58-235:68 ExpBox False
+  518          0 Eval                        235:73-235:73 ExpBox False
+  519          0 Eval                        236:23-236:29 ExpBox False
+  520          0 Eval                        236:34-236:36 ExpBox False
+  521          0 Eval                        236:41-236:47 ExpBox False
+  522          0 Eval                        236:52-236:52 ExpBox False
+  523          0 Eval                        236:57-236:64 ExpBox False
+  524          0 Eval                        237:11-237:18 ExpBox False
+  525          0 Eval                        237:49-237:53 ExpBox False
+  526          0 Eval                        237:38-237:39 ExpBox False
+  527          0 Eval                        237:33-237:39 ExpBox False
+  528          0 Eval                        237:31-237:55 ExpBox False
+  529          0 Eval                        237:23-237:55 ExpBox False
+  530          0 Eval                        237:61-237:68 ExpBox False
+  531          0 Eval                        238:11-238:45 ExpBox False
+  532          0 Eval                        238:50-238:50 ExpBox False
+  533          0 Eval                        238:55-238:70 ExpBox False
+  534          0 Eval                        239:19-239:21 ExpBox False
+  535          0 Eval                        239:26-239:34 ExpBox False
+  536          0 Eval                        241:51-241:55 ExpBox False
+  537          0 Eval                        241:43-241:56 ExpBox False
+  538          0 Eval                        241:58-241:61 ExpBox False
+  539          0 Eval                        241:37-241:62 ExpBox False
+  540          0 Eval                        241:29-241:62 ExpBox False
+  541          0 Eval                        240:21-240:23 ExpBox False
+  542          0 Eval                        240:33-240:35 ExpBox False
+  543          0 Eval                        240:28-240:35 ExpBox False
+  544          0 Eval                        240:40-240:42 ExpBox False
+  545          0 Eval                        240:28-240:42 ExpBox False
+  546          0 Eval                        240:21-240:42 ExpBox False
+  547          0 Eval                        240:19-241:64 ExpBox False
+  548          0 Eval                        240:11-241:64 ExpBox False
+  549          0 Eval                        241:70-241:78 ExpBox False
+  550          0 Eval                        242:14-242:63 ExpBox False
+  551          0 Eval                        241:70-242:63 ExpBox False
+  552          0 Eval                        240:11-242:63 ExpBox False
+  553          0 Eval                        239:26-242:63 ExpBox False
+  554          0 Eval                        239:19-242:63 ExpBox False
+  555          0 Eval                        238:55-242:63 ExpBox False
+  556          0 Eval                        238:50-242:63 ExpBox False
+  557          0 Eval                        238:11-242:63 ExpBox False
+  558          0 Eval                        237:61-242:63 ExpBox False
+  559          0 Eval                        237:23-242:63 ExpBox False
+  560          0 Eval                        237:11-242:63 ExpBox False
+  561          0 Eval                        236:57-242:63 ExpBox False
+  562          0 Eval                        236:52-242:63 ExpBox False
+  563          0 Eval                        236:41-242:63 ExpBox False
+  564          0 Eval                        236:34-242:63 ExpBox False
+  565          0 Eval                        236:23-242:63 ExpBox False
+  566          0 Eval                        235:73-242:63 ExpBox False
+  567          0 Eval                        235:58-242:63 ExpBox False
+  568          0 Eval                        235:35-242:63 ExpBox False
+  569          0 Eval                        235:22-242:63 ExpBox False
+  570          0 Eval                        235:11-242:63 ExpBox False
+  571          0 Eval                        234:22-242:63 ExpBox False
+  572          0 Eval                        234:11-242:63 ExpBox False
+  573          0 Eval                         233:9-242:64 ExpBox False
+  574          0 Eval                         233:5-242:64 ExpBox True
+  575     746104 Eval                         164:1-248:34 TopLevelBox ["doPrimOp"]
+  576          0 Eval                         153:9-153:81 ExpBox False
+  577          0 Eval                         153:5-153:81 ExpBox True
+  578     746091 Eval                        154:35-154:40 ExpBox False
+  579          0 Eval                        154:42-154:43 ExpBox False
+  580     746091 Eval                        154:45-154:47 ExpBox False
+  581     746091 Eval                        154:26-154:47 ExpBox True
+  582     746091 Eval                         152:1-154:47 TopLevelBox ["doPureOp"]
+  583          1 Eval                        263:50-263:52 ExpBox False
+  584          1 Eval                        263:44-263:52 ExpBox False
+  585          1 Eval                        263:18-263:22 ExpBox False
+  586          1 Eval                        263:16-263:54 ExpBox False
+  587          1 Eval                         263:7-263:54 LocalBox ["doAllOp","lights"]
+  588          1 Eval                        259:24-259:24 ExpBox False
+  589          1 Eval                        259:26-259:26 ExpBox False
+  590          1 Eval                        259:28-259:28 ExpBox False
+  591          1 Eval                        259:17-259:29 ExpBox False
+  592          1 Eval                        259:31-259:36 ExpBox False
+  593          1 Eval                        259:38-259:40 ExpBox False
+  594          1 Eval                        259:42-259:44 ExpBox False
+  595          1 Eval                        259:47-259:49 ExpBox False
+  596          1 Eval                        259:54-259:55 ExpBox False
+  597          1 Eval                        259:59-259:63 ExpBox False
+  598          1 Eval                        259:53-259:64 ExpBox False
+  599          1 Eval                        259:46-259:65 ExpBox False
+  600          1 Eval                        259:67-259:69 ExpBox False
+  601          1 Eval                        259:71-259:72 ExpBox False
+  602          0 Eval                        259:74-259:76 ExpBox False
+  603          1 Eval                        259:10-259:76 ExpBox False
+  604          0 Eval                        260:17-260:19 ExpBox False
+  605          1 Eval                        260:10-260:19 ExpBox False
+  606          1 Eval                          259:5-261:8 ExpBox True
+  607         13 Eval                        265:34-265:39 ExpBox False
+  608          0 Eval                        265:41-265:42 ExpBox False
+  609         13 Eval                        265:44-265:46 ExpBox False
+  610         13 Eval                        265:25-265:46 ExpBox True
+  611         14 Eval                         255:1-265:46 TopLevelBox ["doAllOp"]
+  612          0 Eval                          21:17-21:18 ExpBox False
+  613          1 Eval                          21:10-21:18 ExpBox False
+  614          1 Eval                           21:3-21:18 TopLevelBox ["tick"]
+  615          0 Eval                          23:34-23:37 TopLevelBox ["showsPrec"]
+  616          0 Eval                          23:34-23:37 TopLevelBox ["showList"]
+  617          0 Eval                          45:28-45:31 TopLevelBox ["showsPrec"]
+  618          0 Eval                          45:28-45:31 TopLevelBox ["showList"]
+  619          1 Eval                        297:10-297:16 ExpBox False
+  620          1 Eval                         297:3-297:16 TopLevelBox ["doOp"]
+  621         17 Eval                        299:25-299:25 ExpBox False
+  622         17 Eval                        299:30-299:30 ExpBox False
+  623         17 Eval                        299:25-299:30 ExpBox False
+  624          0 Eval                        299:25-299:30 BinBox CondBinBox True
+  625         17 Eval                        299:25-299:30 BinBox CondBinBox False
+  626          0 Eval                        300:35-300:51 ExpBox False
+  627          0 Eval                        300:27-300:51 ExpBox True
+  628          0 Eval                        301:36-301:37 ExpBox False
+  629         17 Eval                        301:40-301:40 ExpBox False
+  630         17 Eval                        301:42-301:42 ExpBox False
+  631         17 Eval                        301:39-301:43 ExpBox False
+  632         17 Eval                        301:27-301:43 ExpBox True
+  633         17 Eval                        299:22-301:43 ExpBox False
+  634          1 Eval                        299:14-301:44 ExpBox False
+  635          1 Eval                        299:10-301:44 ExpBox False
+  636          1 Eval                         299:3-301:44 TopLevelBox ["tick"]
+  637          1 Eval                        298:10-298:13 ExpBox False
+  638          1 Eval                         298:3-298:13 TopLevelBox ["err"]
+  639         50 Eval                        290:42-290:42 ExpBox False
+  640         54 Eval                        290:39-290:42 ExpBox False
+  641         31 Eval                        291:63-291:63 ExpBox False
+  642         48 Eval                        291:60-291:64 ExpBox False
+  643         46 Eval                        291:66-291:67 ExpBox False
+  644         48 Eval                        291:53-291:67 ExpBox True
+  645          0 Eval                        292:61-292:61 ExpBox False
+  646          6 Eval                        292:53-292:61 ExpBox True
+  647         54 Eval                        290:34-292:61 ExpBox False
+  648         54 Eval                        290:26-292:62 ExpBox False
+  649         54 Eval                        290:22-292:62 ExpBox False
+  650         54 Eval                         290:5-292:62 TopLevelBox [">>="]
+  651         31 Eval                        293:41-293:41 ExpBox False
+  652         31 Eval                        293:43-293:43 ExpBox False
+  653         31 Eval                        293:32-293:43 ExpBox False
+  654         15 Eval                        293:24-293:44 ExpBox False
+  655         15 Eval                        293:20-293:44 ExpBox False
+  656         15 Eval                         293:5-293:44 TopLevelBox ["return"]
+  657          0 Eval                        294:40-294:40 ExpBox False
+  658          2 Eval                        294:32-294:40 ExpBox False
+  659          2 Eval                        294:24-294:41 ExpBox False
+  660          2 Eval                        294:20-294:41 ExpBox False
+  661          2 Eval                         294:5-294:41 TopLevelBox ["fail"]
+  662         14 Eval                          37:36-37:39 ExpBox False
+  663          1 Eval                          37:41-37:42 ExpBox False
+  664         14 Eval                          37:44-37:46 ExpBox False
+  665         14 Eval                          37:27-37:46 ExpBox False
+  666         14 Eval                          35:22-38:25 ExpBox False
+  667         14 Eval                           35:3-38:25 TopLevelBox ["doOp"]
+  668          0 Eval                          39:18-39:18 ExpBox False
+  669          0 Eval                          39:12-39:18 ExpBox False
+  670          0 Eval                           39:3-39:18 TopLevelBox ["err"]
+  671          1 Eval                          31:12-31:19 ExpBox False
+  672          1 Eval                           31:3-31:19 TopLevelBox ["doOp"]
+  673          0 Eval                          32:18-32:18 ExpBox False
+  674          0 Eval                          32:12-32:18 ExpBox False
+  675          0 Eval                           32:3-32:18 TopLevelBox ["err"]
+  676    7362839 Eval                          26:22-26:22 ExpBox False
+  677   10417773 Eval                          26:20-26:22 ExpBox False
+  678   10417773 Eval                           26:5-26:22 TopLevelBox [">>="]
+  679          1 Eval                          27:20-27:23 ExpBox False
+  680          1 Eval                           27:5-27:23 TopLevelBox ["return"]
+  681          0 Eval                          28:26-28:26 ExpBox False
+  682          0 Eval                          28:20-28:26 ExpBox False
+  683          0 Eval                           28:5-28:26 TopLevelBox ["fail"]
+    0          0 Data                        407:46-407:46 ExpBox False
+    1          0 Data                        407:49-407:49 ExpBox False
+    2          0 Data                        407:53-407:53 ExpBox False
+    3          0 Data                        407:48-407:54 ExpBox False
+    4          0 Data                        407:56-407:56 ExpBox False
+    5          0 Data                        407:44-407:56 ExpBox False
+    6          0 Data                        407:33-407:57 ExpBox False
+    7          0 Data                        407:27-407:58 ExpBox False
+    8          0 Data                        407:20-407:58 ExpBox True
+    9          0 Data                        408:20-408:20 ExpBox False
+   10          0 Data                        408:13-408:20 ExpBox True
+   11          0 Data                         407:1-408:20 TopLevelBox ["sphere'"]
+   12          0 Data                        398:46-398:47 ExpBox False
+   13          0 Data                        398:49-398:50 ExpBox False
+   14          0 Data                        398:52-398:54 ExpBox False
+   15          0 Data                        398:65-398:70 ExpBox False
+   16          0 Data                        398:56-398:71 ExpBox False
+   17          0 Data                        398:73-398:75 ExpBox False
+   18          0 Data                        398:36-398:75 ExpBox False
+   19          0 Data                         398:1-398:75 TopLevelBox ["mySpotlight"]
+   20          0 Data                        394:13-394:13 ExpBox False
+   21          0 Data                        394:17-394:17 ExpBox False
+   22          0 Data                        394:13-394:17 ExpBox False
+   23          0 Data                        394:13-394:17 BinBox GuardBinBox True
+   24          0 Data                        394:13-394:17 BinBox GuardBinBox False
+   25          0 Data                        394:31-394:72 ExpBox False
+   26          0 Data                        394:25-394:72 ExpBox True
+   27          0 Data                        395:13-395:21 ExpBox False
+   28          0 Data                        395:13-395:21 BinBox GuardBinBox True
+   29          0 Data                        395:13-395:21 BinBox GuardBinBox False
+   30          0 Data                        395:30-395:30 ExpBox False
+   31          0 Data                        395:25-395:30 ExpBox True
+   32          0 Data                         394:1-395:30 TopLevelBox ["ourSqrt"]
+   33          0 Data                        390:20-390:55 ExpBox False
+   34          0 Data                        390:14-390:55 ExpBox True
+   35      53568 Data                        391:14-391:14 ExpBox False
+   36      53568 Data                        391:22-391:22 ExpBox False
+   37      53568 Data                        391:14-391:22 ExpBox True
+   38      53568 Data                         390:1-391:22 TopLevelBox ["ourRem"]
+   39          0 Data                        386:21-386:56 ExpBox False
+   40          0 Data                        386:15-386:56 ExpBox True
+   41          0 Data                        387:15-387:15 ExpBox False
+   42          0 Data                        387:24-387:24 ExpBox False
+   43          0 Data                        387:15-387:24 ExpBox True
+   44          0 Data                         386:1-387:24 TopLevelBox ["ourQuot"]
+   45      65024 Data                        379:22-379:24 ExpBox False
+   46      65024 Data                        379:14-379:25 ExpBox False
+   47      65024 Data                        379:27-379:27 ExpBox False
+   48      65024 Data                         379:6-379:27 ExpBox False
+   49      65024 Data                         379:6-379:27 BinBox GuardBinBox True
+   50          0 Data                         379:6-379:27 BinBox GuardBinBox False
+   51      65024 Data                        379:31-379:33 ExpBox False
+   52      65024 Data                        379:37-379:37 ExpBox False
+   53      65024 Data                        379:31-379:37 ExpBox True
+   54          0 Data                         380:6-380:14 ExpBox False
+   55          0 Data                         380:6-380:14 BinBox GuardBinBox True
+   56          0 Data                         380:6-380:14 BinBox GuardBinBox False
+   57          0 Data                        380:25-380:57 ExpBox False
+   58          0 Data                        381:30-381:30 ExpBox False
+   59          0 Data                        381:25-381:30 ExpBox False
+   60          0 Data                        382:25-382:52 ExpBox False
+   61          0 Data                        383:43-383:45 ExpBox False
+   62          0 Data                        383:35-383:46 ExpBox False
+   63          0 Data                        383:30-383:47 ExpBox False
+   64          0 Data                        383:25-383:47 ExpBox False
+   65          0 Data                        383:52-383:54 ExpBox False
+   66          0 Data                        383:25-383:54 ExpBox False
+   67          0 Data                        382:25-383:54 ExpBox False
+   68          0 Data                        381:25-383:54 ExpBox False
+   69          0 Data                        380:24-383:55 ExpBox False
+   70          0 Data                        380:18-383:55 ExpBox True
+   71      65024 Data                         378:1-383:55 TopLevelBox ["ixGet"]
+   72          0 Data                        374:22-374:22 ExpBox False
+   73          0 Data                        374:26-374:30 ExpBox False
+   74          0 Data                        374:39-374:39 ExpBox False
+   75          0 Data                        374:34-374:39 ExpBox False
+   76          0 Data                        374:44-374:47 ExpBox False
+   77          0 Data                        374:34-374:47 ExpBox False
+   78          0 Data                        374:26-374:47 ExpBox False
+   79          0 Data                        374:21-374:48 ExpBox False
+   80          0 Data                        374:50-374:50 ExpBox False
+   81          0 Data                        374:15-374:50 ExpBox False
+   82          0 Data                         374:1-374:50 TopLevelBox ["mytrace"]
+   83          0 Data                        342:38-342:42 ExpBox False
+   84          0 Data                        342:37-342:43 ExpBox True
+   85          0 Data                        343:38-343:43 ExpBox False
+   86          0 Data                        343:37-343:44 ExpBox True
+   87          0 Data                        344:38-344:44 ExpBox False
+   88          0 Data                        344:37-344:45 ExpBox True
+   89          0 Data                        345:38-345:43 ExpBox False
+   90          0 Data                        345:37-345:44 ExpBox True
+   91          0 Data                        346:38-346:43 ExpBox False
+   92          0 Data                        346:37-346:44 ExpBox True
+   93          0 Data                        347:38-347:42 ExpBox False
+   94          0 Data                        347:37-347:43 ExpBox True
+   95          0 Data                        348:38-348:44 ExpBox False
+   96          0 Data                        348:37-348:45 ExpBox True
+   97          0 Data                        349:38-349:42 ExpBox False
+   98          0 Data                        349:44-349:48 ExpBox False
+   99          0 Data                        349:37-349:49 ExpBox True
+  100          0 Data                        350:38-350:42 ExpBox False
+  101          0 Data                        350:44-350:48 ExpBox False
+  102          0 Data                        350:37-350:49 ExpBox True
+  103          0 Data                        351:38-351:43 ExpBox False
+  104          0 Data                        351:45-351:50 ExpBox False
+  105          0 Data                        351:37-351:51 ExpBox True
+  106          0 Data                        352:38-352:43 ExpBox False
+  107          0 Data                        352:45-352:50 ExpBox False
+  108          0 Data                        352:37-352:51 ExpBox True
+  109          0 Data                        353:38-353:44 ExpBox False
+  110          0 Data                        353:46-353:50 ExpBox False
+  111          0 Data                        353:37-353:51 ExpBox True
+  112          0 Data                        354:45-354:52 ExpBox False
+  113          0 Data                        354:54-354:61 ExpBox False
+  114          0 Data                        354:44-354:62 ExpBox True
+  115          0 Data                        355:45-355:51 ExpBox False
+  116          0 Data                        355:53-355:59 ExpBox False
+  117          0 Data                        355:44-355:60 ExpBox True
+  118          0 Data                        356:45-356:50 ExpBox False
+  119          0 Data                        356:52-356:57 ExpBox False
+  120          0 Data                        356:59-356:64 ExpBox False
+  121          0 Data                        356:44-356:65 ExpBox True
+  122          0 Data                        357:45-357:52 ExpBox False
+  123          0 Data                        357:54-357:59 ExpBox False
+  124          0 Data                        357:44-357:60 ExpBox True
+  125          0 Data                        358:45-358:52 ExpBox False
+  126          0 Data                        358:54-358:59 ExpBox False
+  127          0 Data                        358:61-358:66 ExpBox False
+  128          0 Data                        358:68-358:73 ExpBox False
+  129          0 Data                        358:44-358:74 ExpBox True
+  130          0 Data                        359:45-359:51 ExpBox False
+  131          0 Data                        359:53-359:60 ExpBox False
+  132          0 Data                        359:44-359:61 ExpBox True
+  133          0 Data                        361:45-361:51 ExpBox False
+  134          0 Data                        361:53-361:59 ExpBox False
+  135          0 Data                        361:61-361:67 ExpBox False
+  136          0 Data                        361:69-361:74 ExpBox False
+  137          0 Data                        361:76-361:81 ExpBox False
+  138          0 Data                        361:44-361:82 ExpBox True
+  139          0 Data                        362:45-362:51 ExpBox False
+  140          0 Data                        363:45-363:51 ExpBox False
+  141          0 Data                        364:45-364:52 ExpBox False
+  142          0 Data                        365:45-365:49 ExpBox False
+  143          0 Data                        366:45-366:50 ExpBox False
+  144          0 Data                        367:45-367:50 ExpBox False
+  145          0 Data                        368:45-368:50 ExpBox False
+  146          0 Data                        369:45-369:52 ExpBox False
+  147          0 Data                        362:44-369:53 ExpBox True
+  148          0 Data                         342:1-369:53 TopLevelBox ["getPrimOpType"]
+  149          0 Data                         323:7-323:12 ExpBox False
+  150          0 Data                        323:17-323:22 ExpBox False
+  151          0 Data                         323:5-323:23 ExpBox False
+  152          0 Data                         324:7-324:11 ExpBox False
+  153          0 Data                        324:17-324:21 ExpBox False
+  154          0 Data                         324:5-324:22 ExpBox False
+  155          0 Data                         325:7-325:12 ExpBox False
+  156          0 Data                        325:17-325:22 ExpBox False
+  157          0 Data                         325:5-325:23 ExpBox False
+  158          0 Data                         326:7-326:14 ExpBox False
+  159          0 Data                        326:17-326:24 ExpBox False
+  160          0 Data                         326:5-326:25 ExpBox False
+  161          0 Data                         327:7-327:12 ExpBox False
+  162          0 Data                        327:17-327:22 ExpBox False
+  163          0 Data                         327:5-327:23 ExpBox False
+  164          0 Data                         328:7-328:13 ExpBox False
+  165          0 Data                        328:17-328:23 ExpBox False
+  166          0 Data                         328:5-328:24 ExpBox False
+  167          0 Data                         329:7-329:13 ExpBox False
+  168          0 Data                        329:17-329:23 ExpBox False
+  169          0 Data                         329:5-329:24 ExpBox False
+  170          0 Data                         330:7-330:14 ExpBox False
+  171          0 Data                        330:17-330:24 ExpBox False
+  172          0 Data                         330:5-330:25 ExpBox False
+  173          0 Data                         331:7-331:13 ExpBox False
+  174          0 Data                        331:17-331:23 ExpBox False
+  175          0 Data                         331:5-331:24 ExpBox False
+  176          0 Data                         332:7-332:13 ExpBox False
+  177          0 Data                        332:17-332:28 ExpBox False
+  178          0 Data                         332:5-332:29 ExpBox False
+  179          0 Data                         333:7-333:14 ExpBox False
+  180          0 Data                        333:17-333:23 ExpBox False
+  181          0 Data                         333:5-333:24 ExpBox False
+  182          0 Data                          323:3-334:3 ExpBox False
+  183          0 Data                          322:1-334:3 TopLevelBox ["typeTable"]
+  184          0 Data                        336:20-336:27 ExpBox False
+  185          0 Data                        336:29-336:36 ExpBox False
+  186          0 Data                        336:19-336:37 ExpBox False
+  187          0 Data                        336:39-336:47 ExpBox False
+  188          0 Data                        336:13-336:47 ExpBox False
+  189          0 Data                         336:1-336:47 TopLevelBox ["typeNames"]
+  190          1 Data                         213:5-213:11 ExpBox False
+  191          1 Data                        213:19-213:24 ExpBox False
+  192          0 Data                        213:47-213:70 ExpBox False
+  193          0 Data                        213:41-213:70 ExpBox False
+  194          1 Data                         213:4-213:71 ExpBox False
+  195          1 Data                          214:5-214:8 ExpBox False
+  196          1 Data                        214:19-214:21 ExpBox False
+  197          0 Data                        214:47-214:67 ExpBox False
+  198          0 Data                        214:41-214:67 ExpBox False
+  199          1 Data                         214:4-214:68 ExpBox False
+  200          1 Data                         215:5-215:11 ExpBox False
+  201          0 Data                        215:25-215:29 ExpBox False
+  202          1 Data                        215:19-215:29 ExpBox False
+  203          0 Data                        215:47-215:70 ExpBox False
+  204          0 Data                        215:41-215:70 ExpBox False
+  205          1 Data                         215:4-215:71 ExpBox False
+  206          1 Data                         216:5-216:10 ExpBox False
+  207          0 Data                        216:25-216:28 ExpBox False
+  208          1 Data                        216:19-216:28 ExpBox False
+  209          0 Data                        216:47-216:69 ExpBox False
+  210          0 Data                        216:41-216:69 ExpBox False
+  211          1 Data                         216:4-216:70 ExpBox False
+  212          1 Data                          213:2-217:2 ExpBox False
+  213         49 Data                        217:26-217:26 ExpBox False
+  214         49 Data                        217:32-217:32 ExpBox False
+  215         49 Data                        217:28-217:32 ExpBox False
+  216         20 Data                        217:34-217:34 ExpBox False
+  217         49 Data                        217:25-217:35 ExpBox False
+  218          1 Data                        217:11-217:36 ExpBox False
+  219          1 Data                         220:5-220:10 ExpBox False
+  220          1 Data                        220:19-220:25 ExpBox False
+  221          0 Data                        220:45-220:51 ExpBox False
+  222          0 Data                        220:55-220:58 ExpBox False
+  223          0 Data                        220:44-220:59 ExpBox False
+  224          0 Data                        220:34-220:59 ExpBox False
+  225          1 Data                         220:4-220:60 ExpBox False
+  226          1 Data                         221:5-221:10 ExpBox False
+  227          1 Data                        221:19-221:25 ExpBox False
+  228          0 Data                        221:46-221:48 ExpBox False
+  229          0 Data                        221:34-221:48 ExpBox False
+  230          1 Data                         221:4-221:49 ExpBox False
+  231          1 Data                         222:5-222:10 ExpBox False
+  232          1 Data                        222:19-222:25 ExpBox False
+  233          1 Data                        222:49-222:51 ExpBox False
+  234          1 Data                        222:34-222:51 ExpBox False
+  235          1 Data                         222:4-222:52 ExpBox False
+  236          1 Data                         223:5-223:10 ExpBox False
+  237          1 Data                        223:19-223:25 ExpBox False
+  238          0 Data                        223:45-223:51 ExpBox False
+  239          0 Data                        223:55-223:58 ExpBox False
+  240          0 Data                        223:44-223:59 ExpBox False
+  241          0 Data                        223:34-223:59 ExpBox False
+  242          1 Data                         223:4-223:60 ExpBox False
+  243          1 Data                         224:5-224:12 ExpBox False
+  244          1 Data                        224:19-224:27 ExpBox False
+  245          0 Data                        224:44-224:49 ExpBox False
+  246          0 Data                        224:34-224:49 ExpBox False
+  247          1 Data                         224:4-224:50 ExpBox False
+  248          1 Data                         225:5-225:10 ExpBox False
+  249          1 Data                        225:19-225:25 ExpBox False
+  250          0 Data                        225:46-225:49 ExpBox False
+  251          0 Data                        225:34-225:49 ExpBox False
+  252          1 Data                         225:4-225:50 ExpBox False
+  253          1 Data                          226:5-226:9 ExpBox False
+  254          1 Data                        226:19-226:24 ExpBox False
+  255          0 Data                        226:45-226:47 ExpBox False
+  256          0 Data                        226:51-226:57 ExpBox False
+  257          0 Data                        226:44-226:58 ExpBox False
+  258          0 Data                        226:34-226:58 ExpBox False
+  259          1 Data                         226:4-226:59 ExpBox False
+  260          1 Data                         227:5-227:10 ExpBox False
+  261          1 Data                        227:19-227:25 ExpBox False
+  262          1 Data                        227:46-227:49 ExpBox False
+  263          1 Data                        227:34-227:49 ExpBox False
+  264          1 Data                         227:4-227:50 ExpBox False
+  265          1 Data                         228:5-228:14 ExpBox False
+  266          1 Data                        228:19-228:29 ExpBox False
+  267          0 Data                        228:46-228:53 ExpBox False
+  268          0 Data                        228:34-228:53 ExpBox False
+  269          1 Data                         228:4-228:54 ExpBox False
+  270          1 Data                         229:5-229:16 ExpBox False
+  271          1 Data                        229:19-229:31 ExpBox False
+  272          0 Data                        229:46-229:55 ExpBox False
+  273          0 Data                        229:34-229:55 ExpBox False
+  274          1 Data                         229:4-229:56 ExpBox False
+  275          1 Data                         230:5-230:10 ExpBox False
+  276          1 Data                        230:19-230:25 ExpBox False
+  277          0 Data                        230:46-230:54 ExpBox False
+  278          0 Data                        230:34-230:54 ExpBox False
+  279          1 Data                         230:4-230:55 ExpBox False
+  280          1 Data                         231:5-231:10 ExpBox False
+  281          1 Data                        231:19-231:25 ExpBox False
+  282          1 Data                        231:49-231:51 ExpBox False
+  283          1 Data                        231:34-231:51 ExpBox False
+  284          1 Data                         231:4-231:52 ExpBox False
+  285          1 Data                          232:5-232:9 ExpBox False
+  286          1 Data                        232:19-232:24 ExpBox False
+  287          1 Data                        232:47-232:50 ExpBox False
+  288          1 Data                        232:34-232:50 ExpBox False
+  289          1 Data                         232:4-232:51 ExpBox False
+  290          1 Data                          233:5-233:9 ExpBox False
+  291          1 Data                        233:19-233:24 ExpBox False
+  292          0 Data                        233:49-233:52 ExpBox False
+  293          0 Data                        233:34-233:52 ExpBox False
+  294          1 Data                         233:4-233:53 ExpBox False
+  295          1 Data                         234:5-234:11 ExpBox False
+  296          1 Data                        234:19-234:26 ExpBox False
+  297          1 Data                        234:43-234:47 ExpBox False
+  298          1 Data                        234:34-234:47 ExpBox False
+  299          1 Data                         234:4-234:48 ExpBox False
+  300          1 Data                         235:5-235:10 ExpBox False
+  301          1 Data                        235:19-235:25 ExpBox False
+  302          1 Data                        235:45-235:47 ExpBox False
+  303          1 Data                        235:51-235:64 ExpBox False
+  304          1 Data                        235:44-235:65 ExpBox False
+  305          1 Data                        235:34-235:65 ExpBox False
+  306          1 Data                         235:4-235:66 ExpBox False
+  307          1 Data                          236:5-236:9 ExpBox False
+  308          1 Data                        236:19-236:24 ExpBox False
+  309          1 Data                        236:48-236:52 ExpBox False
+  310          1 Data                        236:34-236:52 ExpBox False
+  311          1 Data                         236:4-236:53 ExpBox False
+  312          1 Data                         237:5-237:10 ExpBox False
+  313          1 Data                        237:19-237:25 ExpBox False
+  314          0 Data                        237:57-237:57 ExpBox False
+  315          0 Data                        237:45-237:58 ExpBox False
+  316          0 Data                        237:34-237:58 ExpBox False
+  317          1 Data                         237:4-237:59 ExpBox False
+  318          1 Data                         238:5-238:10 ExpBox False
+  319          1 Data                        238:19-238:25 ExpBox False
+  320          0 Data                        238:57-238:57 ExpBox False
+  321          0 Data                        238:45-238:58 ExpBox False
+  322          0 Data                        238:34-238:58 ExpBox False
+  323          1 Data                         238:4-238:59 ExpBox False
+  324          1 Data                         239:5-239:10 ExpBox False
+  325          1 Data                        239:19-239:25 ExpBox False
+  326          0 Data                        239:57-239:57 ExpBox False
+  327          0 Data                        239:45-239:58 ExpBox False
+  328          0 Data                        239:34-239:58 ExpBox False
+  329          1 Data                         239:4-239:59 ExpBox False
+  330          1 Data                         240:5-240:15 ExpBox False
+  331          1 Data                        240:19-240:30 ExpBox False
+  332          0 Data                        240:46-240:54 ExpBox False
+  333          0 Data                        240:34-240:54 ExpBox False
+  334          1 Data                         240:4-240:55 ExpBox False
+  335          1 Data                         241:5-241:12 ExpBox False
+  336          1 Data                        241:19-241:27 ExpBox False
+  337          0 Data                        241:43-241:46 ExpBox False
+  338          0 Data                        241:50-241:52 ExpBox False
+  339          0 Data                        241:56-241:61 ExpBox False
+  340          0 Data                        241:50-241:61 ExpBox False
+  341          0 Data                        241:42-241:62 ExpBox False
+  342          0 Data                        241:34-241:62 ExpBox False
+  343          1 Data                         241:4-241:63 ExpBox False
+  344          1 Data                         242:5-242:11 ExpBox False
+  345          1 Data                        242:19-242:26 ExpBox False
+  346          0 Data                        242:47-242:49 ExpBox False
+  347          0 Data                        242:34-242:49 ExpBox False
+  348          1 Data                         242:4-242:50 ExpBox False
+  349          1 Data                         243:5-243:11 ExpBox False
+  350          1 Data                        243:19-243:26 ExpBox False
+  351          1 Data                        243:49-243:51 ExpBox False
+  352          1 Data                        243:34-243:51 ExpBox False
+  353          1 Data                         243:4-243:52 ExpBox False
+  354          1 Data                         244:5-244:11 ExpBox False
+  355          1 Data                        244:19-244:26 ExpBox False
+  356          1 Data                        244:52-244:56 ExpBox False
+  357          1 Data                        244:34-244:56 ExpBox False
+  358          1 Data                         244:4-244:57 ExpBox False
+  359          1 Data                         245:5-245:10 ExpBox False
+  360          1 Data                        245:19-245:25 ExpBox False
+  361          1 Data                        245:46-245:53 ExpBox False
+  362          1 Data                        245:34-245:53 ExpBox False
+  363          1 Data                         245:4-245:54 ExpBox False
+  364          1 Data                         246:5-246:10 ExpBox False
+  365          1 Data                        246:19-246:25 ExpBox False
+  366          0 Data                        246:46-246:48 ExpBox False
+  367          0 Data                        246:34-246:48 ExpBox False
+  368          1 Data                         246:4-246:49 ExpBox False
+  369          1 Data                         247:5-247:10 ExpBox False
+  370          1 Data                        247:19-247:25 ExpBox False
+  371          1 Data                        247:49-247:51 ExpBox False
+  372          1 Data                        247:34-247:51 ExpBox False
+  373          1 Data                         247:4-247:52 ExpBox False
+  374          1 Data                         248:5-248:10 ExpBox False
+  375          1 Data                        248:19-248:25 ExpBox False
+  376          0 Data                        248:42-248:47 ExpBox False
+  377          0 Data                        248:34-248:47 ExpBox False
+  378          1 Data                         248:4-248:48 ExpBox False
+  379          1 Data                         249:5-249:10 ExpBox False
+  380          1 Data                        249:19-249:25 ExpBox False
+  381          0 Data                        249:44-249:49 ExpBox False
+  382          0 Data                        249:34-249:49 ExpBox False
+  383          1 Data                         249:4-249:50 ExpBox False
+  384          1 Data                         250:5-250:11 ExpBox False
+  385          1 Data                        250:19-250:26 ExpBox False
+  386          1 Data                        250:46-250:50 ExpBox False
+  387          1 Data                        250:34-250:50 ExpBox False
+  388          1 Data                         250:4-250:51 ExpBox False
+  389          1 Data                         251:5-251:11 ExpBox False
+  390          1 Data                        251:19-251:26 ExpBox False
+  391          1 Data                        251:55-251:60 ExpBox False
+  392          1 Data                        251:34-251:60 ExpBox False
+  393          1 Data                         251:4-251:61 ExpBox False
+  394          1 Data                         252:5-252:16 ExpBox False
+  395          1 Data                        252:19-252:31 ExpBox False
+  396          0 Data                        252:52-252:61 ExpBox False
+  397          0 Data                        252:34-252:61 ExpBox False
+  398          1 Data                         252:4-252:62 ExpBox False
+  399          1 Data                         253:5-253:10 ExpBox False
+  400          1 Data                        253:19-253:25 ExpBox False
+  401          1 Data                        253:43-253:54 ExpBox False
+  402          1 Data                        253:34-253:54 ExpBox False
+  403          1 Data                         253:4-253:55 ExpBox False
+  404          1 Data                         254:5-254:12 ExpBox False
+  405          1 Data                        254:19-254:27 ExpBox False
+  406          1 Data                        254:34-254:39 ExpBox False
+  407          1 Data                        254:50-254:52 ExpBox False
+  408          1 Data                        254:43-254:52 ExpBox False
+  409          1 Data                        254:34-254:52 ExpBox False
+  410          1 Data                         254:4-254:53 ExpBox False
+  411          1 Data                         255:5-255:13 ExpBox False
+  412          1 Data                        255:19-255:28 ExpBox False
+  413          1 Data                        255:74-255:74 ExpBox False
+  414          1 Data                        255:65-255:75 ExpBox False
+  415          1 Data                        255:77-255:77 ExpBox False
+  416          1 Data                        255:57-255:77 ExpBox False
+  417          1 Data                        255:47-255:78 ExpBox False
+  418          1 Data                        255:34-255:78 ExpBox False
+  419          1 Data                         255:4-255:79 ExpBox False
+  420          1 Data                         256:5-256:13 ExpBox False
+  421          1 Data                        256:19-256:28 ExpBox False
+  422          1 Data                        256:74-256:74 ExpBox False
+  423          1 Data                        256:65-256:75 ExpBox False
+  424          1 Data                        256:77-256:77 ExpBox False
+  425          1 Data                        256:57-256:77 ExpBox False
+  426          1 Data                        256:47-256:78 ExpBox False
+  427          1 Data                        256:34-256:78 ExpBox False
+  428          1 Data                         256:4-256:79 ExpBox False
+  429          1 Data                         257:5-257:13 ExpBox False
+  430          1 Data                        257:19-257:28 ExpBox False
+  431          0 Data                        257:74-257:74 ExpBox False
+  432          0 Data                        257:65-257:75 ExpBox False
+  433          0 Data                        257:77-257:77 ExpBox False
+  434          0 Data                        257:57-257:77 ExpBox False
+  435          0 Data                        257:47-257:78 ExpBox False
+  436          0 Data                        257:34-257:78 ExpBox False
+  437          1 Data                         257:4-257:79 ExpBox False
+  438          1 Data                         258:5-258:11 ExpBox False
+  439          1 Data                        258:19-258:26 ExpBox False
+  440          0 Data                        258:78-258:78 ExpBox False
+  441          0 Data                        258:80-258:80 ExpBox False
+  442          0 Data                        258:82-258:82 ExpBox False
+  443          0 Data                        258:77-258:83 ExpBox False
+  444          0 Data                        258:85-258:85 ExpBox False
+  445          0 Data                        258:71-258:85 ExpBox False
+  446          0 Data                        258:57-258:86 ExpBox False
+  447          0 Data                        258:34-258:86 ExpBox False
+  448          1 Data                         258:4-258:87 ExpBox False
+  449          1 Data                          259:5-259:9 ExpBox False
+  450          1 Data                        259:19-259:24 ExpBox False
+  451          0 Data                        259:45-259:47 ExpBox False
+  452          0 Data                        259:51-259:57 ExpBox False
+  453          0 Data                        259:44-259:58 ExpBox False
+  454          0 Data                        259:34-259:58 ExpBox False
+  455          1 Data                         259:4-259:59 ExpBox False
+  456          1 Data                         260:5-260:12 ExpBox False
+  457          1 Data                        260:19-260:27 ExpBox False
+  458          0 Data                        260:46-260:52 ExpBox False
+  459          0 Data                        260:34-260:52 ExpBox False
+  460          1 Data                         260:4-260:53 ExpBox False
+  461          1 Data                         261:5-261:15 ExpBox False
+  462          1 Data                        261:19-261:30 ExpBox False
+  463          0 Data                        261:68-261:78 ExpBox False
+  464          0 Data                        261:34-261:78 ExpBox False
+  465          1 Data                         261:4-261:79 ExpBox False
+  466          1 Data                         262:5-262:10 ExpBox False
+  467          1 Data                        262:19-262:25 ExpBox False
+  468          0 Data                        262:44-262:50 ExpBox False
+  469          0 Data                        262:34-262:50 ExpBox False
+  470          1 Data                         262:4-262:51 ExpBox False
+  471          1 Data                         263:5-263:10 ExpBox False
+  472          1 Data                        263:19-263:25 ExpBox False
+  473          0 Data                        263:46-263:48 ExpBox False
+  474          0 Data                        263:34-263:48 ExpBox False
+  475          1 Data                         263:4-263:49 ExpBox False
+  476          1 Data                         264:5-264:10 ExpBox False
+  477          1 Data                        264:19-264:25 ExpBox False
+  478          0 Data                        264:49-264:51 ExpBox False
+  479          0 Data                        264:34-264:51 ExpBox False
+  480          1 Data                         264:4-264:52 ExpBox False
+  481          1 Data                         265:5-265:11 ExpBox False
+  482          1 Data                        265:19-265:26 ExpBox False
+  483          0 Data                        265:53-265:59 ExpBox False
+  484          0 Data                        265:34-265:59 ExpBox False
+  485          1 Data                         265:4-265:60 ExpBox False
+  486          1 Data                         266:5-266:15 ExpBox False
+  487          1 Data                        266:19-266:30 ExpBox False
+  488          3 Data                        266:82-266:82 ExpBox False
+  489          3 Data                        266:84-266:84 ExpBox False
+  490          3 Data                        266:86-266:86 ExpBox False
+  491          3 Data                        266:81-266:87 ExpBox False
+  492          3 Data                        266:89-266:89 ExpBox False
+  493          3 Data                        266:71-266:89 ExpBox False
+  494          1 Data                        266:57-266:90 ExpBox False
+  495          1 Data                        266:34-266:90 ExpBox False
+  496          1 Data                         266:4-266:91 ExpBox False
+  497          1 Data                         267:5-267:11 ExpBox False
+  498          1 Data                        267:19-267:26 ExpBox False
+  499          1 Data                        267:46-267:50 ExpBox False
+  500          1 Data                        267:34-267:50 ExpBox False
+  501          1 Data                         267:4-267:51 ExpBox False
+  502          1 Data                         268:5-268:12 ExpBox False
+  503          1 Data                        268:19-268:27 ExpBox False
+  504          1 Data                        268:64-268:64 ExpBox False
+  505          1 Data                        268:66-268:66 ExpBox False
+  506          1 Data                        268:57-268:66 ExpBox False
+  507          1 Data                        268:47-268:67 ExpBox False
+  508          1 Data                        268:34-268:67 ExpBox False
+  509          1 Data                         268:4-268:68 ExpBox False
+  510          1 Data                          220:2-269:2 ExpBox False
+  511          1 Data                          217:7-269:2 ExpBox False
+  512          1 Data                          213:2-269:2 ExpBox False
+  513          1 Data                          212:1-269:2 TopLevelBox ["opcodes"]
+  514          0 Data                        206:15-206:55 ExpBox False
+  515          0 Data                         206:9-206:55 ExpBox False
+  516          0 Data                         206:1-206:55 TopLevelBox ["image"]
+  517          0 Data                        205:15-205:34 ExpBox False
+  518          0 Data                         205:9-205:34 ExpBox False
+  519          0 Data                         205:1-205:34 TopLevelBox ["undef"]
+  520          0 Data                        202:22-202:29 ExpBox False
+  521          0 Data                        202:31-202:38 ExpBox False
+  522          0 Data                        202:21-202:39 ExpBox False
+  523          0 Data                        203:52-203:58 ExpBox False
+  524          0 Data                        203:22-203:23 ExpBox False
+  525          0 Data                        203:25-203:28 ExpBox False
+  526          0 Data                        203:21-203:29 ExpBox False
+  527          0 Data                        203:19-203:60 ExpBox False
+  528          0 Data                        202:15-203:60 ExpBox False
+  529          0 Data                         202:1-203:60 TopLevelBox ["opNameTable"]
+  530          1 Data                        199:38-199:44 ExpBox False
+  531         53 Data                        199:14-199:16 ExpBox False
+  532         22 Data                        199:18-199:19 ExpBox False
+  533         53 Data                        199:13-199:20 ExpBox False
+  534          1 Data                        199:11-199:46 ExpBox False
+  535          1 Data                         199:1-199:46 TopLevelBox ["opTable"]
+  536          0 Data                        195:33-195:39 ExpBox False
+  537          0 Data                        195:14-195:16 ExpBox False
+  538          0 Data                        195:12-195:41 ExpBox False
+  539          0 Data                         195:1-195:41 TopLevelBox ["keyWords"]
+  540     711560 Data                        123:30-123:30 ExpBox False
+  541     711560 Data                        123:32-123:32 ExpBox False
+  542     711560 Data                        123:23-123:32 ExpBox False
+  543     711560 Data                         123:1-123:32 TopLevelBox ["lookupEnv"]
+  544     441868 Data                        120:31-120:31 ExpBox False
+  545     409350 Data                        120:34-120:34 ExpBox False
+  546     441868 Data                        120:30-120:35 ExpBox False
+  547     371112 Data                        120:37-120:37 ExpBox False
+  548     441868 Data                        120:29-120:38 ExpBox False
+  549     441868 Data                        120:25-120:38 ExpBox False
+  550     441868 Data                         120:1-120:38 TopLevelBox ["extendEnv"]
+  551          0 Data                        117:16-117:17 ExpBox False
+  552          0 Data                        117:12-117:17 ExpBox False
+  553          0 Data                         117:1-117:17 TopLevelBox ["emptyEnv"]
+  554          0 Data                          97:34-97:34 ExpBox False
+  555          0 Data                          97:29-97:34 ExpBox False
+  556          0 Data                          97:39-97:48 ExpBox False
+  557          0 Data                          97:29-97:48 ExpBox True
+  558          0 Data                          98:34-98:34 ExpBox False
+  559          0 Data                          98:29-98:34 ExpBox False
+  560          0 Data                          98:39-98:47 ExpBox False
+  561          0 Data                          98:29-98:47 ExpBox True
+  562          0 Data                          99:34-99:34 ExpBox False
+  563          0 Data                          99:29-99:34 ExpBox False
+  564          0 Data                          99:39-99:48 ExpBox False
+  565          0 Data                          99:29-99:48 ExpBox True
+  566          0 Data                        100:34-100:34 ExpBox False
+  567          0 Data                        100:29-100:34 ExpBox False
+  568          0 Data                        100:39-100:50 ExpBox False
+  569          0 Data                        100:29-100:50 ExpBox True
+  570          0 Data                        101:29-101:50 ExpBox True
+  571          0 Data                         103:8-103:17 ExpBox False
+  572          0 Data                        103:47-103:49 ExpBox False
+  573          0 Data                        103:39-103:50 ExpBox False
+  574          0 Data                        103:34-103:51 ExpBox False
+  575          0 Data                        103:28-103:52 ExpBox False
+  576          0 Data                        103:23-103:52 ExpBox False
+  577          0 Data                        103:57-103:78 ExpBox False
+  578          0 Data                        103:23-103:78 ExpBox False
+  579          0 Data                         103:8-103:78 ExpBox True
+  580          0 Data                        104:29-104:31 ExpBox False
+  581          0 Data                        104:41-104:41 ExpBox False
+  582          0 Data                        104:36-104:41 ExpBox False
+  583          0 Data                        105:29-105:31 ExpBox False
+  584          0 Data                        105:41-105:41 ExpBox False
+  585          0 Data                        105:36-105:41 ExpBox False
+  586          0 Data                        106:29-106:31 ExpBox False
+  587          0 Data                        106:41-106:41 ExpBox False
+  588          0 Data                        106:36-106:41 ExpBox False
+  589          0 Data                        107:29-107:40 ExpBox False
+  590          0 Data                        106:36-107:40 ExpBox False
+  591          0 Data                        106:29-107:40 ExpBox False
+  592          0 Data                        105:36-107:40 ExpBox False
+  593          0 Data                        105:29-107:40 ExpBox False
+  594          0 Data                        104:36-107:40 ExpBox False
+  595          0 Data                        104:29-107:40 ExpBox True
+  596          0 Data                        108:29-108:48 ExpBox True
+  597          0 Data                        109:29-109:47 ExpBox True
+  598          0 Data                        110:29-110:33 ExpBox False
+  599          0 Data                        110:43-110:46 ExpBox False
+  600          0 Data                        110:38-110:46 ExpBox False
+  601          0 Data                        110:51-110:64 ExpBox False
+  602          0 Data                        110:38-110:64 ExpBox False
+  603          0 Data                        110:29-110:64 ExpBox True
+  604          0 Data                          97:1-110:64 TopLevelBox ["showStkEle"]
+  605          0 Data                          91:17-91:20 TopLevelBox ["showsPrec"]
+  606          0 Data                          91:17-91:20 TopLevelBox ["showList"]
+  607          0 Data                        180:15-180:16 TopLevelBox ["=="]
+  608          0 Data                        180:15-180:16 TopLevelBox ["/="]
+  609          0 Data                        180:18-180:20 TopLevelBox ["compare"]
+  610          0 Data                        180:18-180:20 TopLevelBox ["<"]
+  611          0 Data                        180:18-180:20 TopLevelBox [">="]
+  612          0 Data                        180:18-180:20 TopLevelBox [">"]
+  613          0 Data                        180:18-180:20 TopLevelBox ["<="]
+  614          0 Data                        180:22-180:23 TopLevelBox ["range"]
+  615     746155 Data                        180:22-180:23 TopLevelBox ["unsafeIndex"]
+  616     746155 Data                        180:22-180:23 TopLevelBox ["inRange"]
+  617          1 Data                        180:25-180:31 TopLevelBox ["minBound"]
+  618          1 Data                        180:25-180:31 TopLevelBox ["maxBound"]
+  619          0 Data                        114:47-114:50 TopLevelBox ["showsPrec"]
+  620          0 Data                        114:47-114:50 TopLevelBox ["showList"]
+  621          0 Data                        320:17-320:18 TopLevelBox ["=="]
+  622          0 Data                        320:17-320:18 TopLevelBox ["/="]
+  623          0 Data                        320:20-320:22 TopLevelBox ["compare"]
+  624          0 Data                        320:20-320:22 TopLevelBox ["<"]
+  625          0 Data                        320:20-320:22 TopLevelBox [">="]
+  626          0 Data                        320:20-320:22 TopLevelBox [">"]
+  627          0 Data                        320:20-320:22 TopLevelBox ["<="]
+  628          0 Data                        320:24-320:25 TopLevelBox ["range"]
+  629          0 Data                        320:24-320:25 TopLevelBox ["unsafeIndex"]
+  630          0 Data                        320:24-320:25 TopLevelBox ["inRange"]
+  631          0 Data                        320:27-320:33 TopLevelBox ["minBound"]
+  632          0 Data                        320:27-320:33 TopLevelBox ["maxBound"]
+  633          0 Data                        339:33-339:41 ExpBox False
+  634          0 Data                        339:45-339:46 ExpBox False
+  635          0 Data                        339:32-339:47 ExpBox False
+  636          0 Data                        339:21-339:47 ExpBox False
+  637          0 Data                         339:4-339:47 TopLevelBox ["showsPrec"]
+  638          0 Data                        183:33-183:43 ExpBox False
+  639          0 Data                        183:47-183:48 ExpBox False
+  640          0 Data                        183:32-183:49 ExpBox False
+  641          0 Data                        183:21-183:49 ExpBox False
+  642          0 Data                         183:4-183:49 TopLevelBox ["showsPrec"]
+  643          0 Data                          94:47-94:51 ExpBox False
+  644          0 Data                          94:35-94:52 ExpBox False
+  645          0 Data                          94:24-94:52 ExpBox False
+  646          0 Data                           94:4-94:52 TopLevelBox ["showsPrec"]
+  647          0 Data                          42:37-42:38 ExpBox False
+  648          0 Data                          42:31-42:38 ExpBox True
+  649          0 Data                          43:42-43:43 ExpBox False
+  650          0 Data                          43:31-43:43 ExpBox True
+  651          0 Data                          44:43-44:45 ExpBox False
+  652          0 Data                          44:49-44:50 ExpBox False
+  653          0 Data                          44:42-44:51 ExpBox False
+  654          0 Data                          44:31-44:51 ExpBox True
+  655          0 Data                          45:37-45:40 ExpBox False
+  656          0 Data                          45:31-45:40 ExpBox True
+  657          0 Data                          46:37-46:37 ExpBox False
+  658          0 Data                          46:31-46:37 ExpBox True
+  659          0 Data                          47:37-47:37 ExpBox False
+  660          0 Data                          47:31-47:37 ExpBox True
+  661          0 Data                          48:37-48:37 ExpBox False
+  662          0 Data                          48:31-48:37 ExpBox True
+  663          0 Data                          49:37-49:40 ExpBox False
+  664          0 Data                          49:31-49:40 ExpBox True
+  665          0 Data                          50:43-50:46 ExpBox False
+  666          0 Data                          50:32-50:46 ExpBox False
+  667          0 Data                          51:47-51:47 ExpBox False
+  668          0 Data                          51:60-51:62 ExpBox False
+  669          0 Data                          51:51-51:62 ExpBox False
+  670          0 Data                          51:66-51:66 ExpBox False
+  671          0 Data                          51:51-51:66 ExpBox False
+  672          0 Data                          51:47-51:66 ExpBox False
+  673          0 Data                          51:37-51:67 ExpBox False
+  674          0 Data                          51:69-51:70 ExpBox False
+  675          0 Data                          51:77-51:81 ExpBox False
+  676          0 Data                          51:83-51:86 ExpBox False
+  677          0 Data                          51:72-51:87 ExpBox False
+  678          0 Data                          51:31-51:87 ExpBox False
+  679          0 Data                          52:42-52:44 ExpBox False
+  680          0 Data                          52:31-52:44 ExpBox False
+  681          0 Data                          51:31-52:44 ExpBox False
+  682          0 Data                          50:32-52:44 ExpBox True
+  683          0 Data                          53:42-53:48 ExpBox False
+  684          0 Data                          53:31-53:48 ExpBox True
+  685          0 Data                          54:42-54:45 ExpBox False
+  686          0 Data                          54:31-54:45 ExpBox True
+  687          0 Data                           42:4-54:45 TopLevelBox ["showsPrec"]
+  688          0 Data                          56:32-56:35 ExpBox False
+  689          0 Data                          56:21-56:35 ExpBox False
+  690          0 Data                          57:37-57:37 ExpBox False
+  691          0 Data                          57:50-57:52 ExpBox False
+  692          0 Data                          57:41-57:52 ExpBox False
+  693          0 Data                          57:56-57:56 ExpBox False
+  694          0 Data                          57:41-57:56 ExpBox False
+  695          0 Data                          57:37-57:56 ExpBox False
+  696          0 Data                          57:27-57:57 ExpBox False
+  697          0 Data                          57:59-57:60 ExpBox False
+  698          0 Data                          57:67-57:71 ExpBox False
+  699          0 Data                          57:73-57:76 ExpBox False
+  700          0 Data                          57:62-57:77 ExpBox False
+  701          0 Data                          57:21-57:77 ExpBox False
+  702          0 Data                          58:32-58:34 ExpBox False
+  703          0 Data                          58:21-58:34 ExpBox False
+  704          0 Data                          57:21-58:34 ExpBox False
+  705          0 Data                          56:21-58:34 ExpBox False
+  706          0 Data                           56:4-58:34 TopLevelBox ["showList"]
+    0     180000 Geometry                    311:12-311:12 ExpBox False
+    1     180000 Geometry                    311:16-311:16 ExpBox False
+    2     180000 Geometry                    311:12-311:16 ExpBox False
+    3          0 Geometry                    311:12-311:16 BinBox GuardBinBox True
+    4     180000 Geometry                    311:12-311:16 BinBox GuardBinBox False
+    5          0 Geometry                    311:20-311:20 ExpBox True
+    6     180000 Geometry                    312:12-312:12 ExpBox False
+    7     180000 Geometry                    312:16-312:16 ExpBox False
+    8     180000 Geometry                    312:12-312:16 ExpBox False
+    9       4582 Geometry                    312:12-312:16 BinBox GuardBinBox True
+   10     175418 Geometry                    312:12-312:16 BinBox GuardBinBox False
+   11       4582 Geometry                    312:20-312:20 ExpBox True
+   12     175418 Geometry                    313:12-313:15 ExpBox False
+   13     175418 Geometry                    313:12-313:15 BinBox GuardBinBox True
+   14          0 Geometry                    313:12-313:15 BinBox GuardBinBox False
+   15     175418 Geometry                    313:20-313:20 ExpBox True
+   16     180000 Geometry                     311:1-313:20 TopLevelBox ["clampf"]
+   17          1 Geometry                     299:7-299:12 ExpBox False
+   18          1 Geometry                     299:1-299:12 TopLevelBox ["inf"]
+   19          1 Geometry                    298:11-298:17 ExpBox False
+   20          1 Geometry                     298:1-298:17 TopLevelBox ["epsilon"]
+   21          3 Geometry                    302:13-302:13 ExpBox False
+   22          3 Geometry                    302:17-302:23 ExpBox False
+   23          3 Geometry                    302:13-302:23 ExpBox False
+   24          3 Geometry                    302:13-302:23 BinBox GuardBinBox True
+   25          0 Geometry                    302:13-302:23 BinBox GuardBinBox False
+   26          3 Geometry                    302:28-302:28 ExpBox True
+   27          0 Geometry                    303:13-303:13 ExpBox False
+   28          0 Geometry                    303:18-303:24 ExpBox False
+   29          0 Geometry                    303:17-303:24 ExpBox False
+   30          0 Geometry                    303:13-303:24 ExpBox False
+   31          0 Geometry                    303:13-303:24 BinBox GuardBinBox True
+   32          0 Geometry                    303:13-303:24 BinBox GuardBinBox False
+   33          0 Geometry                    303:28-303:28 ExpBox True
+   34          0 Geometry                    304:13-304:21 ExpBox False
+   35          0 Geometry                    304:13-304:21 BinBox GuardBinBox True
+   36          0 Geometry                    304:13-304:21 BinBox GuardBinBox False
+   37          0 Geometry                    304:28-304:34 ExpBox True
+   38          3 Geometry                     302:1-304:34 TopLevelBox ["nonZero"]
+   39     376778 Geometry                    307:18-307:18 ExpBox False
+   40     376778 Geometry                    307:20-307:20 ExpBox False
+   41     376778 Geometry                    307:17-307:21 ExpBox False
+   42     376778 Geometry                    307:13-307:21 ExpBox False
+   43     376778 Geometry                    307:25-307:31 ExpBox False
+   44     376778 Geometry                    307:13-307:31 ExpBox False
+   45     376778 Geometry                     307:1-307:31 TopLevelBox ["eqEps"]
+   46          1 Geometry                     308:8-308:12 ExpBox False
+   47          1 Geometry                     308:1-308:12 TopLevelBox ["near"]
+   48      32512 Geometry                    290:29-290:29 ExpBox False
+   49      32512 Geometry                    290:38-290:38 ExpBox False
+   50      32512 Geometry                    290:29-290:38 ExpBox False
+   51       5785 Geometry                    290:43-290:43 ExpBox False
+   52       5785 Geometry                    290:52-290:52 ExpBox False
+   53       5785 Geometry                    290:43-290:52 ExpBox False
+   54       5785 Geometry                    290:57-290:57 ExpBox False
+   55       5785 Geometry                    290:66-290:66 ExpBox False
+   56       5785 Geometry                    290:57-290:66 ExpBox False
+   57       5785 Geometry                    290:43-290:66 ExpBox False
+   58      32512 Geometry                    290:29-290:66 ExpBox False
+   59      32512 Geometry                     290:1-290:66 TopLevelBox ["nearC"]
+   60     183672 Geometry                    287:31-287:31 ExpBox False
+   61     183672 Geometry                    287:33-287:33 ExpBox False
+   62     183672 Geometry                    287:30-287:34 ExpBox False
+   63     183672 Geometry                    287:37-287:37 ExpBox False
+   64     183672 Geometry                    287:39-287:39 ExpBox False
+   65     183672 Geometry                    287:36-287:40 ExpBox False
+   66     183672 Geometry                    287:43-287:43 ExpBox False
+   67     183672 Geometry                    287:45-287:45 ExpBox False
+   68     183672 Geometry                    287:42-287:46 ExpBox False
+   69     183672 Geometry                    287:28-287:46 ExpBox False
+   70     183672 Geometry                     287:1-287:46 TopLevelBox ["multSC"]
+   71     112863 Geometry                    284:33-284:33 ExpBox False
+   72     112863 Geometry                    284:35-284:35 ExpBox False
+   73     112863 Geometry                    284:32-284:36 ExpBox False
+   74     112863 Geometry                    284:39-284:39 ExpBox False
+   75     112863 Geometry                    284:41-284:41 ExpBox False
+   76     112863 Geometry                    284:38-284:42 ExpBox False
+   77     112863 Geometry                    284:45-284:45 ExpBox False
+   78     112863 Geometry                    284:47-284:47 ExpBox False
+   79     112863 Geometry                    284:44-284:48 ExpBox False
+   80     112863 Geometry                    284:30-284:48 ExpBox False
+   81     112863 Geometry                     284:1-284:48 TopLevelBox ["multCC"]
+   82          0 Geometry                    278:32-278:32 ExpBox False
+   83          0 Geometry                    278:34-278:34 ExpBox False
+   84          0 Geometry                    278:31-278:35 ExpBox False
+   85          0 Geometry                    278:38-278:38 ExpBox False
+   86          0 Geometry                    278:40-278:40 ExpBox False
+   87          0 Geometry                    278:37-278:41 ExpBox False
+   88          0 Geometry                    278:44-278:44 ExpBox False
+   89          0 Geometry                    278:46-278:46 ExpBox False
+   90          0 Geometry                    278:43-278:47 ExpBox False
+   91          0 Geometry                    278:29-278:47 ExpBox False
+   92          0 Geometry                     278:1-278:47 TopLevelBox ["subCC"]
+   93     151160 Geometry                    275:32-275:32 ExpBox False
+   94     151160 Geometry                    275:34-275:34 ExpBox False
+   95     151160 Geometry                    275:31-275:35 ExpBox False
+   96     151160 Geometry                    275:38-275:38 ExpBox False
+   97     151160 Geometry                    275:40-275:40 ExpBox False
+   98     151160 Geometry                    275:37-275:41 ExpBox False
+   99     151160 Geometry                    275:44-275:44 ExpBox False
+  100     151160 Geometry                    275:46-275:46 ExpBox False
+  101     151160 Geometry                    275:43-275:47 ExpBox False
+  102     151160 Geometry                    275:29-275:47 ExpBox False
+  103     151160 Geometry                     275:1-275:47 TopLevelBox ["addCC"]
+  104          1 Geometry                    272:11-272:11 ExpBox False
+  105          1 Geometry                    272:13-272:13 ExpBox False
+  106          1 Geometry                    272:15-272:15 ExpBox False
+  107          1 Geometry                     272:9-272:15 ExpBox False
+  108          1 Geometry                     272:1-272:15 TopLevelBox ["black"]
+  109          1 Geometry                    281:15-281:19 ExpBox False
+  110          1 Geometry                    281:21-281:25 ExpBox False
+  111          1 Geometry                     281:9-281:25 ExpBox False
+  112          1 Geometry                     281:1-281:25 TopLevelBox ["sumCC"]
+  113          0 Geometry                    270:11-270:11 ExpBox False
+  114          0 Geometry                    270:13-270:13 ExpBox False
+  115          0 Geometry                    270:15-270:15 ExpBox False
+  116          0 Geometry                     270:9-270:15 ExpBox False
+  117          0 Geometry                     270:1-270:15 TopLevelBox ["white"]
+  118         12 Geometry                    239:47-239:49 ExpBox False
+  119         12 Geometry                    239:52-239:54 ExpBox False
+  120         12 Geometry                    239:57-239:59 ExpBox False
+  121         12 Geometry                    239:62-239:64 ExpBox False
+  122         12 Geometry                    239:44-239:65 ExpBox False
+  123         12 Geometry                    240:47-240:49 ExpBox False
+  124         12 Geometry                    240:52-240:54 ExpBox False
+  125         12 Geometry                    240:57-240:59 ExpBox False
+  126         12 Geometry                    240:62-240:64 ExpBox False
+  127         12 Geometry                    240:44-240:65 ExpBox False
+  128         12 Geometry                    241:47-241:49 ExpBox False
+  129         12 Geometry                    241:52-241:54 ExpBox False
+  130         12 Geometry                    241:57-241:59 ExpBox False
+  131         12 Geometry                    241:62-241:64 ExpBox False
+  132         12 Geometry                    241:44-241:65 ExpBox False
+  133         12 Geometry                    242:47-242:49 ExpBox False
+  134         12 Geometry                    242:52-242:54 ExpBox False
+  135         12 Geometry                    242:57-242:59 ExpBox False
+  136         12 Geometry                    242:62-242:64 ExpBox False
+  137         12 Geometry                    242:44-242:65 ExpBox False
+  138         12 Geometry                    239:41-242:66 ExpBox False
+  139         12 Geometry                     236:1-242:66 TopLevelBox ["transposeM"]
+  140     229838 Geometry                    222:25-222:25 ExpBox False
+  141     229838 Geometry                    222:27-222:27 ExpBox False
+  142     229838 Geometry                    222:24-222:28 ExpBox False
+  143     229838 Geometry                    222:31-222:31 ExpBox False
+  144     229838 Geometry                    222:33-222:33 ExpBox False
+  145     229838 Geometry                    222:30-222:34 ExpBox False
+  146     229838 Geometry                    222:37-222:37 ExpBox False
+  147     229838 Geometry                    222:39-222:39 ExpBox False
+  148     229838 Geometry                    222:36-222:40 ExpBox False
+  149     229838 Geometry                    222:22-222:40 ExpBox False
+  150     229838 Geometry                     222:1-222:40 TopLevelBox ["multSV"]
+  151     419283 Geometry                      210:8-210:8 ExpBox False
+  152     419283 Geometry                    210:12-210:12 ExpBox False
+  153     419283 Geometry                     210:8-210:12 ExpBox False
+  154     419283 Geometry                     210:1-210:12 TopLevelBox ["sq"]
+  155          0 Geometry                    214:28-214:28 ExpBox False
+  156          0 Geometry                    214:25-214:28 ExpBox False
+  157          0 Geometry                    214:35-214:35 ExpBox False
+  158          0 Geometry                    214:32-214:35 ExpBox False
+  159          0 Geometry                    214:25-214:35 ExpBox False
+  160          0 Geometry                    214:42-214:42 ExpBox False
+  161          0 Geometry                    214:39-214:42 ExpBox False
+  162          0 Geometry                    214:25-214:42 ExpBox False
+  163          0 Geometry                     214:1-214:42 TopLevelBox ["distFrom0Sq"]
+  164          0 Geometry                    218:33-218:33 ExpBox False
+  165          0 Geometry                    218:20-218:34 ExpBox False
+  166          0 Geometry                    218:15-218:34 ExpBox False
+  167          0 Geometry                     218:1-218:34 TopLevelBox ["distFrom0"]
+  168     139761 Geometry                    200:27-200:27 ExpBox False
+  169     139761 Geometry                    200:24-200:27 ExpBox False
+  170     139761 Geometry                    200:34-200:34 ExpBox False
+  171     139761 Geometry                    200:31-200:34 ExpBox False
+  172     139761 Geometry                    200:24-200:34 ExpBox False
+  173     139761 Geometry                    200:41-200:41 ExpBox False
+  174     139761 Geometry                    200:38-200:41 ExpBox False
+  175     139761 Geometry                    200:23-200:42 ExpBox False
+  176     139761 Geometry                    200:18-200:42 ExpBox False
+  177     139761 Geometry                    200:11-200:42 LocalBox ["normalize","norm"]
+  178     139761 Geometry                    198:16-198:19 ExpBox False
+  179     139761 Geometry                    198:24-198:24 ExpBox False
+  180     139761 Geometry                    198:16-198:24 ExpBox False
+  181     139761 Geometry                    198:16-198:24 BinBox GuardBinBox True
+  182          0 Geometry                    198:16-198:24 BinBox GuardBinBox False
+  183     139761 Geometry                    198:36-198:36 ExpBox False
+  184     139761 Geometry                    198:38-198:41 ExpBox False
+  185     139761 Geometry                    198:35-198:42 ExpBox False
+  186     139761 Geometry                    198:44-198:44 ExpBox False
+  187     139761 Geometry                    198:28-198:44 ExpBox True
+  188          0 Geometry                    199:16-199:24 ExpBox False
+  189          0 Geometry                    199:16-199:24 BinBox GuardBinBox True
+  190          0 Geometry                    199:16-199:24 BinBox GuardBinBox False
+  191          0 Geometry                    199:34-199:51 ExpBox False
+  192          0 Geometry                    199:28-199:51 ExpBox True
+  193     139761 Geometry                     197:1-200:42 TopLevelBox ["normalize"]
+  194          0 Geometry                    192:27-192:27 ExpBox False
+  195          0 Geometry                    192:24-192:27 ExpBox False
+  196          0 Geometry                    192:34-192:34 ExpBox False
+  197          0 Geometry                    192:31-192:34 ExpBox False
+  198          0 Geometry                    192:24-192:34 ExpBox False
+  199          0 Geometry                    192:41-192:41 ExpBox False
+  200          0 Geometry                    192:38-192:41 ExpBox False
+  201          0 Geometry                    192:23-192:42 ExpBox False
+  202          0 Geometry                    192:18-192:42 ExpBox False
+  203          0 Geometry                     192:1-192:42 TopLevelBox ["norm"]
+  204          0 Geometry                    188:10-188:11 ExpBox False
+  205          0 Geometry                    188:15-188:16 ExpBox False
+  206          0 Geometry                     188:9-188:17 ExpBox False
+  207          0 Geometry                    188:20-188:21 ExpBox False
+  208          0 Geometry                    188:25-188:26 ExpBox False
+  209          0 Geometry                    188:19-188:27 ExpBox False
+  210          0 Geometry                    188:30-188:31 ExpBox False
+  211          0 Geometry                    188:35-188:36 ExpBox False
+  212          0 Geometry                    188:29-188:37 ExpBox False
+  213          0 Geometry                     188:7-188:37 ExpBox False
+  214          0 Geometry                     187:1-188:37 TopLevelBox ["subPP"]
+  215          0 Geometry                    206:26-206:27 ExpBox False
+  216          0 Geometry                    206:29-206:30 ExpBox False
+  217          0 Geometry                    206:20-206:30 ExpBox False
+  218          0 Geometry                    204:18-204:18 ExpBox False
+  219          0 Geometry                    204:15-204:18 ExpBox False
+  220          0 Geometry                    204:25-204:25 ExpBox False
+  221          0 Geometry                    204:22-204:25 ExpBox False
+  222          0 Geometry                    204:15-204:25 ExpBox False
+  223          0 Geometry                    204:32-204:32 ExpBox False
+  224          0 Geometry                    204:29-204:32 ExpBox False
+  225          0 Geometry                    204:15-204:32 ExpBox False
+  226          0 Geometry                     204:1-206:30 TopLevelBox ["dist2"]
+  227          0 Geometry                    184:11-184:12 ExpBox False
+  228          0 Geometry                     184:9-184:13 ExpBox False
+  229          0 Geometry                    184:17-184:18 ExpBox False
+  230          0 Geometry                    184:15-184:19 ExpBox False
+  231          0 Geometry                    184:23-184:24 ExpBox False
+  232          0 Geometry                    184:21-184:25 ExpBox False
+  233          0 Geometry                     184:7-184:25 ExpBox False
+  234          0 Geometry                     183:1-184:25 TopLevelBox ["negV"]
+  235      53539 Geometry                    180:10-180:11 ExpBox False
+  236      53539 Geometry                    180:15-180:16 ExpBox False
+  237      53539 Geometry                     180:9-180:17 ExpBox False
+  238      53539 Geometry                    180:20-180:21 ExpBox False
+  239      53539 Geometry                    180:25-180:26 ExpBox False
+  240      53539 Geometry                    180:19-180:27 ExpBox False
+  241      53539 Geometry                    180:30-180:31 ExpBox False
+  242      53539 Geometry                    180:35-180:36 ExpBox False
+  243      53539 Geometry                    180:29-180:37 ExpBox False
+  244      53539 Geometry                     180:7-180:37 ExpBox False
+  245      53539 Geometry                     179:1-180:37 TopLevelBox ["subVV"]
+  246      63350 Geometry                    176:10-176:11 ExpBox False
+  247      63350 Geometry                    176:15-176:16 ExpBox False
+  248      63350 Geometry                     176:9-176:17 ExpBox False
+  249      63350 Geometry                    176:20-176:21 ExpBox False
+  250      63350 Geometry                    176:25-176:26 ExpBox False
+  251      63350 Geometry                    176:19-176:27 ExpBox False
+  252      63350 Geometry                    176:30-176:31 ExpBox False
+  253      63350 Geometry                    176:35-176:36 ExpBox False
+  254      63350 Geometry                    176:29-176:37 ExpBox False
+  255      63350 Geometry                     176:7-176:37 ExpBox False
+  256      63350 Geometry                     175:1-176:37 TopLevelBox ["addPV"]
+  257      34539 Geometry                    293:25-293:25 ExpBox False
+  258      34539 Geometry                    293:36-293:36 ExpBox False
+  259      34539 Geometry                    293:47-293:47 ExpBox False
+  260      34539 Geometry                    293:35-293:48 ExpBox False
+  261      34539 Geometry                    293:25-293:48 ExpBox False
+  262      34539 Geometry                     293:1-293:48 TopLevelBox ["offsetToPoint"]
+  263          0 Geometry                    172:10-172:11 ExpBox False
+  264          0 Geometry                    172:15-172:16 ExpBox False
+  265          0 Geometry                     172:9-172:17 ExpBox False
+  266          0 Geometry                    172:20-172:21 ExpBox False
+  267          0 Geometry                    172:25-172:26 ExpBox False
+  268          0 Geometry                    172:19-172:27 ExpBox False
+  269          0 Geometry                    172:30-172:31 ExpBox False
+  270          0 Geometry                    172:35-172:36 ExpBox False
+  271          0 Geometry                    172:29-172:37 ExpBox False
+  272          0 Geometry                     172:7-172:37 ExpBox False
+  273          0 Geometry                     171:1-172:37 TopLevelBox ["addVV"]
+  274    1323260 Geometry                    168:40-168:41 ExpBox False
+  275    1323260 Geometry                    168:45-168:46 ExpBox False
+  276    1323260 Geometry                    168:40-168:46 ExpBox False
+  277    1323260 Geometry                    168:50-168:51 ExpBox False
+  278    1323260 Geometry                    168:55-168:56 ExpBox False
+  279    1323260 Geometry                    168:50-168:56 ExpBox False
+  280    1323260 Geometry                    168:40-168:56 ExpBox False
+  281    1323260 Geometry                    168:60-168:61 ExpBox False
+  282    1323260 Geometry                    168:65-168:66 ExpBox False
+  283    1323260 Geometry                    168:60-168:66 ExpBox False
+  284    1323260 Geometry                    168:40-168:66 ExpBox False
+  285    1323260 Geometry                    168:70-168:71 ExpBox False
+  286    1323260 Geometry                    168:75-168:76 ExpBox False
+  287    1323260 Geometry                    168:70-168:76 ExpBox False
+  288    1323260 Geometry                    168:40-168:76 ExpBox False
+  289    1323260 Geometry                     168:1-168:76 TopLevelBox ["dot4"]
+  290     330815 Geometry                    260:18-260:18 ExpBox False
+  291     330815 Geometry                    260:20-260:21 ExpBox False
+  292     330815 Geometry                    260:12-260:22 ExpBox False
+  293     330815 Geometry                    261:18-261:18 ExpBox False
+  294     330815 Geometry                    261:20-261:21 ExpBox False
+  295     330815 Geometry                    261:12-261:22 ExpBox False
+  296     330815 Geometry                    262:18-262:18 ExpBox False
+  297     330815 Geometry                    262:20-262:21 ExpBox False
+  298     330815 Geometry                    262:12-262:22 ExpBox False
+  299     330815 Geometry                    263:18-263:18 ExpBox False
+  300     330815 Geometry                    263:20-263:21 ExpBox False
+  301     330815 Geometry                    263:12-263:22 ExpBox False
+  302     330815 Geometry                    260:10-263:22 ExpBox False
+  303     330815 Geometry                     259:1-263:22 TopLevelBox ["multMQ"]
+  304         12 Geometry                    232:23-232:24 ExpBox False
+  305         12 Geometry                    232:12-232:24 ExpBox False
+  306         12 Geometry                     232:6-232:24 LocalBox ["multMM","m2'"]
+  307         12 Geometry                    227:18-227:20 ExpBox False
+  308         12 Geometry                    227:22-227:23 ExpBox False
+  309         12 Geometry                    227:10-227:24 ExpBox False
+  310         12 Geometry                    228:18-228:20 ExpBox False
+  311         12 Geometry                    228:22-228:23 ExpBox False
+  312         12 Geometry                    228:10-228:24 ExpBox False
+  313         12 Geometry                    229:18-229:20 ExpBox False
+  314         12 Geometry                    229:22-229:23 ExpBox False
+  315         12 Geometry                    229:10-229:24 ExpBox False
+  316         12 Geometry                    230:18-230:20 ExpBox False
+  317         12 Geometry                    230:22-230:23 ExpBox False
+  318         12 Geometry                    230:10-230:24 ExpBox False
+  319         12 Geometry                     227:8-230:24 ExpBox False
+  320         12 Geometry                     226:1-232:24 TopLevelBox ["multMM"]
+  321      32512 Geometry                      157:8-157:9 ExpBox False
+  322      32512 Geometry                    157:13-157:14 ExpBox False
+  323      32512 Geometry                     157:8-157:14 ExpBox False
+  324      32512 Geometry                    157:18-157:19 ExpBox False
+  325      32512 Geometry                    157:23-157:24 ExpBox False
+  326      32512 Geometry                    157:18-157:24 ExpBox False
+  327      32512 Geometry                     157:7-157:25 ExpBox False
+  328      32512 Geometry                    157:28-157:29 ExpBox False
+  329      32512 Geometry                    157:33-157:34 ExpBox False
+  330      32512 Geometry                    157:28-157:34 ExpBox False
+  331      32512 Geometry                    157:38-157:39 ExpBox False
+  332      32512 Geometry                    157:43-157:44 ExpBox False
+  333      32512 Geometry                    157:38-157:44 ExpBox False
+  334      32512 Geometry                    157:27-157:45 ExpBox False
+  335      32512 Geometry                    157:48-157:49 ExpBox False
+  336      32512 Geometry                    157:53-157:54 ExpBox False
+  337      32512 Geometry                    157:48-157:54 ExpBox False
+  338      32512 Geometry                    157:58-157:59 ExpBox False
+  339      32512 Geometry                    157:63-157:64 ExpBox False
+  340      32512 Geometry                    157:58-157:64 ExpBox False
+  341      32512 Geometry                    157:47-157:65 ExpBox False
+  342      32512 Geometry                     157:5-157:65 ExpBox False
+  343      32512 Geometry                     156:1-157:65 TopLevelBox ["cross"]
+  344     112863 Geometry                    153:33-153:34 ExpBox False
+  345     112863 Geometry                    153:38-153:39 ExpBox False
+  346     112863 Geometry                    153:33-153:39 ExpBox False
+  347     112863 Geometry                    153:43-153:44 ExpBox False
+  348     112863 Geometry                    153:48-153:49 ExpBox False
+  349     112863 Geometry                    153:43-153:49 ExpBox False
+  350     112863 Geometry                    153:33-153:49 ExpBox False
+  351     112863 Geometry                    153:53-153:54 ExpBox False
+  352     112863 Geometry                    153:58-153:59 ExpBox False
+  353     112863 Geometry                    153:53-153:59 ExpBox False
+  354     112863 Geometry                    153:33-153:59 ExpBox False
+  355     112863 Geometry                     153:1-153:59 TopLevelBox ["dot"]
+  356     197872 Geometry                    149:32-149:32 ExpBox False
+  357     197872 Geometry                    149:34-149:34 ExpBox False
+  358     197872 Geometry                    149:36-149:36 ExpBox False
+  359     197872 Geometry                    149:30-149:36 ExpBox False
+  360     197872 Geometry                     149:1-149:36 TopLevelBox ["quad_to_vector"]
+  361     132895 Geometry                    145:31-145:31 ExpBox False
+  362     132895 Geometry                    145:33-145:33 ExpBox False
+  363     132895 Geometry                    145:35-145:35 ExpBox False
+  364     132895 Geometry                    145:29-145:35 ExpBox False
+  365     132895 Geometry                     145:1-145:35 TopLevelBox ["quad_to_point"]
+  366     132895 Geometry                    141:29-141:29 ExpBox False
+  367     132895 Geometry                    141:31-141:31 ExpBox False
+  368     132895 Geometry                    141:33-141:33 ExpBox False
+  369     132895 Geometry                    141:35-141:35 ExpBox False
+  370     132895 Geometry                    141:27-141:35 ExpBox False
+  371     132895 Geometry                     141:1-141:35 TopLevelBox ["point_to_quad"]
+  372     132895 Geometry                    253:36-253:36 ExpBox False
+  373     132895 Geometry                    253:53-253:53 ExpBox False
+  374     132895 Geometry                    253:38-253:54 ExpBox False
+  375     132895 Geometry                    253:28-253:55 ExpBox False
+  376     132895 Geometry                    253:14-253:55 ExpBox False
+  377     132895 Geometry                     253:1-253:55 TopLevelBox ["multMP"]
+  378     197872 Geometry                    137:30-137:30 ExpBox False
+  379     197872 Geometry                    137:32-137:32 ExpBox False
+  380     197872 Geometry                    137:34-137:34 ExpBox False
+  381     197872 Geometry                    137:36-137:36 ExpBox False
+  382     197872 Geometry                    137:28-137:36 ExpBox False
+  383     197872 Geometry                     137:1-137:36 TopLevelBox ["vector_to_quad"]
+  384     197872 Geometry                    249:37-249:37 ExpBox False
+  385     197872 Geometry                    249:55-249:55 ExpBox False
+  386     197872 Geometry                    249:39-249:56 ExpBox False
+  387     197872 Geometry                    249:29-249:57 ExpBox False
+  388     197872 Geometry                    249:14-249:57 ExpBox False
+  389     197872 Geometry                     249:1-249:57 TopLevelBox ["multMV"]
+  390     132847 Geometry                    267:27-267:27 ExpBox False
+  391     132847 Geometry                    267:29-267:29 ExpBox False
+  392     132847 Geometry                    267:20-267:29 ExpBox False
+  393     132847 Geometry                    267:39-267:39 ExpBox False
+  394     132847 Geometry                    267:41-267:41 ExpBox False
+  395     132847 Geometry                    267:32-267:41 ExpBox False
+  396     132847 Geometry                    267:19-267:42 ExpBox False
+  397     132847 Geometry                     267:1-267:42 TopLevelBox ["multMR"]
+  398          0 Geometry                    133:32-133:32 ExpBox False
+  399          0 Geometry                    133:34-133:34 ExpBox False
+  400          0 Geometry                    133:36-133:36 ExpBox False
+  401          0 Geometry                    133:30-133:36 ExpBox False
+  402          0 Geometry                     133:1-133:36 TopLevelBox ["vector_to_point"]
+  403          0 Geometry                    130:31-130:31 ExpBox False
+  404          0 Geometry                    130:33-130:33 ExpBox False
+  405          0 Geometry                    130:35-130:35 ExpBox False
+  406          0 Geometry                    130:29-130:35 ExpBox False
+  407          0 Geometry                     130:1-130:35 TopLevelBox ["point_to_vector"]
+  408          0 Geometry                    127:29-127:29 ExpBox False
+  409          0 Geometry                    127:38-127:38 ExpBox False
+  410          0 Geometry                    127:29-127:38 ExpBox False
+  411          0 Geometry                    127:43-127:43 ExpBox False
+  412          0 Geometry                    127:52-127:52 ExpBox False
+  413          0 Geometry                    127:43-127:52 ExpBox False
+  414          0 Geometry                    127:57-127:57 ExpBox False
+  415          0 Geometry                    127:66-127:66 ExpBox False
+  416          0 Geometry                    127:57-127:66 ExpBox False
+  417          0 Geometry                    127:43-127:66 ExpBox False
+  418          0 Geometry                    127:29-127:66 ExpBox False
+  419          0 Geometry                     127:1-127:66 TopLevelBox ["nearV"]
+  420      60006 Geometry                    124:18-124:18 ExpBox False
+  421      60006 Geometry                    124:20-124:20 ExpBox False
+  422      60006 Geometry                    124:22-124:22 ExpBox False
+  423      60006 Geometry                    124:16-124:22 ExpBox False
+  424      60006 Geometry                     124:1-124:22 TopLevelBox ["vector"]
+  425          0 Geometry                    163:14-163:14 ExpBox False
+  426          0 Geometry                    163:19-163:19 ExpBox False
+  427          0 Geometry                    163:14-163:19 ExpBox False
+  428          0 Geometry                    163:14-163:19 BinBox GuardBinBox True
+  429          0 Geometry                    163:14-163:19 BinBox GuardBinBox False
+  430          0 Geometry                    163:44-163:44 ExpBox False
+  431          0 Geometry                    163:46-163:46 ExpBox False
+  432          0 Geometry                    163:50-163:50 ExpBox False
+  433          0 Geometry                    163:48-163:51 ExpBox False
+  434          0 Geometry                    163:36-163:52 ExpBox False
+  435          0 Geometry                    163:26-163:52 ExpBox True
+  436          0 Geometry                    164:14-164:22 ExpBox False
+  437          0 Geometry                    164:14-164:22 BinBox GuardBinBox True
+  438          0 Geometry                    164:14-164:22 BinBox GuardBinBox False
+  439          0 Geometry                    164:46-164:46 ExpBox False
+  440          0 Geometry                    164:44-164:47 ExpBox False
+  441          0 Geometry                    164:49-164:49 ExpBox False
+  442          0 Geometry                    164:51-164:51 ExpBox False
+  443          0 Geometry                    164:36-164:52 ExpBox False
+  444          0 Geometry                    164:26-164:52 ExpBox True
+  445          0 Geometry                     163:9-164:52 LocalBox ["tangents","v1"]
+  446          0 Geometry                      162:6-162:7 ExpBox False
+  447          0 Geometry                    162:10-162:10 ExpBox False
+  448          0 Geometry                    162:20-162:21 ExpBox False
+  449          0 Geometry                    162:10-162:21 ExpBox False
+  450          0 Geometry                     162:5-162:22 ExpBox False
+  451          0 Geometry                     161:1-164:52 TopLevelBox ["tangents"]
+  452      26833 Geometry                    121:17-121:17 ExpBox False
+  453      26833 Geometry                    121:19-121:19 ExpBox False
+  454      26833 Geometry                    121:21-121:21 ExpBox False
+  455      26833 Geometry                    121:15-121:21 ExpBox False
+  456      26833 Geometry                     121:1-121:21 TopLevelBox ["point"]
+  457     159631 Geometry                    118:24-118:24 ExpBox False
+  458     159631 Geometry                     118:1-118:24 TopLevelBox ["zComponent"]
+  459     248385 Geometry                    116:24-116:24 ExpBox False
+  460     248385 Geometry                     116:1-116:24 TopLevelBox ["yComponent"]
+  461     159631 Geometry                    114:24-114:24 ExpBox False
+  462     159631 Geometry                     114:1-114:24 TopLevelBox ["xComponent"]
+  463     188590 Geometry                    111:20-111:20 ExpBox False
+  464     188590 Geometry                     111:1-111:20 TopLevelBox ["zCoord"]
+  465     253212 Geometry                    109:20-109:20 ExpBox False
+  466     253212 Geometry                     109:1-109:20 TopLevelBox ["yCoord"]
+  467     187913 Geometry                    107:20-107:20 ExpBox False
+  468     187913 Geometry                     107:1-107:20 TopLevelBox ["xCoord"]
+  469      60000 Geometry                    104:22-104:22 ExpBox False
+  470      60000 Geometry                    104:24-104:24 ExpBox False
+  471      60000 Geometry                    104:26-104:26 ExpBox False
+  472      60000 Geometry                    104:21-104:27 ExpBox False
+  473      60000 Geometry                     104:1-104:27 TopLevelBox ["uncolor"]
+  474      32514 Geometry                    102:17-102:17 ExpBox False
+  475      32514 Geometry                    102:19-102:19 ExpBox False
+  476      32514 Geometry                    102:21-102:21 ExpBox False
+  477      32514 Geometry                    102:15-102:21 ExpBox False
+  478      32514 Geometry                     102:1-102:21 TopLevelBox ["color"]
+  479          0 Geometry                    100:16-100:16 ExpBox False
+  480          0 Geometry                    100:19-100:19 ExpBox False
+  481          0 Geometry                    100:22-100:22 ExpBox False
+  482          0 Geometry                    100:15-100:23 ExpBox False
+  483          0 Geometry                     100:1-100:23 TopLevelBox ["coord"]
+  484         13 Geometry                      95:10-95:12 ExpBox False
+  485         13 Geometry                      95:14-95:16 ExpBox False
+  486         13 Geometry                      95:18-95:20 ExpBox False
+  487         13 Geometry                      95:22-95:24 ExpBox False
+  488         13 Geometry                       95:7-95:25 ExpBox False
+  489         13 Geometry                      96:10-96:12 ExpBox False
+  490         13 Geometry                      96:14-96:16 ExpBox False
+  491         13 Geometry                      96:18-96:20 ExpBox False
+  492         13 Geometry                      96:22-96:24 ExpBox False
+  493         13 Geometry                       96:7-96:25 ExpBox False
+  494         13 Geometry                      97:10-97:12 ExpBox False
+  495         13 Geometry                      97:14-97:16 ExpBox False
+  496         13 Geometry                      97:18-97:20 ExpBox False
+  497         13 Geometry                      97:22-97:24 ExpBox False
+  498         13 Geometry                       97:7-97:25 ExpBox False
+  499         13 Geometry                      98:10-98:12 ExpBox False
+  500         13 Geometry                      98:14-98:16 ExpBox False
+  501         13 Geometry                      98:18-98:20 ExpBox False
+  502         13 Geometry                      98:22-98:24 ExpBox False
+  503         13 Geometry                       98:7-98:25 ExpBox False
+  504         13 Geometry                       95:5-98:25 ExpBox False
+  505         13 Geometry                       91:1-98:25 TopLevelBox ["matrix"]
+  506          0 Geometry                      70:15-70:18 TopLevelBox ["showsPrec"]
+  507          0 Geometry                      70:15-70:18 TopLevelBox ["showList"]
+  508          0 Geometry                      72:15-72:18 TopLevelBox ["showsPrec"]
+  509          0 Geometry                      72:15-72:18 TopLevelBox ["showList"]
+  510          0 Geometry                      72:21-72:22 TopLevelBox ["=="]
+  511          0 Geometry                      72:21-72:22 TopLevelBox ["/="]
+  512          0 Geometry                      77:15-77:18 TopLevelBox ["showsPrec"]
+  513          0 Geometry                      77:15-77:18 TopLevelBox ["showList"]
+  514          0 Geometry                      77:21-77:22 TopLevelBox ["=="]
+  515          0 Geometry                      77:21-77:22 TopLevelBox ["/="]
+  516          0 Geometry                      80:15-80:18 TopLevelBox ["showsPrec"]
+  517          0 Geometry                      80:15-80:18 TopLevelBox ["showList"]
+  518          0 Geometry                      83:15-83:18 TopLevelBox ["showsPrec"]
+  519          0 Geometry                      83:15-83:18 TopLevelBox ["showList"]
+  520          0 Geometry                      74:15-74:18 TopLevelBox ["showsPrec"]
+  521          0 Geometry                      74:15-74:18 TopLevelBox ["showList"]
+    0          0 Surface                     115:21-115:21 ExpBox False
+    1          0 Surface                     115:25-115:25 ExpBox False
+    2          0 Surface                     115:21-115:25 ExpBox False
+    3          0 Surface                     115:21-115:25 BinBox CondBinBox True
+    4          0 Surface                     115:21-115:25 BinBox CondBinBox False
+    5          0 Surface                     115:32-115:32 ExpBox True
+    6          0 Surface                     115:39-115:39 ExpBox False
+    7          0 Surface                     115:43-115:43 ExpBox False
+    8          0 Surface                     115:47-115:48 ExpBox False
+    9          0 Surface                     115:43-115:48 ExpBox False
+   10          0 Surface                     115:39-115:48 ExpBox True
+   11          0 Surface                     115:18-115:48 ExpBox False
+   12          0 Surface                      115:1-115:48 TopLevelBox ["adjustRadian"]
+   13      28863 Surface                     110:20-110:21 ExpBox False
+   14      28863 Surface                     110:13-110:21 ExpBox False
+   15      28863 Surface                      110:9-110:21 LocalBox ["planarUV","z"]
+   16       4731 Surface                     109:20-109:21 ExpBox False
+   17       4731 Surface                     109:13-109:21 ExpBox False
+   18       4731 Surface                      109:9-109:21 LocalBox ["planarUV","y"]
+   19      31430 Surface                     108:20-108:21 ExpBox False
+   20      31430 Surface                     108:13-108:21 ExpBox False
+   21      31430 Surface                      108:9-108:21 LocalBox ["planarUV","x"]
+   22      32512 Surface                       94:10-94:13 ExpBox False
+   23          0 Surface                       95:24-95:24 ExpBox False
+   24      26784 Surface                       95:27-95:27 ExpBox False
+   25      26784 Surface                       95:30-95:30 ExpBox False
+   26      26784 Surface                       95:23-95:31 ExpBox True
+   27          0 Surface                       97:24-97:24 ExpBox False
+   28       3649 Surface                       97:27-97:27 ExpBox False
+   29       3649 Surface                       97:30-97:30 ExpBox False
+   30       3649 Surface                       97:23-97:31 ExpBox True
+   31          0 Surface                       98:24-98:24 ExpBox False
+   32          0 Surface                       98:27-98:27 ExpBox False
+   33          0 Surface                       98:30-98:30 ExpBox False
+   34          0 Surface                       98:23-98:31 ExpBox True
+   35          0 Surface                       99:24-99:24 ExpBox False
+   36       1082 Surface                       99:27-99:27 ExpBox False
+   37       1082 Surface                       99:30-99:30 ExpBox False
+   38       1082 Surface                       99:23-99:31 ExpBox True
+   39          0 Surface                     100:24-100:24 ExpBox False
+   40          0 Surface                     100:27-100:27 ExpBox False
+   41          0 Surface                     100:30-100:30 ExpBox False
+   42          0 Surface                     100:23-100:31 ExpBox True
+   43          0 Surface                     101:24-101:24 ExpBox False
+   44        945 Surface                     101:27-101:27 ExpBox False
+   45        945 Surface                     101:30-101:30 ExpBox False
+   46        945 Surface                     101:23-101:31 ExpBox True
+   47          0 Surface                     102:24-102:24 ExpBox False
+   48         52 Surface                     102:27-102:27 ExpBox False
+   49         52 Surface                     102:30-102:30 ExpBox False
+   50         52 Surface                     102:23-102:31 ExpBox True
+   51          0 Surface                     104:24-104:24 ExpBox False
+   52          0 Surface                     104:28-104:28 ExpBox False
+   53          0 Surface                     104:32-104:32 ExpBox False
+   54          0 Surface                     104:27-104:33 ExpBox False
+   55          0 Surface                     104:37-104:37 ExpBox False
+   56          0 Surface                     104:27-104:37 ExpBox False
+   57          0 Surface                     104:41-104:41 ExpBox False
+   58          0 Surface                     104:45-104:45 ExpBox False
+   59          0 Surface                     104:40-104:46 ExpBox False
+   60          0 Surface                     104:50-104:50 ExpBox False
+   61          0 Surface                     104:40-104:50 ExpBox False
+   62          0 Surface                     104:23-104:51 ExpBox True
+   63          0 Surface                     105:24-105:24 ExpBox False
+   64          0 Surface                     105:28-105:28 ExpBox False
+   65          0 Surface                     105:32-105:32 ExpBox False
+   66          0 Surface                     105:27-105:33 ExpBox False
+   67          0 Surface                     105:37-105:37 ExpBox False
+   68          0 Surface                     105:27-105:37 ExpBox False
+   69          0 Surface                     105:41-105:41 ExpBox False
+   70          0 Surface                     105:45-105:45 ExpBox False
+   71          0 Surface                     105:40-105:46 ExpBox False
+   72          0 Surface                     105:50-105:50 ExpBox False
+   73          0 Surface                     105:40-105:50 ExpBox False
+   74          0 Surface                     105:23-105:51 ExpBox True
+   75          0 Surface                     107:24-107:24 ExpBox False
+   76          0 Surface                     107:28-107:28 ExpBox False
+   77          0 Surface                     107:32-107:32 ExpBox False
+   78          0 Surface                     107:27-107:33 ExpBox False
+   79          0 Surface                     107:37-107:37 ExpBox False
+   80          0 Surface                     107:27-107:37 ExpBox False
+   81          0 Surface                     107:41-107:41 ExpBox False
+   82          0 Surface                     107:45-107:45 ExpBox False
+   83          0 Surface                     107:40-107:46 ExpBox False
+   84          0 Surface                     107:50-107:50 ExpBox False
+   85          0 Surface                     107:40-107:50 ExpBox False
+   86          0 Surface                     107:23-107:51 ExpBox True
+   87      32512 Surface                       94:5-107:51 ExpBox False
+   88      32512 Surface                       93:1-110:21 TopLevelBox ["planarUV"]
+   89          0 Surface                       45:36-45:36 ExpBox False
+   90          0 Surface                       45:26-45:36 ExpBox True
+   91      32512 Surface                       46:26-46:26 ExpBox True
+   92      32512 Surface                        45:1-46:26 TopLevelBox ["evalSurface"]
+   93      32512 Surface                       56:31-56:31 ExpBox False
+   94      32512 Surface                       56:33-56:34 ExpBox False
+   95      32512 Surface                       56:22-56:34 ExpBox False
+   96      32512 Surface                       55:16-55:24 ExpBox False
+   97      32512 Surface                       55:34-55:35 ExpBox False
+   98      32512 Surface                       55:37-55:38 ExpBox False
+   99      32512 Surface                       55:28-55:38 ExpBox False
+  100      32512 Surface                       55:16-55:38 ExpBox False
+  101      32512 Surface                        55:9-55:38 LocalBox ["surface","norm"]
+  102      32512 Surface                         54:6-54:9 ExpBox False
+  103      32512 Surface                       54:24-54:25 ExpBox False
+  104          0 Surface                       54:27-54:28 ExpBox False
+  105      32512 Surface                       54:30-54:30 ExpBox False
+  106      32512 Surface                       54:32-54:32 ExpBox False
+  107      32512 Surface                       54:12-54:32 ExpBox False
+  108      32512 Surface                        54:5-54:33 ExpBox True
+  109          0 Surface                       69:16-69:24 ExpBox False
+  110          0 Surface                       69:34-69:35 ExpBox False
+  111          0 Surface                       69:37-69:38 ExpBox False
+  112          0 Surface                       69:28-69:38 ExpBox False
+  113          0 Surface                       69:16-69:38 ExpBox False
+  114          0 Surface                        69:9-69:38 LocalBox ["surface","norm"]
+  115          0 Surface                       62:20-62:21 ExpBox False
+  116          0 Surface                       62:13-62:21 ExpBox False
+  117          0 Surface                        62:9-62:21 LocalBox ["surface","z"]
+  118          0 Surface                       61:20-61:21 ExpBox False
+  119          0 Surface                       61:13-61:21 ExpBox False
+  120          0 Surface                        61:9-61:21 LocalBox ["surface","y"]
+  121          0 Surface                       63:19-63:19 ExpBox False
+  122          0 Surface                       63:26-63:26 ExpBox False
+  123          0 Surface                       63:23-63:26 ExpBox False
+  124          0 Surface                       63:18-63:27 ExpBox False
+  125          0 Surface                       63:13-63:27 ExpBox False
+  126          0 Surface                        63:9-63:27 LocalBox ["surface","k"]
+  127          0 Surface                       68:28-68:28 ExpBox False
+  128          0 Surface                       68:32-68:32 ExpBox False
+  129          0 Surface                       68:27-68:33 ExpBox False
+  130          0 Surface                       68:37-68:37 ExpBox False
+  131          0 Surface                       68:26-68:38 ExpBox False
+  132          0 Surface                       68:19-68:38 ExpBox False
+  133          0 Surface                        68:9-68:38 LocalBox ["surface","v"]
+  134          0 Surface                       60:20-60:21 ExpBox False
+  135          0 Surface                       60:13-60:21 ExpBox False
+  136          0 Surface                        60:9-60:21 LocalBox ["surface","x"]
+  137          0 Surface                       64:38-64:38 ExpBox False
+  138          0 Surface                       64:42-64:42 ExpBox False
+  139          0 Surface                       64:37-64:43 ExpBox False
+  140          0 Surface                       64:46-64:46 ExpBox False
+  141          0 Surface                       64:50-64:50 ExpBox False
+  142          0 Surface                       64:45-64:51 ExpBox False
+  143          0 Surface                       64:30-64:52 ExpBox False
+  144          0 Surface                       64:17-64:52 ExpBox False
+  145          0 Surface                        64:9-64:52 LocalBox ["surface","theta"]
+  146          0 Surface                       67:13-67:15 ExpBox False
+  147          0 Surface                       67:27-67:31 ExpBox False
+  148          0 Surface                       67:36-67:36 ExpBox False
+  149          0 Surface                       67:40-67:41 ExpBox False
+  150          0 Surface                       67:35-67:42 ExpBox False
+  151          0 Surface                       67:26-67:43 ExpBox False
+  152          0 Surface                       67:19-67:43 ExpBox False
+  153          0 Surface                       67:13-67:43 ExpBox False
+  154          0 Surface                        67:9-67:43 LocalBox ["surface","u"]
+  155          0 Surface                         59:6-59:9 ExpBox False
+  156          0 Surface                       59:24-59:25 ExpBox False
+  157          0 Surface                       59:27-59:27 ExpBox False
+  158          0 Surface                       59:29-59:29 ExpBox False
+  159          0 Surface                       59:31-59:31 ExpBox False
+  160          0 Surface                       59:12-59:31 ExpBox False
+  161          0 Surface                        59:5-59:32 ExpBox True
+  162          0 Surface                       80:16-80:24 ExpBox False
+  163          0 Surface                       80:34-80:35 ExpBox False
+  164          0 Surface                       80:37-80:38 ExpBox False
+  165          0 Surface                       80:28-80:38 ExpBox False
+  166          0 Surface                       80:16-80:38 ExpBox False
+  167          0 Surface                        80:9-80:38 LocalBox ["surface","norm"]
+  168          0 Surface                       77:20-77:21 ExpBox False
+  169          0 Surface                       77:13-77:21 ExpBox False
+  170          0 Surface                        77:9-77:21 LocalBox ["surface","z"]
+  171          0 Surface                       76:20-76:21 ExpBox False
+  172          0 Surface                       76:13-76:21 ExpBox False
+  173          0 Surface                        76:9-76:21 LocalBox ["surface","y"]
+  174          0 Surface                       79:13-79:13 ExpBox False
+  175          0 Surface                        79:9-79:13 LocalBox ["surface","v"]
+  176          0 Surface                       75:20-75:21 ExpBox False
+  177          0 Surface                       75:13-75:21 ExpBox False
+  178          0 Surface                        75:9-75:21 LocalBox ["surface","x"]
+  179          0 Surface                       78:13-78:18 ExpBox False
+  180          0 Surface                       78:42-78:42 ExpBox False
+  181          0 Surface                       78:44-78:44 ExpBox False
+  182          0 Surface                       78:35-78:45 ExpBox False
+  183          0 Surface                       78:22-78:45 ExpBox False
+  184          0 Surface                       78:50-78:50 ExpBox False
+  185          0 Surface                       78:54-78:55 ExpBox False
+  186          0 Surface                       78:49-78:56 ExpBox False
+  187          0 Surface                       78:22-78:56 ExpBox False
+  188          0 Surface                       78:13-78:56 ExpBox False
+  189          0 Surface                        78:9-78:56 LocalBox ["surface","u"]
+  190          0 Surface                         74:6-74:9 ExpBox False
+  191          0 Surface                       74:24-74:25 ExpBox False
+  192          0 Surface                       74:27-74:27 ExpBox False
+  193          0 Surface                       74:29-74:29 ExpBox False
+  194          0 Surface                       74:31-74:31 ExpBox False
+  195          0 Surface                       74:12-74:31 ExpBox False
+  196          0 Surface                        74:5-74:32 ExpBox True
+  197          0 Surface                       91:16-91:24 ExpBox False
+  198          0 Surface                       91:34-91:35 ExpBox False
+  199          0 Surface                       91:37-91:38 ExpBox False
+  200          0 Surface                       91:28-91:38 ExpBox False
+  201          0 Surface                       91:16-91:38 ExpBox False
+  202          0 Surface                        91:9-91:38 LocalBox ["surface","norm"]
+  203          0 Surface                       88:20-88:21 ExpBox False
+  204          0 Surface                       88:13-88:21 ExpBox False
+  205          0 Surface                        88:9-88:21 LocalBox ["surface","z"]
+  206          0 Surface                       87:20-87:21 ExpBox False
+  207          0 Surface                       87:13-87:21 ExpBox False
+  208          0 Surface                        87:9-87:21 LocalBox ["surface","y"]
+  209          0 Surface                       90:13-90:13 ExpBox False
+  210          0 Surface                        90:9-90:13 LocalBox ["surface","v"]
+  211          0 Surface                       86:20-86:21 ExpBox False
+  212          0 Surface                       86:13-86:21 ExpBox False
+  213          0 Surface                        86:9-86:21 LocalBox ["surface","x"]
+  214          0 Surface                       89:13-89:18 ExpBox False
+  215          0 Surface                       89:43-89:43 ExpBox False
+  216          0 Surface                       89:47-89:47 ExpBox False
+  217          0 Surface                       89:42-89:48 ExpBox False
+  218          0 Surface                       89:51-89:51 ExpBox False
+  219          0 Surface                       89:55-89:55 ExpBox False
+  220          0 Surface                       89:50-89:56 ExpBox False
+  221          0 Surface                       89:35-89:57 ExpBox False
+  222          0 Surface                       89:22-89:57 ExpBox False
+  223          0 Surface                       89:62-89:62 ExpBox False
+  224          0 Surface                       89:66-89:67 ExpBox False
+  225          0 Surface                       89:61-89:68 ExpBox False
+  226          0 Surface                       89:22-89:68 ExpBox False
+  227          0 Surface                       89:13-89:68 ExpBox False
+  228          0 Surface                        89:9-89:68 LocalBox ["surface","u"]
+  229          0 Surface                         85:6-85:9 ExpBox False
+  230          0 Surface                       85:24-85:25 ExpBox False
+  231          0 Surface                       85:27-85:27 ExpBox False
+  232          0 Surface                       85:29-85:29 ExpBox False
+  233          0 Surface                       85:31-85:31 ExpBox False
+  234          0 Surface                       85:12-85:31 ExpBox False
+  235          0 Surface                        85:5-85:32 ExpBox True
+  236      32512 Surface                        53:1-91:38 TopLevelBox ["surface"]
+  237          0 Surface                       37:28-37:28 ExpBox False
+  238          0 Surface                       37:31-37:31 ExpBox False
+  239          0 Surface                       37:34-37:34 ExpBox False
+  240          0 Surface                       37:37-37:37 ExpBox False
+  241          0 Surface                       37:27-37:38 ExpBox False
+  242          0 Surface                        37:1-37:38 TopLevelBox ["chgColor"]
+  243          0 Surface                       34:10-34:14 ExpBox False
+  244          0 Surface                       34:17-34:19 ExpBox False
+  245          0 Surface                       34:22-34:24 ExpBox False
+  246          0 Surface                       34:27-34:29 ExpBox False
+  247          0 Surface                        34:9-34:30 ExpBox False
+  248          0 Surface                        34:1-34:30 TopLevelBox ["shiny"]
+  249          0 Surface                       33:10-33:14 ExpBox False
+  250          0 Surface                       33:17-33:19 ExpBox False
+  251          0 Surface                       33:22-33:24 ExpBox False
+  252          0 Surface                       33:27-33:29 ExpBox False
+  253          0 Surface                        33:9-33:30 ExpBox False
+  254          0 Surface                        33:1-33:30 TopLevelBox ["matte"]
+  255      32512 Surface                       31:17-31:17 ExpBox False
+  256      32512 Surface                       31:20-31:20 ExpBox False
+  257      32512 Surface                       31:23-31:23 ExpBox False
+  258      26812 Surface                       31:26-31:26 ExpBox False
+  259      32512 Surface                       31:16-31:27 ExpBox False
+  260      32512 Surface                        31:1-31:27 TopLevelBox ["prop"]
+  261          0 Surface                       27:10-27:15 ExpBox False
+  262          0 Surface                        27:1-27:15 TopLevelBox ["sconst"]
+  263          0 Surface                        25:8-25:11 ExpBox False
+  264          0 Surface                        25:1-25:11 TopLevelBox ["sfun"]
+  265          0 Surface                       40:21-40:38 ExpBox True
+  266          0 Surface                       42:21-42:38 ExpBox True
+  267          0 Surface                        40:3-42:38 TopLevelBox ["show"]
+    0          0 Illumination                226:33-226:35 ExpBox False
+    1          0 Illumination                226:37-226:37 ExpBox False
+    2          0 Illumination                226:10-226:37 ExpBox False
+    3          0 Illumination                227:38-227:42 ExpBox True
+    4          0 Illumination                228:38-228:42 ExpBox True
+    5          0 Illumination                229:38-229:42 ExpBox True
+    6          0 Illumination                230:38-230:42 ExpBox True
+    7          0 Illumination                231:38-231:38 ExpBox False
+    8          0 Illumination                231:42-231:44 ExpBox False
+    9          0 Illumination                231:38-231:44 ExpBox True
+   10          0 Illumination                 226:5-231:44 ExpBox False
+   11          0 Illumination                 225:1-231:44 TopLevelBox ["intersectWithin"]
+   12      28811 Illumination                217:33-217:35 ExpBox False
+   13      28811 Illumination                217:37-217:37 ExpBox False
+   14      28811 Illumination                217:10-217:37 ExpBox False
+   15          0 Illumination                218:38-218:42 ExpBox True
+   16      26812 Illumination                219:38-219:42 ExpBox True
+   17          0 Illumination                220:38-220:42 ExpBox True
+   18          0 Illumination                221:38-221:42 ExpBox True
+   19       1999 Illumination                222:38-222:41 ExpBox True
+   20      28811 Illumination                 217:5-222:41 ExpBox False
+   21      28811 Illumination                 216:1-222:41 TopLevelBox ["intersects"]
+   22      86727 Illumination                207:33-207:35 ExpBox False
+   23      86727 Illumination                207:37-207:37 ExpBox False
+   24      86727 Illumination                207:10-207:37 ExpBox False
+   25          0 Illumination                208:41-208:47 ExpBox True
+   26          1 Illumination                209:41-209:47 ExpBox True
+   27          0 Illumination                210:41-210:47 ExpBox True
+   28          0 Illumination                211:41-211:47 ExpBox True
+   29      32512 Illumination                213:33-213:33 ExpBox False
+   30      32512 Illumination                213:35-213:36 ExpBox False
+   31      32512 Illumination                213:25-213:36 ExpBox False
+   32      28811 Illumination                214:33-214:35 ExpBox False
+   33      28811 Illumination                214:37-214:37 ExpBox False
+   34      28811 Illumination                214:19-214:37 ExpBox False
+   35      32512 Illumination                214:40-214:40 ExpBox False
+   36      32512 Illumination                214:43-214:46 ExpBox False
+   37      32512 Illumination                214:18-214:47 ExpBox False
+   38      32512 Illumination                 213:9-214:47 ExpBox True
+   39      86727 Illumination                 207:5-214:47 ExpBox False
+   40      86727 Illumination                 206:1-214:47 TopLevelBox ["castRay"]
+   41          0 Illumination                202:24-202:26 ExpBox False
+   42          0 Illumination                202:31-202:32 ExpBox False
+   43          0 Illumination                202:45-202:47 ExpBox False
+   44          0 Illumination                202:39-202:48 ExpBox False
+   45          0 Illumination                202:36-202:48 ExpBox False
+   46          0 Illumination                202:30-202:49 ExpBox False
+   47          0 Illumination                202:23-202:50 ExpBox False
+   48          0 Illumination                202:61-202:65 ExpBox False
+   49          0 Illumination                202:23-202:65 ExpBox False
+   50          0 Illumination                 202:1-202:65 TopLevelBox ["attenuate"]
+   51      32512 Illumination                  179:5-179:7 ExpBox False
+   52      32512 Illumination                179:15-179:19 ExpBox False
+   53      32512 Illumination                 179:5-179:19 ExpBox False
+   54      32512 Illumination                179:23-179:23 ExpBox False
+   55      32512 Illumination                 179:5-179:23 ExpBox False
+   56       3701 Illumination                 179:5-179:23 BinBox GuardBinBox True
+   57      28811 Illumination                 179:5-179:23 BinBox GuardBinBox False
+   58          1 Illumination                179:27-179:33 ExpBox True
+   59      28811 Illumination                180:17-180:19 ExpBox False
+   60      28811 Illumination                180:30-180:35 ExpBox False
+   61      28811 Illumination                180:46-180:48 ExpBox False
+   62      28811 Illumination                180:29-180:49 ExpBox False
+   63      28811 Illumination                180:17-180:49 ExpBox False
+   64      28811 Illumination                180:51-180:53 ExpBox False
+   65      28811 Illumination                180:16-180:54 ExpBox False
+   66      28811 Illumination                180:56-180:58 ExpBox False
+   67      28811 Illumination                 180:5-180:58 ExpBox False
+   68       1999 Illumination                 180:5-180:58 BinBox GuardBinBox True
+   69      26812 Illumination                 180:5-180:58 BinBox GuardBinBox False
+   70          1 Illumination                180:62-180:68 ExpBox True
+   71      26812 Illumination                 181:5-181:13 ExpBox False
+   72      26812 Illumination                 181:5-181:13 BinBox GuardBinBox True
+   73          0 Illumination                 181:5-181:13 BinBox GuardBinBox False
+   74      26812 Illumination                181:37-181:39 ExpBox False
+   75      26812 Illumination                181:41-181:45 ExpBox False
+   76      26812 Illumination                181:36-181:46 ExpBox False
+   77      26812 Illumination                181:31-181:46 ExpBox True
+   78          0 Illumination                186:19-186:20 ExpBox False
+   79          0 Illumination                186:30-186:32 ExpBox False
+   80          0 Illumination                186:19-186:32 ExpBox False
+   81          0 Illumination                186:13-186:32 LocalBox ["unobscure","vec"]
+   82          0 Illumination                187:29-187:31 ExpBox False
+   83          0 Illumination                187:33-187:37 ExpBox False
+   84          0 Illumination                187:19-187:37 ExpBox False
+   85          0 Illumination                187:13-187:37 LocalBox ["unobscure","is"]
+   86          0 Illumination                  183:5-183:7 ExpBox False
+   87          0 Illumination                183:15-183:19 ExpBox False
+   88          0 Illumination                 183:5-183:19 ExpBox False
+   89          0 Illumination                183:23-183:23 ExpBox False
+   90          0 Illumination                 183:5-183:23 ExpBox False
+   91          0 Illumination                 183:5-183:23 BinBox GuardBinBox True
+   92          0 Illumination                 183:5-183:23 BinBox GuardBinBox False
+   93          0 Illumination                183:31-183:37 ExpBox True
+   94          0 Illumination                184:22-184:24 ExpBox False
+   95          0 Illumination                184:35-184:40 ExpBox False
+   96          0 Illumination                184:62-184:64 ExpBox False
+   97          0 Illumination                184:51-184:65 ExpBox False
+   98          0 Illumination                184:34-184:66 ExpBox False
+   99          0 Illumination                184:22-184:66 ExpBox False
+  100          0 Illumination                184:69-184:71 ExpBox False
+  101          0 Illumination                184:21-184:72 ExpBox False
+  102          0 Illumination                184:74-184:76 ExpBox False
+  103          0 Illumination                 184:5-184:76 ExpBox False
+  104          0 Illumination                 184:5-184:76 BinBox GuardBinBox True
+  105          0 Illumination                 184:5-184:76 BinBox GuardBinBox False
+  106          0 Illumination                184:80-184:86 ExpBox True
+  107          0 Illumination                 185:5-185:13 ExpBox False
+  108          0 Illumination                 185:5-185:13 BinBox GuardBinBox True
+  109          0 Illumination                 185:5-185:13 BinBox GuardBinBox False
+  110          0 Illumination                185:37-185:39 ExpBox False
+  111          0 Illumination                185:41-185:42 ExpBox False
+  112          0 Illumination                185:36-185:43 ExpBox False
+  113          0 Illumination                185:31-185:43 ExpBox True
+  114          0 Illumination                198:32-198:34 ExpBox False
+  115          0 Illumination                198:44-198:46 ExpBox False
+  116          0 Illumination                198:31-198:47 ExpBox False
+  117          0 Illumination                198:21-198:47 ExpBox False
+  118          0 Illumination                198:13-198:47 LocalBox ["unobscure","qsp"]
+  119          0 Illumination                197:32-197:33 ExpBox False
+  120          0 Illumination                197:43-197:45 ExpBox False
+  121          0 Illumination                197:31-197:46 ExpBox False
+  122          0 Illumination                197:21-197:46 ExpBox False
+  123          0 Illumination                197:13-197:46 LocalBox ["unobscure","asp"]
+  124          0 Illumination                194:21-194:23 ExpBox False
+  125          0 Illumination                194:33-194:34 ExpBox False
+  126          0 Illumination                194:21-194:34 ExpBox False
+  127          0 Illumination                194:13-194:34 LocalBox ["unobscure","vec'"]
+  128          0 Illumination                193:21-193:23 ExpBox False
+  129          0 Illumination                193:33-193:35 ExpBox False
+  130          0 Illumination                193:21-193:35 ExpBox False
+  131          0 Illumination                193:13-193:35 LocalBox ["unobscure","vec"]
+  132          0 Illumination                195:37-195:39 ExpBox False
+  133          0 Illumination                195:27-195:39 ExpBox False
+  134          0 Illumination                195:58-195:61 ExpBox False
+  135          0 Illumination                195:47-195:62 ExpBox False
+  136          0 Illumination                195:26-195:63 ExpBox False
+  137          0 Illumination                195:21-195:63 ExpBox False
+  138          0 Illumination                195:13-195:63 LocalBox ["unobscure","angle"]
+  139          0 Illumination                199:31-199:33 ExpBox False
+  140          0 Illumination                199:38-199:40 ExpBox False
+  141          0 Illumination                199:48-199:50 ExpBox False
+  142          0 Illumination                199:37-199:51 ExpBox False
+  143          0 Illumination                199:56-199:58 ExpBox False
+  144          0 Illumination                199:36-199:59 ExpBox False
+  145          0 Illumination                199:70-199:74 ExpBox False
+  146          0 Illumination                199:35-199:75 ExpBox False
+  147          0 Illumination                199:21-199:75 ExpBox False
+  148          0 Illumination                199:13-199:75 LocalBox ["unobscure","is"]
+  149          0 Illumination                  189:5-189:7 ExpBox False
+  150          0 Illumination                189:15-189:19 ExpBox False
+  151          0 Illumination                 189:5-189:19 ExpBox False
+  152          0 Illumination                189:23-189:23 ExpBox False
+  153          0 Illumination                 189:5-189:23 ExpBox False
+  154          0 Illumination                 189:5-189:23 BinBox GuardBinBox True
+  155          0 Illumination                 189:5-189:23 BinBox GuardBinBox False
+  156          0 Illumination                189:75-189:81 ExpBox True
+  157          0 Illumination                190:22-190:24 ExpBox False
+  158          0 Illumination                190:35-190:40 ExpBox False
+  159          0 Illumination                190:62-190:64 ExpBox False
+  160          0 Illumination                190:51-190:65 ExpBox False
+  161          0 Illumination                190:34-190:66 ExpBox False
+  162          0 Illumination                190:22-190:66 ExpBox False
+  163          0 Illumination                190:69-190:71 ExpBox False
+  164          0 Illumination                190:21-190:72 ExpBox False
+  165          0 Illumination                190:74-190:76 ExpBox False
+  166          0 Illumination                 190:5-190:76 ExpBox False
+  167          0 Illumination                 190:5-190:76 BinBox GuardBinBox True
+  168          0 Illumination                 190:5-190:76 BinBox GuardBinBox False
+  169          0 Illumination                190:80-190:86 ExpBox True
+  170          0 Illumination                  191:5-191:9 ExpBox False
+  171          0 Illumination                191:13-191:18 ExpBox False
+  172          0 Illumination                 191:5-191:18 ExpBox False
+  173          0 Illumination                 191:5-191:18 BinBox GuardBinBox True
+  174          0 Illumination                 191:5-191:18 BinBox GuardBinBox False
+  175          0 Illumination                191:75-191:81 ExpBox True
+  176          0 Illumination                 192:5-192:13 ExpBox False
+  177          0 Illumination                 192:5-192:13 BinBox GuardBinBox True
+  178          0 Illumination                 192:5-192:13 BinBox GuardBinBox False
+  179          0 Illumination                192:81-192:83 ExpBox False
+  180          0 Illumination                192:86-192:87 ExpBox False
+  181          0 Illumination                192:80-192:88 ExpBox False
+  182          0 Illumination                192:75-192:88 ExpBox True
+  183      32512 Illumination                 177:1-199:75 TopLevelBox ["unobscure"]
+  184      28811 Illumination                174:61-174:63 ExpBox False
+  185      28811 Illumination                174:65-174:67 ExpBox False
+  186      32512 Illumination                174:69-174:73 ExpBox False
+  187      32512 Illumination                174:50-174:74 ExpBox False
+  188      32512 Illumination                174:76-174:81 ExpBox False
+  189      32512 Illumination                174:45-174:82 ExpBox False
+  190      32512 Illumination                174:35-174:82 ExpBox False
+  191      32512 Illumination                 174:1-174:82 TopLevelBox ["unobscured"]
+  192          1 Illumination                169:46-169:46 ExpBox False
+  193          1 Illumination                169:48-169:48 ExpBox False
+  194          1 Illumination                169:38-169:49 ExpBox False
+  195          1 Illumination                169:51-169:51 ExpBox False
+  196          1 Illumination                169:32-169:51 ExpBox True
+  197          0 Illumination                170:56-170:56 ExpBox False
+  198          0 Illumination                170:58-170:58 ExpBox False
+  199          0 Illumination                170:48-170:59 ExpBox False
+  200          0 Illumination                170:61-170:61 ExpBox False
+  201          0 Illumination                170:37-170:61 ExpBox True
+  202          0 Illumination                171:60-171:60 ExpBox False
+  203          0 Illumination                171:62-171:62 ExpBox False
+  204          0 Illumination                171:52-171:63 ExpBox False
+  205          0 Illumination                171:73-171:73 ExpBox False
+  206          0 Illumination                171:75-171:75 ExpBox False
+  207          0 Illumination                171:65-171:76 ExpBox False
+  208          0 Illumination                171:78-171:78 ExpBox False
+  209          0 Illumination                171:80-171:80 ExpBox False
+  210          0 Illumination                171:82-171:82 ExpBox False
+  211          0 Illumination                171:42-171:82 ExpBox True
+  212          1 Illumination                 169:1-171:82 TopLevelBox ["transformLight"]
+  213          0 Illumination                167:20-167:20 ExpBox False
+  214          0 Illumination                167:22-167:22 ExpBox False
+  215          0 Illumination                167:24-167:24 ExpBox False
+  216          0 Illumination                167:13-167:25 ExpBox False
+  217          0 Illumination                167:34-167:34 ExpBox False
+  218          0 Illumination                167:36-167:36 ExpBox False
+  219          0 Illumination                167:38-167:38 ExpBox False
+  220          0 Illumination                167:27-167:39 ExpBox False
+  221          0 Illumination                167:41-167:43 ExpBox False
+  222          0 Illumination                167:45-167:50 ExpBox False
+  223          0 Illumination                167:52-167:54 ExpBox False
+  224          0 Illumination                 167:3-167:54 ExpBox False
+  225          0 Illumination                 166:1-167:54 TopLevelBox ["spotlight"]
+  226          0 Illumination                165:21-165:21 ExpBox False
+  227          0 Illumination                165:23-165:23 ExpBox False
+  228          0 Illumination                165:25-165:25 ExpBox False
+  229          0 Illumination                165:14-165:26 ExpBox False
+  230          0 Illumination                165:28-165:32 ExpBox False
+  231          0 Illumination                 165:3-165:32 ExpBox False
+  232          0 Illumination                 164:1-165:32 TopLevelBox ["pointlight"]
+  233          1 Illumination                163:30-163:30 ExpBox False
+  234          1 Illumination                163:28-163:31 ExpBox False
+  235          1 Illumination                163:35-163:35 ExpBox False
+  236          1 Illumination                163:33-163:36 ExpBox False
+  237          1 Illumination                163:40-163:40 ExpBox False
+  238          1 Illumination                163:38-163:41 ExpBox False
+  239          1 Illumination                163:20-163:42 ExpBox False
+  240          1 Illumination                 163:9-163:43 ExpBox False
+  241          1 Illumination                163:45-163:49 ExpBox False
+  242          1 Illumination                 163:3-163:49 ExpBox False
+  243          1 Illumination                 162:1-163:49 TopLevelBox ["light"]
+  244     180000 Illumination                152:31-152:31 ExpBox False
+  245     180000 Illumination                152:24-152:31 ExpBox False
+  246     180000 Illumination                152:35-152:37 ExpBox False
+  247     180000 Illumination                152:23-152:38 ExpBox False
+  248     180000 Illumination                152:17-152:38 ExpBox False
+  249     180000 Illumination                 152:1-152:38 TopLevelBox ["scalePixel'"]
+  250          0 Illumination                148:14-148:28 ExpBox False
+  251          0 Illumination                148:38-148:40 ExpBox False
+  252          0 Illumination                148:33-148:40 ExpBox False
+  253          0 Illumination                148:45-148:47 ExpBox False
+  254          0 Illumination                148:57-148:58 ExpBox False
+  255          0 Illumination                148:52-148:58 ExpBox False
+  256          0 Illumination                148:63-148:71 ExpBox False
+  257          0 Illumination                148:52-148:71 ExpBox False
+  258          0 Illumination                148:45-148:71 ExpBox False
+  259          0 Illumination                148:33-148:71 ExpBox False
+  260          0 Illumination                148:14-148:71 ExpBox False
+  261          0 Illumination                 148:5-148:71 LocalBox ["showBitmap'","header"]
+  262          1 Illumination                146:20-146:22 ExpBox False
+  263          1 Illumination                145:38-145:44 ExpBox False
+  264        200 Illumination                145:46-145:47 ExpBox False
+  265        200 Illumination                145:34-145:47 ExpBox False
+  266      60000 Illumination                144:37-144:37 ExpBox False
+  267      60000 Illumination                144:25-144:37 ExpBox False
+  268      60000 Illumination                144:51-144:51 ExpBox False
+  269      60000 Illumination                144:39-144:51 ExpBox False
+  270      60000 Illumination                144:65-144:65 ExpBox False
+  271      60000 Illumination                144:53-144:65 ExpBox False
+  272      60000 Illumination                144:24-144:66 ExpBox False
+  273        200 Illumination                144:21-145:48 ExpBox False
+  274        200 Illumination                144:14-145:48 ExpBox False
+  275          1 Illumination                144:12-146:24 ExpBox False
+  276          1 Illumination                 144:5-146:24 ExpBox True
+  277          0 Illumination                149:27-149:61 ExpBox False
+  278          0 Illumination                149:21-149:61 ExpBox True
+  279          1 Illumination                 142:1-149:61 TopLevelBox ["showBitmap'"]
+  280          0 Illumination                139:35-139:35 ExpBox False
+  281          0 Illumination                139:28-139:35 ExpBox False
+  282          0 Illumination                139:39-139:41 ExpBox False
+  283          0 Illumination                139:27-139:42 ExpBox False
+  284          0 Illumination                139:20-139:43 ExpBox False
+  285          0 Illumination                139:16-139:43 ExpBox False
+  286          0 Illumination                 139:1-139:43 TopLevelBox ["scalePixel"]
+  287          0 Illumination                135:14-135:28 ExpBox False
+  288          0 Illumination                135:38-135:40 ExpBox False
+  289          0 Illumination                135:33-135:40 ExpBox False
+  290          0 Illumination                135:45-135:47 ExpBox False
+  291          0 Illumination                135:57-135:58 ExpBox False
+  292          0 Illumination                135:52-135:58 ExpBox False
+  293          0 Illumination                135:63-135:71 ExpBox False
+  294          0 Illumination                135:52-135:71 ExpBox False
+  295          0 Illumination                135:45-135:71 ExpBox False
+  296          0 Illumination                135:33-135:71 ExpBox False
+  297          0 Illumination                135:14-135:71 ExpBox False
+  298          0 Illumination                 135:5-135:71 LocalBox ["showBitmap","header"]
+  299          0 Illumination                 132:5-132:10 ExpBox False
+  300          0 Illumination                133:31-133:33 ExpBox False
+  301          0 Illumination                133:51-133:57 ExpBox False
+  302          0 Illumination                133:59-133:60 ExpBox False
+  303          0 Illumination                133:47-133:60 ExpBox False
+  304          0 Illumination                132:35-132:35 ExpBox False
+  305          0 Illumination                132:24-132:35 ExpBox False
+  306          0 Illumination                132:48-132:48 ExpBox False
+  307          0 Illumination                132:37-132:48 ExpBox False
+  308          0 Illumination                132:61-132:61 ExpBox False
+  309          0 Illumination                132:50-132:61 ExpBox False
+  310          0 Illumination                132:23-132:62 ExpBox False
+  311          0 Illumination                132:22-133:61 ExpBox False
+  312          0 Illumination                132:15-133:61 ExpBox False
+  313          0 Illumination                 132:5-133:61 ExpBox True
+  314          0 Illumination                136:26-136:60 ExpBox False
+  315          0 Illumination                136:20-136:60 ExpBox True
+  316          0 Illumination                 130:1-136:60 TopLevelBox ["showBitmap"]
+  317          0 Illumination                127:14-127:28 ExpBox False
+  318          0 Illumination                127:38-127:40 ExpBox False
+  319          0 Illumination                127:33-127:40 ExpBox False
+  320          0 Illumination                127:45-127:47 ExpBox False
+  321          0 Illumination                127:57-127:58 ExpBox False
+  322          0 Illumination                127:52-127:58 ExpBox False
+  323          0 Illumination                127:63-127:71 ExpBox False
+  324          0 Illumination                127:52-127:71 ExpBox False
+  325          0 Illumination                127:45-127:71 ExpBox False
+  326          0 Illumination                127:33-127:71 ExpBox False
+  327          0 Illumination                127:14-127:71 ExpBox False
+  328          0 Illumination                 127:5-127:71 LocalBox ["showBitmapA","header"]
+  329          0 Illumination                126:36-126:38 ExpBox False
+  330          0 Illumination                126:28-126:38 ExpBox False
+  331          0 Illumination                125:34-125:34 ExpBox False
+  332          0 Illumination                125:23-125:34 ExpBox False
+  333          0 Illumination                125:48-125:48 ExpBox False
+  334          0 Illumination                125:37-125:48 ExpBox False
+  335          0 Illumination                125:62-125:62 ExpBox False
+  336          0 Illumination                125:51-125:62 ExpBox False
+  337          0 Illumination                125:22-125:63 ExpBox False
+  338          0 Illumination                 125:5-126:38 LocalBox ["showBitmapA","scaleColor"]
+  339          0 Illumination                 123:5-123:10 ExpBox False
+  340          0 Illumination                123:25-123:34 ExpBox False
+  341          0 Illumination                123:43-123:45 ExpBox False
+  342          0 Illumination                123:36-123:46 ExpBox False
+  343          0 Illumination                123:15-123:46 ExpBox False
+  344          0 Illumination                 123:5-123:46 ExpBox False
+  345          0 Illumination                 122:1-127:71 TopLevelBox ["showBitmapA"]
+  346      32512 Illumination                118:23-118:24 ExpBox False
+  347      32512 Illumination                118:26-118:28 ExpBox False
+  348      32512 Illumination                118:16-118:28 ExpBox False
+  349      32512 Illumination                 118:5-118:28 LocalBox ["illum","recCoeff"]
+  350      26727 Illumination                105:18-105:18 ExpBox False
+  351      26727 Illumination                105:29-105:29 ExpBox False
+  352      26727 Illumination                105:37-105:41 ExpBox False
+  353      26727 Illumination                105:43-105:43 ExpBox False
+  354      26727 Illumination                105:33-105:43 ExpBox False
+  355      26727 Illumination                105:28-105:44 ExpBox False
+  356      26727 Illumination                105:46-105:50 ExpBox False
+  357      26727 Illumination                105:20-105:51 ExpBox False
+  358      26727 Illumination                105:12-105:51 ExpBox False
+  359      26727 Illumination                 105:5-105:51 LocalBox ["illum","newV"]
+  360      26727 Illumination                119:29-119:31 ExpBox False
+  361      26727 Illumination                119:34-119:36 ExpBox False
+  362      26727 Illumination                119:38-119:41 ExpBox False
+  363      26727 Illumination                119:33-119:42 ExpBox False
+  364      26727 Illumination                119:16-119:42 ExpBox False
+  365      26727 Illumination                 119:5-119:42 LocalBox ["illum","recRay"]
+  366      32512 Illumination                117:19-117:26 ExpBox False
+  367      32512 Illumination                117:36-117:40 ExpBox False
+  368      32512 Illumination                117:19-117:40 ExpBox False
+  369       5785 Illumination                117:19-117:40 BinBox CondBinBox True
+  370      26727 Illumination                117:19-117:40 BinBox CondBinBox False
+  371       5785 Illumination                117:47-117:51 ExpBox True
+  372      26727 Illumination                117:65-117:72 ExpBox False
+  373      26727 Illumination                117:74-117:79 ExpBox False
+  374      26727 Illumination                117:58-117:79 ExpBox True
+  375      32512 Illumination                117:16-117:79 ExpBox False
+  376      32512 Illumination                 117:5-117:79 LocalBox ["illum","recTerm"]
+  377      32512 Illumination                104:19-104:21 ExpBox False
+  378      32512 Illumination                104:11-104:21 ExpBox False
+  379      32512 Illumination                 104:5-104:21 LocalBox ["illum","amb"]
+  380      32512 Illumination                107:22-107:23 ExpBox False
+  381      32512 Illumination                107:33-107:35 ExpBox False
+  382      32512 Illumination                107:37-107:39 ExpBox False
+  383      32512 Illumination                107:25-107:40 ExpBox False
+  384      32512 Illumination                107:15-107:40 ExpBox False
+  385      32512 Illumination                 107:5-107:40 LocalBox ["illum","ambTerm"]
+  386          0 Illumination                103:15-103:17 ExpBox False
+  387          0 Illumination                 103:9-103:17 ExpBox False
+  388          0 Illumination                 103:5-103:17 LocalBox ["illum","d"]
+  389      28811 Illumination                102:32-102:34 ExpBox False
+  390      28811 Illumination                102:44-102:46 ExpBox False
+  391      28811 Illumination                102:36-102:47 ExpBox False
+  392      32512 Illumination                102:57-102:59 ExpBox False
+  393      32512 Illumination                102:49-102:60 ExpBox False
+  394      32512 Illumination                102:62-102:66 ExpBox False
+  395      32512 Illumination                102:21-102:66 ExpBox False
+  396      32512 Illumination                 102:5-102:66 LocalBox ["illum","visibleLights"]
+  397      32512 Illumination                108:22-108:23 ExpBox False
+  398      32512 Illumination                109:36-109:48 ExpBox False
+  399      26812 Illumination                110:35-110:57 ExpBox False
+  400      26812 Illumination                110:25-110:57 ExpBox False
+  401      26812 Illumination                110:20-110:57 LocalBox ["illum","difTerm","lj"]
+  402      26812 Illumination                108:45-108:49 ExpBox False
+  403      26812 Illumination                108:51-108:52 ExpBox False
+  404      26812 Illumination                108:40-108:53 ExpBox False
+  405      26812 Illumination                108:63-108:71 ExpBox False
+  406      26812 Illumination                108:73-108:75 ExpBox False
+  407      26812 Illumination                108:55-108:76 ExpBox False
+  408      26812 Illumination                108:33-108:76 ExpBox False
+  409      32512 Illumination                108:32-110:58 ExpBox False
+  410      32512 Illumination                108:25-110:59 ExpBox False
+  411      32512 Illumination                108:15-110:59 ExpBox False
+  412      32512 Illumination                 108:5-110:59 LocalBox ["illum","difTerm"]
+  413      32512 Illumination                112:22-112:23 ExpBox False
+  414      32512 Illumination                113:36-113:48 ExpBox False
+  415      26812 Illumination                115:53-115:55 ExpBox False
+  416      26812 Illumination                115:43-115:55 ExpBox False
+  417      26812 Illumination                115:20-115:55 LocalBox ["illum","spcTerm","lj"]
+  418      26812 Illumination                116:36-116:37 ExpBox False
+  419      26812 Illumination                116:57-116:57 ExpBox False
+  420      26812 Illumination                116:47-116:57 ExpBox False
+  421      26812 Illumination                116:35-116:58 ExpBox False
+  422      26812 Illumination                116:25-116:58 ExpBox False
+  423      26812 Illumination                116:20-116:58 LocalBox ["illum","spcTerm","hj"]
+  424      26812 Illumination                112:46-112:50 ExpBox False
+  425      26812 Illumination                112:52-112:53 ExpBox False
+  426      26812 Illumination                112:41-112:54 ExpBox False
+  427      26812 Illumination                112:59-112:59 ExpBox False
+  428      26812 Illumination                112:40-112:61 ExpBox False
+  429      26812 Illumination                112:71-112:79 ExpBox False
+  430      26812 Illumination                112:81-112:83 ExpBox False
+  431      26812 Illumination                112:63-112:84 ExpBox False
+  432      26812 Illumination                112:33-112:84 ExpBox False
+  433      32512 Illumination                112:32-116:59 ExpBox False
+  434      32512 Illumination                112:25-116:60 ExpBox False
+  435      32512 Illumination                112:15-116:60 ExpBox False
+  436      32512 Illumination                 112:5-116:60 LocalBox ["illum","spcTerm"]
+  437      32512 Illumination                 100:5-100:11 ExpBox False
+  438      32512 Illumination                100:21-100:27 ExpBox False
+  439      32512 Illumination                 100:5-100:27 ExpBox False
+  440      32512 Illumination                100:37-100:43 ExpBox False
+  441      32512 Illumination                 100:5-100:43 ExpBox False
+  442      32512 Illumination                100:53-100:59 ExpBox False
+  443      32512 Illumination                 100:5-100:59 ExpBox False
+  444      32512 Illumination                  99:1-119:42 TopLevelBox ["illum"]
+  445      86727 Illumination                  93:11-93:13 ExpBox False
+  446      86727 Illumination                   93:5-93:13 ExpBox False
+  447      86727 Illumination                  93:18-93:18 ExpBox False
+  448      86727 Illumination                   93:5-93:18 ExpBox False
+  449          0 Illumination                   93:5-93:18 BinBox GuardBinBox True
+  450      86727 Illumination                   93:5-93:18 BinBox GuardBinBox False
+  451          0 Illumination                  93:22-93:26 ExpBox True
+  452      86727 Illumination                   94:5-94:13 ExpBox False
+  453      86727 Illumination                   94:5-94:13 BinBox GuardBinBox True
+  454          0 Illumination                   94:5-94:13 BinBox GuardBinBox False
+  455      86727 Illumination                  94:35-94:35 ExpBox False
+  456      86727 Illumination                  94:37-94:37 ExpBox False
+  457      86727 Illumination                  94:34-94:38 ExpBox False
+  458      86727 Illumination                  94:48-94:50 ExpBox False
+  459      86727 Illumination                  94:40-94:51 ExpBox False
+  460      86727 Illumination                  94:26-94:51 ExpBox False
+  461      54215 Illumination                  95:34-95:38 ExpBox True
+  462      32512 Illumination                  96:43-96:45 ExpBox False
+  463      26727 Illumination                  96:60-96:62 ExpBox False
+  464      26727 Illumination                  96:53-96:63 ExpBox False
+  465      26727 Illumination                  96:65-96:65 ExpBox False
+  466      26727 Illumination                  96:53-96:65 ExpBox False
+  467      32512 Illumination                  96:42-96:67 ExpBox False
+  468      32512 Illumination                  96:69-96:72 ExpBox False
+  469      28808 Illumination                  96:74-96:74 ExpBox False
+  470      32512 Illumination                  96:36-96:74 ExpBox True
+  471      86727 Illumination                  94:21-96:74 ExpBox True
+  472      86727 Illumination                   92:1-96:74 TopLevelBox ["illumination"]
+  473          0 Illumination                  88:36-88:38 ExpBox False
+  474          0 Illumination                  88:28-88:38 ExpBox False
+  475          0 Illumination                  86:28-86:28 ExpBox False
+  476          0 Illumination                  86:23-86:29 ExpBox False
+  477          0 Illumination                  86:33-86:36 ExpBox False
+  478          0 Illumination                  86:23-86:36 ExpBox False
+  479          0 Illumination                  86:46-86:46 ExpBox False
+  480          0 Illumination                  86:41-86:47 ExpBox False
+  481          0 Illumination                  86:52-86:54 ExpBox False
+  482          0 Illumination                  86:41-86:54 ExpBox False
+  483          0 Illumination                  86:64-86:64 ExpBox False
+  484          0 Illumination                  86:59-86:65 ExpBox False
+  485          0 Illumination                  86:69-86:71 ExpBox False
+  486          0 Illumination                  86:59-86:71 ExpBox False
+  487          0 Illumination                  86:41-86:71 ExpBox False
+  488          0 Illumination                  86:23-86:71 ExpBox False
+  489          0 Illumination                   86:9-88:38 LocalBox ["contrast","diffMax"]
+  490          0 Illumination                  85:15-85:17 ExpBox False
+  491          0 Illumination                  85:22-85:22 ExpBox False
+  492          0 Illumination                  85:25-85:25 ExpBox False
+  493          0 Illumination                  85:21-85:26 ExpBox False
+  494          0 Illumination                  85:15-85:26 ExpBox False
+  495          0 Illumination                   85:9-85:26 LocalBox ["contrast","cur"]
+  496          0 Illumination                  82:27-82:33 ExpBox False
+  497          0 Illumination                  83:45-83:45 ExpBox False
+  498          0 Illumination                  83:44-83:45 ExpBox False
+  499          0 Illumination                  83:48-83:48 ExpBox False
+  500          0 Illumination                  83:43-83:49 ExpBox False
+  501          0 Illumination                  83:60-83:60 ExpBox False
+  502          0 Illumination                  83:59-83:60 ExpBox False
+  503          0 Illumination                  83:63-83:63 ExpBox False
+  504          0 Illumination                  83:58-83:64 ExpBox False
+  505          0 Illumination                  82:43-82:45 ExpBox False
+  506          0 Illumination                  82:48-82:50 ExpBox False
+  507          0 Illumination                  82:55-82:55 ExpBox False
+  508          0 Illumination                  82:59-82:60 ExpBox False
+  509          0 Illumination                  82:55-82:60 ExpBox False
+  510          0 Illumination                  82:63-82:63 ExpBox False
+  511          0 Illumination                  82:67-82:68 ExpBox False
+  512          0 Illumination                  82:63-82:68 ExpBox False
+  513          0 Illumination                  82:54-82:69 ExpBox False
+  514          0 Illumination                  82:47-82:70 ExpBox False
+  515          0 Illumination                  82:37-82:70 ExpBox False
+  516          0 Illumination                  82:35-84:35 ExpBox False
+  517          0 Illumination                  82:23-84:35 ExpBox False
+  518          0 Illumination                   82:1-88:38 TopLevelBox ["contrast"]
+  519          0 Illumination                  79:33-79:33 ExpBox False
+  520          0 Illumination                  79:37-79:37 ExpBox False
+  521          0 Illumination                  79:32-79:38 ExpBox False
+  522          0 Illumination                  79:41-79:41 ExpBox False
+  523          0 Illumination                  79:45-79:45 ExpBox False
+  524          0 Illumination                  79:40-79:46 ExpBox False
+  525          0 Illumination                  79:49-79:49 ExpBox False
+  526          0 Illumination                  79:53-79:53 ExpBox False
+  527          0 Illumination                  79:48-79:54 ExpBox False
+  528          0 Illumination                  79:26-79:54 ExpBox False
+  529          0 Illumination                   79:9-79:54 LocalBox ["avg","divN"]
+  530          0 Illumination                  78:37-78:38 ExpBox False
+  531          0 Illumination                  78:29-78:39 ExpBox False
+  532          0 Illumination                  78:15-78:40 ExpBox False
+  533          0 Illumination                  78:58-78:59 ExpBox False
+  534          0 Illumination                  78:51-78:60 ExpBox False
+  535          0 Illumination                  78:42-78:61 ExpBox False
+  536          0 Illumination                  78:10-78:61 ExpBox False
+  537          0 Illumination                   78:1-79:54 TopLevelBox ["avg"]
+  538          1 Illumination                  68:27-68:28 ExpBox False
+  539          1 Illumination                  68:14-68:28 ExpBox False
+  540          1 Illumination                  68:45-68:47 ExpBox False
+  541          1 Illumination                  68:32-68:47 ExpBox False
+  542          1 Illumination                  68:14-68:47 ExpBox False
+  543          1 Illumination                   68:5-68:47 LocalBox ["render","aspect"]
+  544          1 Illumination                  66:14-66:14 ExpBox False
+  545          1 Illumination                  66:23-66:25 ExpBox False
+  546          1 Illumination                  66:27-66:27 ExpBox False
+  547          1 Illumination                  66:22-66:28 ExpBox False
+  548          1 Illumination                  66:18-66:28 ExpBox False
+  549          1 Illumination                  66:14-66:28 ExpBox False
+  550          1 Illumination                   66:5-66:28 LocalBox ["render","width"]
+  551          1 Illumination                  67:14-67:18 ExpBox False
+  552          1 Illumination                  67:35-67:37 ExpBox False
+  553          1 Illumination                  67:22-67:37 ExpBox False
+  554          1 Illumination                  67:14-67:37 ExpBox False
+  555          1 Illumination                   67:5-67:37 LocalBox ["render","delta"]
+  556          1 Illumination                  69:16-69:20 ExpBox False
+  557          1 Illumination                  69:24-69:24 ExpBox False
+  558          1 Illumination                  69:16-69:24 ExpBox False
+  559          1 Illumination                  69:14-69:24 ExpBox False
+  560          1 Illumination                   69:5-69:24 LocalBox ["render","left"]
+  561          1 Illumination                  70:16-70:19 ExpBox False
+  562          1 Illumination                  70:23-70:28 ExpBox False
+  563          1 Illumination                  70:16-70:28 ExpBox False
+  564          1 Illumination                  70:14-70:28 ExpBox False
+  565          1 Illumination                   70:5-70:28 LocalBox ["render","top"]
+  566      60000 Illumination                  71:25-71:28 ExpBox False
+  567      60000 Illumination                  71:32-71:32 ExpBox False
+  568      60000 Illumination                  71:34-71:38 ExpBox False
+  569      60000 Illumination                  71:32-71:38 ExpBox False
+  570      60000 Illumination                  71:24-71:39 ExpBox False
+  571      60000 Illumination                  71:42-71:44 ExpBox False
+  572      60000 Illumination                  71:48-71:48 ExpBox False
+  573      60000 Illumination                  71:50-71:54 ExpBox False
+  574      60000 Illumination                  71:48-71:54 ExpBox False
+  575      60000 Illumination                  71:41-71:55 ExpBox False
+  576      60000 Illumination                  71:57-71:57 ExpBox False
+  577      60000 Illumination                  71:17-71:57 ExpBox False
+  578      60000 Illumination                   71:5-71:57 LocalBox ["render","pixel"]
+  579          1 Illumination                  65:21-65:21 ExpBox False
+  580          1 Illumination                  65:23-65:23 ExpBox False
+  581          1 Illumination                  65:27-65:27 ExpBox False
+  582          1 Illumination                  65:25-65:28 ExpBox False
+  583          1 Illumination                  65:14-65:28 ExpBox False
+  584          1 Illumination                   65:5-65:28 LocalBox ["render","start"]
+  585          1 Illumination                  51:41-51:42 ExpBox False
+  586          1 Illumination                  51:29-51:30 ExpBox False
+  587          1 Illumination                  51:32-51:32 ExpBox False
+  588          1 Illumination                  51:14-51:32 ExpBox False
+  589          1 Illumination                  51:12-51:44 ExpBox False
+  590          1 Illumination                   51:5-51:44 LocalBox ["render","ls'"]
+  591          1 Illumination                  50:23-50:24 ExpBox False
+  592          1 Illumination                  50:26-50:26 ExpBox False
+  593          1 Illumination                  50:22-50:27 ExpBox False
+  594          1 Illumination                  50:29-50:31 ExpBox False
+  595          1 Illumination                  50:12-50:31 ExpBox False
+  596          1 Illumination                   50:5-50:31 LocalBox ["render","obj'"]
+  597          1 Illumination                  64:27-64:29 ExpBox False
+  598          1 Illumination                  64:39-64:41 ExpBox False
+  599          1 Illumination                  64:52-64:55 ExpBox False
+  600          1 Illumination                  64:64-64:66 ExpBox False
+  601          1 Illumination                  64:14-64:67 ExpBox False
+  602          1 Illumination                   64:5-64:67 LocalBox ["render","cxt"]
+  603          0 Illumination                  52:26-52:26 ExpBox False
+  604          0 Illumination                  52:28-52:28 ExpBox False
+  605          0 Illumination                  52:25-52:29 ExpBox False
+  606          0 Illumination                  52:33-52:34 ExpBox False
+  607          0 Illumination                  52:36-52:38 ExpBox False
+  608          0 Illumination                  52:32-52:39 ExpBox False
+  609          0 Illumination                  52:24-52:40 ExpBox False
+  610          0 Illumination                  54:36-54:37 ExpBox False
+  611          0 Illumination                  54:41-54:43 ExpBox False
+  612          0 Illumination                  54:40-54:46 ExpBox False
+  613          0 Illumination                  54:31-54:46 ExpBox False
+  614          0 Illumination                  55:36-55:38 ExpBox False
+  615          0 Illumination                  55:41-55:43 ExpBox False
+  616          0 Illumination                  55:40-55:46 ExpBox False
+  617          0 Illumination                  55:31-55:46 ExpBox False
+  618          0 Illumination                  53:39-53:41 ExpBox False
+  619          0 Illumination                  53:44-53:48 ExpBox False
+  620          0 Illumination                  53:56-53:56 ExpBox False
+  621          0 Illumination                  53:58-53:58 ExpBox False
+  622          0 Illumination                  53:50-53:58 ExpBox False
+  623          0 Illumination                  53:43-53:59 ExpBox False
+  624          0 Illumination                  53:26-53:59 ExpBox False
+  625          0 Illumination                  53:24-55:48 ExpBox False
+  626          0 Illumination                  52:14-55:48 ExpBox False
+  627          0 Illumination                   52:5-55:48 LocalBox ["render","pixelA"]
+  628          1 Illumination                  62:26-62:27 ExpBox False
+  629          1 Illumination                  62:30-62:32 ExpBox False
+  630          1 Illumination                  62:29-62:35 ExpBox False
+  631          1 Illumination                  62:21-62:35 ExpBox False
+  632        200 Illumination                  61:64-61:66 ExpBox False
+  633          1 Illumination                  61:69-61:71 ExpBox False
+  634          1 Illumination                  61:68-61:74 ExpBox False
+  635        200 Illumination                  61:59-61:74 ExpBox False
+  636      60000 Illumination                  61:31-61:33 ExpBox False
+  637      60000 Illumination                  61:36-61:40 ExpBox False
+  638      60000 Illumination                  61:48-61:48 ExpBox False
+  639      60000 Illumination                  61:50-61:50 ExpBox False
+  640      60000 Illumination                  61:42-61:50 ExpBox False
+  641      60000 Illumination                  61:35-61:51 ExpBox False
+  642      60000 Illumination                  61:18-61:51 ExpBox False
+  643        200 Illumination                  61:16-61:76 ExpBox False
+  644          1 Illumination                  61:14-63:14 ExpBox False
+  645          1 Illumination                   61:5-63:14 LocalBox ["render","pixels"]
+  646          0 Illumination                  73:30-73:32 ExpBox False
+  647          0 Illumination                  73:36-73:38 ExpBox False
+  648          0 Illumination                  75:24-75:28 ExpBox False
+  649          0 Illumination                  75:23-75:28 ExpBox False
+  650          0 Illumination                  75:31-75:33 ExpBox False
+  651          0 Illumination                  75:22-75:34 ExpBox False
+  652          0 Illumination                  75:38-75:42 ExpBox False
+  653          0 Illumination                  75:45-75:47 ExpBox False
+  654          0 Illumination                  75:37-75:48 ExpBox False
+  655          0 Illumination                  75:52-75:54 ExpBox False
+  656          0 Illumination                  75:58-75:62 ExpBox False
+  657          0 Illumination                  75:57-75:62 ExpBox False
+  658          0 Illumination                  75:51-75:63 ExpBox False
+  659          0 Illumination                  75:67-75:69 ExpBox False
+  660          0 Illumination                  75:72-75:76 ExpBox False
+  661          0 Illumination                  75:66-75:77 ExpBox False
+  662          0 Illumination                  75:21-75:78 ExpBox False
+  663          0 Illumination                  74:22-74:24 ExpBox False
+  664          0 Illumination                  74:27-74:31 ExpBox False
+  665          0 Illumination                  74:54-74:54 ExpBox False
+  666          0 Illumination                  74:41-74:54 ExpBox False
+  667          0 Illumination                  74:58-74:60 ExpBox False
+  668          0 Illumination                  74:41-74:60 ExpBox False
+  669          0 Illumination                  74:64-74:65 ExpBox False
+  670          0 Illumination                  74:40-74:66 ExpBox False
+  671          0 Illumination                  74:82-74:82 ExpBox False
+  672          0 Illumination                  74:69-74:82 ExpBox False
+  673          0 Illumination                  74:86-74:88 ExpBox False
+  674          0 Illumination                  74:69-74:88 ExpBox False
+  675          0 Illumination                  74:92-74:93 ExpBox False
+  676          0 Illumination                  74:68-74:94 ExpBox False
+  677          0 Illumination                  74:34-74:94 ExpBox False
+  678          0 Illumination                  74:26-74:95 ExpBox False
+  679          0 Illumination                   74:9-74:95 ExpBox False
+  680          0 Illumination                    74:7-76:7 ExpBox False
+  681          0 Illumination                   73:36-76:7 ExpBox False
+  682          0 Illumination                   73:30-76:7 ExpBox False
+  683          0 Illumination                    73:5-76:7 LocalBox ["render","superSample"]
+  684          0 Illumination                  56:14-56:19 ExpBox False
+  685          0 Illumination                  58:22-58:22 ExpBox False
+  686          0 Illumination                  58:27-58:28 ExpBox False
+  687          0 Illumination                  58:32-58:32 ExpBox False
+  688          0 Illumination                  58:27-58:32 ExpBox False
+  689          0 Illumination                  58:21-58:33 ExpBox False
+  690          0 Illumination                  58:42-58:42 ExpBox False
+  691          0 Illumination                  58:47-58:49 ExpBox False
+  692          0 Illumination                  58:53-58:53 ExpBox False
+  693          0 Illumination                  58:47-58:53 ExpBox False
+  694          0 Illumination                  58:41-58:54 ExpBox False
+  695          0 Illumination                  59:26-59:26 ExpBox False
+  696          0 Illumination                  59:29-59:29 ExpBox False
+  697          0 Illumination                  59:25-59:30 ExpBox False
+  698          0 Illumination                  59:20-59:30 LocalBox ["render","antiA","ix"]
+  699          0 Illumination                  60:25-60:26 ExpBox False
+  700          0 Illumination                  60:28-60:33 ExpBox False
+  701          0 Illumination                  60:16-60:33 ExpBox False
+  702          0 Illumination                  60:16-60:33 BinBox QualBinBox True
+  703          0 Illumination                  60:16-60:33 BinBox QualBinBox False
+  704          0 Illumination                  57:17-57:18 ExpBox False
+  705          0 Illumination                  57:33-57:34 ExpBox False
+  706          0 Illumination                  57:37-57:42 ExpBox False
+  707          0 Illumination                  57:46-57:47 ExpBox False
+  708          0 Illumination                  57:36-57:48 ExpBox False
+  709          0 Illumination                  57:21-57:48 ExpBox False
+  710          0 Illumination                  57:16-57:49 ExpBox False
+  711          0 Illumination                  57:14-60:35 ExpBox False
+  712          0 Illumination                  56:14-60:35 ExpBox False
+  713          0 Illumination                   56:5-60:35 LocalBox ["render","antiA"]
+  714          0 Illumination                  44:24-44:25 ExpBox False
+  715          1 Illumination                  44:17-44:25 ExpBox False
+  716          1 Illumination                   44:5-44:25 LocalBox ["render","debugging"]
+  717          1 Illumination                  32:10-32:18 ExpBox False
+  718          1 Illumination                  33:26-33:40 ExpBox False
+  719          1 Illumination                  33:17-33:40 ExpBox False
+  720          1 Illumination                  34:26-34:28 ExpBox False
+  721          1 Illumination                  34:21-34:28 ExpBox False
+  722          1 Illumination                  34:14-34:28 LocalBox ["render","vals"]
+  723          0 Illumination                  35:36-35:38 ExpBox False
+  724          0 Illumination                  35:40-35:41 ExpBox False
+  725          1 Illumination                  35:43-35:48 ExpBox False
+  726          1 Illumination                  35:24-35:48 ExpBox False
+  727          1 Illumination                  35:14-35:48 LocalBox ["render","rt_vals"]
+  728          1 Illumination                  36:20-36:23 ExpBox False
+  729          1 Illumination                  36:13-36:23 ExpBox False
+  730          1 Illumination                  36:35-36:41 ExpBox False
+  731          1 Illumination                  36:28-36:41 ExpBox False
+  732          1 Illumination                  36:13-36:41 ExpBox False
+  733          0 Illumination                  36:13-36:41 BinBox CondBinBox True
+  734          1 Illumination                  36:13-36:41 BinBox CondBinBox False
+  735          0 Illumination                  37:24-37:35 ExpBox False
+  736          0 Illumination                  37:44-37:47 ExpBox False
+  737          0 Illumination                  37:37-37:47 ExpBox False
+  738          0 Illumination                  37:56-37:62 ExpBox False
+  739          0 Illumination                  37:49-37:62 ExpBox False
+  740          0 Illumination                  37:23-37:63 ExpBox False
+  741          0 Illumination                  37:17-37:63 ExpBox True
+  742     180000 Illumination                  39:59-39:59 ExpBox False
+  743     180000 Illumination                  39:63-39:63 ExpBox False
+  744     180000 Illumination                  39:58-39:64 ExpBox False
+  745     180000 Illumination                  39:54-39:64 ExpBox False
+  746     180000 Illumination                  39:73-39:73 ExpBox False
+  747     180000 Illumination                  39:77-39:77 ExpBox False
+  748     180000 Illumination                  39:72-39:78 ExpBox False
+  749     180000 Illumination                  39:68-39:78 ExpBox False
+  750     180000 Illumination                  39:54-39:78 ExpBox False
+  751          1 Illumination                  39:44-39:79 ExpBox False
+  752          1 Illumination                  39:81-39:84 ExpBox False
+  753          1 Illumination                  39:86-39:92 ExpBox False
+  754          1 Illumination                  39:35-39:93 ExpBox False
+  755          1 Illumination                  39:32-39:93 ExpBox False
+  756          1 Illumination                  39:26-39:93 LocalBox ["render","cmp"]
+  757          1 Illumination                  40:22-40:26 ExpBox False
+  758          1 Illumination                  40:33-40:35 ExpBox False
+  759          1 Illumination                  40:48-40:51 ExpBox False
+  760          1 Illumination                  40:41-40:51 ExpBox False
+  761          1 Illumination                  40:55-40:56 ExpBox False
+  762          1 Illumination                  40:40-40:57 ExpBox False
+  763          1 Illumination                  40:33-40:57 ExpBox False
+  764          1 Illumination                  40:33-40:57 BinBox CondBinBox True
+  765          0 Illumination                  40:33-40:57 BinBox CondBinBox False
+  766          1 Illumination                  40:64-40:77 ExpBox True
+  767          0 Illumination                  40:85-40:96 ExpBox False
+  768          0 Illumination                40:106-40:108 ExpBox False
+  769          0 Illumination                40:101-40:108 ExpBox False
+  770          0 Illumination                 40:84-40:109 ExpBox True
+  771          1 Illumination                 40:30-40:109 ExpBox False
+  772          1 Illumination                 40:22-40:109 ExpBox False
+  773          1 Illumination                  38:17-41:20 ExpBox True
+  774          1 Illumination                  36:10-41:20 ExpBox False
+  775          1 Illumination                   32:5-41:21 ExpBox False
+  776          1 Illumination                    31:1-76:7 TopLevelBox ["render"]
+  777          0 Illumination                159:13-159:16 TopLevelBox ["showsPrec"]
+  778          0 Illumination                159:13-159:16 TopLevelBox ["showList"]
+  779          0 Illumination                  27:18-27:21 TopLevelBox ["showsPrec"]
+  780          0 Illumination                  27:18-27:21 TopLevelBox ["showList"]
+    0          0 Primitives                    24:16-24:16 ExpBox False
+    1          0 Primitives                    24:11-24:16 ExpBox False
+    2          0 Primitives                    24:20-24:22 ExpBox False
+    3          0 Primitives                    24:11-24:22 ExpBox False
+    4          0 Primitives                    24:26-24:27 ExpBox False
+    5          0 Primitives                    24:11-24:27 ExpBox False
+    6          0 Primitives                     24:1-24:27 TopLevelBox ["asinD"]
+    7          0 Primitives                    21:16-21:16 ExpBox False
+    8          0 Primitives                    21:11-21:16 ExpBox False
+    9          0 Primitives                    21:20-21:22 ExpBox False
+   10          0 Primitives                    21:11-21:22 ExpBox False
+   11          0 Primitives                    21:26-21:27 ExpBox False
+   12          0 Primitives                    21:11-21:27 ExpBox False
+   13          0 Primitives                     21:1-21:27 TopLevelBox ["acosD"]
+   14          0 Primitives                     18:8-18:10 ExpBox False
+   15          0 Primitives                     18:1-18:10 TopLevelBox ["addf"]
+   16          0 Primitives                     15:8-15:10 ExpBox False
+   17          0 Primitives                     15:1-15:10 TopLevelBox ["addi"]
+   18          2 Primitives                    12:13-12:13 ExpBox False
+   19          2 Primitives                    12:17-12:18 ExpBox False
+   20          2 Primitives                    12:13-12:18 ExpBox False
+   21          2 Primitives                    12:22-12:24 ExpBox False
+   22          2 Primitives                    12:13-12:24 ExpBox False
+   23          2 Primitives                     12:1-12:24 TopLevelBox ["deg2rad"]
+   24          0 Primitives                      9:13-9:13 ExpBox False
+   25          0 Primitives                      9:17-9:19 ExpBox False
+   26          0 Primitives                      9:13-9:19 ExpBox False
+   27          0 Primitives                      9:23-9:24 ExpBox False
+   28          0 Primitives                      9:13-9:24 ExpBox False
+   29          0 Primitives                       9:1-9:24 TopLevelBox ["rad2deg"]
+    0          0 Misc                          10:20-10:20 ExpBox False
+    1          0 Misc                          10:24-10:28 ExpBox False
+    2          0 Misc                          10:37-10:37 ExpBox False
+    3          0 Misc                          10:32-10:37 ExpBox False
+    4          0 Misc                          10:42-10:45 ExpBox False
+    5          0 Misc                          10:32-10:45 ExpBox False
+    6          0 Misc                          10:24-10:45 ExpBox False
+    7          0 Misc                          10:19-10:46 ExpBox False
+    8          0 Misc                          10:48-10:48 ExpBox False
+    9          0 Misc                          10:13-10:48 ExpBox False
+   10          0 Misc                           10:1-10:48 TopLevelBox ["debug"]
+    0          6 Construct                   258:23-258:24 ExpBox False
+    1          6 Construct                   258:26-258:27 ExpBox False
+    2          6 Construct                   258:29-258:30 ExpBox False
+    3          6 Construct                   258:17-258:30 ExpBox False
+    4          6 Construct                   259:23-259:24 ExpBox False
+    5          6 Construct                   259:26-259:27 ExpBox False
+    6          6 Construct                   259:29-259:30 ExpBox False
+    7          6 Construct                   259:17-259:30 ExpBox False
+    8          6 Construct                   260:23-260:24 ExpBox False
+    9          6 Construct                   260:26-260:27 ExpBox False
+   10          6 Construct                   260:29-260:30 ExpBox False
+   11          6 Construct                   260:17-260:30 ExpBox False
+   12          6 Construct                   261:23-261:24 ExpBox False
+   13          6 Construct                   261:26-261:27 ExpBox False
+   14          6 Construct                   261:29-261:30 ExpBox False
+   15          6 Construct                   261:17-261:30 ExpBox False
+   16          6 Construct                   262:23-262:24 ExpBox False
+   17          6 Construct                   262:26-262:27 ExpBox False
+   18          6 Construct                   262:29-262:30 ExpBox False
+   19          6 Construct                   262:17-262:30 ExpBox False
+   20          6 Construct                   263:23-263:24 ExpBox False
+   21          6 Construct                   263:26-263:27 ExpBox False
+   22          6 Construct                   263:29-263:30 ExpBox False
+   23          6 Construct                   263:17-263:30 ExpBox False
+   24          6 Construct                   264:23-264:24 ExpBox False
+   25          6 Construct                   264:26-264:27 ExpBox False
+   26          6 Construct                   264:29-264:30 ExpBox False
+   27          6 Construct                   264:17-264:30 ExpBox False
+   28          6 Construct                   265:23-265:24 ExpBox False
+   29          6 Construct                   265:26-265:27 ExpBox False
+   30          6 Construct                   265:29-265:30 ExpBox False
+   31          6 Construct                   265:17-265:30 ExpBox False
+   32          6 Construct                   258:16-265:31 ExpBox False
+   33          6 Construct                    258:9-265:31 LocalBox ["transformBox","pts"]
+   34          6 Construct                   257:28-257:28 ExpBox False
+   35          6 Construct                   257:20-257:29 ExpBox False
+   36          6 Construct                   257:31-257:33 ExpBox False
+   37          6 Construct                   257:16-257:33 ExpBox False
+   38          6 Construct                    257:9-257:33 LocalBox ["transformBox","pts'"]
+   39          6 Construct                   251:16-251:18 ExpBox False
+   40          6 Construct                   251:25-251:30 ExpBox False
+   41          6 Construct                   251:32-251:35 ExpBox False
+   42          6 Construct                   251:20-251:36 ExpBox False
+   43          6 Construct                    251:8-251:37 ExpBox False
+   44          6 Construct                   252:16-252:18 ExpBox False
+   45          6 Construct                   252:25-252:30 ExpBox False
+   46          6 Construct                   252:32-252:35 ExpBox False
+   47          6 Construct                   252:20-252:36 ExpBox False
+   48          6 Construct                    252:8-252:37 ExpBox False
+   49          6 Construct                   253:16-253:18 ExpBox False
+   50          6 Construct                   253:25-253:30 ExpBox False
+   51          6 Construct                   253:32-253:35 ExpBox False
+   52          6 Construct                   253:20-253:36 ExpBox False
+   53          6 Construct                    253:8-253:37 ExpBox False
+   54          6 Construct                   254:16-254:18 ExpBox False
+   55          6 Construct                   254:25-254:30 ExpBox False
+   56          6 Construct                   254:32-254:35 ExpBox False
+   57          6 Construct                   254:20-254:36 ExpBox False
+   58          6 Construct                    254:8-254:37 ExpBox False
+   59          6 Construct                   255:16-255:18 ExpBox False
+   60          6 Construct                   255:25-255:30 ExpBox False
+   61          6 Construct                   255:32-255:35 ExpBox False
+   62          6 Construct                   255:20-255:36 ExpBox False
+   63          6 Construct                    255:8-255:37 ExpBox False
+   64          6 Construct                   256:16-256:18 ExpBox False
+   65          6 Construct                   256:25-256:30 ExpBox False
+   66          6 Construct                   256:32-256:35 ExpBox False
+   67          6 Construct                   256:20-256:36 ExpBox False
+   68          6 Construct                    256:8-256:37 ExpBox False
+   69          6 Construct                    251:5-256:38 ExpBox False
+   70          6 Construct                    250:1-265:31 TopLevelBox ["transformBox"]
+   71          0 Construct                    246:8-246:10 ExpBox False
+   72          0 Construct                   246:18-246:20 ExpBox False
+   73          0 Construct                    246:7-246:21 ExpBox False
+   74          0 Construct                   246:24-246:26 ExpBox False
+   75          0 Construct                   246:34-246:36 ExpBox False
+   76          0 Construct                   246:23-246:37 ExpBox False
+   77          0 Construct                    247:8-247:10 ExpBox False
+   78          0 Construct                   247:18-247:20 ExpBox False
+   79          0 Construct                    247:7-247:21 ExpBox False
+   80          0 Construct                   247:24-247:26 ExpBox False
+   81          0 Construct                   247:34-247:36 ExpBox False
+   82          0 Construct                   247:23-247:37 ExpBox False
+   83          0 Construct                    248:8-248:10 ExpBox False
+   84          0 Construct                   248:18-248:20 ExpBox False
+   85          0 Construct                    248:7-248:21 ExpBox False
+   86          0 Construct                   248:24-248:26 ExpBox False
+   87          0 Construct                   248:34-248:36 ExpBox False
+   88          0 Construct                   248:23-248:37 ExpBox False
+   89          0 Construct                    246:5-248:37 ExpBox False
+   90          0 Construct                    245:1-248:37 TopLevelBox ["mergeBox"]
+   91          0 Construct                   205:16-205:16 ExpBox False
+   92          0 Construct                   205:12-205:16 ExpBox False
+   93          0 Construct                   205:24-205:24 ExpBox False
+   94          0 Construct                   205:20-205:24 ExpBox False
+   95          0 Construct                   205:19-205:24 ExpBox False
+   96          0 Construct                   205:32-205:32 ExpBox False
+   97          0 Construct                   205:35-205:35 ExpBox False
+   98          0 Construct                    205:9-205:37 ExpBox False
+   99          0 Construct                   206:16-206:16 ExpBox False
+  100          0 Construct                   206:12-206:16 ExpBox False
+  101          0 Construct                   206:24-206:24 ExpBox False
+  102          0 Construct                   206:20-206:24 ExpBox False
+  103          0 Construct                   206:32-206:32 ExpBox False
+  104          0 Construct                   206:35-206:35 ExpBox False
+  105          0 Construct                    206:9-206:37 ExpBox False
+  106          0 Construct                   207:16-207:16 ExpBox False
+  107          0 Construct                   207:24-207:24 ExpBox False
+  108          0 Construct                   207:32-207:32 ExpBox False
+  109          0 Construct                   207:35-207:35 ExpBox False
+  110          0 Construct                    207:9-207:37 ExpBox False
+  111          0 Construct                   208:16-208:16 ExpBox False
+  112          0 Construct                   208:24-208:24 ExpBox False
+  113          0 Construct                   208:32-208:32 ExpBox False
+  114          0 Construct                   208:35-208:35 ExpBox False
+  115          0 Construct                    208:9-208:37 ExpBox False
+  116          0 Construct                    205:7-208:39 ExpBox False
+  117          0 Construct                    204:7-208:39 ExpBox False
+  118          0 Construct                   210:16-210:16 ExpBox False
+  119          0 Construct                   210:12-210:16 ExpBox False
+  120          0 Construct                   210:24-210:24 ExpBox False
+  121          0 Construct                   210:20-210:24 ExpBox False
+  122          0 Construct                   210:32-210:32 ExpBox False
+  123          0 Construct                   210:35-210:35 ExpBox False
+  124          0 Construct                    210:9-210:37 ExpBox False
+  125          0 Construct                   211:16-211:16 ExpBox False
+  126          0 Construct                   211:12-211:16 ExpBox False
+  127          0 Construct                   211:11-211:16 ExpBox False
+  128          0 Construct                   211:24-211:24 ExpBox False
+  129          0 Construct                   211:20-211:24 ExpBox False
+  130          0 Construct                   211:32-211:32 ExpBox False
+  131          0 Construct                   211:35-211:35 ExpBox False
+  132          0 Construct                    211:9-211:37 ExpBox False
+  133          0 Construct                   212:16-212:16 ExpBox False
+  134          0 Construct                   212:24-212:24 ExpBox False
+  135          0 Construct                   212:32-212:32 ExpBox False
+  136          0 Construct                   212:35-212:35 ExpBox False
+  137          0 Construct                    212:9-212:37 ExpBox False
+  138          0 Construct                   213:16-213:16 ExpBox False
+  139          0 Construct                   213:24-213:24 ExpBox False
+  140          0 Construct                   213:32-213:32 ExpBox False
+  141          0 Construct                   213:35-213:35 ExpBox False
+  142          0 Construct                    213:9-213:37 ExpBox False
+  143          0 Construct                    210:7-213:39 ExpBox False
+  144          0 Construct                    209:7-213:39 ExpBox False
+  145          0 Construct                    204:5-213:41 ExpBox False
+  146          0 Construct                    203:1-213:41 TopLevelBox ["rotzM"]
+  147          0 Construct                   239:26-239:26 ExpBox False
+  148          0 Construct                   239:20-239:26 ExpBox False
+  149          0 Construct                   238:13-238:14 ExpBox False
+  150          0 Construct                   238:16-238:19 ExpBox False
+  151          0 Construct                    238:6-238:19 ExpBox False
+  152          0 Construct                   238:29-238:32 ExpBox False
+  153          0 Construct                   238:34-238:35 ExpBox False
+  154          0 Construct                   238:22-238:35 ExpBox False
+  155          0 Construct                    238:5-238:36 ExpBox False
+  156          0 Construct                    237:1-239:26 TopLevelBox ["rotateEyeZ"]
+  157          1 Construct                   193:16-193:16 ExpBox False
+  158          1 Construct                   193:12-193:16 ExpBox False
+  159          1 Construct                   193:24-193:24 ExpBox False
+  160          1 Construct                   193:32-193:32 ExpBox False
+  161          1 Construct                   193:28-193:32 ExpBox False
+  162          1 Construct                   193:35-193:35 ExpBox False
+  163          1 Construct                    193:9-193:37 ExpBox False
+  164          1 Construct                   194:16-194:16 ExpBox False
+  165          1 Construct                   194:24-194:24 ExpBox False
+  166          1 Construct                   194:32-194:32 ExpBox False
+  167          1 Construct                   194:35-194:35 ExpBox False
+  168          1 Construct                    194:9-194:37 ExpBox False
+  169          1 Construct                   195:16-195:16 ExpBox False
+  170          1 Construct                   195:12-195:16 ExpBox False
+  171          1 Construct                   195:11-195:16 ExpBox False
+  172          1 Construct                   195:24-195:24 ExpBox False
+  173          1 Construct                   195:32-195:32 ExpBox False
+  174          1 Construct                   195:28-195:32 ExpBox False
+  175          1 Construct                   195:35-195:35 ExpBox False
+  176          1 Construct                    195:9-195:37 ExpBox False
+  177          1 Construct                   196:16-196:16 ExpBox False
+  178          1 Construct                   196:24-196:24 ExpBox False
+  179          1 Construct                   196:32-196:32 ExpBox False
+  180          1 Construct                   196:35-196:35 ExpBox False
+  181          1 Construct                    196:9-196:37 ExpBox False
+  182          1 Construct                    193:7-196:39 ExpBox False
+  183          1 Construct                    192:7-196:39 ExpBox False
+  184          1 Construct                   198:16-198:16 ExpBox False
+  185          1 Construct                   198:12-198:16 ExpBox False
+  186          1 Construct                   198:24-198:24 ExpBox False
+  187          1 Construct                   198:32-198:32 ExpBox False
+  188          1 Construct                   198:28-198:32 ExpBox False
+  189          1 Construct                   198:27-198:32 ExpBox False
+  190          1 Construct                   198:35-198:35 ExpBox False
+  191          1 Construct                    198:9-198:37 ExpBox False
+  192          1 Construct                   199:16-199:16 ExpBox False
+  193          1 Construct                   199:24-199:24 ExpBox False
+  194          1 Construct                   199:32-199:32 ExpBox False
+  195          1 Construct                   199:35-199:35 ExpBox False
+  196          1 Construct                    199:9-199:37 ExpBox False
+  197          1 Construct                   200:16-200:16 ExpBox False
+  198          1 Construct                   200:12-200:16 ExpBox False
+  199          1 Construct                   200:24-200:24 ExpBox False
+  200          1 Construct                   200:32-200:32 ExpBox False
+  201          1 Construct                   200:28-200:32 ExpBox False
+  202          1 Construct                   200:35-200:35 ExpBox False
+  203          1 Construct                    200:9-200:37 ExpBox False
+  204          1 Construct                   201:16-201:16 ExpBox False
+  205          1 Construct                   201:24-201:24 ExpBox False
+  206          1 Construct                   201:32-201:32 ExpBox False
+  207          1 Construct                   201:35-201:35 ExpBox False
+  208          1 Construct                    201:9-201:37 ExpBox False
+  209          1 Construct                    198:7-201:39 ExpBox False
+  210          1 Construct                    197:7-201:39 ExpBox False
+  211          1 Construct                    192:5-201:41 ExpBox False
+  212          1 Construct                    191:1-201:41 TopLevelBox ["rotyM"]
+  213          0 Construct                   236:26-236:26 ExpBox False
+  214          0 Construct                   236:20-236:26 ExpBox False
+  215          0 Construct                   235:13-235:14 ExpBox False
+  216          0 Construct                   235:16-235:19 ExpBox False
+  217          0 Construct                    235:6-235:19 ExpBox False
+  218          0 Construct                   235:29-235:32 ExpBox False
+  219          0 Construct                   235:34-235:35 ExpBox False
+  220          0 Construct                   235:22-235:35 ExpBox False
+  221          0 Construct                    235:5-235:36 ExpBox False
+  222          0 Construct                    234:1-236:26 TopLevelBox ["rotateEyeY"]
+  223          1 Construct                   181:16-181:16 ExpBox False
+  224          1 Construct                   181:24-181:24 ExpBox False
+  225          1 Construct                   181:32-181:32 ExpBox False
+  226          1 Construct                   181:35-181:35 ExpBox False
+  227          1 Construct                    181:9-181:37 ExpBox False
+  228          1 Construct                   182:16-182:16 ExpBox False
+  229          1 Construct                   182:24-182:24 ExpBox False
+  230          1 Construct                   182:20-182:24 ExpBox False
+  231          1 Construct                   182:32-182:32 ExpBox False
+  232          1 Construct                   182:28-182:32 ExpBox False
+  233          1 Construct                   182:27-182:32 ExpBox False
+  234          1 Construct                   182:35-182:35 ExpBox False
+  235          1 Construct                    182:9-182:37 ExpBox False
+  236          1 Construct                   183:16-183:16 ExpBox False
+  237          1 Construct                   183:24-183:24 ExpBox False
+  238          1 Construct                   183:20-183:24 ExpBox False
+  239          1 Construct                   183:32-183:32 ExpBox False
+  240          1 Construct                   183:28-183:32 ExpBox False
+  241          1 Construct                   183:35-183:35 ExpBox False
+  242          1 Construct                    183:9-183:37 ExpBox False
+  243          1 Construct                   184:16-184:16 ExpBox False
+  244          1 Construct                   184:24-184:24 ExpBox False
+  245          1 Construct                   184:32-184:32 ExpBox False
+  246          1 Construct                   184:35-184:35 ExpBox False
+  247          1 Construct                    184:9-184:37 ExpBox False
+  248          1 Construct                    181:7-184:39 ExpBox False
+  249          1 Construct                    180:7-184:39 ExpBox False
+  250          1 Construct                   186:16-186:16 ExpBox False
+  251          1 Construct                   186:24-186:24 ExpBox False
+  252          1 Construct                   186:32-186:32 ExpBox False
+  253          1 Construct                   186:35-186:35 ExpBox False
+  254          1 Construct                    186:9-186:37 ExpBox False
+  255          1 Construct                   187:16-187:16 ExpBox False
+  256          1 Construct                   187:24-187:24 ExpBox False
+  257          1 Construct                   187:20-187:24 ExpBox False
+  258          1 Construct                   187:32-187:32 ExpBox False
+  259          1 Construct                   187:28-187:32 ExpBox False
+  260          1 Construct                   187:35-187:35 ExpBox False
+  261          1 Construct                    187:9-187:37 ExpBox False
+  262          1 Construct                   188:16-188:16 ExpBox False
+  263          1 Construct                   188:24-188:24 ExpBox False
+  264          1 Construct                   188:20-188:24 ExpBox False
+  265          1 Construct                   188:19-188:24 ExpBox False
+  266          1 Construct                   188:32-188:32 ExpBox False
+  267          1 Construct                   188:28-188:32 ExpBox False
+  268          1 Construct                   188:35-188:35 ExpBox False
+  269          1 Construct                    188:9-188:37 ExpBox False
+  270          1 Construct                   189:16-189:16 ExpBox False
+  271          1 Construct                   189:24-189:24 ExpBox False
+  272          1 Construct                   189:32-189:32 ExpBox False
+  273          1 Construct                   189:35-189:35 ExpBox False
+  274          1 Construct                    189:9-189:37 ExpBox False
+  275          1 Construct                    186:7-189:39 ExpBox False
+  276          1 Construct                    185:7-189:39 ExpBox False
+  277          1 Construct                    180:5-189:41 ExpBox False
+  278          1 Construct                    179:1-189:41 TopLevelBox ["rotxM"]
+  279          0 Construct                   233:26-233:26 ExpBox False
+  280          0 Construct                   233:20-233:26 ExpBox False
+  281          0 Construct                   232:13-232:14 ExpBox False
+  282          0 Construct                   232:16-232:19 ExpBox False
+  283          0 Construct                    232:6-232:19 ExpBox False
+  284          0 Construct                   232:29-232:32 ExpBox False
+  285          0 Construct                   232:34-232:35 ExpBox False
+  286          0 Construct                   232:22-232:35 ExpBox False
+  287          0 Construct                    232:5-232:36 ExpBox False
+  288          0 Construct                    231:1-233:26 TopLevelBox ["rotateEyeX"]
+  289          1 Construct                   177:22-177:22 ExpBox False
+  290          1 Construct                   177:14-177:22 ExpBox False
+  291          1 Construct                    177:9-177:22 LocalBox ["scaleM","z'"]
+  292          1 Construct                   176:22-176:22 ExpBox False
+  293          1 Construct                   176:14-176:22 ExpBox False
+  294          1 Construct                    176:9-176:22 LocalBox ["scaleM","y'"]
+  295          1 Construct                   175:22-175:22 ExpBox False
+  296          1 Construct                   175:14-175:22 ExpBox False
+  297          1 Construct                    175:9-175:22 LocalBox ["scaleM","x'"]
+  298          1 Construct                   166:13-166:14 ExpBox False
+  299          1 Construct                   166:20-166:20 ExpBox False
+  300          1 Construct                   166:26-166:26 ExpBox False
+  301          1 Construct                   166:29-166:29 ExpBox False
+  302          1 Construct                    166:9-166:31 ExpBox False
+  303          1 Construct                   167:14-167:14 ExpBox False
+  304          1 Construct                   167:19-167:20 ExpBox False
+  305          1 Construct                   167:26-167:26 ExpBox False
+  306          1 Construct                   167:29-167:29 ExpBox False
+  307          1 Construct                    167:9-167:31 ExpBox False
+  308          1 Construct                   168:14-168:14 ExpBox False
+  309          1 Construct                   168:20-168:20 ExpBox False
+  310          1 Construct                   168:25-168:26 ExpBox False
+  311          1 Construct                   168:29-168:29 ExpBox False
+  312          1 Construct                    168:9-168:31 ExpBox False
+  313          1 Construct                   169:14-169:14 ExpBox False
+  314          1 Construct                   169:20-169:20 ExpBox False
+  315          1 Construct                   169:26-169:26 ExpBox False
+  316          1 Construct                   169:29-169:29 ExpBox False
+  317          1 Construct                    169:9-169:31 ExpBox False
+  318          1 Construct                    166:7-169:33 ExpBox False
+  319          1 Construct                    165:7-169:33 ExpBox False
+  320          1 Construct                   171:11-171:11 ExpBox False
+  321          1 Construct                   171:13-171:14 ExpBox False
+  322          1 Construct                   171:11-171:14 ExpBox False
+  323          1 Construct                   171:20-171:20 ExpBox False
+  324          1 Construct                   171:26-171:26 ExpBox False
+  325          1 Construct                   171:29-171:29 ExpBox False
+  326          1 Construct                    171:9-171:31 ExpBox False
+  327          1 Construct                   172:14-172:14 ExpBox False
+  328          1 Construct                   172:17-172:17 ExpBox False
+  329          1 Construct                   172:19-172:20 ExpBox False
+  330          1 Construct                   172:17-172:20 ExpBox False
+  331          1 Construct                   172:26-172:26 ExpBox False
+  332          1 Construct                   172:29-172:29 ExpBox False
+  333          1 Construct                    172:9-172:31 ExpBox False
+  334          1 Construct                   173:14-173:14 ExpBox False
+  335          1 Construct                   173:20-173:20 ExpBox False
+  336          1 Construct                   173:23-173:23 ExpBox False
+  337          1 Construct                   173:25-173:26 ExpBox False
+  338          1 Construct                   173:23-173:26 ExpBox False
+  339          1 Construct                   173:29-173:29 ExpBox False
+  340          1 Construct                    173:9-173:31 ExpBox False
+  341          1 Construct                   174:14-174:14 ExpBox False
+  342          1 Construct                   174:20-174:20 ExpBox False
+  343          1 Construct                   174:26-174:26 ExpBox False
+  344          1 Construct                   174:29-174:29 ExpBox False
+  345          1 Construct                    174:9-174:31 ExpBox False
+  346          1 Construct                    171:7-174:33 ExpBox False
+  347          1 Construct                    170:7-174:33 ExpBox False
+  348          1 Construct                    165:5-174:35 ExpBox False
+  349          1 Construct                    164:1-177:22 TopLevelBox ["scaleM"]
+  350          3 Construct                   154:11-154:11 ExpBox False
+  351          3 Construct                   154:14-154:14 ExpBox False
+  352          3 Construct                   154:17-154:17 ExpBox False
+  353          3 Construct                   154:20-154:20 ExpBox False
+  354          3 Construct                    154:9-154:22 ExpBox False
+  355          3 Construct                   155:11-155:11 ExpBox False
+  356          3 Construct                   155:14-155:14 ExpBox False
+  357          3 Construct                   155:17-155:17 ExpBox False
+  358          3 Construct                   155:20-155:20 ExpBox False
+  359          3 Construct                    155:9-155:22 ExpBox False
+  360          3 Construct                   156:11-156:11 ExpBox False
+  361          3 Construct                   156:14-156:14 ExpBox False
+  362          3 Construct                   156:17-156:17 ExpBox False
+  363          3 Construct                   156:20-156:20 ExpBox False
+  364          3 Construct                    156:9-156:22 ExpBox False
+  365          1 Construct                   157:11-157:11 ExpBox False
+  366          1 Construct                   157:14-157:14 ExpBox False
+  367          1 Construct                   157:17-157:17 ExpBox False
+  368          1 Construct                   157:20-157:20 ExpBox False
+  369          3 Construct                    157:9-157:22 ExpBox False
+  370          3 Construct                    154:7-157:24 ExpBox False
+  371          3 Construct                    153:7-157:24 ExpBox False
+  372          3 Construct                   159:11-159:11 ExpBox False
+  373          3 Construct                   159:14-159:14 ExpBox False
+  374          3 Construct                   159:17-159:17 ExpBox False
+  375          3 Construct                   159:21-159:21 ExpBox False
+  376          3 Construct                   159:20-159:21 ExpBox False
+  377          3 Construct                    159:9-159:23 ExpBox False
+  378          3 Construct                   160:11-160:11 ExpBox False
+  379          3 Construct                   160:14-160:14 ExpBox False
+  380          3 Construct                   160:17-160:17 ExpBox False
+  381          3 Construct                   160:21-160:21 ExpBox False
+  382          3 Construct                   160:20-160:21 ExpBox False
+  383          3 Construct                    160:9-160:23 ExpBox False
+  384          3 Construct                   161:11-161:11 ExpBox False
+  385          3 Construct                   161:14-161:14 ExpBox False
+  386          3 Construct                   161:17-161:17 ExpBox False
+  387          3 Construct                   161:21-161:21 ExpBox False
+  388          3 Construct                   161:20-161:21 ExpBox False
+  389          3 Construct                    161:9-161:23 ExpBox False
+  390          1 Construct                   162:11-162:11 ExpBox False
+  391          1 Construct                   162:14-162:14 ExpBox False
+  392          1 Construct                   162:17-162:17 ExpBox False
+  393          1 Construct                   162:21-162:21 ExpBox False
+  394          3 Construct                    162:9-162:23 ExpBox False
+  395          3 Construct                    159:7-162:25 ExpBox False
+  396          3 Construct                    158:7-162:25 ExpBox False
+  397          3 Construct                    153:5-162:27 ExpBox False
+  398          3 Construct                    152:1-162:27 TopLevelBox ["transM"]
+  399          0 Construct                   230:27-230:29 ExpBox False
+  400          0 Construct                   230:20-230:29 ExpBox False
+  401          0 Construct                   229:13-229:14 ExpBox False
+  402          0 Construct                   229:16-229:19 ExpBox False
+  403          0 Construct                    229:6-229:19 ExpBox False
+  404          0 Construct                   229:29-229:32 ExpBox False
+  405          0 Construct                   229:34-229:35 ExpBox False
+  406          0 Construct                   229:22-229:35 ExpBox False
+  407          0 Construct                    229:5-229:36 ExpBox False
+  408          0 Construct                    228:1-230:29 TopLevelBox ["translateEye"]
+  409          1 Construct                   147:11-147:13 ExpBox False
+  410          1 Construct                   147:16-147:18 ExpBox False
+  411          1 Construct                   147:21-147:23 ExpBox False
+  412          1 Construct                   147:26-147:28 ExpBox False
+  413          1 Construct                    147:9-147:30 ExpBox False
+  414          1 Construct                   148:11-148:13 ExpBox False
+  415          1 Construct                   148:16-148:18 ExpBox False
+  416          1 Construct                   148:21-148:23 ExpBox False
+  417          1 Construct                   148:26-148:28 ExpBox False
+  418          1 Construct                    148:9-148:30 ExpBox False
+  419          1 Construct                   149:11-149:13 ExpBox False
+  420          1 Construct                   149:16-149:18 ExpBox False
+  421          1 Construct                   149:21-149:23 ExpBox False
+  422          1 Construct                   149:26-149:28 ExpBox False
+  423          1 Construct                    149:9-149:30 ExpBox False
+  424          1 Construct                   150:11-150:13 ExpBox False
+  425          1 Construct                   150:16-150:18 ExpBox False
+  426          1 Construct                   150:21-150:23 ExpBox False
+  427          1 Construct                   150:26-150:28 ExpBox False
+  428          1 Construct                    150:9-150:30 ExpBox False
+  429          1 Construct                    147:7-150:32 ExpBox False
+  430          1 Construct                    146:8-150:32 ExpBox False
+  431          1 Construct                    146:1-150:32 TopLevelBox ["unit"]
+  432          1 Construct                    227:8-227:11 ExpBox False
+  433          1 Construct                   227:14-227:17 ExpBox False
+  434          1 Construct                    227:7-227:18 ExpBox False
+  435          1 Construct                    227:1-227:18 TopLevelBox ["eye"]
+  436          6 Construct                   116:63-116:63 ExpBox False
+  437          6 Construct                   116:65-116:66 ExpBox False
+  438          6 Construct                   116:55-116:67 ExpBox False
+  439          6 Construct                   116:83-116:85 ExpBox False
+  440          6 Construct                   116:87-116:88 ExpBox False
+  441          6 Construct                   116:75-116:89 ExpBox False
+  442          6 Construct                   116:91-116:91 ExpBox False
+  443          6 Construct                   116:44-116:91 ExpBox True
+  444          1 Construct                   117:66-117:68 ExpBox False
+  445          1 Construct                   117:70-117:70 ExpBox False
+  446          1 Construct                   117:55-117:71 ExpBox False
+  447          1 Construct                   117:86-117:88 ExpBox False
+  448          1 Construct                   117:90-117:90 ExpBox False
+  449          1 Construct                   117:75-117:91 ExpBox False
+  450          1 Construct                   117:44-117:91 ExpBox True
+  451          0 Construct                   118:66-118:68 ExpBox False
+  452          0 Construct                   118:70-118:70 ExpBox False
+  453          0 Construct                   118:55-118:71 ExpBox False
+  454          0 Construct                   118:86-118:88 ExpBox False
+  455          0 Construct                   118:90-118:90 ExpBox False
+  456          0 Construct                   118:75-118:91 ExpBox False
+  457          0 Construct                   118:44-118:91 ExpBox True
+  458          0 Construct                   119:66-119:68 ExpBox False
+  459          0 Construct                   119:70-119:70 ExpBox False
+  460          0 Construct                   119:55-119:71 ExpBox False
+  461          0 Construct                   119:86-119:88 ExpBox False
+  462          0 Construct                   119:90-119:90 ExpBox False
+  463          0 Construct                   119:75-119:91 ExpBox False
+  464          0 Construct                   119:44-119:91 ExpBox True
+  465          6 Construct                   120:69-120:69 ExpBox False
+  466          6 Construct                   120:71-120:73 ExpBox False
+  467          6 Construct                   120:55-120:74 ExpBox False
+  468          6 Construct                   120:87-120:89 ExpBox False
+  469          6 Construct                   120:91-120:91 ExpBox False
+  470          6 Construct                   120:76-120:92 ExpBox False
+  471          6 Construct                   120:44-120:92 ExpBox True
+  472          2 Construct                   121:55-121:55 ExpBox False
+  473          2 Construct                   121:57-121:58 ExpBox False
+  474          2 Construct                   121:60-121:63 ExpBox False
+  475          2 Construct                   121:44-121:63 ExpBox True
+  476         15 Construct                    116:1-121:63 TopLevelBox ["transform"]
+  477          3 Construct                   126:17-126:25 ExpBox False
+  478          3 Construct                   126:36-126:38 ExpBox False
+  479          3 Construct                   126:29-126:38 ExpBox False
+  480          3 Construct                   126:17-126:38 ExpBox False
+  481          3 Construct                    126:1-126:38 TopLevelBox ["translate"]
+  482          0 Construct                   127:27-127:27 ExpBox False
+  483          0 Construct                   127:30-127:30 ExpBox False
+  484          0 Construct                   127:33-127:33 ExpBox False
+  485          0 Construct                   127:26-127:34 ExpBox False
+  486          0 Construct                   127:16-127:34 ExpBox False
+  487          0 Construct                    127:1-127:34 TopLevelBox ["translateX"]
+  488          0 Construct                   128:27-128:27 ExpBox False
+  489          0 Construct                   128:30-128:30 ExpBox False
+  490          0 Construct                   128:33-128:33 ExpBox False
+  491          0 Construct                   128:26-128:34 ExpBox False
+  492          0 Construct                   128:16-128:34 ExpBox False
+  493          0 Construct                    128:1-128:34 TopLevelBox ["translateY"]
+  494          0 Construct                   129:27-129:27 ExpBox False
+  495          0 Construct                   129:30-129:30 ExpBox False
+  496          0 Construct                   129:33-129:33 ExpBox False
+  497          0 Construct                   129:26-129:34 ExpBox False
+  498          0 Construct                   129:16-129:34 ExpBox False
+  499          0 Construct                    129:1-129:34 TopLevelBox ["translateZ"]
+  500          1 Construct                   134:13-134:21 ExpBox False
+  501          1 Construct                   134:32-134:34 ExpBox False
+  502          1 Construct                   134:25-134:34 ExpBox False
+  503          1 Construct                   134:13-134:34 ExpBox False
+  504          1 Construct                    134:1-134:34 TopLevelBox ["scale"]
+  505          0 Construct                   135:19-135:19 ExpBox False
+  506          0 Construct                   135:22-135:22 ExpBox False
+  507          0 Construct                   135:25-135:25 ExpBox False
+  508          0 Construct                   135:18-135:26 ExpBox False
+  509          0 Construct                   135:12-135:26 ExpBox False
+  510          0 Construct                    135:1-135:26 TopLevelBox ["scaleX"]
+  511          0 Construct                   136:19-136:19 ExpBox False
+  512          0 Construct                   136:22-136:22 ExpBox False
+  513          0 Construct                   136:25-136:25 ExpBox False
+  514          0 Construct                   136:18-136:26 ExpBox False
+  515          0 Construct                   136:12-136:26 ExpBox False
+  516          0 Construct                    136:1-136:26 TopLevelBox ["scaleY"]
+  517          0 Construct                   137:19-137:19 ExpBox False
+  518          0 Construct                   137:22-137:22 ExpBox False
+  519          0 Construct                   137:25-137:25 ExpBox False
+  520          0 Construct                   137:18-137:26 ExpBox False
+  521          0 Construct                   137:12-137:26 ExpBox False
+  522          0 Construct                    137:1-137:26 TopLevelBox ["scaleZ"]
+  523          1 Construct                   138:19-138:19 ExpBox False
+  524          1 Construct                   138:21-138:21 ExpBox False
+  525          1 Construct                   138:23-138:23 ExpBox False
+  526          1 Construct                   138:18-138:24 ExpBox False
+  527          1 Construct                   138:12-138:24 ExpBox False
+  528          1 Construct                    138:1-138:24 TopLevelBox ["uscale"]
+  529          1 Construct                   142:13-142:21 ExpBox False
+  530          1 Construct                   142:31-142:31 ExpBox False
+  531          1 Construct                   142:25-142:31 ExpBox False
+  532          1 Construct                   142:13-142:31 ExpBox False
+  533          1 Construct                    142:1-142:31 TopLevelBox ["rotateX"]
+  534          1 Construct                   143:13-143:21 ExpBox False
+  535          1 Construct                   143:31-143:31 ExpBox False
+  536          1 Construct                   143:25-143:31 ExpBox False
+  537          1 Construct                   143:13-143:31 ExpBox False
+  538          1 Construct                    143:1-143:31 TopLevelBox ["rotateY"]
+  539          0 Construct                   144:13-144:21 ExpBox False
+  540          0 Construct                   144:31-144:31 ExpBox False
+  541          0 Construct                   144:25-144:31 ExpBox False
+  542          0 Construct                   144:13-144:31 ExpBox False
+  543          0 Construct                    144:1-144:31 TopLevelBox ["rotateZ"]
+  544          1 Construct                      90:9-90:13 ExpBox False
+  545          1 Construct                      90:1-90:13 TopLevelBox ["plane"]
+  546          1 Construct                     86:17-86:17 ExpBox False
+  547          1 Construct                     86:19-86:19 ExpBox False
+  548          1 Construct                     86:13-86:19 ExpBox False
+  549          1 Construct                      86:1-86:19 TopLevelBox ["mkBox"]
+  550          0 Construct                     92:16-92:16 ExpBox False
+  551          0 Construct                     92:15-92:16 ExpBox False
+  552          0 Construct                     92:20-92:26 ExpBox False
+  553          0 Construct                     92:14-92:27 ExpBox False
+  554          0 Construct                     92:30-92:30 ExpBox False
+  555          0 Construct                     92:34-92:40 ExpBox False
+  556          0 Construct                     92:29-92:41 ExpBox False
+  557          0 Construct                     93:16-93:16 ExpBox False
+  558          0 Construct                     93:15-93:16 ExpBox False
+  559          0 Construct                     93:20-93:26 ExpBox False
+  560          0 Construct                     93:14-93:27 ExpBox False
+  561          0 Construct                     93:30-93:30 ExpBox False
+  562          0 Construct                     93:34-93:40 ExpBox False
+  563          0 Construct                     93:29-93:41 ExpBox False
+  564          0 Construct                     94:16-94:16 ExpBox False
+  565          0 Construct                     94:15-94:16 ExpBox False
+  566          0 Construct                     94:20-94:26 ExpBox False
+  567          0 Construct                     94:14-94:27 ExpBox False
+  568          0 Construct                     94:30-94:30 ExpBox False
+  569          0 Construct                     94:34-94:40 ExpBox False
+  570          0 Construct                     94:29-94:41 ExpBox False
+  571          0 Construct                     92:11-94:42 ExpBox False
+  572          0 Construct                     94:52-94:52 ExpBox False
+  573          0 Construct                     94:44-94:53 ExpBox False
+  574          0 Construct                      92:5-94:53 ExpBox False
+  575          0 Construct                      91:1-94:53 TopLevelBox ["sphere"]
+  576          0 Construct                     96:16-96:16 ExpBox False
+  577          0 Construct                     96:15-96:16 ExpBox False
+  578          0 Construct                     96:20-96:26 ExpBox False
+  579          0 Construct                     96:14-96:27 ExpBox False
+  580          0 Construct                     96:30-96:30 ExpBox False
+  581          0 Construct                     96:34-96:40 ExpBox False
+  582          0 Construct                     96:29-96:41 ExpBox False
+  583          0 Construct                     97:20-97:26 ExpBox False
+  584          0 Construct                     97:14-97:27 ExpBox False
+  585          0 Construct                     97:30-97:30 ExpBox False
+  586          0 Construct                     97:34-97:40 ExpBox False
+  587          0 Construct                     97:29-97:41 ExpBox False
+  588          0 Construct                     98:16-98:16 ExpBox False
+  589          0 Construct                     98:15-98:16 ExpBox False
+  590          0 Construct                     98:20-98:26 ExpBox False
+  591          0 Construct                     98:14-98:27 ExpBox False
+  592          0 Construct                     98:30-98:30 ExpBox False
+  593          0 Construct                     98:34-98:40 ExpBox False
+  594          0 Construct                     98:29-98:41 ExpBox False
+  595          0 Construct                     96:11-98:42 ExpBox False
+  596          0 Construct                     98:50-98:50 ExpBox False
+  597          0 Construct                     98:44-98:51 ExpBox False
+  598          0 Construct                      96:5-98:51 ExpBox False
+  599          0 Construct                      95:1-98:51 TopLevelBox ["cone"]
+  600          1 Construct                   100:17-100:23 ExpBox False
+  601          1 Construct                   100:14-100:24 ExpBox False
+  602          1 Construct                   100:27-100:27 ExpBox False
+  603          1 Construct                   100:31-100:37 ExpBox False
+  604          1 Construct                   100:26-100:38 ExpBox False
+  605          1 Construct                   101:17-101:23 ExpBox False
+  606          1 Construct                   101:14-101:24 ExpBox False
+  607          1 Construct                   101:27-101:27 ExpBox False
+  608          1 Construct                   101:31-101:37 ExpBox False
+  609          1 Construct                   101:26-101:38 ExpBox False
+  610          1 Construct                   102:17-102:23 ExpBox False
+  611          1 Construct                   102:14-102:24 ExpBox False
+  612          1 Construct                   102:27-102:27 ExpBox False
+  613          1 Construct                   102:31-102:37 ExpBox False
+  614          1 Construct                   102:26-102:38 ExpBox False
+  615          1 Construct                   100:11-102:39 ExpBox False
+  616          1 Construct                   102:47-102:47 ExpBox False
+  617          1 Construct                   102:41-102:48 ExpBox False
+  618          1 Construct                    100:5-102:48 ExpBox False
+  619          1 Construct                     99:1-102:48 TopLevelBox ["cube"]
+  620          0 Construct                   104:16-104:16 ExpBox False
+  621          0 Construct                   104:15-104:16 ExpBox False
+  622          0 Construct                   104:20-104:26 ExpBox False
+  623          0 Construct                   104:14-104:27 ExpBox False
+  624          0 Construct                   104:30-104:30 ExpBox False
+  625          0 Construct                   104:34-104:40 ExpBox False
+  626          0 Construct                   104:29-104:41 ExpBox False
+  627          0 Construct                   105:20-105:26 ExpBox False
+  628          0 Construct                   105:14-105:27 ExpBox False
+  629          0 Construct                   105:30-105:30 ExpBox False
+  630          0 Construct                   105:34-105:40 ExpBox False
+  631          0 Construct                   105:29-105:41 ExpBox False
+  632          0 Construct                   106:16-106:16 ExpBox False
+  633          0 Construct                   106:15-106:16 ExpBox False
+  634          0 Construct                   106:20-106:26 ExpBox False
+  635          0 Construct                   106:14-106:27 ExpBox False
+  636          0 Construct                   106:30-106:30 ExpBox False
+  637          0 Construct                   106:34-106:40 ExpBox False
+  638          0 Construct                   106:29-106:41 ExpBox False
+  639          0 Construct                   104:11-106:42 ExpBox False
+  640          0 Construct                   106:54-106:54 ExpBox False
+  641          0 Construct                   106:44-106:55 ExpBox False
+  642          0 Construct                    104:5-106:55 ExpBox False
+  643          0 Construct                    103:1-106:55 TopLevelBox ["cylinder"]
+  644          0 Construct                     81:31-81:32 ExpBox False
+  645          0 Construct                     81:46-81:46 ExpBox False
+  646          0 Construct                     81:48-81:48 ExpBox False
+  647          0 Construct                     81:34-81:49 ExpBox False
+  648          0 Construct                     81:27-81:49 ExpBox True
+  649          0 Construct                     84:29-84:29 ExpBox False
+  650          0 Construct                     84:31-84:31 ExpBox False
+  651          0 Construct                     84:18-84:31 ExpBox True
+  652          0 Construct                      81:1-84:31 TopLevelBox ["difference"]
+  653          0 Construct                     78:53-78:54 ExpBox False
+  654          0 Construct                     78:56-78:57 ExpBox False
+  655          0 Construct                     78:43-78:58 ExpBox False
+  656          0 Construct                     78:71-78:71 ExpBox False
+  657          0 Construct                     78:73-78:73 ExpBox False
+  658          0 Construct                     78:60-78:74 ExpBox False
+  659          0 Construct                     78:39-78:74 ExpBox True
+  660          0 Construct                     79:27-79:27 ExpBox False
+  661          0 Construct                     79:29-79:29 ExpBox False
+  662          0 Construct                     79:17-79:29 ExpBox True
+  663          0 Construct                      78:1-79:29 TopLevelBox ["intersect"]
+  664          0 Construct                     74:49-74:50 ExpBox False
+  665          0 Construct                     74:52-74:53 ExpBox False
+  666          0 Construct                     74:39-74:54 ExpBox False
+  667          0 Construct                     74:63-74:63 ExpBox False
+  668          0 Construct                     74:65-74:65 ExpBox False
+  669          0 Construct                     74:56-74:66 ExpBox False
+  670          0 Construct                     74:35-74:66 ExpBox True
+  671          1 Construct                     75:19-75:19 ExpBox False
+  672          1 Construct                     75:21-75:21 ExpBox False
+  673          1 Construct                     75:13-75:21 ExpBox True
+  674          1 Construct                      74:1-75:21 TopLevelBox ["union"]
+  675          0 Construct                     35:12-35:15 TopLevelBox ["showsPrec"]
+  676          0 Construct                     35:12-35:15 TopLevelBox ["showList"]
+  677          0 Construct                     51:12-51:15 TopLevelBox ["showsPrec"]
+  678          0 Construct                     51:12-51:15 TopLevelBox ["showList"]
+  679          0 Construct                     64:13-64:16 TopLevelBox ["showsPrec"]
+  680          0 Construct                     64:13-64:16 TopLevelBox ["showList"]
+    0          1 Intersections               404:26-404:28 ExpBox False
+    1          1 Intersections               404:24-404:29 ExpBox False
+    2          1 Intersections               404:31-404:33 ExpBox False
+    3          1 Intersections               404:15-404:33 ExpBox False
+    4          1 Intersections                404:1-404:33 TopLevelBox ["infInterval"]
+    5     317803 Intersections               402:14-402:15 ExpBox False
+    6     317803 Intersections               402:19-402:24 ExpBox False
+    7     317803 Intersections               402:13-402:25 ExpBox False
+    8     317803 Intersections               402:29-402:33 ExpBox False
+    9     317803 Intersections               402:13-402:33 ExpBox False
+   10     317803 Intersections                402:9-402:33 LocalBox ["intersectRayWithSlab","b"]
+   11     317803 Intersections               401:14-401:15 ExpBox False
+   12     317803 Intersections               401:19-401:24 ExpBox False
+   13     317803 Intersections               401:13-401:25 ExpBox False
+   14     317803 Intersections               401:29-401:33 ExpBox False
+   15     317803 Intersections               401:13-401:33 ExpBox False
+   16     317803 Intersections                401:9-401:33 LocalBox ["intersectRayWithSlab","a"]
+   17     346614 Intersections                 398:5-398:9 ExpBox False
+   18     346614 Intersections               398:14-398:14 ExpBox False
+   19     346614 Intersections                398:5-398:14 ExpBox False
+   20      28811 Intersections                398:5-398:14 BinBox GuardBinBox True
+   21     317803 Intersections                398:5-398:14 BinBox GuardBinBox False
+   22      28811 Intersections               398:21-398:26 ExpBox False
+   23      28811 Intersections               398:30-398:31 ExpBox False
+   24      28811 Intersections               398:21-398:31 ExpBox False
+   25      21311 Intersections               398:36-398:41 ExpBox False
+   26      21311 Intersections               398:45-398:46 ExpBox False
+   27      21311 Intersections               398:36-398:46 ExpBox False
+   28      28811 Intersections               398:21-398:46 ExpBox False
+   29          1 Intersections               398:21-398:46 BinBox CondBinBox True
+   30      10594 Intersections               398:21-398:46 BinBox CondBinBox False
+   31          1 Intersections               398:53-398:62 ExpBox True
+   32      10594 Intersections               398:69-398:79 ExpBox True
+   33      28811 Intersections               398:18-398:79 ExpBox True
+   34     317803 Intersections                 399:5-399:9 ExpBox False
+   35     317803 Intersections               399:14-399:14 ExpBox False
+   36     317803 Intersections                399:5-399:14 ExpBox False
+   37     215534 Intersections                399:5-399:14 BinBox GuardBinBox True
+   38     102269 Intersections                399:5-399:14 BinBox GuardBinBox False
+   39     215534 Intersections               399:27-399:27 ExpBox False
+   40     215534 Intersections               399:29-399:29 ExpBox False
+   41     215534 Intersections               399:18-399:29 ExpBox True
+   42     102269 Intersections                400:5-400:13 ExpBox False
+   43     102269 Intersections                400:5-400:13 BinBox GuardBinBox True
+   44          0 Intersections                400:5-400:13 BinBox GuardBinBox False
+   45     102269 Intersections               400:27-400:27 ExpBox False
+   46     102269 Intersections               400:29-400:29 ExpBox False
+   47     102269 Intersections               400:18-400:29 ExpBox True
+   48     346614 Intersections                397:1-402:33 TopLevelBox ["intersectRayWithSlab"]
+   49          0 Intersections               389:34-389:43 ExpBox True
+   50          3 Intersections               390:34-390:43 ExpBox True
+   51     147905 Intersections                 392:5-392:5 ExpBox False
+   52     147905 Intersections                 392:9-392:9 ExpBox False
+   53     147905 Intersections                 392:5-392:9 ExpBox False
+   54      81032 Intersections               392:14-392:14 ExpBox False
+   55      81032 Intersections               392:18-392:18 ExpBox False
+   56      81032 Intersections               392:14-392:18 ExpBox False
+   57     147905 Intersections                392:5-392:18 ExpBox False
+   58          2 Intersections                392:5-392:18 BinBox GuardBinBox True
+   59      67893 Intersections                392:5-392:18 BinBox GuardBinBox False
+   60          2 Intersections               392:22-392:31 ExpBox True
+   61      67893 Intersections                393:5-393:13 ExpBox False
+   62      67893 Intersections                393:5-393:13 BinBox GuardBinBox True
+   63          0 Intersections                393:5-393:13 BinBox GuardBinBox False
+   64      67893 Intersections               393:27-393:27 ExpBox False
+   65      67893 Intersections               393:35-393:35 ExpBox False
+   66      67893 Intersections               393:26-393:36 ExpBox False
+   67      67893 Intersections               393:39-393:39 ExpBox False
+   68      67893 Intersections               393:47-393:47 ExpBox False
+   69      67893 Intersections               393:38-393:48 ExpBox False
+   70      67893 Intersections               393:17-393:48 ExpBox True
+   71     231076 Intersections                389:1-393:48 TopLevelBox ["intersectInterval"]
+   72      17309 Intersections               376:29-376:32 ExpBox True
+   73          3 Intersections               377:29-377:33 ExpBox True
+   74     115538 Intersections                376:1-377:33 TopLevelBox ["isInterval"]
+   75     115538 Intersections               384:51-384:51 ExpBox False
+   76     115538 Intersections               384:43-384:52 ExpBox False
+   77     115538 Intersections               384:66-384:66 ExpBox False
+   78     115538 Intersections               384:54-384:67 ExpBox False
+   79     115538 Intersections               384:70-384:71 ExpBox False
+   80     108038 Intersections               384:74-384:75 ExpBox False
+   81     115538 Intersections               384:69-384:76 ExpBox False
+   82     115538 Intersections               384:22-384:76 ExpBox False
+   83     115538 Intersections                384:9-384:76 LocalBox ["intersectWithBox","z_interval"]
+   84     115538 Intersections               383:51-383:51 ExpBox False
+   85     115538 Intersections               383:43-383:52 ExpBox False
+   86     115538 Intersections               383:66-383:66 ExpBox False
+   87     115538 Intersections               383:54-383:67 ExpBox False
+   88     115538 Intersections               383:70-383:71 ExpBox False
+   89     115538 Intersections               383:74-383:75 ExpBox False
+   90     115538 Intersections               383:69-383:76 ExpBox False
+   91     115538 Intersections               383:22-383:76 ExpBox False
+   92     115538 Intersections                383:9-383:76 LocalBox ["intersectWithBox","y_interval"]
+   93     115538 Intersections               382:51-382:51 ExpBox False
+   94     115538 Intersections               382:43-382:52 ExpBox False
+   95     115538 Intersections               382:66-382:66 ExpBox False
+   96     115538 Intersections               382:54-382:67 ExpBox False
+   97     115538 Intersections               382:70-382:71 ExpBox False
+   98     115538 Intersections               382:74-382:75 ExpBox False
+   99     115538 Intersections               382:69-382:76 ExpBox False
+  100     115538 Intersections               382:22-382:76 ExpBox False
+  101     115538 Intersections                382:9-382:76 LocalBox ["intersectWithBox","x_interval"]
+  102     115538 Intersections               385:38-385:47 ExpBox False
+  103     115538 Intersections               386:39-386:48 ExpBox False
+  104     115538 Intersections               386:50-386:59 ExpBox False
+  105     115538 Intersections               386:20-386:60 ExpBox False
+  106     115538 Intersections               385:20-386:60 ExpBox False
+  107     115538 Intersections                385:9-386:60 LocalBox ["intersectWithBox","interval"]
+  108     115538 Intersections               381:16-381:23 ExpBox False
+  109     115538 Intersections                381:5-381:23 ExpBox False
+  110     115538 Intersections                380:1-386:60 TopLevelBox ["intersectWithBox"]
+  111          0 Intersections               359:14-359:14 ExpBox False
+  112          0 Intersections               359:11-359:14 ExpBox False
+  113          0 Intersections               359:18-359:18 ExpBox False
+  114          0 Intersections               359:22-359:22 ExpBox False
+  115          0 Intersections               359:18-359:22 ExpBox False
+  116          0 Intersections               359:26-359:26 ExpBox False
+  117          0 Intersections               359:18-359:26 ExpBox False
+  118          0 Intersections               359:11-359:26 ExpBox False
+  119          0 Intersections                359:7-359:26 LocalBox ["quadratic","d"]
+  120          0 Intersections               360:15-360:15 ExpBox False
+  121          0 Intersections               360:24-360:24 ExpBox False
+  122          0 Intersections               360:15-360:24 ExpBox False
+  123          0 Intersections               360:15-360:24 BinBox CondBinBox True
+  124          0 Intersections               360:15-360:24 BinBox CondBinBox False
+  125          0 Intersections               360:31-360:31 ExpBox True
+  126          0 Intersections               360:38-360:38 ExpBox True
+  127          0 Intersections               360:12-360:38 ExpBox False
+  128          0 Intersections                360:7-360:38 LocalBox ["quadratic","d'"]
+  129          0 Intersections                361:9-361:10 ExpBox False
+  130          0 Intersections               361:14-361:14 ExpBox False
+  131          0 Intersections                361:9-361:14 ExpBox False
+  132          0 Intersections                361:9-361:14 BinBox CondBinBox True
+  133          0 Intersections                361:9-361:14 BinBox CondBinBox False
+  134          0 Intersections               362:11-362:17 ExpBox True
+  135          0 Intersections               364:12-364:12 ExpBox False
+  136          0 Intersections               364:16-364:16 ExpBox False
+  137          0 Intersections               364:12-364:16 ExpBox False
+  138          0 Intersections               364:12-364:16 BinBox CondBinBox True
+  139          0 Intersections               364:12-364:16 BinBox CondBinBox False
+  140          0 Intersections               364:32-364:32 ExpBox False
+  141          0 Intersections               364:30-364:33 ExpBox False
+  142          0 Intersections               364:42-364:43 ExpBox False
+  143          0 Intersections               364:37-364:43 ExpBox False
+  144          0 Intersections               364:29-364:44 ExpBox False
+  145          0 Intersections               364:49-364:49 ExpBox False
+  146          0 Intersections               364:53-364:53 ExpBox False
+  147          0 Intersections               364:48-364:54 ExpBox False
+  148          0 Intersections               364:29-364:54 ExpBox False
+  149          0 Intersections               365:32-365:32 ExpBox False
+  150          0 Intersections               365:30-365:33 ExpBox False
+  151          0 Intersections               365:42-365:43 ExpBox False
+  152          0 Intersections               365:37-365:43 ExpBox False
+  153          0 Intersections               365:29-365:44 ExpBox False
+  154          0 Intersections               365:49-365:49 ExpBox False
+  155          0 Intersections               365:53-365:53 ExpBox False
+  156          0 Intersections               365:48-365:54 ExpBox False
+  157          0 Intersections               365:29-365:54 ExpBox False
+  158          0 Intersections               364:28-365:55 ExpBox False
+  159          0 Intersections               364:23-365:55 ExpBox True
+  160          0 Intersections               366:32-366:32 ExpBox False
+  161          0 Intersections               366:30-366:33 ExpBox False
+  162          0 Intersections               366:42-366:43 ExpBox False
+  163          0 Intersections               366:37-366:43 ExpBox False
+  164          0 Intersections               366:29-366:44 ExpBox False
+  165          0 Intersections               366:49-366:49 ExpBox False
+  166          0 Intersections               366:53-366:53 ExpBox False
+  167          0 Intersections               366:48-366:54 ExpBox False
+  168          0 Intersections               366:29-366:54 ExpBox False
+  169          0 Intersections               367:32-367:32 ExpBox False
+  170          0 Intersections               367:30-367:33 ExpBox False
+  171          0 Intersections               367:42-367:43 ExpBox False
+  172          0 Intersections               367:37-367:43 ExpBox False
+  173          0 Intersections               367:29-367:44 ExpBox False
+  174          0 Intersections               367:49-367:49 ExpBox False
+  175          0 Intersections               367:53-367:53 ExpBox False
+  176          0 Intersections               367:48-367:54 ExpBox False
+  177          0 Intersections               367:29-367:54 ExpBox False
+  178          0 Intersections               366:28-367:55 ExpBox False
+  179          0 Intersections               366:23-367:55 ExpBox True
+  180          0 Intersections                364:9-367:55 ExpBox True
+  181          0 Intersections                359:3-367:55 ExpBox False
+  182          0 Intersections                357:1-367:55 TopLevelBox ["quadratic"]
+  183          0 Intersections               348:23-348:23 ExpBox True
+  184          0 Intersections               349:27-349:27 ExpBox False
+  185          0 Intersections               349:23-349:27 ExpBox True
+  186          0 Intersections                348:9-349:27 LocalBox ["intersectConeSide","xor"]
+  187          0 Intersections               345:24-345:24 ExpBox False
+  188          0 Intersections               345:13-345:24 ExpBox False
+  189          0 Intersections                345:9-345:24 LocalBox ["intersectConeSide","c"]
+  190          0 Intersections               344:24-344:24 ExpBox False
+  191          0 Intersections               344:13-344:24 ExpBox False
+  192          0 Intersections                344:9-344:24 LocalBox ["intersectConeSide","b"]
+  193          0 Intersections               343:24-343:24 ExpBox False
+  194          0 Intersections               343:13-343:24 ExpBox False
+  195          0 Intersections                343:9-343:24 LocalBox ["intersectConeSide","a"]
+  196          0 Intersections               342:20-342:20 ExpBox False
+  197          0 Intersections               342:13-342:20 ExpBox False
+  198          0 Intersections                342:9-342:20 LocalBox ["intersectConeSide","z"]
+  199          0 Intersections               341:20-341:20 ExpBox False
+  200          0 Intersections               341:13-341:20 ExpBox False
+  201          0 Intersections                341:9-341:20 LocalBox ["intersectConeSide","y"]
+  202          0 Intersections               340:20-340:20 ExpBox False
+  203          0 Intersections               340:13-340:20 ExpBox False
+  204          0 Intersections                340:9-340:20 LocalBox ["intersectConeSide","x"]
+  205          0 Intersections               335:24-335:24 ExpBox False
+  206          0 Intersections               335:28-335:28 ExpBox False
+  207          0 Intersections               335:32-335:32 ExpBox False
+  208          0 Intersections               335:28-335:32 ExpBox False
+  209          0 Intersections               335:24-335:32 ExpBox False
+  210          0 Intersections               335:19-335:32 LocalBox ["intersectConeSide","g","z0"]
+  211          0 Intersections               334:24-334:24 ExpBox False
+  212          0 Intersections               334:28-334:28 ExpBox False
+  213          0 Intersections               334:32-334:32 ExpBox False
+  214          0 Intersections               334:28-334:32 ExpBox False
+  215          0 Intersections               334:24-334:32 ExpBox False
+  216          0 Intersections               334:19-334:32 LocalBox ["intersectConeSide","g","y0"]
+  217          0 Intersections               333:24-333:24 ExpBox False
+  218          0 Intersections               333:28-333:28 ExpBox False
+  219          0 Intersections               333:32-333:32 ExpBox False
+  220          0 Intersections               333:28-333:32 ExpBox False
+  221          0 Intersections               333:24-333:32 ExpBox False
+  222          0 Intersections               333:19-333:32 LocalBox ["intersectConeSide","g","x0"]
+  223          0 Intersections               336:31-336:32 ExpBox False
+  224          0 Intersections               336:34-336:35 ExpBox False
+  225          0 Intersections               336:37-336:38 ExpBox False
+  226          0 Intersections               336:24-336:38 ExpBox False
+  227          0 Intersections               336:19-336:38 LocalBox ["intersectConeSide","g","p0"]
+  228          0 Intersections               337:24-337:32 ExpBox False
+  229          0 Intersections               337:43-337:44 ExpBox False
+  230          0 Intersections               337:48-337:49 ExpBox False
+  231          0 Intersections               337:46-337:50 ExpBox False
+  232          0 Intersections               337:52-337:53 ExpBox False
+  233          0 Intersections               337:36-337:53 ExpBox False
+  234          0 Intersections               337:24-337:53 ExpBox False
+  235          0 Intersections               337:19-337:53 LocalBox ["intersectConeSide","g","v0"]
+  236          0 Intersections               338:39-338:40 ExpBox False
+  237          0 Intersections               338:30-338:40 ExpBox False
+  238          0 Intersections               332:34-332:34 ExpBox False
+  239          0 Intersections               332:36-332:36 ExpBox False
+  240          0 Intersections               332:38-332:38 ExpBox False
+  241          0 Intersections               332:28-332:38 ExpBox False
+  242          0 Intersections               332:19-332:38 LocalBox ["intersectConeSide","g","origin"]
+  243          0 Intersections               331:16-331:16 ExpBox False
+  244          0 Intersections               331:26-331:31 ExpBox False
+  245          0 Intersections               331:33-331:34 ExpBox False
+  246          0 Intersections               331:36-331:37 ExpBox False
+  247          0 Intersections               331:20-331:37 ExpBox False
+  248          0 Intersections               331:41-331:48 ExpBox False
+  249          0 Intersections               331:51-331:52 ExpBox False
+  250          0 Intersections               331:55-331:61 ExpBox False
+  251          0 Intersections               331:40-331:62 ExpBox False
+  252          0 Intersections               331:19-331:63 ExpBox False
+  253          0 Intersections               331:15-331:64 ExpBox False
+  254          0 Intersections                331:9-338:40 LocalBox ["intersectConeSide","g"]
+  255          0 Intersections               315:17-315:17 ExpBox False
+  256          0 Intersections               315:14-315:17 ExpBox False
+  257          0 Intersections               315:24-315:24 ExpBox False
+  258          0 Intersections               315:21-315:24 ExpBox False
+  259          0 Intersections               315:14-315:24 ExpBox False
+  260          0 Intersections               315:31-315:31 ExpBox False
+  261          0 Intersections               315:28-315:31 ExpBox False
+  262          0 Intersections               315:14-315:31 ExpBox False
+  263          0 Intersections                315:9-315:31 LocalBox ["intersectConeSide","c3"]
+  264          0 Intersections               314:14-314:14 ExpBox False
+  265          0 Intersections               314:19-314:19 ExpBox False
+  266          0 Intersections               314:23-314:23 ExpBox False
+  267          0 Intersections               314:19-314:23 ExpBox False
+  268          0 Intersections               314:27-314:27 ExpBox False
+  269          0 Intersections               314:31-314:31 ExpBox False
+  270          0 Intersections               314:27-314:31 ExpBox False
+  271          0 Intersections               314:19-314:31 ExpBox False
+  272          0 Intersections               314:35-314:35 ExpBox False
+  273          0 Intersections               314:39-314:39 ExpBox False
+  274          0 Intersections               314:35-314:39 ExpBox False
+  275          0 Intersections               314:18-314:40 ExpBox False
+  276          0 Intersections               314:14-314:40 ExpBox False
+  277          0 Intersections                314:9-314:40 LocalBox ["intersectConeSide","c2"]
+  278          0 Intersections               313:17-313:17 ExpBox False
+  279          0 Intersections               313:14-313:17 ExpBox False
+  280          0 Intersections               313:24-313:24 ExpBox False
+  281          0 Intersections               313:21-313:24 ExpBox False
+  282          0 Intersections               313:14-313:24 ExpBox False
+  283          0 Intersections               313:31-313:31 ExpBox False
+  284          0 Intersections               313:28-313:31 ExpBox False
+  285          0 Intersections               313:14-313:31 ExpBox False
+  286          0 Intersections                313:9-313:31 LocalBox ["intersectConeSide","c1"]
+  287          0 Intersections               316:24-316:25 ExpBox False
+  288          0 Intersections               316:27-316:28 ExpBox False
+  289          0 Intersections               316:30-316:31 ExpBox False
+  290          0 Intersections               316:14-316:31 ExpBox False
+  291          0 Intersections               317:20-317:29 ExpBox True
+  292          0 Intersections               325:22-325:22 ExpBox False
+  293          0 Intersections               325:26-325:27 ExpBox False
+  294          0 Intersections               325:31-325:31 ExpBox False
+  295          0 Intersections               325:26-325:31 ExpBox False
+  296          0 Intersections               325:22-325:31 ExpBox False
+  297          0 Intersections               325:17-325:31 LocalBox ["intersectConeSide","y2"]
+  298          0 Intersections               324:22-324:22 ExpBox False
+  299          0 Intersections               324:26-324:27 ExpBox False
+  300          0 Intersections               324:31-324:31 ExpBox False
+  301          0 Intersections               324:26-324:31 ExpBox False
+  302          0 Intersections               324:22-324:31 ExpBox False
+  303          0 Intersections               324:17-324:31 LocalBox ["intersectConeSide","y1"]
+  304          0 Intersections               326:20-326:21 ExpBox False
+  305          0 Intersections               326:30-326:30 ExpBox False
+  306          0 Intersections               326:20-326:30 ExpBox False
+  307          0 Intersections               326:20-326:30 BinBox CondBinBox True
+  308          0 Intersections               326:20-326:30 BinBox CondBinBox False
+  309          0 Intersections               326:67-326:68 ExpBox False
+  310          0 Intersections               326:64-326:69 ExpBox False
+  311          0 Intersections               326:74-326:75 ExpBox False
+  312          0 Intersections               326:71-326:76 ExpBox False
+  313          0 Intersections               326:54-326:76 ExpBox True
+  314          0 Intersections               327:25-327:26 ExpBox False
+  315          0 Intersections               327:35-327:35 ExpBox False
+  316          0 Intersections               327:25-327:35 ExpBox False
+  317          0 Intersections               327:25-327:35 BinBox CondBinBox True
+  318          0 Intersections               327:25-327:35 BinBox CondBinBox False
+  319          0 Intersections               327:67-327:68 ExpBox False
+  320          0 Intersections               327:64-327:69 ExpBox False
+  321          0 Intersections               327:74-327:75 ExpBox False
+  322          0 Intersections               327:71-327:76 ExpBox False
+  323          0 Intersections               327:54-327:76 ExpBox True
+  324          0 Intersections               328:26-328:27 ExpBox False
+  325          0 Intersections               328:31-328:31 ExpBox False
+  326          0 Intersections               328:25-328:32 ExpBox False
+  327          0 Intersections               328:41-328:42 ExpBox False
+  328          0 Intersections               328:46-328:46 ExpBox False
+  329          0 Intersections               328:40-328:47 ExpBox False
+  330          0 Intersections               328:25-328:47 ExpBox False
+  331          0 Intersections               328:25-328:47 BinBox CondBinBox True
+  332          0 Intersections               328:25-328:47 BinBox CondBinBox False
+  333          0 Intersections               328:67-328:68 ExpBox False
+  334          0 Intersections               328:64-328:69 ExpBox False
+  335          0 Intersections               328:74-328:75 ExpBox False
+  336          0 Intersections               328:71-328:76 ExpBox False
+  337          0 Intersections               328:54-328:76 ExpBox True
+  338          0 Intersections               329:67-329:68 ExpBox False
+  339          0 Intersections               329:64-329:69 ExpBox False
+  340          0 Intersections               329:74-329:75 ExpBox False
+  341          0 Intersections               329:71-329:76 ExpBox False
+  342          0 Intersections               329:54-329:76 ExpBox True
+  343          0 Intersections               328:22-329:76 ExpBox True
+  344          0 Intersections               327:22-329:76 ExpBox True
+  345          0 Intersections               324:13-329:76 ExpBox True
+  346          0 Intersections                313:5-329:76 ExpBox False
+  347          0 Intersections                307:1-349:27 TopLevelBox ["intersectConeSide"]
+  348          0 Intersections               292:24-292:24 ExpBox False
+  349          0 Intersections               292:13-292:24 ExpBox False
+  350          0 Intersections                292:9-292:24 LocalBox ["intersectCylSide","c"]
+  351          0 Intersections               291:24-291:24 ExpBox False
+  352          0 Intersections               291:13-291:24 ExpBox False
+  353          0 Intersections                291:9-291:24 LocalBox ["intersectCylSide","b"]
+  354          0 Intersections               290:24-290:24 ExpBox False
+  355          0 Intersections               290:13-290:24 ExpBox False
+  356          0 Intersections                290:9-290:24 LocalBox ["intersectCylSide","a"]
+  357          0 Intersections               289:20-289:20 ExpBox False
+  358          0 Intersections               289:13-289:20 ExpBox False
+  359          0 Intersections                289:9-289:20 LocalBox ["intersectCylSide","z"]
+  360          0 Intersections               288:20-288:20 ExpBox False
+  361          0 Intersections               288:13-288:20 ExpBox False
+  362          0 Intersections                288:9-288:20 LocalBox ["intersectCylSide","y"]
+  363          0 Intersections               287:20-287:20 ExpBox False
+  364          0 Intersections               287:13-287:20 ExpBox False
+  365          0 Intersections                287:9-287:20 LocalBox ["intersectCylSide","x"]
+  366          0 Intersections               282:24-282:24 ExpBox False
+  367          0 Intersections               282:28-282:28 ExpBox False
+  368          0 Intersections               282:32-282:32 ExpBox False
+  369          0 Intersections               282:28-282:32 ExpBox False
+  370          0 Intersections               282:24-282:32 ExpBox False
+  371          0 Intersections               282:19-282:32 LocalBox ["intersectCylSide","g","z0"]
+  372          0 Intersections               281:24-281:24 ExpBox False
+  373          0 Intersections               281:28-281:28 ExpBox False
+  374          0 Intersections               281:32-281:32 ExpBox False
+  375          0 Intersections               281:28-281:32 ExpBox False
+  376          0 Intersections               281:24-281:32 ExpBox False
+  377          0 Intersections               281:19-281:32 LocalBox ["intersectCylSide","g","y0"]
+  378          0 Intersections               280:24-280:24 ExpBox False
+  379          0 Intersections               280:28-280:28 ExpBox False
+  380          0 Intersections               280:32-280:32 ExpBox False
+  381          0 Intersections               280:28-280:32 ExpBox False
+  382          0 Intersections               280:24-280:32 ExpBox False
+  383          0 Intersections               280:19-280:32 LocalBox ["intersectCylSide","g","x0"]
+  384          0 Intersections               283:31-283:32 ExpBox False
+  385          0 Intersections               283:34-283:35 ExpBox False
+  386          0 Intersections               283:37-283:38 ExpBox False
+  387          0 Intersections               283:24-283:38 ExpBox False
+  388          0 Intersections               283:19-283:38 LocalBox ["intersectCylSide","g","p0"]
+  389          0 Intersections               284:31-284:32 ExpBox False
+  390          0 Intersections               284:34-284:34 ExpBox False
+  391          0 Intersections               284:36-284:37 ExpBox False
+  392          0 Intersections               284:24-284:37 ExpBox False
+  393          0 Intersections               284:19-284:37 LocalBox ["intersectCylSide","g","v0"]
+  394          0 Intersections               285:39-285:40 ExpBox False
+  395          0 Intersections               285:30-285:40 ExpBox False
+  396          0 Intersections               279:34-279:34 ExpBox False
+  397          0 Intersections               279:36-279:36 ExpBox False
+  398          0 Intersections               279:38-279:38 ExpBox False
+  399          0 Intersections               279:28-279:38 ExpBox False
+  400          0 Intersections               279:19-279:38 LocalBox ["intersectCylSide","g","origin"]
+  401          0 Intersections               278:16-278:16 ExpBox False
+  402          0 Intersections               278:32-278:37 ExpBox False
+  403          0 Intersections               278:39-278:40 ExpBox False
+  404          0 Intersections               278:42-278:43 ExpBox False
+  405          0 Intersections               278:20-278:43 ExpBox False
+  406          0 Intersections               278:47-278:58 ExpBox False
+  407          0 Intersections               278:61-278:62 ExpBox False
+  408          0 Intersections               278:65-278:71 ExpBox False
+  409          0 Intersections               278:46-278:72 ExpBox False
+  410          0 Intersections               278:19-278:73 ExpBox False
+  411          0 Intersections               278:15-278:74 ExpBox False
+  412          0 Intersections                278:9-285:40 LocalBox ["intersectCylSide","g"]
+  413          0 Intersections               277:19-277:19 ExpBox False
+  414          0 Intersections               277:16-277:19 ExpBox False
+  415          0 Intersections               277:26-277:26 ExpBox False
+  416          0 Intersections               277:23-277:26 ExpBox False
+  417          0 Intersections               277:16-277:26 ExpBox False
+  418          0 Intersections                277:9-277:26 LocalBox ["intersectCylSide","sqxy"]
+  419          0 Intersections               263:12-263:12 ExpBox False
+  420          0 Intersections                263:9-263:12 ExpBox False
+  421          0 Intersections               263:19-263:19 ExpBox False
+  422          0 Intersections               263:16-263:19 ExpBox False
+  423          0 Intersections                263:8-263:20 ExpBox False
+  424          0 Intersections               263:29-263:29 ExpBox False
+  425          0 Intersections                263:8-263:29 ExpBox False
+  426          0 Intersections                263:8-263:29 BinBox CondBinBox True
+  427          0 Intersections                263:8-263:29 BinBox CondBinBox False
+  428          0 Intersections               266:13-266:16 ExpBox False
+  429          0 Intersections               266:25-266:27 ExpBox False
+  430          0 Intersections               266:13-266:27 ExpBox False
+  431          0 Intersections               266:32-266:35 ExpBox False
+  432          0 Intersections               266:39-266:41 ExpBox False
+  433          0 Intersections               266:32-266:41 ExpBox False
+  434          0 Intersections               266:12-266:42 ExpBox False
+  435          0 Intersections               266:12-266:42 BinBox CondBinBox True
+  436          0 Intersections               266:12-266:42 BinBox CondBinBox False
+  437          0 Intersections               266:49-266:57 ExpBox True
+  438          0 Intersections               266:64-266:73 ExpBox True
+  439          0 Intersections                266:9-266:73 ExpBox True
+  440          0 Intersections               271:21-271:21 ExpBox False
+  441          0 Intersections               271:18-271:21 ExpBox False
+  442          0 Intersections               271:28-271:28 ExpBox False
+  443          0 Intersections               271:25-271:28 ExpBox False
+  444          0 Intersections               271:18-271:28 ExpBox False
+  445          0 Intersections               271:32-271:32 ExpBox False
+  446          0 Intersections               271:18-271:32 ExpBox False
+  447          0 Intersections               271:13-271:32 LocalBox ["intersectCylSide","c3"]
+  448          0 Intersections               270:18-270:18 ExpBox False
+  449          0 Intersections               270:23-270:23 ExpBox False
+  450          0 Intersections               270:27-270:27 ExpBox False
+  451          0 Intersections               270:23-270:27 ExpBox False
+  452          0 Intersections               270:31-270:31 ExpBox False
+  453          0 Intersections               270:35-270:35 ExpBox False
+  454          0 Intersections               270:31-270:35 ExpBox False
+  455          0 Intersections               270:22-270:36 ExpBox False
+  456          0 Intersections               270:18-270:36 ExpBox False
+  457          0 Intersections               270:13-270:36 LocalBox ["intersectCylSide","c2"]
+  458          0 Intersections               269:21-269:21 ExpBox False
+  459          0 Intersections               269:18-269:21 ExpBox False
+  460          0 Intersections               269:28-269:28 ExpBox False
+  461          0 Intersections               269:25-269:28 ExpBox False
+  462          0 Intersections               269:18-269:28 ExpBox False
+  463          0 Intersections               269:13-269:28 LocalBox ["intersectCylSide","c1"]
+  464          0 Intersections               273:24-273:25 ExpBox False
+  465          0 Intersections               273:27-273:28 ExpBox False
+  466          0 Intersections               273:30-273:31 ExpBox False
+  467          0 Intersections               273:14-273:31 ExpBox False
+  468          0 Intersections               274:20-274:29 ExpBox True
+  469          0 Intersections               275:39-275:40 ExpBox False
+  470          0 Intersections               275:36-275:41 ExpBox False
+  471          0 Intersections               275:46-275:47 ExpBox False
+  472          0 Intersections               275:43-275:48 ExpBox False
+  473          0 Intersections               275:26-275:48 ExpBox True
+  474          0 Intersections                269:9-275:48 ExpBox True
+  475          0 Intersections                263:5-275:48 ExpBox False
+  476          0 Intersections                259:1-292:24 TopLevelBox ["intersectCylSide"]
+  477          0 Intersections               232:38-232:44 ExpBox True
+  478          0 Intersections               233:38-233:44 ExpBox True
+  479          1 Intersections               234:38-234:44 ExpBox True
+  480      31374 Intersections               242:13-242:13 ExpBox False
+  481      31374 Intersections               242:22-242:22 ExpBox False
+  482      31374 Intersections               242:13-242:22 ExpBox False
+  483          0 Intersections               242:13-242:22 BinBox GuardBinBox True
+  484      31374 Intersections               242:13-242:22 BinBox GuardBinBox False
+  485          0 Intersections               242:32-242:33 ExpBox False
+  486          0 Intersections               242:37-242:37 ExpBox False
+  487          0 Intersections               242:40-242:40 ExpBox False
+  488          0 Intersections               242:44-242:50 ExpBox False
+  489          0 Intersections               242:40-242:50 ExpBox False
+  490          0 Intersections               242:36-242:51 ExpBox False
+  491          0 Intersections               242:31-242:52 ExpBox False
+  492          0 Intersections               242:26-242:52 ExpBox True
+  493      31374 Intersections               243:13-243:13 ExpBox False
+  494      31374 Intersections               243:22-243:22 ExpBox False
+  495      31374 Intersections               243:13-243:22 ExpBox False
+  496      23819 Intersections               243:13-243:22 BinBox GuardBinBox True
+  497          1 Intersections               243:13-243:22 BinBox GuardBinBox False
+  498      23819 Intersections               243:31-243:34 ExpBox False
+  499      23819 Intersections               243:26-243:34 ExpBox True
+  500          1 Intersections               244:13-244:21 ExpBox False
+  501          1 Intersections               244:13-244:21 BinBox GuardBinBox True
+  502          0 Intersections               244:13-244:21 BinBox GuardBinBox False
+  503          1 Intersections               244:26-244:32 ExpBox True
+  504      31374 Intersections                240:9-244:32 LocalBox ["intersectSlabIval","checkInterval"]
+  505      31374 Intersections               239:17-239:18 ExpBox False
+  506      31374 Intersections               239:22-239:23 ExpBox False
+  507      31374 Intersections               239:17-239:23 ExpBox False
+  508      14552 Intersections               239:17-239:23 BinBox CondBinBox True
+  509      16822 Intersections               239:17-239:23 BinBox CondBinBox False
+  510      14552 Intersections               239:30-239:32 ExpBox True
+  511      16822 Intersections               239:39-239:41 ExpBox True
+  512      31374 Intersections               239:14-239:41 ExpBox False
+  513      31374 Intersections                239:9-239:41 LocalBox ["intersectSlabIval","mv"]
+  514      31374 Intersections               238:17-238:18 ExpBox False
+  515      31374 Intersections               238:22-238:23 ExpBox False
+  516      31374 Intersections               238:17-238:23 ExpBox False
+  517      22758 Intersections               238:17-238:23 BinBox CondBinBox True
+  518       8616 Intersections               238:17-238:23 BinBox CondBinBox False
+  519      22758 Intersections               238:30-238:32 ExpBox True
+  520       8616 Intersections               238:39-238:41 ExpBox True
+  521      31374 Intersections               238:14-238:41 ExpBox False
+  522      31374 Intersections                238:9-238:41 LocalBox ["intersectSlabIval","nu"]
+  523      31374 Intersections               237:20-237:21 ExpBox False
+  524      31374 Intersections               237:24-237:25 ExpBox False
+  525      31374 Intersections               237:19-237:26 ExpBox False
+  526      31374 Intersections                237:5-237:26 ExpBox True
+  527      34618 Intersections                232:1-244:32 TopLevelBox ["intersectSlabIval"]
+  528      51927 Intersections                 227:5-227:5 ExpBox False
+  529      51927 Intersections               227:14-227:14 ExpBox False
+  530      51927 Intersections                227:5-227:14 ExpBox False
+  531          0 Intersections                227:5-227:14 BinBox GuardBinBox True
+  532      51927 Intersections                227:5-227:14 BinBox GuardBinBox False
+  533          0 Intersections               227:22-227:22 ExpBox False
+  534          0 Intersections               227:27-227:27 ExpBox False
+  535          0 Intersections               227:21-227:28 ExpBox False
+  536          0 Intersections               227:34-227:34 ExpBox False
+  537          0 Intersections               227:39-227:39 ExpBox False
+  538          0 Intersections               227:33-227:40 ExpBox False
+  539          0 Intersections               227:21-227:40 ExpBox False
+  540          0 Intersections               227:21-227:40 BinBox CondBinBox True
+  541          0 Intersections               227:21-227:40 BinBox CondBinBox False
+  542          0 Intersections               228:30-228:30 ExpBox False
+  543          0 Intersections               228:34-228:36 ExpBox False
+  544          0 Intersections               228:33-228:36 ExpBox False
+  545          0 Intersections               228:29-228:37 ExpBox False
+  546          0 Intersections               228:41-228:41 ExpBox False
+  547          0 Intersections               228:44-228:46 ExpBox False
+  548          0 Intersections               228:40-228:47 ExpBox False
+  549          0 Intersections               228:28-228:48 ExpBox False
+  550          0 Intersections               228:23-228:48 ExpBox True
+  551          0 Intersections               228:55-228:61 ExpBox True
+  552          0 Intersections               227:18-228:61 ExpBox True
+  553      51927 Intersections                 229:5-229:5 ExpBox False
+  554      51927 Intersections                 229:9-229:9 ExpBox False
+  555      51927 Intersections                 229:5-229:9 ExpBox False
+  556      37729 Intersections                 229:5-229:9 BinBox GuardBinBox True
+  557      14198 Intersections                 229:5-229:9 BinBox GuardBinBox False
+  558       7735 Intersections               229:25-229:25 ExpBox False
+  559      35117 Intersections               229:31-229:31 ExpBox False
+  560      35117 Intersections               229:29-229:32 ExpBox False
+  561      35117 Intersections               229:34-229:34 ExpBox False
+  562      35117 Intersections               229:29-229:34 ExpBox False
+  563      35117 Intersections               229:24-229:35 ExpBox False
+  564        945 Intersections               229:39-229:39 ExpBox False
+  565      35117 Intersections               229:43-229:43 ExpBox False
+  566      35117 Intersections               229:45-229:45 ExpBox False
+  567      35117 Intersections               229:42-229:46 ExpBox False
+  568      35117 Intersections               229:48-229:48 ExpBox False
+  569      35117 Intersections               229:42-229:48 ExpBox False
+  570      35117 Intersections               229:38-229:49 ExpBox False
+  571      35117 Intersections               229:23-229:50 ExpBox False
+  572      37729 Intersections               229:18-229:50 ExpBox True
+  573      14198 Intersections                230:5-230:13 ExpBox False
+  574      14198 Intersections                230:5-230:13 BinBox GuardBinBox True
+  575          0 Intersections                230:5-230:13 BinBox GuardBinBox False
+  576       2019 Intersections               230:25-230:25 ExpBox False
+  577      13566 Intersections               230:29-230:29 ExpBox False
+  578      13566 Intersections               230:31-230:31 ExpBox False
+  579      13566 Intersections               230:28-230:32 ExpBox False
+  580      13566 Intersections               230:34-230:34 ExpBox False
+  581      13566 Intersections               230:28-230:34 ExpBox False
+  582      13566 Intersections               230:24-230:35 ExpBox False
+  583       1082 Intersections               230:39-230:39 ExpBox False
+  584      13566 Intersections               230:45-230:45 ExpBox False
+  585      13566 Intersections               230:43-230:46 ExpBox False
+  586      13566 Intersections               230:48-230:48 ExpBox False
+  587      13566 Intersections               230:43-230:48 ExpBox False
+  588      13566 Intersections               230:38-230:49 ExpBox False
+  589      13566 Intersections               230:23-230:50 ExpBox False
+  590      14198 Intersections               230:18-230:50 ExpBox True
+  591      51927 Intersections                226:1-230:50 TopLevelBox ["intersectCubeSlab"]
+  592      17309 Intersections               224:24-224:24 ExpBox False
+  593      17309 Intersections               224:13-224:24 ExpBox False
+  594      17309 Intersections                224:9-224:24 LocalBox ["intersectCube","c"]
+  595      17309 Intersections               223:24-223:24 ExpBox False
+  596      17309 Intersections               223:13-223:24 ExpBox False
+  597      17309 Intersections                223:9-223:24 LocalBox ["intersectCube","b"]
+  598      17309 Intersections               222:24-222:24 ExpBox False
+  599      17309 Intersections               222:13-222:24 ExpBox False
+  600      17309 Intersections                222:9-222:24 LocalBox ["intersectCube","a"]
+  601      17309 Intersections               221:20-221:20 ExpBox False
+  602      17309 Intersections               221:13-221:20 ExpBox False
+  603      17309 Intersections                221:9-221:20 LocalBox ["intersectCube","z"]
+  604      17309 Intersections               220:20-220:20 ExpBox False
+  605      17309 Intersections               220:13-220:20 ExpBox False
+  606      17309 Intersections                220:9-220:20 LocalBox ["intersectCube","y"]
+  607      14065 Intersections               219:20-219:20 ExpBox False
+  608      14065 Intersections               219:13-219:20 ExpBox False
+  609      14065 Intersections                219:9-219:20 LocalBox ["intersectCube","x"]
+  610          1 Intersections               218:26-218:26 ExpBox False
+  611          1 Intersections               218:28-218:28 ExpBox False
+  612          1 Intersections               218:30-218:30 ExpBox False
+  613          1 Intersections               218:19-218:30 ExpBox False
+  614          1 Intersections                218:9-218:30 LocalBox ["intersectCube","vectorZ"]
+  615          1 Intersections               217:26-217:26 ExpBox False
+  616          1 Intersections               217:28-217:28 ExpBox False
+  617          1 Intersections               217:30-217:30 ExpBox False
+  618          1 Intersections               217:19-217:30 ExpBox False
+  619          1 Intersections                217:9-217:30 LocalBox ["intersectCube","vectorY"]
+  620          1 Intersections               216:26-216:26 ExpBox False
+  621          1 Intersections               216:28-216:28 ExpBox False
+  622          1 Intersections               216:30-216:30 ExpBox False
+  623          1 Intersections               216:19-216:30 ExpBox False
+  624          1 Intersections                216:9-216:30 LocalBox ["intersectCube","vectorX"]
+  625          1 Intersections               215:18-215:27 ExpBox False
+  626          1 Intersections               215:30-215:36 ExpBox False
+  627          1 Intersections               215:39-215:45 ExpBox False
+  628        879 Intersections               215:17-215:46 ExpBox False
+  629        879 Intersections                215:9-215:46 LocalBox ["intersectCube","face5"]
+  630          1 Intersections               214:18-214:24 ExpBox False
+  631          1 Intersections               214:30-214:36 ExpBox False
+  632          1 Intersections               214:39-214:45 ExpBox False
+  633       1890 Intersections               214:17-214:46 ExpBox False
+  634       1890 Intersections                214:9-214:46 LocalBox ["intersectCube","face4"]
+  635          0 Intersections               213:18-213:26 ExpBox False
+  636          0 Intersections               213:30-213:36 ExpBox False
+  637          0 Intersections               213:39-213:45 ExpBox False
+  638       1074 Intersections               213:17-213:46 ExpBox False
+  639       1074 Intersections                213:9-213:46 LocalBox ["intersectCube","face3"]
+  640          1 Intersections               212:18-212:25 ExpBox False
+  641          1 Intersections               212:30-212:36 ExpBox False
+  642          1 Intersections               212:39-212:45 ExpBox False
+  643       2164 Intersections               212:17-212:46 ExpBox False
+  644       2164 Intersections                212:9-212:46 LocalBox ["intersectCube","face2"]
+  645          0 Intersections               211:18-211:25 ExpBox False
+  646          0 Intersections               211:30-211:36 ExpBox False
+  647          0 Intersections               211:39-211:45 ExpBox False
+  648          0 Intersections               211:17-211:46 ExpBox False
+  649          0 Intersections                211:9-211:46 LocalBox ["intersectCube","face1"]
+  650          1 Intersections               210:18-210:26 ExpBox False
+  651          1 Intersections               210:30-210:36 ExpBox False
+  652          1 Intersections               210:39-210:45 ExpBox False
+  653       5774 Intersections               210:17-210:46 ExpBox False
+  654       5774 Intersections                210:9-210:46 LocalBox ["intersectCube","face0"]
+  655       5728 Intersections               209:36-209:38 ExpBox False
+  656       5728 Intersections               209:40-209:40 ExpBox False
+  657       5728 Intersections               209:22-209:40 ExpBox False
+  658       5728 Intersections               209:17-209:40 LocalBox ["intersectCube","g","p0"]
+  659      11781 Intersections               208:14-208:14 ExpBox False
+  660          0 Intersections               208:25-208:26 ExpBox False
+  661       5728 Intersections               208:28-208:29 ExpBox False
+  662       5728 Intersections               208:31-208:32 ExpBox False
+  663       5728 Intersections               208:18-208:32 ExpBox False
+  664       5728 Intersections               208:36-208:36 ExpBox False
+  665       5728 Intersections               208:39-208:40 ExpBox False
+  666       5728 Intersections               208:43-208:49 ExpBox False
+  667       5728 Intersections               208:35-208:50 ExpBox False
+  668      11781 Intersections               208:17-208:51 ExpBox False
+  669      11781 Intersections               208:13-208:52 ExpBox False
+  670      11781 Intersections                207:9-209:40 LocalBox ["intersectCube","g"]
+  671       2164 Intersections               202:47-202:51 ExpBox False
+  672       1074 Intersections               202:53-202:57 ExpBox False
+  673      14065 Intersections               202:59-202:59 ExpBox False
+  674      17309 Intersections               202:61-202:61 ExpBox False
+  675      17309 Intersections               202:28-202:62 ExpBox False
+  676        879 Intersections               203:47-203:51 ExpBox False
+  677       1890 Intersections               203:53-203:57 ExpBox False
+  678      17309 Intersections               203:59-203:59 ExpBox False
+  679      17309 Intersections               203:61-203:61 ExpBox False
+  680      17309 Intersections               203:28-203:62 ExpBox False
+  681       5774 Intersections               204:47-204:51 ExpBox False
+  682          0 Intersections               204:53-204:57 ExpBox False
+  683      17309 Intersections               204:59-204:59 ExpBox False
+  684      17309 Intersections               204:61-204:61 ExpBox False
+  685      17309 Intersections               204:28-204:62 ExpBox False
+  686      17309 Intersections                203:9-204:63 ExpBox False
+  687      17309 Intersections               202:10-204:63 ExpBox False
+  688          1 Intersections               205:16-205:25 ExpBox True
+  689       9754 Intersections               206:35-206:36 ExpBox False
+  690       9754 Intersections               206:32-206:37 ExpBox False
+  691       2027 Intersections               206:42-206:43 ExpBox False
+  692       2027 Intersections               206:39-206:44 ExpBox False
+  693       9754 Intersections               206:22-206:44 ExpBox True
+  694      17309 Intersections                202:5-206:44 ExpBox False
+  695      17309 Intersections                196:1-224:24 TopLevelBox ["intersectCube"]
+  696          0 Intersections               180:26-180:26 ExpBox False
+  697          0 Intersections               180:15-180:26 ExpBox False
+  698          0 Intersections               180:11-180:26 LocalBox ["intersectSphere","c"]
+  699          0 Intersections               179:26-179:26 ExpBox False
+  700          0 Intersections               179:15-179:26 ExpBox False
+  701          0 Intersections               179:11-179:26 LocalBox ["intersectSphere","b"]
+  702          0 Intersections               178:26-178:26 ExpBox False
+  703          0 Intersections               178:15-178:26 ExpBox False
+  704          0 Intersections               178:11-178:26 LocalBox ["intersectSphere","a"]
+  705          0 Intersections               177:22-177:22 ExpBox False
+  706          0 Intersections               177:15-177:22 ExpBox False
+  707          0 Intersections               177:11-177:22 LocalBox ["intersectSphere","z"]
+  708          0 Intersections               176:22-176:22 ExpBox False
+  709          0 Intersections               176:15-176:22 ExpBox False
+  710          0 Intersections               176:11-176:22 LocalBox ["intersectSphere","y"]
+  711          0 Intersections               175:22-175:22 ExpBox False
+  712          0 Intersections               175:15-175:22 ExpBox False
+  713          0 Intersections               175:11-175:22 LocalBox ["intersectSphere","x"]
+  714          0 Intersections               185:26-185:26 ExpBox False
+  715          0 Intersections               185:30-185:30 ExpBox False
+  716          0 Intersections               185:34-185:34 ExpBox False
+  717          0 Intersections               185:30-185:34 ExpBox False
+  718          0 Intersections               185:26-185:34 ExpBox False
+  719          0 Intersections               185:21-185:34 LocalBox ["intersectSphere","g","z0"]
+  720          0 Intersections               184:26-184:26 ExpBox False
+  721          0 Intersections               184:30-184:30 ExpBox False
+  722          0 Intersections               184:34-184:34 ExpBox False
+  723          0 Intersections               184:30-184:34 ExpBox False
+  724          0 Intersections               184:26-184:34 ExpBox False
+  725          0 Intersections               184:21-184:34 LocalBox ["intersectSphere","g","y0"]
+  726          0 Intersections               183:26-183:26 ExpBox False
+  727          0 Intersections               183:30-183:30 ExpBox False
+  728          0 Intersections               183:34-183:34 ExpBox False
+  729          0 Intersections               183:30-183:34 ExpBox False
+  730          0 Intersections               183:26-183:34 ExpBox False
+  731          0 Intersections               183:21-183:34 LocalBox ["intersectSphere","g","x0"]
+  732          0 Intersections               186:33-186:34 ExpBox False
+  733          0 Intersections               186:36-186:37 ExpBox False
+  734          0 Intersections               186:39-186:40 ExpBox False
+  735          0 Intersections               186:26-186:40 ExpBox False
+  736          0 Intersections               186:21-186:40 LocalBox ["intersectSphere","g","p0"]
+  737          0 Intersections               187:33-187:34 ExpBox False
+  738          0 Intersections               187:36-187:37 ExpBox False
+  739          0 Intersections               187:39-187:40 ExpBox False
+  740          0 Intersections               187:26-187:40 ExpBox False
+  741          0 Intersections               187:21-187:40 LocalBox ["intersectSphere","g","v0"]
+  742          0 Intersections               188:41-188:42 ExpBox False
+  743          0 Intersections               188:32-188:42 ExpBox False
+  744          0 Intersections               182:36-182:36 ExpBox False
+  745          0 Intersections               182:38-182:38 ExpBox False
+  746          0 Intersections               182:40-182:40 ExpBox False
+  747          0 Intersections               182:30-182:40 ExpBox False
+  748          0 Intersections               182:21-182:40 LocalBox ["intersectSphere","g","origin"]
+  749          0 Intersections               181:18-181:18 ExpBox False
+  750          0 Intersections               181:32-181:37 ExpBox False
+  751          0 Intersections               181:39-181:40 ExpBox False
+  752          0 Intersections               181:42-181:43 ExpBox False
+  753          0 Intersections               181:22-181:43 ExpBox False
+  754          0 Intersections               181:47-181:56 ExpBox False
+  755          0 Intersections               181:59-181:60 ExpBox False
+  756          0 Intersections               181:63-181:69 ExpBox False
+  757          0 Intersections               181:46-181:70 ExpBox False
+  758          0 Intersections               181:21-181:71 ExpBox False
+  759          0 Intersections               181:17-181:72 ExpBox False
+  760          0 Intersections               181:11-188:42 LocalBox ["intersectSphere","g"]
+  761          0 Intersections               170:17-170:17 ExpBox False
+  762          0 Intersections               170:14-170:17 ExpBox False
+  763          0 Intersections               170:24-170:24 ExpBox False
+  764          0 Intersections               170:21-170:24 ExpBox False
+  765          0 Intersections               170:14-170:24 ExpBox False
+  766          0 Intersections               170:31-170:31 ExpBox False
+  767          0 Intersections               170:28-170:31 ExpBox False
+  768          0 Intersections               170:14-170:31 ExpBox False
+  769          0 Intersections               170:35-170:35 ExpBox False
+  770          0 Intersections               170:14-170:35 ExpBox False
+  771          0 Intersections                170:9-170:35 LocalBox ["intersectSphere","c3"]
+  772          0 Intersections               169:14-169:14 ExpBox False
+  773          0 Intersections               169:19-169:19 ExpBox False
+  774          0 Intersections               169:23-169:23 ExpBox False
+  775          0 Intersections               169:19-169:23 ExpBox False
+  776          0 Intersections               169:27-169:27 ExpBox False
+  777          0 Intersections               169:31-169:31 ExpBox False
+  778          0 Intersections               169:27-169:31 ExpBox False
+  779          0 Intersections               169:19-169:31 ExpBox False
+  780          0 Intersections               169:35-169:35 ExpBox False
+  781          0 Intersections               169:39-169:39 ExpBox False
+  782          0 Intersections               169:35-169:39 ExpBox False
+  783          0 Intersections               169:18-169:40 ExpBox False
+  784          0 Intersections               169:14-169:40 ExpBox False
+  785          0 Intersections                169:9-169:40 LocalBox ["intersectSphere","c2"]
+  786          0 Intersections               168:17-168:17 ExpBox False
+  787          0 Intersections               168:14-168:17 ExpBox False
+  788          0 Intersections               168:24-168:24 ExpBox False
+  789          0 Intersections               168:21-168:24 ExpBox False
+  790          0 Intersections               168:14-168:24 ExpBox False
+  791          0 Intersections               168:31-168:31 ExpBox False
+  792          0 Intersections               168:28-168:31 ExpBox False
+  793          0 Intersections               168:14-168:31 ExpBox False
+  794          0 Intersections                168:9-168:31 LocalBox ["intersectSphere","c1"]
+  795          0 Intersections               172:24-172:25 ExpBox False
+  796          0 Intersections               172:27-172:28 ExpBox False
+  797          0 Intersections               172:30-172:31 ExpBox False
+  798          0 Intersections               172:14-172:31 ExpBox False
+  799          0 Intersections               173:20-173:29 ExpBox True
+  800          0 Intersections               174:39-174:40 ExpBox False
+  801          0 Intersections               174:36-174:41 ExpBox False
+  802          0 Intersections               174:46-174:47 ExpBox False
+  803          0 Intersections               174:43-174:48 ExpBox False
+  804          0 Intersections               174:26-174:48 ExpBox True
+  805          0 Intersections                168:5-174:48 ExpBox False
+  806          0 Intersections                162:1-188:42 TopLevelBox ["intersectSphere"]
+  807      26784 Intersections               154:24-154:24 ExpBox False
+  808      26784 Intersections               154:13-154:24 ExpBox False
+  809      26784 Intersections                154:9-154:24 LocalBox ["intersectXZPlane","c"]
+  810     115538 Intersections               153:24-153:24 ExpBox False
+  811     115538 Intersections               153:13-153:24 ExpBox False
+  812     115538 Intersections                153:9-153:24 LocalBox ["intersectXZPlane","b"]
+  813      26784 Intersections               152:24-152:24 ExpBox False
+  814      26784 Intersections               152:13-152:24 ExpBox False
+  815      26784 Intersections                152:9-152:24 LocalBox ["intersectXZPlane","a"]
+  816      26784 Intersections               151:20-151:20 ExpBox False
+  817      26784 Intersections               151:13-151:20 ExpBox False
+  818      26784 Intersections                151:9-151:20 LocalBox ["intersectXZPlane","z"]
+  819     115538 Intersections               150:20-150:20 ExpBox False
+  820     115538 Intersections               150:13-150:20 ExpBox False
+  821     115538 Intersections                150:9-150:20 LocalBox ["intersectXZPlane","y"]
+  822      26784 Intersections               149:20-149:20 ExpBox False
+  823      26784 Intersections               149:13-149:20 ExpBox False
+  824      26784 Intersections                149:9-149:20 LocalBox ["intersectXZPlane","x"]
+  825          1 Intersections               147:21-147:21 ExpBox False
+  826          1 Intersections               147:23-147:23 ExpBox False
+  827          1 Intersections               147:25-147:25 ExpBox False
+  828          1 Intersections               147:14-147:25 ExpBox False
+  829          1 Intersections                147:9-147:25 LocalBox ["intersectXZPlane","v1"]
+  830          1 Intersections               146:21-146:21 ExpBox False
+  831          1 Intersections               146:23-146:23 ExpBox False
+  832          1 Intersections               146:25-146:25 ExpBox False
+  833          1 Intersections               146:14-146:25 ExpBox False
+  834          1 Intersections                146:9-146:25 LocalBox ["intersectXZPlane","v0"]
+  835     115538 Intersections               142:15-142:21 ExpBox False
+  836     115538 Intersections               142:23-142:23 ExpBox False
+  837     115538 Intersections               142:14-142:24 ExpBox False
+  838     115538 Intersections               142:28-142:28 ExpBox False
+  839     115538 Intersections               142:14-142:28 ExpBox False
+  840     115538 Intersections                142:9-142:28 LocalBox ["intersectXZPlane","t0"]
+  841      26784 Intersections               143:14-143:14 ExpBox False
+  842      26784 Intersections               143:18-143:18 ExpBox False
+  843      26784 Intersections               143:22-143:23 ExpBox False
+  844      26784 Intersections               143:18-143:23 ExpBox False
+  845      26784 Intersections               143:14-143:23 ExpBox False
+  846      26784 Intersections                143:9-143:23 LocalBox ["intersectXZPlane","x0"]
+  847      26784 Intersections               144:14-144:14 ExpBox False
+  848      26784 Intersections               144:18-144:18 ExpBox False
+  849      26784 Intersections               144:22-144:23 ExpBox False
+  850      26784 Intersections               144:18-144:23 ExpBox False
+  851      26784 Intersections               144:14-144:23 ExpBox False
+  852      26784 Intersections                144:9-144:23 LocalBox ["intersectXZPlane","z0"]
+  853      26784 Intersections               145:20-145:21 ExpBox False
+  854      26784 Intersections               145:23-145:23 ExpBox False
+  855      26784 Intersections               145:25-145:26 ExpBox False
+  856      26784 Intersections               145:14-145:26 ExpBox False
+  857      26784 Intersections                145:9-145:26 LocalBox ["intersectXZPlane","p0"]
+  858     115538 Intersections                 127:5-127:5 ExpBox False
+  859     115538 Intersections               127:14-127:14 ExpBox False
+  860     115538 Intersections                127:5-127:14 ExpBox False
+  861          0 Intersections                127:5-127:14 BinBox GuardBinBox True
+  862     115538 Intersections                127:5-127:14 BinBox GuardBinBox False
+  863          0 Intersections                 129:8-129:8 ExpBox False
+  864          0 Intersections               129:17-129:23 ExpBox False
+  865          0 Intersections                129:8-129:23 ExpBox False
+  866          0 Intersections               129:28-129:28 ExpBox False
+  867          0 Intersections               129:32-129:38 ExpBox False
+  868          0 Intersections               129:28-129:38 ExpBox False
+  869          0 Intersections                129:8-129:38 ExpBox False
+  870          0 Intersections                129:8-129:38 BinBox CondBinBox True
+  871          0 Intersections                129:8-129:38 BinBox CondBinBox False
+  872          0 Intersections               129:45-129:53 ExpBox True
+  873          0 Intersections               129:60-129:69 ExpBox True
+  874          0 Intersections                129:5-129:69 ExpBox True
+  875     115538 Intersections                 136:5-136:5 ExpBox False
+  876     115538 Intersections                 136:9-136:9 ExpBox False
+  877     115538 Intersections                 136:5-136:9 ExpBox False
+  878      30000 Intersections                 136:5-136:9 BinBox GuardBinBox True
+  879      85538 Intersections                 136:5-136:9 BinBox GuardBinBox False
+  880      30000 Intersections                137:6-137:10 ExpBox False
+  881      30000 Intersections               137:23-137:24 ExpBox False
+  882          0 Intersections               137:35-137:36 ExpBox False
+  883      26784 Intersections               137:38-137:39 ExpBox False
+  884      26784 Intersections               137:41-137:42 ExpBox False
+  885      26784 Intersections               137:28-137:42 ExpBox False
+  886      26784 Intersections               137:46-137:46 ExpBox False
+  887      26784 Intersections               137:49-137:50 ExpBox False
+  888      26784 Intersections               137:53-137:59 ExpBox False
+  889      26784 Intersections               137:45-137:60 ExpBox False
+  890      30000 Intersections               137:27-137:61 ExpBox False
+  891      30000 Intersections               137:22-137:62 ExpBox False
+  892      30000 Intersections               137:14-137:62 ExpBox False
+  893      30000 Intersections               137:13-137:63 ExpBox False
+  894          0 Intersections               137:66-137:69 ExpBox False
+  895      30000 Intersections                137:5-137:70 ExpBox True
+  896      85538 Intersections                139:5-139:13 ExpBox False
+  897      85538 Intersections                139:5-139:13 BinBox GuardBinBox True
+  898          0 Intersections                139:5-139:13 BinBox GuardBinBox False
+  899      85538 Intersections                 140:6-140:9 ExpBox False
+  900      85538 Intersections               140:22-140:23 ExpBox False
+  901          0 Intersections               140:34-140:35 ExpBox False
+  902          0 Intersections               140:37-140:38 ExpBox False
+  903          0 Intersections               140:40-140:41 ExpBox False
+  904          0 Intersections               140:27-140:41 ExpBox False
+  905          0 Intersections               140:45-140:45 ExpBox False
+  906          0 Intersections               140:48-140:49 ExpBox False
+  907          0 Intersections               140:52-140:58 ExpBox False
+  908          0 Intersections               140:44-140:59 ExpBox False
+  909      85538 Intersections               140:26-140:60 ExpBox False
+  910      85538 Intersections               140:21-140:61 ExpBox False
+  911      85538 Intersections               140:14-140:61 ExpBox False
+  912      85538 Intersections               140:13-140:62 ExpBox False
+  913      85538 Intersections               140:66-140:70 ExpBox False
+  914      85538 Intersections                140:5-140:71 ExpBox True
+  915     115538 Intersections                126:1-154:24 TopLevelBox ["intersectXZPlane"]
+  916      26784 Intersections               123:47-123:55 ExpBox False
+  917     115538 Intersections               123:57-123:59 ExpBox False
+  918     115538 Intersections               123:61-123:63 ExpBox False
+  919      26784 Intersections               123:65-123:71 ExpBox False
+  920     115538 Intersections               123:30-123:71 ExpBox False
+  921     115538 Intersections                123:1-123:71 TopLevelBox ["intersectPlane"]
+  922      32512 Intersections                 97:22-97:22 ExpBox False
+  923      32512 Intersections                 97:24-97:25 ExpBox False
+  924      32512 Intersections                 97:15-97:25 ExpBox False
+  925      32512 Intersections                  97:9-97:25 LocalBox ["transformSurface","v1'"]
+  926      32512 Intersections                 96:22-96:22 ExpBox False
+  927      32512 Intersections                 96:24-96:25 ExpBox False
+  928      32512 Intersections                 96:15-96:25 ExpBox False
+  929      32512 Intersections                  96:9-96:25 LocalBox ["transformSurface","v0'"]
+  930          0 Intersections                 95:22-95:22 ExpBox False
+  931          0 Intersections                 95:24-95:25 ExpBox False
+  932          0 Intersections                 95:15-95:25 ExpBox False
+  933          0 Intersections                  95:9-95:25 LocalBox ["transformSurface","p0'"]
+  934          0 Intersections                 94:12-94:14 ExpBox False
+  935      32512 Intersections                 94:16-94:18 ExpBox False
+  936      32512 Intersections                 94:20-94:22 ExpBox False
+  937      32512 Intersections                  94:5-94:22 ExpBox True
+  938          0 Intersections               103:22-103:22 ExpBox False
+  939          0 Intersections               103:24-103:25 ExpBox False
+  940          0 Intersections               103:15-103:25 ExpBox False
+  941          0 Intersections                103:9-103:25 LocalBox ["transformSurface","v1'"]
+  942          0 Intersections               102:22-102:22 ExpBox False
+  943          0 Intersections               102:24-102:25 ExpBox False
+  944          0 Intersections               102:15-102:25 ExpBox False
+  945          0 Intersections                102:9-102:25 LocalBox ["transformSurface","v0'"]
+  946          0 Intersections               101:22-101:22 ExpBox False
+  947          0 Intersections               101:24-101:25 ExpBox False
+  948          0 Intersections               101:15-101:25 ExpBox False
+  949          0 Intersections                101:9-101:25 LocalBox ["transformSurface","p0'"]
+  950          0 Intersections               100:15-100:17 ExpBox False
+  951          0 Intersections               100:19-100:21 ExpBox False
+  952          0 Intersections               100:23-100:25 ExpBox False
+  953          0 Intersections                100:5-100:25 ExpBox True
+  954          0 Intersections               110:22-110:22 ExpBox False
+  955          0 Intersections               110:24-110:25 ExpBox False
+  956          0 Intersections               110:15-110:25 ExpBox False
+  957          0 Intersections                110:9-110:25 LocalBox ["transformSurface","v1'"]
+  958          0 Intersections               109:22-109:22 ExpBox False
+  959          0 Intersections               109:24-109:25 ExpBox False
+  960          0 Intersections               109:15-109:25 ExpBox False
+  961          0 Intersections                109:9-109:25 LocalBox ["transformSurface","v0'"]
+  962          0 Intersections               108:22-108:22 ExpBox False
+  963          0 Intersections               108:24-108:25 ExpBox False
+  964          0 Intersections               108:15-108:25 ExpBox False
+  965          0 Intersections                108:9-108:25 LocalBox ["transformSurface","p0'"]
+  966          0 Intersections               107:17-107:19 ExpBox False
+  967          0 Intersections               107:21-107:23 ExpBox False
+  968          0 Intersections               107:25-107:27 ExpBox False
+  969          0 Intersections                107:5-107:27 ExpBox True
+  970          0 Intersections               116:22-116:22 ExpBox False
+  971          0 Intersections               116:24-116:25 ExpBox False
+  972          0 Intersections               116:15-116:25 ExpBox False
+  973          0 Intersections                116:9-116:25 LocalBox ["transformSurface","v1'"]
+  974          0 Intersections               115:22-115:22 ExpBox False
+  975          0 Intersections               115:24-115:25 ExpBox False
+  976          0 Intersections               115:15-115:25 ExpBox False
+  977          0 Intersections                115:9-115:25 LocalBox ["transformSurface","v0'"]
+  978          0 Intersections               114:22-114:22 ExpBox False
+  979          0 Intersections               114:24-114:25 ExpBox False
+  980          0 Intersections               114:15-114:25 ExpBox False
+  981          0 Intersections                114:9-114:25 LocalBox ["transformSurface","p0'"]
+  982          0 Intersections               113:11-113:13 ExpBox False
+  983          0 Intersections               113:15-113:17 ExpBox False
+  984          0 Intersections               113:19-113:21 ExpBox False
+  985          0 Intersections                113:5-113:21 ExpBox True
+  986      32512 Intersections                 93:1-116:25 TopLevelBox ["transformSurface"]
+  987          0 Intersections                 85:12-85:13 ExpBox False
+  988          0 Intersections                 85:15-85:16 ExpBox False
+  989          0 Intersections                 85:18-85:19 ExpBox False
+  990          0 Intersections                  85:5-85:19 ExpBox True
+  991          0 Intersections                 87:15-87:16 ExpBox False
+  992          0 Intersections                 87:18-87:19 ExpBox False
+  993          0 Intersections                 87:21-87:22 ExpBox False
+  994          0 Intersections                  87:5-87:22 ExpBox True
+  995          0 Intersections                 89:17-89:18 ExpBox False
+  996          0 Intersections                 89:20-89:21 ExpBox False
+  997          0 Intersections                 89:23-89:24 ExpBox False
+  998          0 Intersections                  89:5-89:24 ExpBox True
+  999          0 Intersections                 91:11-91:12 ExpBox False
+ 1000          0 Intersections                 91:14-91:15 ExpBox False
+ 1001          0 Intersections                 91:17-91:18 ExpBox False
+ 1002          0 Intersections                  91:5-91:18 ExpBox True
+ 1003          0 Intersections                  84:1-91:18 TopLevelBox ["negateSurface"]
+ 1004          0 Intersections                 82:34-82:34 ExpBox False
+ 1005          0 Intersections                 82:37-82:37 ExpBox False
+ 1006          0 Intersections                 82:55-82:55 ExpBox False
+ 1007          0 Intersections                 82:41-82:55 ExpBox False
+ 1008          0 Intersections                 82:58-82:58 ExpBox False
+ 1009          0 Intersections                 82:40-82:59 ExpBox False
+ 1010          0 Intersections                 82:33-82:60 ExpBox False
+ 1011          0 Intersections                  82:9-82:60 LocalBox ["negateSurfaces","negSurf"]
+ 1012          0 Intersections                 81:23-81:29 ExpBox False
+ 1013          0 Intersections                 81:18-81:29 ExpBox False
+ 1014          0 Intersections                  81:1-82:60 TopLevelBox ["negateSurfaces"]
+ 1015          0 Intersections               256:23-256:41 ExpBox False
+ 1016          0 Intersections               256:45-256:58 ExpBox False
+ 1017          0 Intersections               257:40-257:53 ExpBox False
+ 1018          0 Intersections               257:55-257:57 ExpBox False
+ 1019          0 Intersections               257:59-257:61 ExpBox False
+ 1020          0 Intersections               257:63-257:69 ExpBox False
+ 1021          0 Intersections               257:23-257:69 ExpBox False
+ 1022          0 Intersections               256:45-257:69 ExpBox False
+ 1023          0 Intersections               256:23-257:69 ExpBox False
+ 1024          0 Intersections                256:9-257:69 LocalBox ["intersectCylinder","isectBottom"]
+ 1025          0 Intersections               255:40-255:50 ExpBox False
+ 1026          0 Intersections               255:52-255:54 ExpBox False
+ 1027          0 Intersections               255:56-255:58 ExpBox False
+ 1028          0 Intersections               255:60-255:66 ExpBox False
+ 1029          0 Intersections               255:23-255:66 ExpBox False
+ 1030          0 Intersections                255:9-255:66 LocalBox ["intersectCylinder","isectTop"]
+ 1031          0 Intersections               254:40-254:42 ExpBox False
+ 1032          0 Intersections               254:44-254:50 ExpBox False
+ 1033          0 Intersections               254:23-254:50 ExpBox False
+ 1034          0 Intersections                254:9-254:50 LocalBox ["intersectCylinder","isectSide"]
+ 1035          0 Intersections                253:5-253:13 ExpBox False
+ 1036          0 Intersections               253:36-253:43 ExpBox False
+ 1037          0 Intersections                253:5-253:43 ExpBox False
+ 1038          0 Intersections               253:66-253:76 ExpBox False
+ 1039          0 Intersections                253:5-253:76 ExpBox False
+ 1040          0 Intersections                252:1-257:69 TopLevelBox ["intersectCylinder"]
+ 1041          0 Intersections               304:23-304:41 ExpBox False
+ 1042          0 Intersections               304:45-304:58 ExpBox False
+ 1043          0 Intersections               305:40-305:47 ExpBox False
+ 1044          0 Intersections               305:49-305:51 ExpBox False
+ 1045          0 Intersections               305:53-305:55 ExpBox False
+ 1046          0 Intersections               305:57-305:63 ExpBox False
+ 1047          0 Intersections               305:23-305:63 ExpBox False
+ 1048          0 Intersections               304:45-305:63 ExpBox False
+ 1049          0 Intersections               304:23-305:63 ExpBox False
+ 1050          0 Intersections                304:9-305:63 LocalBox ["intersectCone","isectBottom"]
+ 1051          0 Intersections               303:40-303:47 ExpBox False
+ 1052          0 Intersections               303:49-303:51 ExpBox False
+ 1053          0 Intersections               303:53-303:55 ExpBox False
+ 1054          0 Intersections               303:57-303:63 ExpBox False
+ 1055          0 Intersections               303:23-303:63 ExpBox False
+ 1056          0 Intersections                303:9-303:63 LocalBox ["intersectCone","isectTop"]
+ 1057          0 Intersections               302:41-302:43 ExpBox False
+ 1058          0 Intersections               302:45-302:51 ExpBox False
+ 1059          0 Intersections               302:23-302:51 ExpBox False
+ 1060          0 Intersections                302:9-302:51 LocalBox ["intersectCone","isectSide"]
+ 1061          0 Intersections                301:5-301:13 ExpBox False
+ 1062          0 Intersections               301:36-301:43 ExpBox False
+ 1063          0 Intersections                301:5-301:43 ExpBox False
+ 1064          0 Intersections               301:66-301:76 ExpBox False
+ 1065          0 Intersections                301:5-301:76 ExpBox False
+ 1066          0 Intersections                300:1-305:63 TopLevelBox ["intersectCone"]
+ 1067     115538 Intersections                 44:28-44:30 ExpBox False
+ 1068     115538 Intersections                 44:32-44:32 ExpBox False
+ 1069     115538 Intersections                 44:14-44:32 ExpBox False
+ 1070     115538 Intersections                  44:9-44:32 LocalBox ["intersections","js"]
+ 1071     115538 Intersections                 43:28-43:30 ExpBox False
+ 1072     115538 Intersections                 43:32-43:32 ExpBox False
+ 1073     115538 Intersections                 43:14-43:32 ExpBox False
+ 1074     115538 Intersections                  43:9-43:32 LocalBox ["intersections","is"]
+ 1075     115538 Intersections                 42:20-42:21 ExpBox False
+ 1076     115538 Intersections                 42:23-42:24 ExpBox False
+ 1077     115538 Intersections                  42:5-42:24 ExpBox True
+ 1078          0 Intersections                 49:28-49:30 ExpBox False
+ 1079          0 Intersections                 49:32-49:32 ExpBox False
+ 1080          0 Intersections                 49:14-49:32 ExpBox False
+ 1081          0 Intersections                  49:9-49:32 LocalBox ["intersections","js"]
+ 1082          0 Intersections                 48:28-48:30 ExpBox False
+ 1083          0 Intersections                 48:32-48:32 ExpBox False
+ 1084          0 Intersections                 48:14-48:32 ExpBox False
+ 1085          0 Intersections                  48:9-48:32 LocalBox ["intersections","is"]
+ 1086          0 Intersections                 47:24-47:25 ExpBox False
+ 1087          0 Intersections                 47:27-47:28 ExpBox False
+ 1088          0 Intersections                  47:5-47:28 ExpBox True
+ 1089          0 Intersections                 54:28-54:30 ExpBox False
+ 1090          0 Intersections                 54:32-54:32 ExpBox False
+ 1091          0 Intersections                 54:14-54:32 ExpBox False
+ 1092          0 Intersections                  54:9-54:32 LocalBox ["intersections","js"]
+ 1093          0 Intersections                 53:28-53:30 ExpBox False
+ 1094          0 Intersections                 53:32-53:32 ExpBox False
+ 1095          0 Intersections                 53:14-53:32 ExpBox False
+ 1096          0 Intersections                  53:9-53:32 LocalBox ["intersections","is"]
+ 1097          0 Intersections                 52:25-52:26 ExpBox False
+ 1098          0 Intersections                 52:44-52:45 ExpBox False
+ 1099          0 Intersections                 52:28-52:46 ExpBox False
+ 1100          0 Intersections                  52:5-52:46 ExpBox True
+ 1101     127319 Intersections                 59:36-59:36 ExpBox False
+ 1102     127319 Intersections                 59:39-59:39 ExpBox False
+ 1103      32512 Intersections                 59:60-59:60 ExpBox False
+ 1104      32512 Intersections                 59:62-59:62 ExpBox False
+ 1105      32512 Intersections                 59:43-59:62 ExpBox False
+ 1106      32512 Intersections                 59:65-59:66 ExpBox False
+ 1107      32512 Intersections                 59:42-59:67 ExpBox False
+ 1108     127319 Intersections                 59:35-59:68 ExpBox False
+ 1109     127319 Intersections                  59:9-59:68 LocalBox ["intersections","xform"]
+ 1110     132847 Intersections                 58:29-58:30 ExpBox False
+ 1111     132847 Intersections                 58:41-58:43 ExpBox False
+ 1112     132847 Intersections                 58:28-58:44 ExpBox False
+ 1113     132847 Intersections                 58:46-58:46 ExpBox False
+ 1114     132847 Intersections                 58:14-58:46 ExpBox False
+ 1115     132847 Intersections                  58:9-58:46 LocalBox ["intersections","is"]
+ 1116      32512 Intersections                 57:17-57:17 ExpBox False
+ 1117     125292 Intersections                 57:10-57:18 ExpBox False
+ 1118     132847 Intersections                 57:20-57:21 ExpBox False
+ 1119     132847 Intersections                  57:5-57:21 ExpBox True
+ 1120     115538 Intersections                 62:22-62:24 ExpBox False
+ 1121     115538 Intersections                 62:26-62:28 ExpBox False
+ 1122     115538 Intersections                  62:5-62:28 ExpBox False
+ 1123      17309 Intersections                  62:5-62:28 BinBox GuardBinBox True
+ 1124          3 Intersections                  62:5-62:28 BinBox GuardBinBox False
+ 1125      17309 Intersections                 62:46-62:48 ExpBox False
+ 1126      17309 Intersections                 62:50-62:50 ExpBox False
+ 1127      17309 Intersections                 62:32-62:50 ExpBox True
+ 1128          1 Intersections                  63:5-63:13 ExpBox False
+ 1129          1 Intersections                  63:5-63:13 BinBox GuardBinBox True
+ 1130          0 Intersections                  63:5-63:13 BinBox GuardBinBox False
+ 1131          1 Intersections                 63:17-63:26 ExpBox True
+ 1132     115538 Intersections                 66:20-66:22 ExpBox False
+ 1133      26784 Intersections                 66:24-66:24 ExpBox False
+ 1134     115538 Intersections                  66:5-66:24 ExpBox True
+ 1135          0 Intersections                 69:21-69:23 ExpBox False
+ 1136          0 Intersections                 69:25-69:25 ExpBox False
+ 1137          0 Intersections                  69:5-69:25 ExpBox True
+ 1138      17309 Intersections                 72:19-72:21 ExpBox False
+ 1139       5728 Intersections                 72:23-72:23 ExpBox False
+ 1140      17309 Intersections                  72:5-72:23 ExpBox True
+ 1141          0 Intersections                 75:23-75:25 ExpBox False
+ 1142          0 Intersections                 75:27-75:27 ExpBox False
+ 1143          0 Intersections                  75:5-75:27 ExpBox True
+ 1144          0 Intersections                 78:19-78:21 ExpBox False
+ 1145          0 Intersections                 78:23-78:23 ExpBox False
+ 1146          0 Intersections                  78:5-78:23 ExpBox True
+ 1147     496770 Intersections                  41:1-78:23 TopLevelBox ["intersections"]
+ 1148          0 Intersections                 27:36-27:40 ExpBox False
+ 1149          0 Intersections                 27:45-27:45 ExpBox False
+ 1150          0 Intersections                 27:48-27:51 ExpBox False
+ 1151          0 Intersections                 27:54-27:62 ExpBox False
+ 1152          0 Intersections                 27:44-27:63 ExpBox False
+ 1153          0 Intersections                 27:43-27:64 ExpBox False
+ 1154          0 Intersections                 27:67-27:70 ExpBox False
+ 1155          0 Intersections                 27:35-27:71 ExpBox True
+ 1156      81027 Intersections                 28:43-28:47 ExpBox True
+ 1157      87565 Intersections                   30:5-30:5 ExpBox False
+ 1158      87565 Intersections                 30:14-30:14 ExpBox False
+ 1159      87565 Intersections                  30:5-30:14 ExpBox False
+ 1160      60838 Intersections                 30:19-30:19 ExpBox False
+ 1161      60838 Intersections                 30:23-30:23 ExpBox False
+ 1162      60838 Intersections                 30:19-30:23 ExpBox False
+ 1163      87565 Intersections                  30:5-30:23 ExpBox False
+ 1164      87565 Intersections                  30:5-30:23 BinBox GuardBinBox True
+ 1165          0 Intersections                  30:5-30:23 BinBox GuardBinBox False
+ 1166      87565 Intersections                 31:21-31:25 ExpBox False
+ 1167      87565 Intersections                 31:28-31:30 ExpBox False
+ 1168      83054 Intersections                 31:33-31:38 ExpBox False
+ 1169      87565 Intersections                 31:20-31:39 ExpBox False
+ 1170      87565 Intersections                  31:5-31:39 ExpBox True
+ 1171          0 Intersections                  32:5-32:13 ExpBox False
+ 1172          0 Intersections                  32:5-32:13 BinBox GuardBinBox True
+ 1173          0 Intersections                  32:5-32:13 BinBox GuardBinBox False
+ 1174          0 Intersections                  33:6-33:10 ExpBox False
+ 1175          0 Intersections                 33:14-33:14 ExpBox False
+ 1176          0 Intersections                 33:17-33:20 ExpBox False
+ 1177          0 Intersections                 33:23-33:31 ExpBox False
+ 1178          0 Intersections                 33:13-33:32 ExpBox False
+ 1179          0 Intersections                 33:36-33:37 ExpBox False
+ 1180          0 Intersections                 33:13-33:37 ExpBox False
+ 1181          0 Intersections                 33:40-33:45 ExpBox False
+ 1182          0 Intersections                  33:5-33:46 ExpBox True
+ 1183      36538 Intersections                   35:5-35:5 ExpBox False
+ 1184      36538 Intersections                 35:14-35:14 ExpBox False
+ 1185      36538 Intersections                  35:5-35:14 ExpBox False
+ 1186      36538 Intersections                 35:19-35:19 ExpBox False
+ 1187      36538 Intersections                 35:23-35:23 ExpBox False
+ 1188      36538 Intersections                 35:19-35:23 ExpBox False
+ 1189      36538 Intersections                  35:5-35:23 ExpBox False
+ 1190       2027 Intersections                  35:5-35:23 BinBox GuardBinBox True
+ 1191      34511 Intersections                  35:5-35:23 BinBox GuardBinBox False
+ 1192       2027 Intersections                 37:21-37:24 ExpBox False
+ 1193       2027 Intersections                 37:27-37:29 ExpBox False
+ 1194       2027 Intersections                 37:32-37:37 ExpBox False
+ 1195       2027 Intersections                 37:20-37:38 ExpBox False
+ 1196       2027 Intersections                  37:5-37:38 ExpBox True
+ 1197      34511 Intersections                  38:5-38:13 ExpBox False
+ 1198      34511 Intersections                  38:5-38:13 BinBox GuardBinBox True
+ 1199          0 Intersections                  38:5-38:13 BinBox GuardBinBox False
+ 1200      34511 Intersections                   39:5-39:9 ExpBox True
+ 1201     205130 Intersections                   27:1-39:9 TopLevelBox ["clampIntervals"]
+ 1202     115538 Intersections                 25:28-25:30 ExpBox False
+ 1203     115538 Intersections                 25:32-25:32 ExpBox False
+ 1204     115538 Intersections                 25:14-25:32 ExpBox False
+ 1205     115538 Intersections                  25:9-25:32 LocalBox ["intersectRayWithObject","is"]
+ 1206     115538 Intersections                 24:20-24:21 ExpBox False
+ 1207     115538 Intersections                  24:5-24:21 ExpBox False
+ 1208     115538 Intersections                  23:1-25:32 TopLevelBox ["intersectRayWithObject"]
+    0          0 Interval                      94:10-94:11 ExpBox False
+    1          0 Interval                       94:6-94:11 ExpBox False
+    2          0 Interval                      94:57-94:58 ExpBox False
+    3          0 Interval                      94:17-94:17 ExpBox False
+    4          0 Interval                      94:24-94:30 ExpBox False
+    5          0 Interval                      94:20-94:30 ExpBox False
+    6          0 Interval                      94:33-94:33 ExpBox False
+    7          0 Interval                      94:16-94:34 ExpBox False
+    8          0 Interval                      94:14-94:60 ExpBox False
+    9          0 Interval                      94:67-94:68 ExpBox False
+   10          0 Interval                      94:63-94:68 ExpBox False
+   11          0 Interval                       94:5-94:69 ExpBox False
+   12          0 Interval                       93:1-94:69 TopLevelBox ["complementIntervals"]
+   13          0 Interval                      62:13-62:17 ExpBox True
+   14          0 Interval                      63:27-63:27 ExpBox False
+   15          0 Interval                      63:32-63:32 ExpBox False
+   16          0 Interval                      63:27-63:32 ExpBox False
+   17          0 Interval                      63:42-63:42 ExpBox False
+   18          0 Interval                      63:44-63:45 ExpBox False
+   19          0 Interval                      63:37-63:45 ExpBox False
+   20          0 Interval                      63:27-63:45 ExpBox True
+   21          0 Interval                       62:1-63:45 TopLevelBox ["bad'"]
+   22          0 Interval                      58:20-58:21 ExpBox False
+   23          0 Interval                      58:26-58:27 ExpBox False
+   24          0 Interval                      58:20-58:27 ExpBox True
+   25          0 Interval                      60:27-60:28 ExpBox False
+   26          0 Interval                      60:22-60:28 ExpBox False
+   27          0 Interval                      59:25-59:26 ExpBox False
+   28          0 Interval                      59:28-59:29 ExpBox False
+   29          0 Interval                      59:20-59:29 ExpBox False
+   30          0 Interval                      59:34-59:35 ExpBox False
+   31          0 Interval                      59:40-59:41 ExpBox False
+   32          0 Interval                      59:34-59:41 ExpBox False
+   33          0 Interval                      59:20-59:41 ExpBox True
+   34          0 Interval                       58:1-60:28 TopLevelBox ["bad"]
+   35       9754 Interval                        54:5-54:5 ExpBox False
+   36       9754 Interval                      54:14-54:14 ExpBox False
+   37       9754 Interval                       54:5-54:14 ExpBox False
+   38          0 Interval                       54:5-54:14 BinBox GuardBinBox True
+   39       9754 Interval                       54:5-54:14 BinBox GuardBinBox False
+   40          0 Interval                      54:18-54:19 ExpBox True
+   41       9754 Interval                        55:5-55:5 ExpBox False
+   42       9754 Interval                      55:14-55:14 ExpBox False
+   43       9754 Interval                       55:5-55:14 ExpBox False
+   44       3216 Interval                       55:5-55:14 BinBox GuardBinBox True
+   45       6538 Interval                       55:5-55:14 BinBox GuardBinBox False
+   46       3216 Interval                      55:18-55:19 ExpBox True
+   47       6538 Interval                       56:5-56:13 ExpBox False
+   48       6538 Interval                       56:5-56:13 BinBox GuardBinBox True
+   49          0 Interval                       56:5-56:13 BinBox GuardBinBox False
+   50       6538 Interval                      56:18-56:19 ExpBox True
+   51       9754 Interval                       53:1-56:19 TopLevelBox ["cmpI"]
+   52      87565 Interval                      44:19-44:19 ExpBox False
+   53      87565 Interval                      44:22-44:26 ExpBox False
+   54      87565 Interval                      44:29-44:29 ExpBox False
+   55      87565 Interval                      44:18-44:30 ExpBox False
+   56      87565 Interval                       44:1-44:30 TopLevelBox ["mkExit"]
+   57      39754 Interval                      43:19-43:19 ExpBox False
+   58      39754 Interval                      43:22-43:25 ExpBox False
+   59      39754 Interval                      43:29-43:29 ExpBox False
+   60      39754 Interval                      43:18-43:30 ExpBox False
+   61      39754 Interval                       43:1-43:30 TopLevelBox ["mkEntry"]
+   62       9754 Interval                      46:20-46:24 ExpBox False
+   63       9754 Interval                      46:36-46:37 ExpBox False
+   64       9754 Interval                      46:28-46:37 ExpBox False
+   65       2027 Interval                      46:47-46:48 ExpBox False
+   66       2027 Interval                      46:40-46:48 ExpBox False
+   67       9754 Interval                      46:27-46:49 ExpBox False
+   68       2027 Interval                      46:52-46:56 ExpBox False
+   69       9754 Interval                      46:19-46:57 ExpBox False
+   70       9754 Interval                       46:1-46:57 TopLevelBox ["entryexit"]
+   71          0 Interval                      48:35-48:36 ExpBox False
+   72          0 Interval                      48:40-48:41 ExpBox False
+   73          0 Interval                      48:35-48:41 ExpBox False
+   74          0 Interval                      48:35-48:41 BinBox GuardBinBox True
+   75          0 Interval                      48:35-48:41 BinBox GuardBinBox False
+   76          0 Interval                      48:57-48:58 ExpBox False
+   77          0 Interval                      48:60-48:61 ExpBox False
+   78          0 Interval                      48:47-48:61 ExpBox True
+   79          0 Interval                      49:35-49:43 ExpBox False
+   80          0 Interval                      49:35-49:43 BinBox GuardBinBox True
+   81          0 Interval                      49:35-49:43 BinBox GuardBinBox False
+   82          0 Interval                      49:57-49:58 ExpBox False
+   83          0 Interval                      49:60-49:61 ExpBox False
+   84          0 Interval                      49:47-49:61 ExpBox True
+   85          0 Interval                       48:1-49:61 TopLevelBox ["arrange"]
+   86          0 Interval                      47:20-47:23 ExpBox False
+   87          0 Interval                      47:34-47:35 ExpBox False
+   88          0 Interval                      47:27-47:35 ExpBox False
+   89          0 Interval                      47:46-47:47 ExpBox False
+   90          0 Interval                      47:38-47:47 ExpBox False
+   91          0 Interval                      47:26-47:48 ExpBox False
+   92          0 Interval                      47:51-47:54 ExpBox False
+   93          0 Interval                      47:19-47:55 ExpBox False
+   94          0 Interval                       47:1-47:55 TopLevelBox ["exitentry"]
+   95          0 Interval                      41:29-41:33 ExpBox False
+   96          0 Interval                      41:25-41:33 ExpBox False
+   97          0 Interval                       41:1-41:33 TopLevelBox ["isExit"]
+   98       9754 Interval                      40:25-40:29 ExpBox False
+   99       9754 Interval                       40:1-40:29 TopLevelBox ["isEntry"]
+  100       6538 Interval                      68:30-68:38 ExpBox False
+  101          0 Interval                      68:30-68:38 BinBox GuardBinBox True
+  102       6538 Interval                      68:30-68:38 BinBox GuardBinBox False
+  103          0 Interval                      68:42-68:43 ExpBox True
+  104       6538 Interval                      69:30-69:38 ExpBox False
+  105       6538 Interval                      69:30-69:38 BinBox GuardBinBox True
+  106          0 Interval                      69:30-69:38 BinBox GuardBinBox False
+  107       6538 Interval                      69:42-69:43 ExpBox True
+  108     105784 Interval                      70:30-70:38 ExpBox False
+  109          0 Interval                      70:30-70:38 BinBox GuardBinBox True
+  110     105784 Interval                      70:30-70:38 BinBox GuardBinBox False
+  111          0 Interval                      70:42-70:43 ExpBox True
+  112     105784 Interval                      71:30-71:38 ExpBox False
+  113     105784 Interval                      71:30-71:38 BinBox GuardBinBox True
+  114          0 Interval                      71:30-71:38 BinBox GuardBinBox False
+  115     105784 Interval                      71:42-71:43 ExpBox True
+  116       9754 Interval                      73:23-73:23 ExpBox False
+  117       9754 Interval                      73:25-73:25 ExpBox False
+  118       9754 Interval                      73:18-73:25 ExpBox False
+  119          0 Interval                      74:30-74:30 ExpBox False
+  120          0 Interval                      74:22-74:30 ExpBox False
+  121          0 Interval                      74:43-74:43 ExpBox False
+  122          0 Interval                      74:35-74:43 ExpBox False
+  123          0 Interval                      74:22-74:43 ExpBox False
+  124          0 Interval                      74:22-74:43 BinBox CondBinBox True
+  125          0 Interval                      74:22-74:43 BinBox CondBinBox False
+  126          0 Interval                      74:50-74:50 ExpBox False
+  127          0 Interval                      74:67-74:69 ExpBox False
+  128          0 Interval                      74:71-74:73 ExpBox False
+  129          0 Interval                      74:54-74:73 ExpBox False
+  130          0 Interval                      74:50-74:73 ExpBox True
+  131          0 Interval                      75:63-75:65 ExpBox False
+  132          0 Interval                      75:67-75:69 ExpBox False
+  133          0 Interval                      75:50-75:69 ExpBox True
+  134          0 Interval                      74:19-75:69 ExpBox True
+  135       3216 Interval                      76:30-76:30 ExpBox False
+  136       3216 Interval                      76:22-76:30 ExpBox False
+  137       3216 Interval                      76:22-76:30 BinBox CondBinBox True
+  138          0 Interval                      76:22-76:30 BinBox CondBinBox False
+  139       3216 Interval                      76:37-76:37 ExpBox False
+  140          0 Interval                      76:54-76:56 ExpBox False
+  141          0 Interval                      76:58-76:59 ExpBox False
+  142          0 Interval                      76:41-76:59 ExpBox False
+  143       3216 Interval                      76:37-76:59 ExpBox True
+  144          0 Interval                      77:54-77:56 ExpBox False
+  145          0 Interval                      77:58-77:59 ExpBox False
+  146          0 Interval                      77:41-77:59 ExpBox True
+  147       3216 Interval                      76:19-77:59 ExpBox True
+  148       6538 Interval                      78:30-78:30 ExpBox False
+  149       6538 Interval                      78:22-78:30 ExpBox False
+  150       6538 Interval                      78:22-78:30 BinBox CondBinBox True
+  151          0 Interval                      78:22-78:30 BinBox CondBinBox False
+  152       6538 Interval                      78:37-78:37 ExpBox False
+  153       6538 Interval                      78:54-78:55 ExpBox False
+  154       6538 Interval                      78:57-78:59 ExpBox False
+  155       6538 Interval                      78:41-78:59 ExpBox False
+  156       6538 Interval                      78:37-78:59 ExpBox True
+  157          0 Interval                      79:54-79:55 ExpBox False
+  158          0 Interval                      79:57-79:59 ExpBox False
+  159          0 Interval                      79:41-79:59 ExpBox True
+  160       6538 Interval                      78:19-79:59 ExpBox True
+  161       9754 Interval                      73:13-79:59 ExpBox True
+  162     122076 Interval                       68:9-79:59 LocalBox ["unionIntervals","uniIntervals"]
+  163     115538 Interval                       67:6-67:16 ExpBox False
+  164     115538 Interval                      67:21-67:31 ExpBox False
+  165     115538 Interval                       67:6-67:31 ExpBox False
+  166     115538 Interval                      67:47-67:48 ExpBox False
+  167     115538 Interval                      67:50-67:51 ExpBox False
+  168     115538 Interval                      67:34-67:51 ExpBox False
+  169      81027 Interval                      67:54-67:62 ExpBox False
+  170      81027 Interval                      67:67-67:75 ExpBox False
+  171      81027 Interval                      67:54-67:75 ExpBox False
+  172     115538 Interval                       67:5-67:76 ExpBox False
+  173     115538 Interval                       66:1-79:59 TopLevelBox ["unionIntervals"]
+  174          0 Interval                      85:35-85:36 ExpBox False
+  175          0 Interval                      85:15-85:36 ExpBox False
+  176          0 Interval                       85:9-85:36 LocalBox ["intersectIntervals","js'"]
+  177          0 Interval                      84:35-84:36 ExpBox False
+  178          0 Interval                      84:15-84:36 ExpBox False
+  179          0 Interval                       84:9-84:36 LocalBox ["intersectIntervals","is'"]
+  180          0 Interval                      83:41-83:43 ExpBox False
+  181          0 Interval                      83:45-83:47 ExpBox False
+  182          0 Interval                      83:25-83:48 ExpBox False
+  183          0 Interval                       83:5-83:48 ExpBox False
+  184          0 Interval                       82:1-85:36 TopLevelBox ["intersectIntervals"]
+  185          0 Interval                      90:35-90:36 ExpBox False
+  186          0 Interval                      90:15-90:36 ExpBox False
+  187          0 Interval                       90:9-90:36 LocalBox ["differenceIntervals","is'"]
+  188          0 Interval                      89:41-89:43 ExpBox False
+  189          0 Interval                      89:45-89:46 ExpBox False
+  190          0 Interval                      89:25-89:47 ExpBox False
+  191          0 Interval                       89:5-89:47 ExpBox False
+  192          0 Interval                       88:1-90:36 TopLevelBox ["differenceIntervals"]
+  193     132847 Interval                      38:24-38:25 ExpBox False
+  194     125292 Interval                      38:32-38:32 ExpBox False
+  195     132847 Interval                      38:34-38:35 ExpBox False
+  196     132847 Interval                      38:28-38:35 ExpBox False
+  197      95120 Interval                      38:38-38:39 ExpBox False
+  198     132847 Interval                      38:23-38:40 ExpBox False
+  199     132847 Interval                       38:1-38:40 TopLevelBox ["mapI"]
+  200          0 Interval                      36:14-36:17 ExpBox False
+  201          0 Interval                      36:20-36:21 ExpBox False
+  202          0 Interval                      36:24-36:27 ExpBox False
+  203          0 Interval                      36:13-36:28 ExpBox False
+  204          0 Interval                       36:1-36:28 TopLevelBox ["openIList"]
+  205          1 Interval                      35:15-35:19 ExpBox False
+  206          1 Interval                      35:22-35:23 ExpBox False
+  207          1 Interval                      35:26-35:30 ExpBox False
+  208          1 Interval                      35:14-35:31 ExpBox False
+  209          1 Interval                       35:1-35:31 TopLevelBox ["emptyIList"]
diff --git a/testsuite/tests/hpc/raytrace/tixs/hpc_show_multi_002.stdout b/testsuite/tests/hpc/raytrace/tixs/hpc_show_multi_002.stdout
new file mode 100644
index 0000000000000000000000000000000000000000..f5b7e9cc97079b55100c6835cc2943774b7b3fa8
--- /dev/null
+++ b/testsuite/tests/hpc/raytrace/tixs/hpc_show_multi_002.stdout
@@ -0,0 +1,522 @@
+    0     180000 Geometry                    311:12-311:12 ExpBox False
+    1     180000 Geometry                    311:16-311:16 ExpBox False
+    2     180000 Geometry                    311:12-311:16 ExpBox False
+    3          0 Geometry                    311:12-311:16 BinBox GuardBinBox True
+    4     180000 Geometry                    311:12-311:16 BinBox GuardBinBox False
+    5          0 Geometry                    311:20-311:20 ExpBox True
+    6     180000 Geometry                    312:12-312:12 ExpBox False
+    7     180000 Geometry                    312:16-312:16 ExpBox False
+    8     180000 Geometry                    312:12-312:16 ExpBox False
+    9       4582 Geometry                    312:12-312:16 BinBox GuardBinBox True
+   10     175418 Geometry                    312:12-312:16 BinBox GuardBinBox False
+   11       4582 Geometry                    312:20-312:20 ExpBox True
+   12     175418 Geometry                    313:12-313:15 ExpBox False
+   13     175418 Geometry                    313:12-313:15 BinBox GuardBinBox True
+   14          0 Geometry                    313:12-313:15 BinBox GuardBinBox False
+   15     175418 Geometry                    313:20-313:20 ExpBox True
+   16     180000 Geometry                     311:1-313:20 TopLevelBox ["clampf"]
+   17          1 Geometry                     299:7-299:12 ExpBox False
+   18          1 Geometry                     299:1-299:12 TopLevelBox ["inf"]
+   19          1 Geometry                    298:11-298:17 ExpBox False
+   20          1 Geometry                     298:1-298:17 TopLevelBox ["epsilon"]
+   21          3 Geometry                    302:13-302:13 ExpBox False
+   22          3 Geometry                    302:17-302:23 ExpBox False
+   23          3 Geometry                    302:13-302:23 ExpBox False
+   24          3 Geometry                    302:13-302:23 BinBox GuardBinBox True
+   25          0 Geometry                    302:13-302:23 BinBox GuardBinBox False
+   26          3 Geometry                    302:28-302:28 ExpBox True
+   27          0 Geometry                    303:13-303:13 ExpBox False
+   28          0 Geometry                    303:18-303:24 ExpBox False
+   29          0 Geometry                    303:17-303:24 ExpBox False
+   30          0 Geometry                    303:13-303:24 ExpBox False
+   31          0 Geometry                    303:13-303:24 BinBox GuardBinBox True
+   32          0 Geometry                    303:13-303:24 BinBox GuardBinBox False
+   33          0 Geometry                    303:28-303:28 ExpBox True
+   34          0 Geometry                    304:13-304:21 ExpBox False
+   35          0 Geometry                    304:13-304:21 BinBox GuardBinBox True
+   36          0 Geometry                    304:13-304:21 BinBox GuardBinBox False
+   37          0 Geometry                    304:28-304:34 ExpBox True
+   38          3 Geometry                     302:1-304:34 TopLevelBox ["nonZero"]
+   39     376778 Geometry                    307:18-307:18 ExpBox False
+   40     376778 Geometry                    307:20-307:20 ExpBox False
+   41     376778 Geometry                    307:17-307:21 ExpBox False
+   42     376778 Geometry                    307:13-307:21 ExpBox False
+   43     376778 Geometry                    307:25-307:31 ExpBox False
+   44     376778 Geometry                    307:13-307:31 ExpBox False
+   45     376778 Geometry                     307:1-307:31 TopLevelBox ["eqEps"]
+   46          1 Geometry                     308:8-308:12 ExpBox False
+   47          1 Geometry                     308:1-308:12 TopLevelBox ["near"]
+   48      32512 Geometry                    290:29-290:29 ExpBox False
+   49      32512 Geometry                    290:38-290:38 ExpBox False
+   50      32512 Geometry                    290:29-290:38 ExpBox False
+   51       5785 Geometry                    290:43-290:43 ExpBox False
+   52       5785 Geometry                    290:52-290:52 ExpBox False
+   53       5785 Geometry                    290:43-290:52 ExpBox False
+   54       5785 Geometry                    290:57-290:57 ExpBox False
+   55       5785 Geometry                    290:66-290:66 ExpBox False
+   56       5785 Geometry                    290:57-290:66 ExpBox False
+   57       5785 Geometry                    290:43-290:66 ExpBox False
+   58      32512 Geometry                    290:29-290:66 ExpBox False
+   59      32512 Geometry                     290:1-290:66 TopLevelBox ["nearC"]
+   60     183672 Geometry                    287:31-287:31 ExpBox False
+   61     183672 Geometry                    287:33-287:33 ExpBox False
+   62     183672 Geometry                    287:30-287:34 ExpBox False
+   63     183672 Geometry                    287:37-287:37 ExpBox False
+   64     183672 Geometry                    287:39-287:39 ExpBox False
+   65     183672 Geometry                    287:36-287:40 ExpBox False
+   66     183672 Geometry                    287:43-287:43 ExpBox False
+   67     183672 Geometry                    287:45-287:45 ExpBox False
+   68     183672 Geometry                    287:42-287:46 ExpBox False
+   69     183672 Geometry                    287:28-287:46 ExpBox False
+   70     183672 Geometry                     287:1-287:46 TopLevelBox ["multSC"]
+   71     112863 Geometry                    284:33-284:33 ExpBox False
+   72     112863 Geometry                    284:35-284:35 ExpBox False
+   73     112863 Geometry                    284:32-284:36 ExpBox False
+   74     112863 Geometry                    284:39-284:39 ExpBox False
+   75     112863 Geometry                    284:41-284:41 ExpBox False
+   76     112863 Geometry                    284:38-284:42 ExpBox False
+   77     112863 Geometry                    284:45-284:45 ExpBox False
+   78     112863 Geometry                    284:47-284:47 ExpBox False
+   79     112863 Geometry                    284:44-284:48 ExpBox False
+   80     112863 Geometry                    284:30-284:48 ExpBox False
+   81     112863 Geometry                     284:1-284:48 TopLevelBox ["multCC"]
+   82          0 Geometry                    278:32-278:32 ExpBox False
+   83          0 Geometry                    278:34-278:34 ExpBox False
+   84          0 Geometry                    278:31-278:35 ExpBox False
+   85          0 Geometry                    278:38-278:38 ExpBox False
+   86          0 Geometry                    278:40-278:40 ExpBox False
+   87          0 Geometry                    278:37-278:41 ExpBox False
+   88          0 Geometry                    278:44-278:44 ExpBox False
+   89          0 Geometry                    278:46-278:46 ExpBox False
+   90          0 Geometry                    278:43-278:47 ExpBox False
+   91          0 Geometry                    278:29-278:47 ExpBox False
+   92          0 Geometry                     278:1-278:47 TopLevelBox ["subCC"]
+   93     151160 Geometry                    275:32-275:32 ExpBox False
+   94     151160 Geometry                    275:34-275:34 ExpBox False
+   95     151160 Geometry                    275:31-275:35 ExpBox False
+   96     151160 Geometry                    275:38-275:38 ExpBox False
+   97     151160 Geometry                    275:40-275:40 ExpBox False
+   98     151160 Geometry                    275:37-275:41 ExpBox False
+   99     151160 Geometry                    275:44-275:44 ExpBox False
+  100     151160 Geometry                    275:46-275:46 ExpBox False
+  101     151160 Geometry                    275:43-275:47 ExpBox False
+  102     151160 Geometry                    275:29-275:47 ExpBox False
+  103     151160 Geometry                     275:1-275:47 TopLevelBox ["addCC"]
+  104          1 Geometry                    272:11-272:11 ExpBox False
+  105          1 Geometry                    272:13-272:13 ExpBox False
+  106          1 Geometry                    272:15-272:15 ExpBox False
+  107          1 Geometry                     272:9-272:15 ExpBox False
+  108          1 Geometry                     272:1-272:15 TopLevelBox ["black"]
+  109          1 Geometry                    281:15-281:19 ExpBox False
+  110          1 Geometry                    281:21-281:25 ExpBox False
+  111          1 Geometry                     281:9-281:25 ExpBox False
+  112          1 Geometry                     281:1-281:25 TopLevelBox ["sumCC"]
+  113          0 Geometry                    270:11-270:11 ExpBox False
+  114          0 Geometry                    270:13-270:13 ExpBox False
+  115          0 Geometry                    270:15-270:15 ExpBox False
+  116          0 Geometry                     270:9-270:15 ExpBox False
+  117          0 Geometry                     270:1-270:15 TopLevelBox ["white"]
+  118         12 Geometry                    239:47-239:49 ExpBox False
+  119         12 Geometry                    239:52-239:54 ExpBox False
+  120         12 Geometry                    239:57-239:59 ExpBox False
+  121         12 Geometry                    239:62-239:64 ExpBox False
+  122         12 Geometry                    239:44-239:65 ExpBox False
+  123         12 Geometry                    240:47-240:49 ExpBox False
+  124         12 Geometry                    240:52-240:54 ExpBox False
+  125         12 Geometry                    240:57-240:59 ExpBox False
+  126         12 Geometry                    240:62-240:64 ExpBox False
+  127         12 Geometry                    240:44-240:65 ExpBox False
+  128         12 Geometry                    241:47-241:49 ExpBox False
+  129         12 Geometry                    241:52-241:54 ExpBox False
+  130         12 Geometry                    241:57-241:59 ExpBox False
+  131         12 Geometry                    241:62-241:64 ExpBox False
+  132         12 Geometry                    241:44-241:65 ExpBox False
+  133         12 Geometry                    242:47-242:49 ExpBox False
+  134         12 Geometry                    242:52-242:54 ExpBox False
+  135         12 Geometry                    242:57-242:59 ExpBox False
+  136         12 Geometry                    242:62-242:64 ExpBox False
+  137         12 Geometry                    242:44-242:65 ExpBox False
+  138         12 Geometry                    239:41-242:66 ExpBox False
+  139         12 Geometry                     236:1-242:66 TopLevelBox ["transposeM"]
+  140     229838 Geometry                    222:25-222:25 ExpBox False
+  141     229838 Geometry                    222:27-222:27 ExpBox False
+  142     229838 Geometry                    222:24-222:28 ExpBox False
+  143     229838 Geometry                    222:31-222:31 ExpBox False
+  144     229838 Geometry                    222:33-222:33 ExpBox False
+  145     229838 Geometry                    222:30-222:34 ExpBox False
+  146     229838 Geometry                    222:37-222:37 ExpBox False
+  147     229838 Geometry                    222:39-222:39 ExpBox False
+  148     229838 Geometry                    222:36-222:40 ExpBox False
+  149     229838 Geometry                    222:22-222:40 ExpBox False
+  150     229838 Geometry                     222:1-222:40 TopLevelBox ["multSV"]
+  151     419283 Geometry                      210:8-210:8 ExpBox False
+  152     419283 Geometry                    210:12-210:12 ExpBox False
+  153     419283 Geometry                     210:8-210:12 ExpBox False
+  154     419283 Geometry                     210:1-210:12 TopLevelBox ["sq"]
+  155          0 Geometry                    214:28-214:28 ExpBox False
+  156          0 Geometry                    214:25-214:28 ExpBox False
+  157          0 Geometry                    214:35-214:35 ExpBox False
+  158          0 Geometry                    214:32-214:35 ExpBox False
+  159          0 Geometry                    214:25-214:35 ExpBox False
+  160          0 Geometry                    214:42-214:42 ExpBox False
+  161          0 Geometry                    214:39-214:42 ExpBox False
+  162          0 Geometry                    214:25-214:42 ExpBox False
+  163          0 Geometry                     214:1-214:42 TopLevelBox ["distFrom0Sq"]
+  164          0 Geometry                    218:33-218:33 ExpBox False
+  165          0 Geometry                    218:20-218:34 ExpBox False
+  166          0 Geometry                    218:15-218:34 ExpBox False
+  167          0 Geometry                     218:1-218:34 TopLevelBox ["distFrom0"]
+  168     139761 Geometry                    200:27-200:27 ExpBox False
+  169     139761 Geometry                    200:24-200:27 ExpBox False
+  170     139761 Geometry                    200:34-200:34 ExpBox False
+  171     139761 Geometry                    200:31-200:34 ExpBox False
+  172     139761 Geometry                    200:24-200:34 ExpBox False
+  173     139761 Geometry                    200:41-200:41 ExpBox False
+  174     139761 Geometry                    200:38-200:41 ExpBox False
+  175     139761 Geometry                    200:23-200:42 ExpBox False
+  176     139761 Geometry                    200:18-200:42 ExpBox False
+  177     139761 Geometry                    200:11-200:42 LocalBox ["normalize","norm"]
+  178     139761 Geometry                    198:16-198:19 ExpBox False
+  179     139761 Geometry                    198:24-198:24 ExpBox False
+  180     139761 Geometry                    198:16-198:24 ExpBox False
+  181     139761 Geometry                    198:16-198:24 BinBox GuardBinBox True
+  182          0 Geometry                    198:16-198:24 BinBox GuardBinBox False
+  183     139761 Geometry                    198:36-198:36 ExpBox False
+  184     139761 Geometry                    198:38-198:41 ExpBox False
+  185     139761 Geometry                    198:35-198:42 ExpBox False
+  186     139761 Geometry                    198:44-198:44 ExpBox False
+  187     139761 Geometry                    198:28-198:44 ExpBox True
+  188          0 Geometry                    199:16-199:24 ExpBox False
+  189          0 Geometry                    199:16-199:24 BinBox GuardBinBox True
+  190          0 Geometry                    199:16-199:24 BinBox GuardBinBox False
+  191          0 Geometry                    199:34-199:51 ExpBox False
+  192          0 Geometry                    199:28-199:51 ExpBox True
+  193     139761 Geometry                     197:1-200:42 TopLevelBox ["normalize"]
+  194          0 Geometry                    192:27-192:27 ExpBox False
+  195          0 Geometry                    192:24-192:27 ExpBox False
+  196          0 Geometry                    192:34-192:34 ExpBox False
+  197          0 Geometry                    192:31-192:34 ExpBox False
+  198          0 Geometry                    192:24-192:34 ExpBox False
+  199          0 Geometry                    192:41-192:41 ExpBox False
+  200          0 Geometry                    192:38-192:41 ExpBox False
+  201          0 Geometry                    192:23-192:42 ExpBox False
+  202          0 Geometry                    192:18-192:42 ExpBox False
+  203          0 Geometry                     192:1-192:42 TopLevelBox ["norm"]
+  204          0 Geometry                    188:10-188:11 ExpBox False
+  205          0 Geometry                    188:15-188:16 ExpBox False
+  206          0 Geometry                     188:9-188:17 ExpBox False
+  207          0 Geometry                    188:20-188:21 ExpBox False
+  208          0 Geometry                    188:25-188:26 ExpBox False
+  209          0 Geometry                    188:19-188:27 ExpBox False
+  210          0 Geometry                    188:30-188:31 ExpBox False
+  211          0 Geometry                    188:35-188:36 ExpBox False
+  212          0 Geometry                    188:29-188:37 ExpBox False
+  213          0 Geometry                     188:7-188:37 ExpBox False
+  214          0 Geometry                     187:1-188:37 TopLevelBox ["subPP"]
+  215          0 Geometry                    206:26-206:27 ExpBox False
+  216          0 Geometry                    206:29-206:30 ExpBox False
+  217          0 Geometry                    206:20-206:30 ExpBox False
+  218          0 Geometry                    204:18-204:18 ExpBox False
+  219          0 Geometry                    204:15-204:18 ExpBox False
+  220          0 Geometry                    204:25-204:25 ExpBox False
+  221          0 Geometry                    204:22-204:25 ExpBox False
+  222          0 Geometry                    204:15-204:25 ExpBox False
+  223          0 Geometry                    204:32-204:32 ExpBox False
+  224          0 Geometry                    204:29-204:32 ExpBox False
+  225          0 Geometry                    204:15-204:32 ExpBox False
+  226          0 Geometry                     204:1-206:30 TopLevelBox ["dist2"]
+  227          0 Geometry                    184:11-184:12 ExpBox False
+  228          0 Geometry                     184:9-184:13 ExpBox False
+  229          0 Geometry                    184:17-184:18 ExpBox False
+  230          0 Geometry                    184:15-184:19 ExpBox False
+  231          0 Geometry                    184:23-184:24 ExpBox False
+  232          0 Geometry                    184:21-184:25 ExpBox False
+  233          0 Geometry                     184:7-184:25 ExpBox False
+  234          0 Geometry                     183:1-184:25 TopLevelBox ["negV"]
+  235      53539 Geometry                    180:10-180:11 ExpBox False
+  236      53539 Geometry                    180:15-180:16 ExpBox False
+  237      53539 Geometry                     180:9-180:17 ExpBox False
+  238      53539 Geometry                    180:20-180:21 ExpBox False
+  239      53539 Geometry                    180:25-180:26 ExpBox False
+  240      53539 Geometry                    180:19-180:27 ExpBox False
+  241      53539 Geometry                    180:30-180:31 ExpBox False
+  242      53539 Geometry                    180:35-180:36 ExpBox False
+  243      53539 Geometry                    180:29-180:37 ExpBox False
+  244      53539 Geometry                     180:7-180:37 ExpBox False
+  245      53539 Geometry                     179:1-180:37 TopLevelBox ["subVV"]
+  246      63350 Geometry                    176:10-176:11 ExpBox False
+  247      63350 Geometry                    176:15-176:16 ExpBox False
+  248      63350 Geometry                     176:9-176:17 ExpBox False
+  249      63350 Geometry                    176:20-176:21 ExpBox False
+  250      63350 Geometry                    176:25-176:26 ExpBox False
+  251      63350 Geometry                    176:19-176:27 ExpBox False
+  252      63350 Geometry                    176:30-176:31 ExpBox False
+  253      63350 Geometry                    176:35-176:36 ExpBox False
+  254      63350 Geometry                    176:29-176:37 ExpBox False
+  255      63350 Geometry                     176:7-176:37 ExpBox False
+  256      63350 Geometry                     175:1-176:37 TopLevelBox ["addPV"]
+  257      34539 Geometry                    293:25-293:25 ExpBox False
+  258      34539 Geometry                    293:36-293:36 ExpBox False
+  259      34539 Geometry                    293:47-293:47 ExpBox False
+  260      34539 Geometry                    293:35-293:48 ExpBox False
+  261      34539 Geometry                    293:25-293:48 ExpBox False
+  262      34539 Geometry                     293:1-293:48 TopLevelBox ["offsetToPoint"]
+  263          0 Geometry                    172:10-172:11 ExpBox False
+  264          0 Geometry                    172:15-172:16 ExpBox False
+  265          0 Geometry                     172:9-172:17 ExpBox False
+  266          0 Geometry                    172:20-172:21 ExpBox False
+  267          0 Geometry                    172:25-172:26 ExpBox False
+  268          0 Geometry                    172:19-172:27 ExpBox False
+  269          0 Geometry                    172:30-172:31 ExpBox False
+  270          0 Geometry                    172:35-172:36 ExpBox False
+  271          0 Geometry                    172:29-172:37 ExpBox False
+  272          0 Geometry                     172:7-172:37 ExpBox False
+  273          0 Geometry                     171:1-172:37 TopLevelBox ["addVV"]
+  274    1323260 Geometry                    168:40-168:41 ExpBox False
+  275    1323260 Geometry                    168:45-168:46 ExpBox False
+  276    1323260 Geometry                    168:40-168:46 ExpBox False
+  277    1323260 Geometry                    168:50-168:51 ExpBox False
+  278    1323260 Geometry                    168:55-168:56 ExpBox False
+  279    1323260 Geometry                    168:50-168:56 ExpBox False
+  280    1323260 Geometry                    168:40-168:56 ExpBox False
+  281    1323260 Geometry                    168:60-168:61 ExpBox False
+  282    1323260 Geometry                    168:65-168:66 ExpBox False
+  283    1323260 Geometry                    168:60-168:66 ExpBox False
+  284    1323260 Geometry                    168:40-168:66 ExpBox False
+  285    1323260 Geometry                    168:70-168:71 ExpBox False
+  286    1323260 Geometry                    168:75-168:76 ExpBox False
+  287    1323260 Geometry                    168:70-168:76 ExpBox False
+  288    1323260 Geometry                    168:40-168:76 ExpBox False
+  289    1323260 Geometry                     168:1-168:76 TopLevelBox ["dot4"]
+  290     330815 Geometry                    260:18-260:18 ExpBox False
+  291     330815 Geometry                    260:20-260:21 ExpBox False
+  292     330815 Geometry                    260:12-260:22 ExpBox False
+  293     330815 Geometry                    261:18-261:18 ExpBox False
+  294     330815 Geometry                    261:20-261:21 ExpBox False
+  295     330815 Geometry                    261:12-261:22 ExpBox False
+  296     330815 Geometry                    262:18-262:18 ExpBox False
+  297     330815 Geometry                    262:20-262:21 ExpBox False
+  298     330815 Geometry                    262:12-262:22 ExpBox False
+  299     330815 Geometry                    263:18-263:18 ExpBox False
+  300     330815 Geometry                    263:20-263:21 ExpBox False
+  301     330815 Geometry                    263:12-263:22 ExpBox False
+  302     330815 Geometry                    260:10-263:22 ExpBox False
+  303     330815 Geometry                     259:1-263:22 TopLevelBox ["multMQ"]
+  304         12 Geometry                    232:23-232:24 ExpBox False
+  305         12 Geometry                    232:12-232:24 ExpBox False
+  306         12 Geometry                     232:6-232:24 LocalBox ["multMM","m2'"]
+  307         12 Geometry                    227:18-227:20 ExpBox False
+  308         12 Geometry                    227:22-227:23 ExpBox False
+  309         12 Geometry                    227:10-227:24 ExpBox False
+  310         12 Geometry                    228:18-228:20 ExpBox False
+  311         12 Geometry                    228:22-228:23 ExpBox False
+  312         12 Geometry                    228:10-228:24 ExpBox False
+  313         12 Geometry                    229:18-229:20 ExpBox False
+  314         12 Geometry                    229:22-229:23 ExpBox False
+  315         12 Geometry                    229:10-229:24 ExpBox False
+  316         12 Geometry                    230:18-230:20 ExpBox False
+  317         12 Geometry                    230:22-230:23 ExpBox False
+  318         12 Geometry                    230:10-230:24 ExpBox False
+  319         12 Geometry                     227:8-230:24 ExpBox False
+  320         12 Geometry                     226:1-232:24 TopLevelBox ["multMM"]
+  321      32512 Geometry                      157:8-157:9 ExpBox False
+  322      32512 Geometry                    157:13-157:14 ExpBox False
+  323      32512 Geometry                     157:8-157:14 ExpBox False
+  324      32512 Geometry                    157:18-157:19 ExpBox False
+  325      32512 Geometry                    157:23-157:24 ExpBox False
+  326      32512 Geometry                    157:18-157:24 ExpBox False
+  327      32512 Geometry                     157:7-157:25 ExpBox False
+  328      32512 Geometry                    157:28-157:29 ExpBox False
+  329      32512 Geometry                    157:33-157:34 ExpBox False
+  330      32512 Geometry                    157:28-157:34 ExpBox False
+  331      32512 Geometry                    157:38-157:39 ExpBox False
+  332      32512 Geometry                    157:43-157:44 ExpBox False
+  333      32512 Geometry                    157:38-157:44 ExpBox False
+  334      32512 Geometry                    157:27-157:45 ExpBox False
+  335      32512 Geometry                    157:48-157:49 ExpBox False
+  336      32512 Geometry                    157:53-157:54 ExpBox False
+  337      32512 Geometry                    157:48-157:54 ExpBox False
+  338      32512 Geometry                    157:58-157:59 ExpBox False
+  339      32512 Geometry                    157:63-157:64 ExpBox False
+  340      32512 Geometry                    157:58-157:64 ExpBox False
+  341      32512 Geometry                    157:47-157:65 ExpBox False
+  342      32512 Geometry                     157:5-157:65 ExpBox False
+  343      32512 Geometry                     156:1-157:65 TopLevelBox ["cross"]
+  344     112863 Geometry                    153:33-153:34 ExpBox False
+  345     112863 Geometry                    153:38-153:39 ExpBox False
+  346     112863 Geometry                    153:33-153:39 ExpBox False
+  347     112863 Geometry                    153:43-153:44 ExpBox False
+  348     112863 Geometry                    153:48-153:49 ExpBox False
+  349     112863 Geometry                    153:43-153:49 ExpBox False
+  350     112863 Geometry                    153:33-153:49 ExpBox False
+  351     112863 Geometry                    153:53-153:54 ExpBox False
+  352     112863 Geometry                    153:58-153:59 ExpBox False
+  353     112863 Geometry                    153:53-153:59 ExpBox False
+  354     112863 Geometry                    153:33-153:59 ExpBox False
+  355     112863 Geometry                     153:1-153:59 TopLevelBox ["dot"]
+  356     197872 Geometry                    149:32-149:32 ExpBox False
+  357     197872 Geometry                    149:34-149:34 ExpBox False
+  358     197872 Geometry                    149:36-149:36 ExpBox False
+  359     197872 Geometry                    149:30-149:36 ExpBox False
+  360     197872 Geometry                     149:1-149:36 TopLevelBox ["quad_to_vector"]
+  361     132895 Geometry                    145:31-145:31 ExpBox False
+  362     132895 Geometry                    145:33-145:33 ExpBox False
+  363     132895 Geometry                    145:35-145:35 ExpBox False
+  364     132895 Geometry                    145:29-145:35 ExpBox False
+  365     132895 Geometry                     145:1-145:35 TopLevelBox ["quad_to_point"]
+  366     132895 Geometry                    141:29-141:29 ExpBox False
+  367     132895 Geometry                    141:31-141:31 ExpBox False
+  368     132895 Geometry                    141:33-141:33 ExpBox False
+  369     132895 Geometry                    141:35-141:35 ExpBox False
+  370     132895 Geometry                    141:27-141:35 ExpBox False
+  371     132895 Geometry                     141:1-141:35 TopLevelBox ["point_to_quad"]
+  372     132895 Geometry                    253:36-253:36 ExpBox False
+  373     132895 Geometry                    253:53-253:53 ExpBox False
+  374     132895 Geometry                    253:38-253:54 ExpBox False
+  375     132895 Geometry                    253:28-253:55 ExpBox False
+  376     132895 Geometry                    253:14-253:55 ExpBox False
+  377     132895 Geometry                     253:1-253:55 TopLevelBox ["multMP"]
+  378     197872 Geometry                    137:30-137:30 ExpBox False
+  379     197872 Geometry                    137:32-137:32 ExpBox False
+  380     197872 Geometry                    137:34-137:34 ExpBox False
+  381     197872 Geometry                    137:36-137:36 ExpBox False
+  382     197872 Geometry                    137:28-137:36 ExpBox False
+  383     197872 Geometry                     137:1-137:36 TopLevelBox ["vector_to_quad"]
+  384     197872 Geometry                    249:37-249:37 ExpBox False
+  385     197872 Geometry                    249:55-249:55 ExpBox False
+  386     197872 Geometry                    249:39-249:56 ExpBox False
+  387     197872 Geometry                    249:29-249:57 ExpBox False
+  388     197872 Geometry                    249:14-249:57 ExpBox False
+  389     197872 Geometry                     249:1-249:57 TopLevelBox ["multMV"]
+  390     132847 Geometry                    267:27-267:27 ExpBox False
+  391     132847 Geometry                    267:29-267:29 ExpBox False
+  392     132847 Geometry                    267:20-267:29 ExpBox False
+  393     132847 Geometry                    267:39-267:39 ExpBox False
+  394     132847 Geometry                    267:41-267:41 ExpBox False
+  395     132847 Geometry                    267:32-267:41 ExpBox False
+  396     132847 Geometry                    267:19-267:42 ExpBox False
+  397     132847 Geometry                     267:1-267:42 TopLevelBox ["multMR"]
+  398          0 Geometry                    133:32-133:32 ExpBox False
+  399          0 Geometry                    133:34-133:34 ExpBox False
+  400          0 Geometry                    133:36-133:36 ExpBox False
+  401          0 Geometry                    133:30-133:36 ExpBox False
+  402          0 Geometry                     133:1-133:36 TopLevelBox ["vector_to_point"]
+  403          0 Geometry                    130:31-130:31 ExpBox False
+  404          0 Geometry                    130:33-130:33 ExpBox False
+  405          0 Geometry                    130:35-130:35 ExpBox False
+  406          0 Geometry                    130:29-130:35 ExpBox False
+  407          0 Geometry                     130:1-130:35 TopLevelBox ["point_to_vector"]
+  408          0 Geometry                    127:29-127:29 ExpBox False
+  409          0 Geometry                    127:38-127:38 ExpBox False
+  410          0 Geometry                    127:29-127:38 ExpBox False
+  411          0 Geometry                    127:43-127:43 ExpBox False
+  412          0 Geometry                    127:52-127:52 ExpBox False
+  413          0 Geometry                    127:43-127:52 ExpBox False
+  414          0 Geometry                    127:57-127:57 ExpBox False
+  415          0 Geometry                    127:66-127:66 ExpBox False
+  416          0 Geometry                    127:57-127:66 ExpBox False
+  417          0 Geometry                    127:43-127:66 ExpBox False
+  418          0 Geometry                    127:29-127:66 ExpBox False
+  419          0 Geometry                     127:1-127:66 TopLevelBox ["nearV"]
+  420      60006 Geometry                    124:18-124:18 ExpBox False
+  421      60006 Geometry                    124:20-124:20 ExpBox False
+  422      60006 Geometry                    124:22-124:22 ExpBox False
+  423      60006 Geometry                    124:16-124:22 ExpBox False
+  424      60006 Geometry                     124:1-124:22 TopLevelBox ["vector"]
+  425          0 Geometry                    163:14-163:14 ExpBox False
+  426          0 Geometry                    163:19-163:19 ExpBox False
+  427          0 Geometry                    163:14-163:19 ExpBox False
+  428          0 Geometry                    163:14-163:19 BinBox GuardBinBox True
+  429          0 Geometry                    163:14-163:19 BinBox GuardBinBox False
+  430          0 Geometry                    163:44-163:44 ExpBox False
+  431          0 Geometry                    163:46-163:46 ExpBox False
+  432          0 Geometry                    163:50-163:50 ExpBox False
+  433          0 Geometry                    163:48-163:51 ExpBox False
+  434          0 Geometry                    163:36-163:52 ExpBox False
+  435          0 Geometry                    163:26-163:52 ExpBox True
+  436          0 Geometry                    164:14-164:22 ExpBox False
+  437          0 Geometry                    164:14-164:22 BinBox GuardBinBox True
+  438          0 Geometry                    164:14-164:22 BinBox GuardBinBox False
+  439          0 Geometry                    164:46-164:46 ExpBox False
+  440          0 Geometry                    164:44-164:47 ExpBox False
+  441          0 Geometry                    164:49-164:49 ExpBox False
+  442          0 Geometry                    164:51-164:51 ExpBox False
+  443          0 Geometry                    164:36-164:52 ExpBox False
+  444          0 Geometry                    164:26-164:52 ExpBox True
+  445          0 Geometry                     163:9-164:52 LocalBox ["tangents","v1"]
+  446          0 Geometry                      162:6-162:7 ExpBox False
+  447          0 Geometry                    162:10-162:10 ExpBox False
+  448          0 Geometry                    162:20-162:21 ExpBox False
+  449          0 Geometry                    162:10-162:21 ExpBox False
+  450          0 Geometry                     162:5-162:22 ExpBox False
+  451          0 Geometry                     161:1-164:52 TopLevelBox ["tangents"]
+  452      26833 Geometry                    121:17-121:17 ExpBox False
+  453      26833 Geometry                    121:19-121:19 ExpBox False
+  454      26833 Geometry                    121:21-121:21 ExpBox False
+  455      26833 Geometry                    121:15-121:21 ExpBox False
+  456      26833 Geometry                     121:1-121:21 TopLevelBox ["point"]
+  457     159631 Geometry                    118:24-118:24 ExpBox False
+  458     159631 Geometry                     118:1-118:24 TopLevelBox ["zComponent"]
+  459     248385 Geometry                    116:24-116:24 ExpBox False
+  460     248385 Geometry                     116:1-116:24 TopLevelBox ["yComponent"]
+  461     159631 Geometry                    114:24-114:24 ExpBox False
+  462     159631 Geometry                     114:1-114:24 TopLevelBox ["xComponent"]
+  463     188590 Geometry                    111:20-111:20 ExpBox False
+  464     188590 Geometry                     111:1-111:20 TopLevelBox ["zCoord"]
+  465     253212 Geometry                    109:20-109:20 ExpBox False
+  466     253212 Geometry                     109:1-109:20 TopLevelBox ["yCoord"]
+  467     187913 Geometry                    107:20-107:20 ExpBox False
+  468     187913 Geometry                     107:1-107:20 TopLevelBox ["xCoord"]
+  469      60000 Geometry                    104:22-104:22 ExpBox False
+  470      60000 Geometry                    104:24-104:24 ExpBox False
+  471      60000 Geometry                    104:26-104:26 ExpBox False
+  472      60000 Geometry                    104:21-104:27 ExpBox False
+  473      60000 Geometry                     104:1-104:27 TopLevelBox ["uncolor"]
+  474      32514 Geometry                    102:17-102:17 ExpBox False
+  475      32514 Geometry                    102:19-102:19 ExpBox False
+  476      32514 Geometry                    102:21-102:21 ExpBox False
+  477      32514 Geometry                    102:15-102:21 ExpBox False
+  478      32514 Geometry                     102:1-102:21 TopLevelBox ["color"]
+  479          0 Geometry                    100:16-100:16 ExpBox False
+  480          0 Geometry                    100:19-100:19 ExpBox False
+  481          0 Geometry                    100:22-100:22 ExpBox False
+  482          0 Geometry                    100:15-100:23 ExpBox False
+  483          0 Geometry                     100:1-100:23 TopLevelBox ["coord"]
+  484         13 Geometry                      95:10-95:12 ExpBox False
+  485         13 Geometry                      95:14-95:16 ExpBox False
+  486         13 Geometry                      95:18-95:20 ExpBox False
+  487         13 Geometry                      95:22-95:24 ExpBox False
+  488         13 Geometry                       95:7-95:25 ExpBox False
+  489         13 Geometry                      96:10-96:12 ExpBox False
+  490         13 Geometry                      96:14-96:16 ExpBox False
+  491         13 Geometry                      96:18-96:20 ExpBox False
+  492         13 Geometry                      96:22-96:24 ExpBox False
+  493         13 Geometry                       96:7-96:25 ExpBox False
+  494         13 Geometry                      97:10-97:12 ExpBox False
+  495         13 Geometry                      97:14-97:16 ExpBox False
+  496         13 Geometry                      97:18-97:20 ExpBox False
+  497         13 Geometry                      97:22-97:24 ExpBox False
+  498         13 Geometry                       97:7-97:25 ExpBox False
+  499         13 Geometry                      98:10-98:12 ExpBox False
+  500         13 Geometry                      98:14-98:16 ExpBox False
+  501         13 Geometry                      98:18-98:20 ExpBox False
+  502         13 Geometry                      98:22-98:24 ExpBox False
+  503         13 Geometry                       98:7-98:25 ExpBox False
+  504         13 Geometry                       95:5-98:25 ExpBox False
+  505         13 Geometry                       91:1-98:25 TopLevelBox ["matrix"]
+  506          0 Geometry                      70:15-70:18 TopLevelBox ["showsPrec"]
+  507          0 Geometry                      70:15-70:18 TopLevelBox ["showList"]
+  508          0 Geometry                      72:15-72:18 TopLevelBox ["showsPrec"]
+  509          0 Geometry                      72:15-72:18 TopLevelBox ["showList"]
+  510          0 Geometry                      72:21-72:22 TopLevelBox ["=="]
+  511          0 Geometry                      72:21-72:22 TopLevelBox ["/="]
+  512          0 Geometry                      77:15-77:18 TopLevelBox ["showsPrec"]
+  513          0 Geometry                      77:15-77:18 TopLevelBox ["showList"]
+  514          0 Geometry                      77:21-77:22 TopLevelBox ["=="]
+  515          0 Geometry                      77:21-77:22 TopLevelBox ["/="]
+  516          0 Geometry                      80:15-80:18 TopLevelBox ["showsPrec"]
+  517          0 Geometry                      80:15-80:18 TopLevelBox ["showList"]
+  518          0 Geometry                      83:15-83:18 TopLevelBox ["showsPrec"]
+  519          0 Geometry                      83:15-83:18 TopLevelBox ["showList"]
+  520          0 Geometry                      74:15-74:18 TopLevelBox ["showsPrec"]
+  521          0 Geometry                      74:15-74:18 TopLevelBox ["showList"]
diff --git a/testsuite/tests/hpc/raytrace/tixs/test.T b/testsuite/tests/hpc/raytrace/tixs/test.T
new file mode 100644
index 0000000000000000000000000000000000000000..877eb51270eb5683927a75a3a323860ba3fc2ad4
--- /dev/null
+++ b/testsuite/tests/hpc/raytrace/tixs/test.T
@@ -0,0 +1,23 @@
+setTestOpts([when(fast(), skip), js_skip])
+
+test('hpc_report_multi_001', extra_files(['.hpc/', 'hpc_sample.tix']), run_command,
+     ["{hpc} report hpc_sample --include=Geometry --per-module"])
+test('hpc_report_multi_002', extra_files(['.hpc/', 'hpc_sample.tix']), run_command,
+     ["{hpc} report hpc_sample --exclude=Geometry --per-module"])
+test('hpc_report_multi_003', extra_files(['.hpc/', 'hpc_sample.tix']), run_command,
+     ["{hpc} report hpc_sample --include=Geometry --per-module --decl-list"])
+
+test('hpc_markup_multi_001', extra_files(['../Geometry.hs', '.hpc/', 'hpc_sample.tix']), run_command,
+     ["{hpc} markup --hpcdir=tixs/.hpc --hpcdir=hpc_markup_multi_001/.hpc --destdir=markup_multi_001"
+      " hpc_sample --include=Geometry"])
+test('hpc_markup_multi_002', extra_files(['../CSG.hs', '../Construct.hs', '../Data.hs', '../Eval.hs', '../Geometry.hs', '../Illumination.hs', '../Intersections.hs', '../Interval.hs', '../Main.hs', '../Misc.hs', '../Parse.hs', '../Pixmap.hs', '../Primitives.hs', '../RayTrace.hs', '../Surface.hs', '.hpc/', 'hpc_sample.tix']), run_command,
+     ["{hpc} markup --hpcdir=tixs/.hpc --hpcdir=hpc_markup_multi_002/.hpc --destdir=markup_multi_002"
+      " hpc_sample --exclude=Geometry"])
+test('hpc_markup_multi_003', extra_files(['../CSG.hs', '../Construct.hs', '../Data.hs', '../Eval.hs', '../Geometry.hs', '../Illumination.hs', '../Intersections.hs', '../Interval.hs', '../Main.hs', '../Misc.hs', '../Parse.hs', '../Pixmap.hs', '../Primitives.hs', '../RayTrace.hs', '../Surface.hs', '.hpc/', 'hpc_sample.tix']), run_command,
+     ["{hpc} markup --hpcdir=tixs/.hpc --hpcdir=hpc_markup_multi_003/.hpc --destdir=markup_multi_003"
+      " hpc_sample --fun-entry-count"])
+
+test('hpc_show_multi_001', extra_files(['.hpc/', 'hpc_sample.tix']), run_command,
+     ["{hpc} show hpc_sample"])
+test('hpc_show_multi_002', extra_files(['.hpc/', 'hpc_sample.tix']), run_command,
+     ["{hpc} show hpc_sample --include=Geometry"])
diff --git a/testsuite/tests/hpc/simple/Makefile b/testsuite/tests/hpc/simple/Makefile
new file mode 100644
index 0000000000000000000000000000000000000000..4a268530f13bc7f70d03965dacf45d8a0b4a720e
--- /dev/null
+++ b/testsuite/tests/hpc/simple/Makefile
@@ -0,0 +1,4 @@
+TOP=../../..
+include $(TOP)/mk/boilerplate.mk
+include $(TOP)/mk/test.mk
+
diff --git a/testsuite/tests/hpc/simple/hpc001.hs b/testsuite/tests/hpc/simple/hpc001.hs
new file mode 100644
index 0000000000000000000000000000000000000000..53421b8e55f12ff6870dbf192eebfe6fadc365e6
--- /dev/null
+++ b/testsuite/tests/hpc/simple/hpc001.hs
@@ -0,0 +1 @@
+main = print (const "Hello" "World")
diff --git a/testsuite/tests/hpc/simple/hpc001.stdout b/testsuite/tests/hpc/simple/hpc001.stdout
new file mode 100644
index 0000000000000000000000000000000000000000..03d524f4c5a2386143c06ddb6f5e58990f407e08
--- /dev/null
+++ b/testsuite/tests/hpc/simple/hpc001.stdout
@@ -0,0 +1,115 @@
+"Hello"
+
+
+ 75% expressions used (3/4)
+100% boolean coverage (0/0)
+     100% guards (0/0)
+     100% 'if' conditions (0/0)
+     100% qualifiers (0/0)
+100% alternatives used (0/0)
+100% local declarations used (0/0)
+100% top-level declarations used (1/1)
+
+
+-----<module Main>-----
+ 75% expressions used (3/4)
+100% boolean coverage (0/0)
+     100% guards (0/0)
+     100% 'if' conditions (0/0)
+     100% qualifiers (0/0)
+100% alternatives used (0/0)
+100% local declarations used (0/0)
+100% top-level declarations used (1/1)
+
+
+Writing: Main.hs.html
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<style type="text/css">
+span.lineno { color: white; background: #aaaaaa; border-right: solid white 12px }
+span.nottickedoff { background: yellow}
+span.istickedoff { background: white }
+span.tickonlyfalse { margin: -1px; border: 1px solid #f20913; background: #f20913 }
+span.tickonlytrue  { margin: -1px; border: 1px solid #60de51; background: #60de51 }
+span.funcount { font-size: small; color: orange; z-index: 2; position: absolute; right: 20 }
+span.decl { font-weight: bold }
+span.spaces    { background: white }
+</style>
+</head>
+<body>
+<pre>
+<span class="decl"><span class="nottickedoff">never executed</span> <span class="tickonlytrue">always true</span> <span class="tickonlyfalse">always false</span></span>
+</pre>
+<pre>
+<span class="lineno">    1 </span><span class="decl"><span class="istickedoff">main = print (const &quot;Hello&quot; <span class="nottickedoff">&quot;World&quot;</span>)</span></span>
+
+</pre>
+</body>
+</html>
+Writing: hpc_index.html
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><style type="text/css">table.bar { background-color: #f25913; }
+td.bar { background-color: #60de51;  }
+td.invbar { background-color: #f25913;  }
+table.dashboard { border-collapse: collapse  ; border: solid 1px black }
+.dashboard td { border: solid 1px black }
+.dashboard th { border: solid 1px black }
+</style>
+</head><body><table class="dashboard" width="100%" border=1>
+<tr><th rowspan=2><a href="hpc_index.html">module</a></th><th colspan=3><a href="hpc_index_fun.html">Top Level Definitions</a></th><th colspan=3><a href="hpc_index_alt.html">Alternatives</a></th><th colspan=3><a href="hpc_index_exp.html">Expressions</a></th></tr><tr><th>%</th><th colspan=2>covered / total</th><th>%</th><th colspan=2>covered / total</th><th>%</th><th colspan=2>covered / total</th></tr><tr>
+<td>&nbsp;&nbsp;<tt>module <a href="Main.hs.html">Main</a></tt></td>
+<td align="right">100%</td><td>1/1</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="100%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">-&nbsp;</td><td>0/0</td><td width=100>&nbsp;</td><td align="right">75%</td><td>3/4</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="75%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
+<tr></tr><tr style="background: #e0e0e0">
+<th align=left>&nbsp;&nbsp;Program Coverage Total</tt></th>
+<td align="right">100%</td><td>1/1</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="100%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">-&nbsp;</td><td>0/0</td><td width=100>&nbsp;</td><td align="right">75%</td><td>3/4</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="75%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
+</table></body></html>
+Writing: hpc_index_fun.html
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><style type="text/css">table.bar { background-color: #f25913; }
+td.bar { background-color: #60de51;  }
+td.invbar { background-color: #f25913;  }
+table.dashboard { border-collapse: collapse  ; border: solid 1px black }
+.dashboard td { border: solid 1px black }
+.dashboard th { border: solid 1px black }
+</style>
+</head><body><table class="dashboard" width="100%" border=1>
+<tr><th rowspan=2><a href="hpc_index.html">module</a></th><th colspan=3><a href="hpc_index_fun.html">Top Level Definitions</a></th><th colspan=3><a href="hpc_index_alt.html">Alternatives</a></th><th colspan=3><a href="hpc_index_exp.html">Expressions</a></th></tr><tr><th>%</th><th colspan=2>covered / total</th><th>%</th><th colspan=2>covered / total</th><th>%</th><th colspan=2>covered / total</th></tr><tr>
+<td>&nbsp;&nbsp;<tt>module <a href="Main.hs.html">Main</a></tt></td>
+<td align="right">100%</td><td>1/1</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="100%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">-&nbsp;</td><td>0/0</td><td width=100>&nbsp;</td><td align="right">75%</td><td>3/4</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="75%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
+<tr></tr><tr style="background: #e0e0e0">
+<th align=left>&nbsp;&nbsp;Program Coverage Total</tt></th>
+<td align="right">100%</td><td>1/1</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="100%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">-&nbsp;</td><td>0/0</td><td width=100>&nbsp;</td><td align="right">75%</td><td>3/4</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="75%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
+</table></body></html>
+Writing: hpc_index_alt.html
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><style type="text/css">table.bar { background-color: #f25913; }
+td.bar { background-color: #60de51;  }
+td.invbar { background-color: #f25913;  }
+table.dashboard { border-collapse: collapse  ; border: solid 1px black }
+.dashboard td { border: solid 1px black }
+.dashboard th { border: solid 1px black }
+</style>
+</head><body><table class="dashboard" width="100%" border=1>
+<tr><th rowspan=2><a href="hpc_index.html">module</a></th><th colspan=3><a href="hpc_index_fun.html">Top Level Definitions</a></th><th colspan=3><a href="hpc_index_alt.html">Alternatives</a></th><th colspan=3><a href="hpc_index_exp.html">Expressions</a></th></tr><tr><th>%</th><th colspan=2>covered / total</th><th>%</th><th colspan=2>covered / total</th><th>%</th><th colspan=2>covered / total</th></tr><tr>
+<td>&nbsp;&nbsp;<tt>module <a href="Main.hs.html">Main</a></tt></td>
+<td align="right">100%</td><td>1/1</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="100%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">-&nbsp;</td><td>0/0</td><td width=100>&nbsp;</td><td align="right">75%</td><td>3/4</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="75%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
+<tr></tr><tr style="background: #e0e0e0">
+<th align=left>&nbsp;&nbsp;Program Coverage Total</tt></th>
+<td align="right">100%</td><td>1/1</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="100%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">-&nbsp;</td><td>0/0</td><td width=100>&nbsp;</td><td align="right">75%</td><td>3/4</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="75%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
+</table></body></html>
+Writing: hpc_index_exp.html
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><style type="text/css">table.bar { background-color: #f25913; }
+td.bar { background-color: #60de51;  }
+td.invbar { background-color: #f25913;  }
+table.dashboard { border-collapse: collapse  ; border: solid 1px black }
+.dashboard td { border: solid 1px black }
+.dashboard th { border: solid 1px black }
+</style>
+</head><body><table class="dashboard" width="100%" border=1>
+<tr><th rowspan=2><a href="hpc_index.html">module</a></th><th colspan=3><a href="hpc_index_fun.html">Top Level Definitions</a></th><th colspan=3><a href="hpc_index_alt.html">Alternatives</a></th><th colspan=3><a href="hpc_index_exp.html">Expressions</a></th></tr><tr><th>%</th><th colspan=2>covered / total</th><th>%</th><th colspan=2>covered / total</th><th>%</th><th colspan=2>covered / total</th></tr><tr>
+<td>&nbsp;&nbsp;<tt>module <a href="Main.hs.html">Main</a></tt></td>
+<td align="right">100%</td><td>1/1</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="100%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">-&nbsp;</td><td>0/0</td><td width=100>&nbsp;</td><td align="right">75%</td><td>3/4</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="75%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
+<tr></tr><tr style="background: #e0e0e0">
+<th align=left>&nbsp;&nbsp;Program Coverage Total</tt></th>
+<td align="right">100%</td><td>1/1</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="100%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td><td align="right">-&nbsp;</td><td>0/0</td><td width=100>&nbsp;</td><td align="right">75%</td><td>3/4</td><td width=100><table cellpadding=0 cellspacing=0 width="100" class="bar"><tr><td><table cellpadding=0 cellspacing=0 width="75%"><tr><td height=12 class="bar"></td></tr></table></td></tr></table></td></tr>
+</table></body></html>
+
+
diff --git a/testsuite/tests/hpc/simple/test.T b/testsuite/tests/hpc/simple/test.T
new file mode 100644
index 0000000000000000000000000000000000000000..cd7cd8b0949529ab79af04f0b946d7862492b57b
--- /dev/null
+++ b/testsuite/tests/hpc/simple/test.T
@@ -0,0 +1,8 @@
+setTestOpts([omit_ghci, when(fast(), skip), js_skip])
+
+hpc_prefix = "perl hpcrun.pl --clear --exeext={exeext} --hpc={hpc}"
+
+test('hpc001', [extra_files(['../hpcrun.pl']), cmd_prefix(hpc_prefix),
+     when(arch('wasm32'), fragile(23243))
+     ],
+     compile_and_run, ['-fhpc'])
diff --git a/testsuite/tests/hpc/simple/tixs/.hpc.copy/Main.mix b/testsuite/tests/hpc/simple/tixs/.hpc.copy/Main.mix
new file mode 100644
index 0000000000000000000000000000000000000000..75ce018698bb30fc45c8100dc6aaf43e1a283354
--- /dev/null
+++ b/testsuite/tests/hpc/simple/tixs/.hpc.copy/Main.mix
@@ -0,0 +1 @@
+Mix "hpc001.hs" 2012-01-29 18:01:54 UTC 2454134535 8 [(1:21-1:27,ExpBox False),(1:29-1:35,ExpBox False),(1:14-1:36,ExpBox False),(1:8-1:36,ExpBox False),(1:1-1:36,TopLevelBox ["main"])]
\ No newline at end of file
diff --git a/testsuite/tests/hpc/simple/tixs/.hpc/Main.mix b/testsuite/tests/hpc/simple/tixs/.hpc/Main.mix
new file mode 100644
index 0000000000000000000000000000000000000000..75ce018698bb30fc45c8100dc6aaf43e1a283354
--- /dev/null
+++ b/testsuite/tests/hpc/simple/tixs/.hpc/Main.mix
@@ -0,0 +1 @@
+Mix "hpc001.hs" 2012-01-29 18:01:54 UTC 2454134535 8 [(1:21-1:27,ExpBox False),(1:29-1:35,ExpBox False),(1:14-1:36,ExpBox False),(1:8-1:36,ExpBox False),(1:1-1:36,TopLevelBox ["main"])]
\ No newline at end of file
diff --git a/testsuite/tests/hpc/simple/tixs/.hpc/NoParse.mix b/testsuite/tests/hpc/simple/tixs/.hpc/NoParse.mix
new file mode 100644
index 0000000000000000000000000000000000000000..28f54ff6e04b563b6dbe9b991ad9c31b12bafc98
--- /dev/null
+++ b/testsuite/tests/hpc/simple/tixs/.hpc/NoParse.mix
@@ -0,0 +1 @@
+NoParse
diff --git a/testsuite/tests/hpc/simple/tixs/Makefile b/testsuite/tests/hpc/simple/tixs/Makefile
new file mode 100644
index 0000000000000000000000000000000000000000..60332c95014a6e15468cdba71e80a9b6615174e5
--- /dev/null
+++ b/testsuite/tests/hpc/simple/tixs/Makefile
@@ -0,0 +1,14 @@
+# This Makefile runs the tests using GHC's testsuite framework.  It
+# assumes the package is part of a GHC build tree with the testsuite
+# installed in ../../../testsuite.
+
+TOP=../../../../../testsuite
+include $(TOP)/mk/boilerplate.mk
+include $(TOP)/mk/test.mk
+
+build-tix:
+	rm -Rf .hpc hpc001.o a.out
+	'$(TEST_HC)' -fhpc hpc001.hs
+	./a.out
+	mv a.out.tix hpc_sample.tix
+
diff --git a/testsuite/tests/hpc/simple/tixs/T10529a.stderr b/testsuite/tests/hpc/simple/tixs/T10529a.stderr
new file mode 100644
index 0000000000000000000000000000000000000000..2f495549f0f02e40937425f246da9c7f06d9f8ab
--- /dev/null
+++ b/testsuite/tests/hpc/simple/tixs/T10529a.stderr
@@ -0,0 +1,3 @@
+hpc: can not find NonExistingModule in ./.hpc
+CallStack (from ImplicitParams):
+  error, called at libraries/hpc/Trace/Hpc/Mix.hs:119:15 in hpc-0.6.0.2:Trace.Hpc.Mix
diff --git a/testsuite/tests/hpc/simple/tixs/T10529b.stderr b/testsuite/tests/hpc/simple/tixs/T10529b.stderr
new file mode 100644
index 0000000000000000000000000000000000000000..ad9b6758439a3eb352bfba1cb811da80cd55bb7c
--- /dev/null
+++ b/testsuite/tests/hpc/simple/tixs/T10529b.stderr
@@ -0,0 +1,4 @@
+hpc: hash in tix file for module Main (1234567890)
+does not match hash in ./.hpc/Main.mix (2454134535)
+CallStack (from ImplicitParams):
+  error, called at libraries/hpc/Trace/Hpc/Mix.hs:129:17 in hpc-0.6.0.2:Trace.Hpc.Mix
diff --git a/testsuite/tests/hpc/simple/tixs/T10529c.stderr b/testsuite/tests/hpc/simple/tixs/T10529c.stderr
new file mode 100644
index 0000000000000000000000000000000000000000..0700886c856c2c5bb0c366c7f5865786ad713330
--- /dev/null
+++ b/testsuite/tests/hpc/simple/tixs/T10529c.stderr
@@ -0,0 +1,3 @@
+hpc: can not parse ./.hpc/NoParse.mix
+CallStack (from ImplicitParams):
+  error, called at libraries/hpc/Trace/Hpc/Mix.hs:103:43 in hpc-0.6.0.2:Trace.Hpc.Mix
diff --git a/testsuite/tests/hpc/simple/tixs/hand_overlay.ovr b/testsuite/tests/hpc/simple/tixs/hand_overlay.ovr
new file mode 100644
index 0000000000000000000000000000000000000000..c5f8ef4d19375fa295d32f0ffedf9fa1a7b0a1fe
--- /dev/null
+++ b/testsuite/tests/hpc/simple/tixs/hand_overlay.ovr
@@ -0,0 +1,6 @@
+module "Main" {
+  inside "main" {
+    tick "\"World\"" 		[my tag];
+  }
+}
+
diff --git a/testsuite/tests/hpc/simple/tixs/hpc001.hs b/testsuite/tests/hpc/simple/tixs/hpc001.hs
new file mode 100644
index 0000000000000000000000000000000000000000..53421b8e55f12ff6870dbf192eebfe6fadc365e6
--- /dev/null
+++ b/testsuite/tests/hpc/simple/tixs/hpc001.hs
@@ -0,0 +1 @@
+main = print (const "Hello" "World")
diff --git a/testsuite/tests/hpc/simple/tixs/hpc_bad_001.stdout b/testsuite/tests/hpc/simple/tixs/hpc_bad_001.stdout
new file mode 100644
index 0000000000000000000000000000000000000000..49506a8b1793a185ca51930fde7c785f2915ffa5
--- /dev/null
+++ b/testsuite/tests/hpc/simple/tixs/hpc_bad_001.stdout
@@ -0,0 +1 @@
+no such HPC command: bad
diff --git a/testsuite/tests/hpc/simple/tixs/hpc_draft.stdout b/testsuite/tests/hpc/simple/tixs/hpc_draft.stdout
new file mode 100644
index 0000000000000000000000000000000000000000..24b41fa0250a774ee1e64cf0f60ef87042251864
--- /dev/null
+++ b/testsuite/tests/hpc/simple/tixs/hpc_draft.stdout
@@ -0,0 +1,6 @@
+module "Main" {
+  inside "main" {
+    tick "\"World\"" on line 1;
+  }
+}
+
diff --git a/testsuite/tests/hpc/simple/tixs/hpc_hand_overlay.stdout b/testsuite/tests/hpc/simple/tixs/hpc_hand_overlay.stdout
new file mode 100644
index 0000000000000000000000000000000000000000..fe4d77fac04604d686121991334797b4dd238b98
--- /dev/null
+++ b/testsuite/tests/hpc/simple/tixs/hpc_hand_overlay.stdout
@@ -0,0 +1,9 @@
+Tix [TixModule "Main" 2454134535 5 [0,1,0,0,0]]
+100% expressions used (4/4)
+100% boolean coverage (0/0)
+     100% guards (0/0)
+     100% 'if' conditions (0/0)
+     100% qualifiers (0/0)
+100% alternatives used (0/0)
+100% local declarations used (0/0)
+100% top-level declarations used (1/1)
diff --git a/testsuite/tests/hpc/simple/tixs/hpc_help.stdout b/testsuite/tests/hpc/simple/tixs/hpc_help.stdout
new file mode 100644
index 0000000000000000000000000000000000000000..c690a342d6cd72102eafd1e579c475ca6dbeb036
--- /dev/null
+++ b/testsuite/tests/hpc/simple/tixs/hpc_help.stdout
@@ -0,0 +1,27 @@
+Usage: hpc COMMAND ...
+
+Commands:
+  help        Display help for hpc or a single command
+Reporting Coverage:
+  report      Output textual report about program coverage
+  markup      Markup Haskell source with program coverage
+Processing Coverage files:
+  sum         Sum multiple .tix files in a single .tix file
+  combine     Combine two .tix files in a single .tix file
+  map         Map a function over a single .tix file
+Coverage Overlays:
+  overlay     Generate a .tix file from an overlay file
+  draft       Generate draft overlay that provides 100% coverage
+Others:
+  show        Show .tix file in readable, verbose format
+  version     Display version for hpc
+
+
+or: hpc @response_file_1 @response_file_2 ...
+
+The contents of a Response File must have this format:
+COMMAND ...
+
+example:
+report my_library.tix --include=ModuleA \
+--include=ModuleB
\ No newline at end of file
diff --git a/testsuite/tests/hpc/simple/tixs/hpc_help_draft.stdout b/testsuite/tests/hpc/simple/tixs/hpc_help_draft.stdout
new file mode 100644
index 0000000000000000000000000000000000000000..fb663ff8fe2598508611210b3013886cd07fc012
--- /dev/null
+++ b/testsuite/tests/hpc/simple/tixs/hpc_help_draft.stdout
@@ -0,0 +1,18 @@
+Usage: hpc draft [OPTION] .. <TIX_FILE>
+Generate draft overlay that provides 100% coverage
+
+
+Options:
+
+    --exclude=[PACKAGE:][MODULE]  exclude MODULE and/or PACKAGE
+    --include=[PACKAGE:][MODULE]  include MODULE and/or PACKAGE
+    --srcdir=DIR                  path to source directory of .hs files
+                                  multi-use of srcdir possible
+    --hpcdir=DIR                  append sub-directory that contains .mix files
+                                  default .hpc [rarely used]
+    --reset-hpcdirs               empty the list of hpcdir's
+                                  [rarely used]
+    --output=FILE                 output FILE
+    --verbosity=[0-2]             verbosity level, 0-2
+                                  default 1
+
diff --git a/testsuite/tests/hpc/simple/tixs/hpc_help_help.stdout b/testsuite/tests/hpc/simple/tixs/hpc_help_help.stdout
new file mode 100644
index 0000000000000000000000000000000000000000..4dc1205fcba1550fe3106ae9ac7e033f7a019f0c
--- /dev/null
+++ b/testsuite/tests/hpc/simple/tixs/hpc_help_help.stdout
@@ -0,0 +1,3 @@
+Usage: hpc help [<HPC_COMMAND>]
+Display help for hpc or a single command
+
diff --git a/testsuite/tests/hpc/simple/tixs/hpc_help_markup.stdout b/testsuite/tests/hpc/simple/tixs/hpc_help_markup.stdout
new file mode 100644
index 0000000000000000000000000000000000000000..947d18b4907880633f536706f738f4da6b33577b
--- /dev/null
+++ b/testsuite/tests/hpc/simple/tixs/hpc_help_markup.stdout
@@ -0,0 +1,20 @@
+Usage: hpc markup [OPTION] .. <TIX_FILE> [<MODULE> [<MODULE> ..]]
+Markup Haskell source with program coverage
+
+
+Options:
+
+    --exclude=[PACKAGE:][MODULE]  exclude MODULE and/or PACKAGE
+    --include=[PACKAGE:][MODULE]  include MODULE and/or PACKAGE
+    --srcdir=DIR                  path to source directory of .hs files
+                                  multi-use of srcdir possible
+    --hpcdir=DIR                  append sub-directory that contains .mix files
+                                  default .hpc [rarely used]
+    --reset-hpcdirs               empty the list of hpcdir's
+                                  [rarely used]
+    --fun-entry-count             show top-level function entry counts
+    --highlight-covered           highlight covered code, rather that code gaps
+    --destdir=DIR                 path to write output to
+    --verbosity=[0-2]             verbosity level, 0-2
+                                  default 1
+
diff --git a/testsuite/tests/hpc/simple/tixs/hpc_help_overlay.stdout b/testsuite/tests/hpc/simple/tixs/hpc_help_overlay.stdout
new file mode 100644
index 0000000000000000000000000000000000000000..ea4859c8c8cf011c3578cf90fd8d9a8b2f0ce443
--- /dev/null
+++ b/testsuite/tests/hpc/simple/tixs/hpc_help_overlay.stdout
@@ -0,0 +1,16 @@
+Usage: hpc overlay [OPTION] .. <OVERLAY_FILE> [<OVERLAY_FILE> [...]]
+Generate a .tix file from an overlay file
+
+
+Options:
+
+    --srcdir=DIR       path to source directory of .hs files
+                       multi-use of srcdir possible
+    --hpcdir=DIR       append sub-directory that contains .mix files
+                       default .hpc [rarely used]
+    --reset-hpcdirs    empty the list of hpcdir's
+                       [rarely used]
+    --output=FILE      output FILE
+    --verbosity=[0-2]  verbosity level, 0-2
+                       default 1
+
diff --git a/testsuite/tests/hpc/simple/tixs/hpc_help_report.stdout b/testsuite/tests/hpc/simple/tixs/hpc_help_report.stdout
new file mode 100644
index 0000000000000000000000000000000000000000..5d73a49ad421477ff9ba2ac9f337ef959fc22d0c
--- /dev/null
+++ b/testsuite/tests/hpc/simple/tixs/hpc_help_report.stdout
@@ -0,0 +1,20 @@
+Usage: hpc report [OPTION] .. <TIX_FILE> [<MODULE> [<MODULE> ..]]
+Output textual report about program coverage
+
+
+Options:
+
+    --per-module                  show module level detail
+    --decl-list                   show unused decls
+    --exclude=[PACKAGE:][MODULE]  exclude MODULE and/or PACKAGE
+    --include=[PACKAGE:][MODULE]  include MODULE and/or PACKAGE
+    --srcdir=DIR                  path to source directory of .hs files
+                                  multi-use of srcdir possible
+    --hpcdir=DIR                  append sub-directory that contains .mix files
+                                  default .hpc [rarely used]
+    --reset-hpcdirs               empty the list of hpcdir's
+                                  [rarely used]
+    --xml-output                  show output in XML
+    --verbosity=[0-2]             verbosity level, 0-2
+                                  default 1
+
diff --git a/testsuite/tests/hpc/simple/tixs/hpc_help_show.stdout b/testsuite/tests/hpc/simple/tixs/hpc_help_show.stdout
new file mode 100644
index 0000000000000000000000000000000000000000..1302178b03b8493e849067158054adbe7ce329e0
--- /dev/null
+++ b/testsuite/tests/hpc/simple/tixs/hpc_help_show.stdout
@@ -0,0 +1,18 @@
+Usage: hpc show [OPTION] .. <TIX_FILE> [<MODULE> [<MODULE> ..]]
+Show .tix file in readable, verbose format
+
+
+Options:
+
+    --exclude=[PACKAGE:][MODULE]  exclude MODULE and/or PACKAGE
+    --include=[PACKAGE:][MODULE]  include MODULE and/or PACKAGE
+    --srcdir=DIR                  path to source directory of .hs files
+                                  multi-use of srcdir possible
+    --hpcdir=DIR                  append sub-directory that contains .mix files
+                                  default .hpc [rarely used]
+    --reset-hpcdirs               empty the list of hpcdir's
+                                  [rarely used]
+    --output=FILE                 output FILE
+    --verbosity=[0-2]             verbosity level, 0-2
+                                  default 1
+
diff --git a/testsuite/tests/hpc/simple/tixs/hpc_help_version.stdout b/testsuite/tests/hpc/simple/tixs/hpc_help_version.stdout
new file mode 100644
index 0000000000000000000000000000000000000000..38e62c79ac7d8c90ddcd9e535feb57144664c875
--- /dev/null
+++ b/testsuite/tests/hpc/simple/tixs/hpc_help_version.stdout
@@ -0,0 +1,3 @@
+Usage: hpc version 
+Display version for hpc
+
diff --git a/testsuite/tests/hpc/simple/tixs/hpc_markup_001.stdout b/testsuite/tests/hpc/simple/tixs/hpc_markup_001.stdout
new file mode 100644
index 0000000000000000000000000000000000000000..d6e087aaa72a2db1d6fe34d652ac0d4b81c5c888
--- /dev/null
+++ b/testsuite/tests/hpc/simple/tixs/hpc_markup_001.stdout
@@ -0,0 +1,24 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<style type="text/css">
+span.lineno { color: white; background: #aaaaaa; border-right: solid white 12px }
+span.nottickedoff { color: #404040; background: white; font-style: oblique }
+span.istickedoff { color: black; background: #d0c0ff; font-style: normal; }
+span.tickonlyfalse { margin: -1px; border: 1px solid #f20913; background: #f20913 }
+span.tickonlytrue  { margin: -1px; border: 1px solid #60de51; background: #60de51 }
+span.funcount { font-size: small; color: orange; z-index: 2; position: absolute; right: 20 }
+span.decl { font-weight: bold; background: #d0c0ff }
+span.spaces    { background: white }
+</style>
+</head>
+<body>
+<pre>
+<span class="decl"><span class="nottickedoff">never executed</span> <span class="tickonlytrue">always true</span> <span class="tickonlyfalse">always false</span></span>
+</pre>
+<pre>
+<span class="lineno">    1 </span><span class="decl"><span class="istickedoff">main = print (const &quot;Hello&quot; <span class="nottickedoff">&quot;World&quot;</span>)</span></span>
+
+</pre>
+</body>
+</html>
diff --git a/testsuite/tests/hpc/simple/tixs/hpc_markup_002.stdout b/testsuite/tests/hpc/simple/tixs/hpc_markup_002.stdout
new file mode 100644
index 0000000000000000000000000000000000000000..38a790c353f3b03c384efa273d854a6fcefbe1c2
--- /dev/null
+++ b/testsuite/tests/hpc/simple/tixs/hpc_markup_002.stdout
@@ -0,0 +1,24 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<style type="text/css">
+span.lineno { color: white; background: #aaaaaa; border-right: solid white 12px }
+span.nottickedoff { background: yellow}
+span.istickedoff { background: white }
+span.tickonlyfalse { margin: -1px; border: 1px solid #f20913; background: #f20913 }
+span.tickonlytrue  { margin: -1px; border: 1px solid #60de51; background: #60de51 }
+span.funcount { font-size: small; color: orange; z-index: 2; position: absolute; right: 20 }
+span.decl { font-weight: bold }
+span.spaces    { background: white }
+</style>
+</head>
+<body>
+<pre>
+<span class="decl"><span class="nottickedoff">never executed</span> <span class="tickonlytrue">always true</span> <span class="tickonlyfalse">always false</span></span>
+</pre>
+<pre>
+<span class="lineno">    1 </span><span class="funcount">-- entered once</span><span class="decl"><span class="istickedoff">main = print (const &quot;Hello&quot; <span class="nottickedoff">&quot;World&quot;</span>)</span></span>
+
+</pre>
+</body>
+</html>
diff --git a/testsuite/tests/hpc/simple/tixs/hpc_markup_error_001.stdout b/testsuite/tests/hpc/simple/tixs/hpc_markup_error_001.stdout
new file mode 100644
index 0000000000000000000000000000000000000000..a68a5dcf646b3e15427937ca533991e51652abf3
--- /dev/null
+++ b/testsuite/tests/hpc/simple/tixs/hpc_markup_error_001.stdout
@@ -0,0 +1,21 @@
+Error: no .tix file or executable name specified
+Usage: hpc markup [OPTION] .. <TIX_FILE> [<MODULE> [<MODULE> ..]]
+Markup Haskell source with program coverage
+
+
+Options:
+
+    --exclude=[PACKAGE:][MODULE]  exclude MODULE and/or PACKAGE
+    --include=[PACKAGE:][MODULE]  include MODULE and/or PACKAGE
+    --srcdir=DIR                  path to source directory of .hs files
+                                  multi-use of srcdir possible
+    --hpcdir=DIR                  append sub-directory that contains .mix files
+                                  default .hpc [rarely used]
+    --reset-hpcdirs               empty the list of hpcdir's
+                                  [rarely used]
+    --fun-entry-count             show top-level function entry counts
+    --highlight-covered           highlight covered code, rather that code gaps
+    --destdir=DIR                 path to write output to
+    --verbosity=[0-2]             verbosity level, 0-2
+                                  default 1
+
diff --git a/testsuite/tests/hpc/simple/tixs/hpc_markup_error_002.stdout b/testsuite/tests/hpc/simple/tixs/hpc_markup_error_002.stdout
new file mode 100644
index 0000000000000000000000000000000000000000..43748603db95339588bfe74169777fb537b5679d
--- /dev/null
+++ b/testsuite/tests/hpc/simple/tixs/hpc_markup_error_002.stdout
@@ -0,0 +1,21 @@
+Error: unable to find tix file for: hpc001.hs
+Usage: hpc markup [OPTION] .. <TIX_FILE> [<MODULE> [<MODULE> ..]]
+Markup Haskell source with program coverage
+
+
+Options:
+
+    --exclude=[PACKAGE:][MODULE]  exclude MODULE and/or PACKAGE
+    --include=[PACKAGE:][MODULE]  include MODULE and/or PACKAGE
+    --srcdir=DIR                  path to source directory of .hs files
+                                  multi-use of srcdir possible
+    --hpcdir=DIR                  append sub-directory that contains .mix files
+                                  default .hpc [rarely used]
+    --reset-hpcdirs               empty the list of hpcdir's
+                                  [rarely used]
+    --fun-entry-count             show top-level function entry counts
+    --highlight-covered           highlight covered code, rather that code gaps
+    --destdir=DIR                 path to write output to
+    --verbosity=[0-2]             verbosity level, 0-2
+                                  default 1
+
diff --git a/testsuite/tests/hpc/simple/tixs/hpc_overlay.stdout b/testsuite/tests/hpc/simple/tixs/hpc_overlay.stdout
new file mode 100644
index 0000000000000000000000000000000000000000..8fda52f6e871f3b1755444e6c3295b1dcb22fdad
--- /dev/null
+++ b/testsuite/tests/hpc/simple/tixs/hpc_overlay.stdout
@@ -0,0 +1,10 @@
+Tix [TixModule "Main" 2454134535 5 [0,1,0,0,0]]
+
+100% expressions used (4/4)
+100% boolean coverage (0/0)
+     100% guards (0/0)
+     100% 'if' conditions (0/0)
+     100% qualifiers (0/0)
+100% alternatives used (0/0)
+100% local declarations used (0/0)
+100% top-level declarations used (1/1)
diff --git a/testsuite/tests/hpc/simple/tixs/hpc_overlay2.stdout b/testsuite/tests/hpc/simple/tixs/hpc_overlay2.stdout
new file mode 100644
index 0000000000000000000000000000000000000000..fe4d77fac04604d686121991334797b4dd238b98
--- /dev/null
+++ b/testsuite/tests/hpc/simple/tixs/hpc_overlay2.stdout
@@ -0,0 +1,9 @@
+Tix [TixModule "Main" 2454134535 5 [0,1,0,0,0]]
+100% expressions used (4/4)
+100% boolean coverage (0/0)
+     100% guards (0/0)
+     100% 'if' conditions (0/0)
+     100% qualifiers (0/0)
+100% alternatives used (0/0)
+100% local declarations used (0/0)
+100% top-level declarations used (1/1)
diff --git a/testsuite/tests/hpc/simple/tixs/hpc_report_001.stdout b/testsuite/tests/hpc/simple/tixs/hpc_report_001.stdout
new file mode 100644
index 0000000000000000000000000000000000000000..dbb9066fc91faddf4d871e6c9dafffad40a955cb
--- /dev/null
+++ b/testsuite/tests/hpc/simple/tixs/hpc_report_001.stdout
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<coverage name="hpc_sample.tix">
+  <summary>
+    <exprs boxes="4" count="3"/>
+    <booleans boxes="0" true="0" false="0" count="0"/>
+    <guards boxes="0" true="0" false="0" count="0"/>
+    <conditionals boxes="0" true="0" false="0" count="0"/>
+    <qualifiers boxes="0" true="0" false="0" count="0"/>
+    <alts boxes="0" count="0"/>
+    <local boxes="0" count="0"/>
+    <toplevel boxes="1" count="1"/>
+  </summary>
+</coverage>
diff --git a/testsuite/tests/hpc/simple/tixs/hpc_report_002.stdout b/testsuite/tests/hpc/simple/tixs/hpc_report_002.stdout
new file mode 100644
index 0000000000000000000000000000000000000000..24f5e53df78097a9f78c1ec64b8562ae7d583c1a
--- /dev/null
+++ b/testsuite/tests/hpc/simple/tixs/hpc_report_002.stdout
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<coverage name="hpc_sample.tix">
+  <module name = "Main">
+    <exprs boxes="4" count="3"/>
+    <booleans boxes="0" true="0" false="0" count="0"/>
+    <guards boxes="0" true="0" false="0" count="0"/>
+    <conditionals boxes="0" true="0" false="0" count="0"/>
+    <qualifiers boxes="0" true="0" false="0" count="0"/>
+    <alts boxes="0" count="0"/>
+    <local boxes="0" count="0"/>
+    <toplevel boxes="1" count="1"/>
+  </module>
+  <summary>
+    <exprs boxes="4" count="3"/>
+    <booleans boxes="0" true="0" false="0" count="0"/>
+    <guards boxes="0" true="0" false="0" count="0"/>
+    <conditionals boxes="0" true="0" false="0" count="0"/>
+    <qualifiers boxes="0" true="0" false="0" count="0"/>
+    <alts boxes="0" count="0"/>
+    <local boxes="0" count="0"/>
+    <toplevel boxes="1" count="1"/>
+  </summary>
+</coverage>
diff --git a/testsuite/tests/hpc/simple/tixs/hpc_report_003.stdout b/testsuite/tests/hpc/simple/tixs/hpc_report_003.stdout
new file mode 100644
index 0000000000000000000000000000000000000000..f8e72d0fb2fbd57ef2f4e7df6673f50aa96e67aa
--- /dev/null
+++ b/testsuite/tests/hpc/simple/tixs/hpc_report_003.stdout
@@ -0,0 +1,9 @@
+-----<module Main>-----
+ 75% expressions used (3/4)
+100% boolean coverage (0/0)
+     100% guards (0/0)
+     100% 'if' conditions (0/0)
+     100% qualifiers (0/0)
+100% alternatives used (0/0)
+100% local declarations used (0/0)
+100% top-level declarations used (1/1)
diff --git a/testsuite/tests/hpc/simple/tixs/hpc_report_error_001.stdout b/testsuite/tests/hpc/simple/tixs/hpc_report_error_001.stdout
new file mode 100644
index 0000000000000000000000000000000000000000..4878dd712cbb429aab9eb5e4283a6361cc84c680
--- /dev/null
+++ b/testsuite/tests/hpc/simple/tixs/hpc_report_error_001.stdout
@@ -0,0 +1,21 @@
+Error: no .tix file or executable name specified
+Usage: hpc report [OPTION] .. <TIX_FILE> [<MODULE> [<MODULE> ..]]
+Output textual report about program coverage
+
+
+Options:
+
+    --per-module                  show module level detail
+    --decl-list                   show unused decls
+    --exclude=[PACKAGE:][MODULE]  exclude MODULE and/or PACKAGE
+    --include=[PACKAGE:][MODULE]  include MODULE and/or PACKAGE
+    --srcdir=DIR                  path to source directory of .hs files
+                                  multi-use of srcdir possible
+    --hpcdir=DIR                  append sub-directory that contains .mix files
+                                  default .hpc [rarely used]
+    --reset-hpcdirs               empty the list of hpcdir's
+                                  [rarely used]
+    --xml-output                  show output in XML
+    --verbosity=[0-2]             verbosity level, 0-2
+                                  default 1
+
diff --git a/testsuite/tests/hpc/simple/tixs/hpc_report_error_002.stdout b/testsuite/tests/hpc/simple/tixs/hpc_report_error_002.stdout
new file mode 100644
index 0000000000000000000000000000000000000000..0c95a0a30319774e42b4775da12a19d30591bffd
--- /dev/null
+++ b/testsuite/tests/hpc/simple/tixs/hpc_report_error_002.stdout
@@ -0,0 +1,21 @@
+Error: unable to find tix file for:hpc001.hs
+Usage: hpc report [OPTION] .. <TIX_FILE> [<MODULE> [<MODULE> ..]]
+Output textual report about program coverage
+
+
+Options:
+
+    --per-module                  show module level detail
+    --decl-list                   show unused decls
+    --exclude=[PACKAGE:][MODULE]  exclude MODULE and/or PACKAGE
+    --include=[PACKAGE:][MODULE]  include MODULE and/or PACKAGE
+    --srcdir=DIR                  path to source directory of .hs files
+                                  multi-use of srcdir possible
+    --hpcdir=DIR                  append sub-directory that contains .mix files
+                                  default .hpc [rarely used]
+    --reset-hpcdirs               empty the list of hpcdir's
+                                  [rarely used]
+    --xml-output                  show output in XML
+    --verbosity=[0-2]             verbosity level, 0-2
+                                  default 1
+
diff --git a/testsuite/tests/hpc/simple/tixs/hpc_sample.tix b/testsuite/tests/hpc/simple/tixs/hpc_sample.tix
new file mode 100644
index 0000000000000000000000000000000000000000..a93645e8833129981639b767c8aa55b0015be0e7
--- /dev/null
+++ b/testsuite/tests/hpc/simple/tixs/hpc_sample.tix
@@ -0,0 +1 @@
+Tix [ TixModule "Main" 2454134535 5 [1,0,1,1,1]]
diff --git a/testsuite/tests/hpc/simple/tixs/hpc_sample_incompatible_hash.tix b/testsuite/tests/hpc/simple/tixs/hpc_sample_incompatible_hash.tix
new file mode 100644
index 0000000000000000000000000000000000000000..f9c335ef19516c9f19d7377ca1db11cb300b12f9
--- /dev/null
+++ b/testsuite/tests/hpc/simple/tixs/hpc_sample_incompatible_hash.tix
@@ -0,0 +1 @@
+Tix [ TixModule "Main" 1234567890 5 [1,0,1,1,1]]
diff --git a/testsuite/tests/hpc/simple/tixs/hpc_sample_no_parse.tix b/testsuite/tests/hpc/simple/tixs/hpc_sample_no_parse.tix
new file mode 100644
index 0000000000000000000000000000000000000000..b2b2110f6208bfea20e76292fc849ac4289049e8
--- /dev/null
+++ b/testsuite/tests/hpc/simple/tixs/hpc_sample_no_parse.tix
@@ -0,0 +1 @@
+Tix [ TixModule "NoParse" 2454134535 5 [1,0,1,1,1]]
diff --git a/testsuite/tests/hpc/simple/tixs/hpc_sample_non_existing_module.tix b/testsuite/tests/hpc/simple/tixs/hpc_sample_non_existing_module.tix
new file mode 100644
index 0000000000000000000000000000000000000000..1fa93c5f35f19998dea5b1d5c39d9492f4c3a5c2
--- /dev/null
+++ b/testsuite/tests/hpc/simple/tixs/hpc_sample_non_existing_module.tix
@@ -0,0 +1 @@
+Tix [ TixModule "NonExistingModule" 2454134535 5 [1,0,1,1,1]]
diff --git a/testsuite/tests/hpc/simple/tixs/hpc_show.stdout b/testsuite/tests/hpc/simple/tixs/hpc_show.stdout
new file mode 100644
index 0000000000000000000000000000000000000000..0d255db3822f43c65b6cd8efec5f844d8f192ef1
--- /dev/null
+++ b/testsuite/tests/hpc/simple/tixs/hpc_show.stdout
@@ -0,0 +1,5 @@
+    0          1 Main                            1:21-1:27 ExpBox False
+    1          0 Main                            1:29-1:35 ExpBox False
+    2          1 Main                            1:14-1:36 ExpBox False
+    3          1 Main                             1:8-1:36 ExpBox False
+    4          1 Main                             1:1-1:36 TopLevelBox ["main"]
diff --git a/testsuite/tests/hpc/simple/tixs/hpc_show_error_001.stdout b/testsuite/tests/hpc/simple/tixs/hpc_show_error_001.stdout
new file mode 100644
index 0000000000000000000000000000000000000000..184957b17c1ca2bf146bd3b72bfbab72801f5fba
--- /dev/null
+++ b/testsuite/tests/hpc/simple/tixs/hpc_show_error_001.stdout
@@ -0,0 +1,19 @@
+Error: no .tix file or executable name specified
+Usage: hpc show [OPTION] .. <TIX_FILE> [<MODULE> [<MODULE> ..]]
+Show .tix file in readable, verbose format
+
+
+Options:
+
+    --exclude=[PACKAGE:][MODULE]  exclude MODULE and/or PACKAGE
+    --include=[PACKAGE:][MODULE]  include MODULE and/or PACKAGE
+    --srcdir=DIR                  path to source directory of .hs files
+                                  multi-use of srcdir possible
+    --hpcdir=DIR                  append sub-directory that contains .mix files
+                                  default .hpc [rarely used]
+    --reset-hpcdirs               empty the list of hpcdir's
+                                  [rarely used]
+    --output=FILE                 output FILE
+    --verbosity=[0-2]             verbosity level, 0-2
+                                  default 1
+
diff --git a/testsuite/tests/hpc/simple/tixs/hpc_show_error_002.stdout b/testsuite/tests/hpc/simple/tixs/hpc_show_error_002.stdout
new file mode 100644
index 0000000000000000000000000000000000000000..50f6a250a1e9bbf3eeb2c5ccc5893946bbe6e35a
--- /dev/null
+++ b/testsuite/tests/hpc/simple/tixs/hpc_show_error_002.stdout
@@ -0,0 +1,19 @@
+Error: could not read .tix file : hpc001.hs
+Usage: hpc show [OPTION] .. <TIX_FILE> [<MODULE> [<MODULE> ..]]
+Show .tix file in readable, verbose format
+
+
+Options:
+
+    --exclude=[PACKAGE:][MODULE]  exclude MODULE and/or PACKAGE
+    --include=[PACKAGE:][MODULE]  include MODULE and/or PACKAGE
+    --srcdir=DIR                  path to source directory of .hs files
+                                  multi-use of srcdir possible
+    --hpcdir=DIR                  append sub-directory that contains .mix files
+                                  default .hpc [rarely used]
+    --reset-hpcdirs               empty the list of hpcdir's
+                                  [rarely used]
+    --output=FILE                 output FILE
+    --verbosity=[0-2]             verbosity level, 0-2
+                                  default 1
+
diff --git a/testsuite/tests/hpc/simple/tixs/sample_overlay.ovr b/testsuite/tests/hpc/simple/tixs/sample_overlay.ovr
new file mode 100644
index 0000000000000000000000000000000000000000..24b41fa0250a774ee1e64cf0f60ef87042251864
--- /dev/null
+++ b/testsuite/tests/hpc/simple/tixs/sample_overlay.ovr
@@ -0,0 +1,6 @@
+module "Main" {
+  inside "main" {
+    tick "\"World\"" on line 1;
+  }
+}
+
diff --git a/testsuite/tests/hpc/simple/tixs/test.T b/testsuite/tests/hpc/simple/tixs/test.T
new file mode 100644
index 0000000000000000000000000000000000000000..ab6937703329bb595be47bfa1771b2d96b025181
--- /dev/null
+++ b/testsuite/tests/hpc/simple/tixs/test.T
@@ -0,0 +1,84 @@
+setTestOpts([when(fast(), skip), js_skip])
+
+test('hpc_help', normal, run_command, ["{hpc} help"])
+test('hpc_help_help', normal, run_command, ["{hpc} help help"])
+
+test('hpc_help_report', normal, run_command, ["{hpc} help report"])
+test('hpc_report_001', extra_files(['.hpc/', 'hpc_sample.tix']), run_command,
+     ["{hpc} report hpc_sample.tix --xml-output"])
+test('hpc_report_002', extra_files(['.hpc/', 'hpc_sample.tix']), run_command,
+     ["{hpc} report hpc_sample.tix --xml-output --per-module"])
+test('hpc_report_003', extra_files(['.hpc/', 'hpc_sample.tix']), run_command,
+     ["{hpc} report hpc_sample.tix --per-module --decl-list"])
+test('hpc_report_error_001', exit_code(1), run_command,
+     ["{hpc} report"]) # no .tix file
+test('hpc_report_error_002', exit_code(1), run_command,
+     ["{hpc} report hpc001.hs"]) # bad .tix file
+
+test('hpc_help_markup', normal, run_command, ["{hpc} help markup"])
+test('hpc_markup_error_001', exit_code(1), run_command,
+     ["{hpc} markup"]) # no .tix file
+test('hpc_markup_error_002', exit_code(1), run_command,
+     ["{hpc} markup hpc001.hs"]) # bad .tix file
+test('hpc_markup_001', extra_files(['.hpc/', 'hpc001.hs', 'hpc_sample.tix']), run_command,
+     ["{hpc} markup --verbosity=0 --destdir=markup_001"
+      " hpc_sample.tix --highlight-covered; cat markup_001/Main.hs.html"])
+test('hpc_markup_002', extra_files(['.hpc/', 'hpc001.hs', 'hpc_sample.tix']), run_command,
+     ["{hpc} markup --verbosity=0 --destdir=markup_002"
+      " hpc_sample.tix --fun-entry-count; cat markup_002/Main.hs.html"])
+
+test('hpc_help_show', normal, run_command, ["{hpc} help show"])
+test('hpc_show', extra_files(['.hpc', 'hpc_sample.tix']), run_command, ["{hpc} show hpc_sample.tix"])
+test('hpc_show_error_001', exit_code(1), run_command,
+     ["{hpc} show"]) # no .tix file
+test('hpc_show_error_002', exit_code(1), run_command,
+     ["{hpc} show hpc001.hs"]) # bad .tix file
+
+test('hpc_help_version', normal, run_command, ["{hpc} help version"])
+
+test('hpc_help_draft', normal, run_command, ["{hpc} help draft"])
+test('hpc_draft', extra_files(['.hpc/', 'hpc001.hs', 'hpc_sample.tix']), run_command, ["{hpc} draft hpc_sample.tix"])
+
+test('hpc_help_overlay', normal, run_command, ["{hpc} help overlay"])
+
+test('hpc_overlay',
+     extra_files(['.hpc/', 'hpc001.hs', 'hpc_sample.tix', 'sample_overlay.ovr']),
+     run_command,
+     ["({hpc} overlay sample_overlay.ovr > sample_overlay1.tix; "
+      "cat sample_overlay1.tix; echo; "
+      "{hpc} combine hpc_sample.tix sample_overlay1.tix > total1.tix; "
+      "{hpc} report total1.tix)"])
+
+test('hpc_overlay2',
+     extra_files(['.hpc/', 'hpc001.hs', 'hpc_sample.tix', 'sample_overlay.ovr']),
+     run_command,
+     ["({hpc} overlay sample_overlay.ovr --output=sample_overlay2.tix; "
+      "cat sample_overlay2.tix; echo; "
+      "{hpc} combine hpc_sample.tix sample_overlay2.tix --output=total2.tix; "
+      "{hpc} report total2.tix)"])
+
+test('hpc_hand_overlay',
+     extra_files(['.hpc/', 'hand_overlay.ovr', 'hpc001.hs', 'hpc_sample.tix']),
+     run_command,
+     ["({hpc} overlay hand_overlay.ovr --output=sample_overlay3.tix; "
+      "cat sample_overlay3.tix; echo; "
+      "{hpc} combine hpc_sample.tix sample_overlay3.tix --output=total3.tix; "
+      "{hpc} report total3.tix)"])
+
+test('hpc_bad_001', exit_code(1), run_command, ["{hpc} bad arguments"])
+
+test('T9619', [extra_files(['.hpc', '.hpc.copy', 'hpc_sample.tix']),
+               ignore_stdout], run_command,
+     # Having the same mix file in two different hpcdirs should work.
+     ["{hpc} report hpc_sample.tix --hpcdir=.hpc --hpcdir=.hpc.copy"])
+
+# Show different error messages for different types of failures.
+test('T10529a', [extra_files(['hpc_sample_non_existing_module.tix']),
+                 exit_code(1)], run_command,
+     ["{hpc} report hpc_sample_non_existing_module.tix"])
+test('T10529b', [extra_files(['.hpc/', 'hpc_sample_incompatible_hash.tix']),
+                 exit_code(1)], run_command,
+     ["{hpc} report hpc_sample_incompatible_hash.tix"])
+test('T10529c', [extra_files(['.hpc/', 'hpc_sample_no_parse.tix']),
+                 exit_code(1)], run_command,
+     ["{hpc} report hpc_sample_no_parse.tix"])